diff --git a/versioned/version0_1_1.ts b/versioned/version0_1_1.ts index 350b35e8..3bfcab16 100644 --- a/versioned/version0_1_1.ts +++ b/versioned/version0_1_1.ts @@ -39,8 +39,9 @@ class Version0_1_1 extends Versioned { proposals: proposals, convertTezToMutez: boolean = true, batch?: WalletOperationBatch, - isSigning?: boolean, - isResolving?: boolean + isSigning: boolean = false, + isResolving: boolean = false, + proposalIdOffset: BigNumber = BigNumber(1) ): Promise<[boolean, string]> { let batchOp = batch; @@ -196,17 +197,16 @@ class Version0_1_1 extends Versioned { }) .filter(v => Object.keys(v).length !== 0); - let params = cc.methods.create_proposal(content).toTransferParams(); - + const params = cc.methods.create_proposal(content).toTransferParams(); if (isSigning) { const storage = toStorage(this.version, await cc.storage(), BigNumber(0)); - const proposalId = storage.proposal_counter.plus(1); + const proposalId = storage.proposal_counter.plus(proposalIdOffset); return await this.signProposal( cc, t, proposalId, true, - isResolving ? true : false, + isResolving, batchOp, content ); diff --git a/versioned/version0_3_3.ts b/versioned/version0_3_3.ts index d80b542b..6d0a8b92 100644 --- a/versioned/version0_3_3.ts +++ b/versioned/version0_3_3.ts @@ -35,8 +35,9 @@ class Version0_3_3 extends Versioned { proposals: proposals, convertTezToMutez: boolean = true, batch?: WalletOperationBatch, - isSigning?: boolean, - isResolving?: boolean + isSigning: boolean = false, + isResolving: boolean = false, + proposalIdOffset: BigNumber = BigNumber(1) ): Promise<[boolean, string]> { let batchOp = batch; @@ -172,21 +173,27 @@ class Version0_3_3 extends Versioned { }) .filter(v => Object.keys(v).length !== 0); - const params = cc.methodsObject.create_proposal(content); - batchOp.withContractCall(params); - - if (isSigning) { - const storage = toStorage(this.version, await cc.storage(), BigNumber(0)); - const proposalId = storage.proposal_counter.plus(1); - return await this.signProposal( - cc, - t, - proposalId, - true, - isResolving ? true : false, - batchOp, - content - ); + if (content.length > 0) { + const params = cc.methodsObject.create_proposal(content); + batchOp.withContractCall(params); + + if (isSigning) { + const storage = toStorage( + this.version, + await cc.storage(), + BigNumber(0) + ); + const proposalId = storage.proposal_counter.plus(proposalIdOffset); + return await this.signProposal( + cc, + t, + proposalId, + true, + isResolving, + batchOp, + content + ); + } } const op = await batchOp.send(); @@ -221,7 +228,32 @@ class Version0_3_3 extends Versioned { let batchOp = batch; if (batchOp === undefined) batchOp = t.wallet.batch(); + this.genSignAndResolveOps( + result, + batchOp, + cc, + proposalId, + proposalContent, + resolve + ); + const op = await batchOp.send(); + + const confirmationValue = await promiseWithTimeout( + op.confirmation(1), + DEFAULT_TIMEOUT + ); + + return [confirmationValue === -1, op.opHash]; + } + genSignAndResolveOps( + result: boolean | undefined, + batchOp: WalletOperationBatch, + cc: WalletContract, + proposalId: BigNumber, + proposalContent: any, + resolve: boolean + ) { if (result !== undefined) { batchOp.withContractCall( cc.methodsObject.sign_proposal({ @@ -240,14 +272,6 @@ class Version0_3_3 extends Versioned { }) ); } - const op = await batchOp.send(); - - const confirmationValue = await promiseWithTimeout( - op.confirmation(1), - DEFAULT_TIMEOUT - ); - - return [confirmationValue === -1, op.opHash]; } async submitSettingsProposals( diff --git a/versioned/version0_3_4.ts b/versioned/version0_3_4.ts index f93615e9..c2462622 100644 --- a/versioned/version0_3_4.ts +++ b/versioned/version0_3_4.ts @@ -9,6 +9,7 @@ import { BigNumber } from "bignumber.js"; import { content, contractStorage as c1 } from "../types/Proposal0_3_4"; import { contractStorage } from "../types/app"; import { proposalContent } from "../types/display"; +import { toStorage } from "./apis"; import { proposals } from "./interface"; import Version0_3_3 from "./version0_3_3"; @@ -19,8 +20,9 @@ class Version0_3_4 extends Version0_3_3 { proposals: proposals, convertTezToMutez: boolean = true, batch?: WalletOperationBatch, - isSigning?: boolean, - isResolving?: boolean + isSigning: boolean = false, + isResolving: boolean = false, + proposalIdOffset: BigNumber = BigNumber(1) ): Promise<[boolean, string]> { let batchOp = batch; if (batchOp === undefined) batchOp = t.wallet.batch(); @@ -28,17 +30,39 @@ class Version0_3_4 extends Version0_3_3 { const poe_proposals = proposals.transfers.filter(v => v.type === "poe"); const regular_proposals = proposals.transfers.filter(v => v.type !== "poe"); + let storage: contractStorage = await cc.storage(); + if (poe_proposals.length > 0 && isSigning) + storage = toStorage(this.version, await cc.storage(), BigNumber(0)); + poe_proposals.forEach(v => { if (v.type === "poe") { - const params = cc.methods.proof_of_event_challenge( - char2Bytes(v.values.payload) - ); + const content = char2Bytes(v.values.payload); + const params = cc.methods.proof_of_event_challenge(content); + if (!batchOp) { throw new Error( "Internal error: batchOp is undefined. It should never happen." ); } batchOp.withContractCall(params); + + if (isSigning && isResolving !== undefined) { + const proposalId = storage.proposal_counter.plus(proposalIdOffset); + super.genSignAndResolveOps( + true, + batchOp, + cc, + proposalId, + [ + { + proof_of_event: content, + }, + ], + isResolving + ); + } + + proposalIdOffset = proposalIdOffset.plus(1); } }); @@ -49,7 +73,8 @@ class Version0_3_4 extends Version0_3_3 { convertTezToMutez, batchOp, isSigning, - isResolving + isResolving, + proposalIdOffset ); }