diff --git a/examples/zkapps/08-custom-tokens/src/BasicTokenContract.ts b/examples/zkapps/08-custom-tokens/src/BasicTokenContract.ts index 9d87c9a1c..59d51c497 100644 --- a/examples/zkapps/08-custom-tokens/src/BasicTokenContract.ts +++ b/examples/zkapps/08-custom-tokens/src/BasicTokenContract.ts @@ -8,12 +8,14 @@ import { UInt64, PublicKey, Signature, + UInt32, } from 'snarkyjs'; const tokenSymbol = 'MYTKN'; export class BasicTokenContract extends SmartContract { @state(UInt64) totalAmountInCirculation = State(); + @state(UInt32) mintNonce = State(); deploy(args: DeployArgs) { super.deploy(args); @@ -44,11 +46,13 @@ export class BasicTokenContract extends SmartContract { this.totalAmountInCirculation.assertEquals(totalAmountInCirculation); let newTotalAmountInCirculation = totalAmountInCirculation.add(amount); + let nonce = this.mintNonce.get(); + this.mintNonce.assertEquals(nonce); adminSignature .verify( this.address, - amount.toFields().concat(receiverAddress.toFields()) + amount.toFields().concat(...receiverAddress.toFields(), ...nonce.toFields()) ) .assertTrue(); @@ -57,6 +61,7 @@ export class BasicTokenContract extends SmartContract { amount, }); + this.mintNonce.set(nonce.add(1)); this.totalAmountInCirculation.set(newTotalAmountInCirculation); } diff --git a/examples/zkapps/08-custom-tokens/src/WhitelistedTokenContract.ts b/examples/zkapps/08-custom-tokens/src/WhitelistedTokenContract.ts index 2acadca6c..a66b10217 100644 --- a/examples/zkapps/08-custom-tokens/src/WhitelistedTokenContract.ts +++ b/examples/zkapps/08-custom-tokens/src/WhitelistedTokenContract.ts @@ -11,6 +11,7 @@ import { Signature, Poseidon, MerkleWitness, + UInt32, } from 'snarkyjs'; class MerkleWitness20 extends MerkleWitness(20) {} @@ -19,6 +20,7 @@ const tokenSymbol = 'MYTKN'; export class WhitelistedTokenContract extends SmartContract { @state(UInt64) totalAmountInCirculation = State(); + @state(UInt32) mintNonce = State(); @state(Field) whitelistTreeRoot = State(); deploy(args: DeployArgs) { @@ -54,11 +56,13 @@ export class WhitelistedTokenContract extends SmartContract { this.totalAmountInCirculation.assertEquals(totalAmountInCirculation); let newTotalAmountInCirculation = totalAmountInCirculation.add(amount); + let nonce = this.mintNonce.get(); + this.mintNonce.assertEquals(nonce); adminSignature .verify( this.address, - amount.toFields().concat(receiverAddress.toFields()) + amount.toFields().concat(...receiverAddress.toFields(), ...nonce.toFields()) ) .assertTrue(); @@ -67,6 +71,7 @@ export class WhitelistedTokenContract extends SmartContract { amount, }); + this.mintNonce.set(nonce.add(1)); this.totalAmountInCirculation.set(newTotalAmountInCirculation); }