From 0dfeb89ff347e761e9284c8b058f858697831202 Mon Sep 17 00:00:00 2001 From: Martin Minkov Date: Fri, 24 Jun 2022 17:15:28 -0700 Subject: [PATCH 01/11] [snarkyjs] - Create token account and token id --- .../lib/snarky_js_bindings_lib.ml | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/lib/snarky_js_bindings/lib/snarky_js_bindings_lib.ml b/src/lib/snarky_js_bindings/lib/snarky_js_bindings_lib.ml index e4c15f3a904..9b1fc5b587b 100644 --- a/src/lib/snarky_js_bindings/lib/snarky_js_bindings_lib.ml +++ b/src/lib/snarky_js_bindings/lib/snarky_js_bindings_lib.ml @@ -2834,6 +2834,18 @@ module Ledger = struct in apply_parties_transaction l txn (Js.to_string account_creation_fee) + let create_token_account pk = + Mina_base.Account_id.create (public_key pk) Mina_base.Token_id.default + + let token_id_to_string token_id = Mina_base.Token_id.to_string token_id + + let custom_token_id pk = + Mina_base.Account_id.derive_token_id ~owner:(create_token_account pk) + + let custom_token_id_str pk = + Mina_base.Account_id.derive_token_id ~owner:(create_token_account pk) + |> token_id_to_string |> Js.string + let () = let static_method name f = Js.Unsafe.set ledger_class (Js.string name) (Js.wrap_callback f) @@ -2841,6 +2853,8 @@ module Ledger = struct let method_ name (f : ledger_class Js.t -> _) = method_ ledger_class name f in + static_method "customTokenID" custom_token_id_str ; + static_method "createTokenAccount" create_token_account ; static_method "create" create ; static_method "hashParty" hash_party ; From 6b0c0e81ff471aef81f09c89900e33728914aa5d Mon Sep 17 00:00:00 2001 From: Martin Minkov Date: Tue, 5 Jul 2022 13:58:01 -0700 Subject: [PATCH 02/11] [snarkyjs] - Add tokens test script --- .../test_module/simple-zkapp-token.js | 182 ++++++++++++++++++ 1 file changed, 182 insertions(+) create mode 100644 src/lib/snarky_js_bindings/test_module/simple-zkapp-token.js diff --git a/src/lib/snarky_js_bindings/test_module/simple-zkapp-token.js b/src/lib/snarky_js_bindings/test_module/simple-zkapp-token.js new file mode 100644 index 00000000000..206f8ed70e4 --- /dev/null +++ b/src/lib/snarky_js_bindings/test_module/simple-zkapp-token.js @@ -0,0 +1,182 @@ +import { + Field, + declareState, + declareMethods, + State, + PublicKey, + PrivateKey, + SmartContract, + isReady, + shutdown, + Mina, + Permissions, + Party, + UInt64, + partiesToJson, + Token, + getDefaultTokenId, +} from "snarkyjs"; + +function sendTransaction(tx) { + //console.log("DEBUG -- TXN\n", JSON.stringify(partiesToJson(tx.transaction))); + tx.send(); +} + +await isReady; + +// declare the zkapp +class SimpleZkapp extends SmartContract { + constructor(address) { + super(address); + this.x = State(); + } + + deploy(args) { + super.deploy(args); + this.setPermissions({ + ...Permissions.default(), + editState: Permissions.proofOrSignature(), + }); + this.balance.addInPlace(UInt64.fromNumber(initialBalance)); + this.x.set(initialState); + } + + update(y) { + let x = this.x.get(); + this.x.set(x.add(y)); + } + + initialize() { + this.x.set(initialState); + } + + mint(receiverAddress) { + let amount = 1_000_000_000; + this.token().mint({ + address: receiverAddress, + amount, + }); + console.log(`Minting ${amount} to ${receiverAddress.toBase58()}`); + } + + burn(receiverAddress) { + let amount = 1_000_000; + this.token().burn({ + address: receiverAddress, + amount, + }); + console.log(`Burning ${amount} to ${receiverAddress.toBase58()}`); + } + + send(senderAddress, receiverAddress) { + let amount = 1_000_000; + this.token().send({ + from: senderAddress, + to: receiverAddress, + amount, + }); + console.log(`Sending ${amount} to ${receiverAddress.toBase58()}`); + } +} +// note: this is our non-typescript way of doing what our decorators do +declareState(SimpleZkapp, { x: Field }); +declareMethods(SimpleZkapp, { + initialize: [], + update: [Field], + send: [PublicKey, PublicKey], + mint: [PublicKey], + burn: [PublicKey], +}); + +let Local = Mina.LocalBlockchain(); +Mina.setActiveInstance(Local); + +// a test account that pays all the fees, and puts additional funds into the zkapp +let feePayer = Local.testAccounts[0].privateKey; + +// the zkapp account +let zkappKey = PrivateKey.fromBase58( + "EKEfEZpMctKoyon4nxhqFBiKyUsCyyZReF9fbs21nDrrTgGMTcok" +); +let zkappAddress = zkappKey.toPublicKey(); + +let tokenAccount1Key = Local.testAccounts[1].privateKey; +let tokenAccount1 = tokenAccount1Key.toPublicKey(); + +let tokenAccount2Key = Local.testAccounts[2].privateKey; +let tokenAccount2 = tokenAccount2Key.toPublicKey(); + +let initialBalance = 10_000_000_000; +let initialState = Field(1); +let zkapp = new SimpleZkapp(zkappAddress); + +console.log("deploy"); +let tx = await Local.transaction(feePayer, () => { + Party.fundNewAccount(feePayer, { initialBalance }); + zkapp.deploy({ zkappKey }); +}); +tx.send(); + +console.log(`initial balance: ${zkapp.account.balance.get().div(1e9)} MINA`); + +// Log custom token info +const customToken = new Token({ tokenOwner: zkappAddress }); +console.log("---FEE PAYER", feePayer.toPublicKey().toBase58()); +console.log("---TOKEN OWNER", zkappAddress.toBase58()); +console.log("---CUSTOM TOKEN", customToken.id); +console.log("---TOKEN ACCOUNT1", tokenAccount1.toBase58()); +console.log("---TOKEN ACCOUNT2", tokenAccount2.toBase58()); + +console.log("----------token minting----------"); +tx = await Local.transaction(feePayer, () => { + Party.fundNewAccount(feePayer); + zkapp.mint(tokenAccount1); + zkapp.sign(zkappKey); +}); +sendTransaction(tx); + +console.log( + `tokenAccount1 balance: ${Mina.getBalance({ + publicKey: tokenAccount1, + tokenId: customToken.id, + })} custom tokens` +); + +console.log("----------token burning----------"); +tx = await Local.transaction(feePayer, () => { + zkapp.burn(tokenAccount1); + zkapp.sign(zkappKey); +}); +tx = tx.sign([tokenAccount1Key]); +sendTransaction(tx); + +console.log( + `tokenAccount1 balance: ${Mina.getBalance({ + publicKey: tokenAccount1, + tokenId: customToken.id, + })} custom tokens` +); + +console.log("----------token transfer----------"); +tx = await Local.transaction(feePayer, () => { + Party.fundNewAccount(feePayer); + zkapp.send(tokenAccount1, tokenAccount2); + zkapp.sign(zkappKey); +}); +tx = tx.sign([tokenAccount1Key, tokenAccount2Key]); +sendTransaction(tx); + +console.log( + `tokenAccount1 balance: ${Mina.getBalance({ + publicKey: tokenAccount1, + tokenId: customToken.id, + })} custom tokens` +); +console.log( + `tokenAccount2 balance: ${Mina.getBalance({ + publicKey: tokenAccount2, + tokenId: customToken.id, + })} custom tokens` +); + +shutdown(); From 2c0b7f10dd8f58f2205030c1c2fa1d991b524273 Mon Sep 17 00:00:00 2001 From: Martin Minkov Date: Tue, 12 Jul 2022 13:18:14 -0700 Subject: [PATCH 03/11] [snarkyjs] - Refactor existing token functions, add tokenId to account type --- .../lib/snarky_js_bindings_lib.ml | 44 ++++++++++++------- 1 file changed, 28 insertions(+), 16 deletions(-) diff --git a/src/lib/snarky_js_bindings/lib/snarky_js_bindings_lib.ml b/src/lib/snarky_js_bindings/lib/snarky_js_bindings_lib.ml index 9b1fc5b587b..18b5a7cb06f 100644 --- a/src/lib/snarky_js_bindings/lib/snarky_js_bindings_lib.ml +++ b/src/lib/snarky_js_bindings/lib/snarky_js_bindings_lib.ml @@ -2309,6 +2309,7 @@ module Ledger = struct type account = < publicKey : group_class Js.t Js.readonly_prop + ; tokenId : field_class Js.t Js.readonly_prop ; balance : js_uint64 Js.readonly_prop ; nonce : js_uint32 Js.readonly_prop ; zkapp : zkapp_account Js.readonly_prop > @@ -2439,8 +2440,15 @@ module Ledger = struct (fun () -> failwith "invalid scalar") Fn.id - let account_id pk = - Mina_base.Account_id.create (public_key pk) Mina_base.Token_id.default + let token_id (token : field_class Js.t) : Mina_base.Token_id.t = + token |> of_js_field |> to_unchecked |> Mina_base.Token_id.of_field + + let default_token_id_js = + Mina_base.Token_id.default |> Mina_base.Token_id.to_field_unsafe + |> Field.constant |> to_js_field + + let account_id pk token = + Mina_base.Account_id.create (public_key pk) (token_id token) let max_state_size = Pickles_types.Nat.to_int Mina_base.Zkapp_state.Max_state_size.n @@ -2514,6 +2522,9 @@ module Ledger = struct let x, y = Signature_lib.Public_key.decompress_exn pk in to_js_group (Field.constant x) (Field.constant y) + let token_id (token_id : Mina_base.Token_id.t) = + token_id |> Mina_base.Token_id.to_field_unsafe |> field + let private_key (sk : Signature_lib.Private_key.t) = to_js_scalar sk let signature (sg : Signature_lib.Schnorr.Chunked.Signature.t) = @@ -2528,6 +2539,8 @@ module Ledger = struct object%js val publicKey = public_key a.public_key + val tokenId = token_id a.token_id + val balance = uint64 (Currency.Balance.to_uint64 a.balance) val nonce = uint32 (Mina_numbers.Account_nonce.to_uint32 a.nonce) @@ -2744,7 +2757,7 @@ module Ledger = struct @@ Mina_base.Signed_command_memo.create_from_string_exn @@ Js.to_string memo let add_account_exn (l : L.t) pk (balance : string) = - let account_id = account_id pk in + let account_id = account_id pk default_token_id_js in let bal_u64 = Unsigned.UInt64.of_string balance in let balance = Currency.Balance.of_uint64 bal_u64 in let a : Mina_base.Account.t = @@ -2765,8 +2778,9 @@ module Ledger = struct add_account_exn l a##.publicKey (Js.to_string a##.balance) ) ; new%js ledger_constr l - let get_account l (pk : public_key) : account Js.optdef = - let loc = L.location_of_account l##.value (account_id pk) in + let get_account l (pk : public_key) (token : field_class Js.t) : + account Js.optdef = + let loc = L.location_of_account l##.value (account_id pk token) in let account = Option.bind loc ~f:(L.get l##.value) in To_js.option To_js.account account @@ -2834,17 +2848,15 @@ module Ledger = struct in apply_parties_transaction l txn (Js.to_string account_creation_fee) - let create_token_account pk = - Mina_base.Account_id.create (public_key pk) Mina_base.Token_id.default - - let token_id_to_string token_id = Mina_base.Token_id.to_string token_id - - let custom_token_id pk = - Mina_base.Account_id.derive_token_id ~owner:(create_token_account pk) + let create_token_account pk token = + Mina_base.Account_id.create (public_key pk) (token_id token) + |> Mina_base.Account_id.public_key + |> Signature_lib.Public_key.Compressed.to_string |> Js.string - let custom_token_id_str pk = - Mina_base.Account_id.derive_token_id ~owner:(create_token_account pk) - |> token_id_to_string |> Js.string + let custom_token_id pk token = + Mina_base.Account_id.derive_token_id + ~owner:(Mina_base.Account_id.create (public_key pk) (token_id token)) + |> Mina_base.Token_id.to_string |> Js.string let () = let static_method name f = @@ -2853,7 +2865,7 @@ module Ledger = struct let method_ name (f : ledger_class Js.t -> _) = method_ ledger_class name f in - static_method "customTokenID" custom_token_id_str ; + static_method "customTokenID" custom_token_id ; static_method "createTokenAccount" create_token_account ; static_method "create" create ; From 7c5c137a003a3063ef1eafdc275cd47cc1b7953b Mon Sep 17 00:00:00 2001 From: Martin Minkov Date: Thu, 14 Jul 2022 16:03:47 -0700 Subject: [PATCH 04/11] [snarkyjs] - Add tokenSymbol to ocaml bindings and test script --- .../lib/snarky_js_bindings_lib.ml | 3 ++ .../test_module/simple-zkapp-token.js | 47 ++++++++++--------- 2 files changed, 28 insertions(+), 22 deletions(-) diff --git a/src/lib/snarky_js_bindings/lib/snarky_js_bindings_lib.ml b/src/lib/snarky_js_bindings/lib/snarky_js_bindings_lib.ml index 18b5a7cb06f..53227ad964b 100644 --- a/src/lib/snarky_js_bindings/lib/snarky_js_bindings_lib.ml +++ b/src/lib/snarky_js_bindings/lib/snarky_js_bindings_lib.ml @@ -2310,6 +2310,7 @@ module Ledger = struct type account = < publicKey : group_class Js.t Js.readonly_prop ; tokenId : field_class Js.t Js.readonly_prop + ; tokenSymbol : Js.js_string Js.t Js.readonly_prop ; balance : js_uint64 Js.readonly_prop ; nonce : js_uint32 Js.readonly_prop ; zkapp : zkapp_account Js.readonly_prop > @@ -2541,6 +2542,8 @@ module Ledger = struct val tokenId = token_id a.token_id + val tokenSymbol = Js.string a.token_symbol + val balance = uint64 (Currency.Balance.to_uint64 a.balance) val nonce = uint32 (Mina_numbers.Account_nonce.to_uint32 a.nonce) diff --git a/src/lib/snarky_js_bindings/test_module/simple-zkapp-token.js b/src/lib/snarky_js_bindings/test_module/simple-zkapp-token.js index 206f8ed70e4..d47edacc58b 100644 --- a/src/lib/snarky_js_bindings/test_module/simple-zkapp-token.js +++ b/src/lib/snarky_js_bindings/test_module/simple-zkapp-token.js @@ -18,7 +18,7 @@ import { } from "snarkyjs"; function sendTransaction(tx) { - //console.log("DEBUG -- TXN\n", JSON.stringify(partiesToJson(tx.transaction))); + // console.log("DEBUG -- TXN\n", JSON.stringify(partiesToJson(tx.transaction))); tx.send(); } @@ -39,6 +39,7 @@ class SimpleZkapp extends SmartContract { }); this.balance.addInPlace(UInt64.fromNumber(initialBalance)); this.x.set(initialState); + this.tokenSymbol.set("TEST_TOKEN"); } update(y) { @@ -51,7 +52,7 @@ class SimpleZkapp extends SmartContract { } mint(receiverAddress) { - let amount = 1_000_000_000; + let amount = UInt64.from(1_000_000); this.token().mint({ address: receiverAddress, amount, @@ -60,7 +61,7 @@ class SimpleZkapp extends SmartContract { } burn(receiverAddress) { - let amount = 1_000_000; + let amount = UInt64.from(1_000); this.token().burn({ address: receiverAddress, amount, @@ -69,7 +70,7 @@ class SimpleZkapp extends SmartContract { } send(senderAddress, receiverAddress) { - let amount = 1_000_000; + let amount = UInt64.from(1_000); this.token().send({ from: senderAddress, to: receiverAddress, @@ -109,13 +110,14 @@ let tokenAccount2 = tokenAccount2Key.toPublicKey(); let initialBalance = 10_000_000_000; let initialState = Field(1); let zkapp = new SimpleZkapp(zkappAddress); +let tx; console.log("deploy"); -let tx = await Local.transaction(feePayer, () => { +tx = await Local.transaction(feePayer, () => { Party.fundNewAccount(feePayer, { initialBalance }); zkapp.deploy({ zkappKey }); }); -tx.send(); +sendTransaction(tx); console.log(`initial balance: ${zkapp.account.balance.get().div(1e9)} MINA`); @@ -124,6 +126,7 @@ const customToken = new Token({ tokenOwner: zkappAddress }); console.log("---FEE PAYER", feePayer.toPublicKey().toBase58()); console.log("---TOKEN OWNER", zkappAddress.toBase58()); console.log("---CUSTOM TOKEN", customToken.id); +console.log(`---TOKEN SYMBOL ${Mina.getAccount(zkappAddress).tokenSymbol}`); console.log("---TOKEN ACCOUNT1", tokenAccount1.toBase58()); console.log("---TOKEN ACCOUNT2", tokenAccount2.toBase58()); @@ -136,10 +139,10 @@ tx = await Local.transaction(feePayer, () => { sendTransaction(tx); console.log( - `tokenAccount1 balance: ${Mina.getBalance({ - publicKey: tokenAccount1, - tokenId: customToken.id, - })} custom tokens` + `tokenAccount1 balance: ${Mina.getBalance( + tokenAccount1, + customToken.id + )} custom tokens` ); console.log("----------token burning----------"); @@ -151,10 +154,10 @@ tx = tx.sign([tokenAccount1Key]); sendTransaction(tx); console.log( - `tokenAccount1 balance: ${Mina.getBalance({ - publicKey: tokenAccount1, - tokenId: customToken.id, - })} custom tokens` + `tokenAccount1 balance: ${Mina.getBalance( + tokenAccount1, + customToken.id + )} custom tokens` ); console.log("----------token transfer----------"); @@ -167,16 +170,16 @@ tx = tx.sign([tokenAccount1Key, tokenAccount2Key]); sendTransaction(tx); console.log( - `tokenAccount1 balance: ${Mina.getBalance({ - publicKey: tokenAccount1, - tokenId: customToken.id, - })} custom tokens` + `tokenAccount1 balance: ${Mina.getBalance( + tokenAccount1, + customToken.id + )} custom tokens` ); console.log( - `tokenAccount2 balance: ${Mina.getBalance({ - publicKey: tokenAccount2, - tokenId: customToken.id, - })} custom tokens` + `tokenAccount2 balance: ${Mina.getBalance( + tokenAccount2, + customToken.id + )} custom tokens` ); shutdown(); From dea7b89becac85444610378dd579ea0216631349 Mon Sep 17 00:00:00 2001 From: Martin Minkov Date: Tue, 19 Jul 2022 10:17:22 -0700 Subject: [PATCH 05/11] [snarkyjs] - Add support for Checked versions of token helpers --- src/lib/mina_base/account_id.ml | 2 ++ src/lib/mina_base/account_id.mli | 2 ++ .../lib/snarky_js_bindings_lib.ml | 33 ++++++++++++++----- .../test_module/simple-zkapp-token.js | 18 ++++++++-- 4 files changed, 45 insertions(+), 10 deletions(-) diff --git a/src/lib/mina_base/account_id.ml b/src/lib/mina_base/account_id.ml index 915904db168..20a7603ca34 100644 --- a/src/lib/mina_base/account_id.ml +++ b/src/lib/mina_base/account_id.ml @@ -118,6 +118,8 @@ module Digest = struct let of_field = Fn.id + let to_field_unsafe = Fn.id + module Assert = struct let equal : t -> t -> unit = Field.Assert.equal end diff --git a/src/lib/mina_base/account_id.mli b/src/lib/mina_base/account_id.mli index e1140e6c4da..ce45f49be29 100644 --- a/src/lib/mina_base/account_id.mli +++ b/src/lib/mina_base/account_id.mli @@ -46,6 +46,8 @@ module Digest : sig val of_field : Pickles.Impls.Step.Field.t -> t + val to_field_unsafe : t -> Pickles.Impls.Step.Field.t + module Assert : sig val equal : t -> t -> unit end diff --git a/src/lib/snarky_js_bindings/lib/snarky_js_bindings_lib.ml b/src/lib/snarky_js_bindings/lib/snarky_js_bindings_lib.ml index 53227ad964b..fd3efb859ab 100644 --- a/src/lib/snarky_js_bindings/lib/snarky_js_bindings_lib.ml +++ b/src/lib/snarky_js_bindings/lib/snarky_js_bindings_lib.ml @@ -2430,6 +2430,12 @@ module Ledger = struct let create_new_account_exn (t : L.t) account_id account = L.create_new_account t account_id account |> Or_error.ok_exn + let public_key_checked (pk : public_key) : + Signature_lib.Public_key.Compressed.var = + let x = pk##.g##.x##.value in + let y = pk##.g##.y##.value in + Signature_lib.Public_key.compress_var (x, y) |> Impl.run_checked + let public_key (pk : public_key) : Signature_lib.Public_key.Compressed.t = { x = to_unchecked pk##.g##.x##.value ; is_odd = Bigint.(test_bit (of_field (to_unchecked pk##.g##.y##.value)) 0) @@ -2441,13 +2447,20 @@ module Ledger = struct (fun () -> failwith "invalid scalar") Fn.id + let token_id_checked (token : field_class Js.t) = + token |> of_js_field |> Mina_base.Token_id.Checked.of_field + let token_id (token : field_class Js.t) : Mina_base.Token_id.t = - token |> of_js_field |> to_unchecked |> Mina_base.Token_id.of_field + token |> of_js_field_unchecked |> Mina_base.Token_id.of_field let default_token_id_js = Mina_base.Token_id.default |> Mina_base.Token_id.to_field_unsafe |> Field.constant |> to_js_field + let account_id_checked pk token = + Mina_base.Account_id.Checked.create (public_key_checked pk) + (token_id_checked token) + let account_id pk token = Mina_base.Account_id.create (public_key pk) (token_id token) @@ -2852,14 +2865,17 @@ module Ledger = struct apply_parties_transaction l txn (Js.to_string account_creation_fee) let create_token_account pk token = - Mina_base.Account_id.create (public_key pk) (token_id token) - |> Mina_base.Account_id.public_key + account_id pk token |> Mina_base.Account_id.public_key |> Signature_lib.Public_key.Compressed.to_string |> Js.string - let custom_token_id pk token = - Mina_base.Account_id.derive_token_id - ~owner:(Mina_base.Account_id.create (public_key pk) (token_id token)) - |> Mina_base.Token_id.to_string |> Js.string + let custom_token_id_checked pk token = + Mina_base.Account_id.Checked.derive_token_id + ~owner:(account_id_checked pk token) + |> Mina_base.Account_id.Digest.Checked.to_field_unsafe |> to_js_field + + let custom_token_id_unchecked pk token = + Mina_base.Account_id.derive_token_id ~owner:(account_id pk token) + |> Mina_base.Token_id.to_field_unsafe |> to_js_field_unchecked let () = let static_method name f = @@ -2868,7 +2884,8 @@ module Ledger = struct let method_ name (f : ledger_class Js.t -> _) = method_ ledger_class name f in - static_method "customTokenID" custom_token_id ; + static_method "customTokenId" custom_token_id_unchecked ; + static_method "customTokenIdChecked" custom_token_id_checked ; static_method "createTokenAccount" create_token_account ; static_method "create" create ; diff --git a/src/lib/snarky_js_bindings/test_module/simple-zkapp-token.js b/src/lib/snarky_js_bindings/test_module/simple-zkapp-token.js index d47edacc58b..79b5a0b6555 100644 --- a/src/lib/snarky_js_bindings/test_module/simple-zkapp-token.js +++ b/src/lib/snarky_js_bindings/test_module/simple-zkapp-token.js @@ -12,7 +12,7 @@ import { Permissions, Party, UInt64, - partiesToJson, + Ledger, Token, getDefaultTokenId, } from "snarkyjs"; @@ -40,6 +40,10 @@ class SimpleZkapp extends SmartContract { this.balance.addInPlace(UInt64.fromNumber(initialBalance)); this.x.set(initialState); this.tokenSymbol.set("TEST_TOKEN"); + console.log( + "Current tokenId while deploying: ", + Ledger.fieldToBase58(this.tokenId) + ); } update(y) { @@ -125,10 +129,20 @@ console.log(`initial balance: ${zkapp.account.balance.get().div(1e9)} MINA`); const customToken = new Token({ tokenOwner: zkappAddress }); console.log("---FEE PAYER", feePayer.toPublicKey().toBase58()); console.log("---TOKEN OWNER", zkappAddress.toBase58()); -console.log("---CUSTOM TOKEN", customToken.id); +console.log("---CUSTOM TOKEN", Ledger.fieldToBase58(customToken.id)); console.log(`---TOKEN SYMBOL ${Mina.getAccount(zkappAddress).tokenSymbol}`); console.log("---TOKEN ACCOUNT1", tokenAccount1.toBase58()); console.log("---TOKEN ACCOUNT2", tokenAccount2.toBase58()); +console.log( + "---CUSTOM TOKEN CHECKED", + Ledger.fieldToBase58( + Ledger.customTokenIdChecked(zkappAddress, getDefaultTokenId()) + ) +); +console.log( + "---CUSTOM TOKEN UNCHECKED", + Ledger.fieldToBase58(Ledger.customTokenId(zkappAddress, getDefaultTokenId())) +); console.log("----------token minting----------"); tx = await Local.transaction(feePayer, () => { From 0280361196978352ccbae52dc180dabcb79cf7e0 Mon Sep 17 00:00:00 2001 From: Martin Minkov Date: Thu, 21 Jul 2022 12:51:57 -0700 Subject: [PATCH 06/11] [snarkyjs] - Bump SnarkyJS submodule --- src/lib/snarky_js_bindings/snarkyjs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lib/snarky_js_bindings/snarkyjs b/src/lib/snarky_js_bindings/snarkyjs index a20146bfcb0..e73a4f69ada 160000 --- a/src/lib/snarky_js_bindings/snarkyjs +++ b/src/lib/snarky_js_bindings/snarkyjs @@ -1 +1 @@ -Subproject commit a20146bfcb077f01506bce037c0853c65d08c084 +Subproject commit e73a4f69adaa053b8f32384c4fec9bd1aeff7460 From 8679fe5e64d49daeaa898ecf6722ebb53ab67ac3 Mon Sep 17 00:00:00 2001 From: Gregor Date: Fri, 15 Jul 2022 17:04:49 +0200 Subject: [PATCH 07/11] [snarkyjs] compute zkapp public input with calls --- src/lib/snarky_js_bindings/lib/snarky_js_bindings_lib.ml | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/lib/snarky_js_bindings/lib/snarky_js_bindings_lib.ml b/src/lib/snarky_js_bindings/lib/snarky_js_bindings_lib.ml index fd3efb859ab..b8f38e6e660 100644 --- a/src/lib/snarky_js_bindings/lib/snarky_js_bindings_lib.ml +++ b/src/lib/snarky_js_bindings/lib/snarky_js_bindings_lib.ml @@ -1143,6 +1143,10 @@ let poseidon = val events = Js.string (zkapp_events :> string) val sequenceEvents = Js.string (zkapp_sequence_events :> string) + + val partyCons = Js.string (party_cons :> string) + + val partyNode = Js.string (party_node :> string) end end @@ -2661,7 +2665,8 @@ module Ledger = struct val party = to_js_field_unchecked (party.elt.party_digest :> Impl.field) val calls = - to_js_field_unchecked (Parties.Digest.Forest.empty :> Impl.field) + to_js_field_unchecked + (Parties.Call_forest.hash party.elt.calls :> Impl.field) end let sign_field_element (x : field_class Js.t) (key : private_key) = From 712e64c5354a7cd5246ffcfb0cad576e067cf0d7 Mon Sep 17 00:00:00 2001 From: Gregor Date: Mon, 18 Jul 2022 13:07:42 +0200 Subject: [PATCH 08/11] [snarkyjs] rename hash_party & remove stuff --- src/lib/snarky_js_bindings/lib/snarky_js_bindings_lib.ml | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/src/lib/snarky_js_bindings/lib/snarky_js_bindings_lib.ml b/src/lib/snarky_js_bindings/lib/snarky_js_bindings_lib.ml index b8f38e6e660..d6bcff61c27 100644 --- a/src/lib/snarky_js_bindings/lib/snarky_js_bindings_lib.ml +++ b/src/lib/snarky_js_bindings/lib/snarky_js_bindings_lib.ml @@ -2894,10 +2894,6 @@ module Ledger = struct static_method "createTokenAccount" create_token_account ; static_method "create" create ; - static_method "hashParty" hash_party ; - static_method "hashTransaction" hash_transaction ; - static_method "hashTransactionChecked" hash_transaction_checked ; - static_method "transactionCommitments" transaction_commitments ; static_method "zkappPublicInput" zkapp_public_input ; static_method "signFieldElement" sign_field_element ; @@ -2913,6 +2909,7 @@ module Ledger = struct static_method "fieldOfBase58" field_of_base58 ; static_method "memoToBase58" memo_to_base58 ; + static_method "hashPartyFromJson" hash_party ; static_method "hashPartyFromFields" (Checked.fields_to_hash (Mina_base.Party.Body.typ ()) From 2b228524d2a7a96c2afc5afcc99e59c735057ba0 Mon Sep 17 00:00:00 2001 From: Gregor Date: Mon, 25 Jul 2022 13:52:35 +0200 Subject: [PATCH 09/11] bump snarkyjs --- src/lib/snarky_js_bindings/snarkyjs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lib/snarky_js_bindings/snarkyjs b/src/lib/snarky_js_bindings/snarkyjs index e73a4f69ada..997eecd0e80 160000 --- a/src/lib/snarky_js_bindings/snarkyjs +++ b/src/lib/snarky_js_bindings/snarkyjs @@ -1 +1 @@ -Subproject commit e73a4f69adaa053b8f32384c4fec9bd1aeff7460 +Subproject commit 997eecd0e80d182a057cdf88c65ebcbd0d2bd2c7 From a91ec124726f965d761f8138eaaa008bbf813e8b Mon Sep 17 00:00:00 2001 From: Gregor Date: Mon, 25 Jul 2022 16:46:55 +0200 Subject: [PATCH 10/11] [snarkyjs] fix intg test --- .../test_module/simple-zkapp-mock-apply-quick.js | 4 +--- .../test_module/simple-zkapp-mock-apply.js | 5 +---- src/lib/snarky_js_bindings/test_module/simple-zkapp.js | 2 +- 3 files changed, 3 insertions(+), 8 deletions(-) diff --git a/src/lib/snarky_js_bindings/test_module/simple-zkapp-mock-apply-quick.js b/src/lib/snarky_js_bindings/test_module/simple-zkapp-mock-apply-quick.js index b0bdf2f4e2a..9bfdb85560b 100644 --- a/src/lib/snarky_js_bindings/test_module/simple-zkapp-mock-apply-quick.js +++ b/src/lib/snarky_js_bindings/test_module/simple-zkapp-mock-apply-quick.js @@ -66,9 +66,7 @@ let jsonDeploy = await deploy(SimpleZkapp, { zkappKey, verificationKey, initialBalance, - feePayerKey: sender.privateKey, - shouldSignFeePayer: true, - transactionFee, + feePayer: { feePayerKey: sender.privateKey, fee: transactionFee }, }); toc(); diff --git a/src/lib/snarky_js_bindings/test_module/simple-zkapp-mock-apply.js b/src/lib/snarky_js_bindings/test_module/simple-zkapp-mock-apply.js index ccd267ab6a7..187a6c087fe 100644 --- a/src/lib/snarky_js_bindings/test_module/simple-zkapp-mock-apply.js +++ b/src/lib/snarky_js_bindings/test_module/simple-zkapp-mock-apply.js @@ -73,11 +73,8 @@ toc(); tic("create deploy transaction"); let partiesJsonDeploy = await deploy(SimpleZkapp, { zkappKey, - verificationKey, initialBalance, - feePayerKey: sender.privateKey, - shouldSignFeePayer: true, - transactionFee, + feePayer: { feePayerKey: sender.privateKey, fee: transactionFee }, }); toc(); diff --git a/src/lib/snarky_js_bindings/test_module/simple-zkapp.js b/src/lib/snarky_js_bindings/test_module/simple-zkapp.js index 7b76099c5ff..1fe0aed5918 100644 --- a/src/lib/snarky_js_bindings/test_module/simple-zkapp.js +++ b/src/lib/snarky_js_bindings/test_module/simple-zkapp.js @@ -68,7 +68,7 @@ if (command === "deploy") { zkappKey, verificationKey, initialBalance, - feePayerKey, + feePayer: feePayerKey, }); // mina-signer part From d1d490db524fb14ec2b996962752f8b3123b4c6a Mon Sep 17 00:00:00 2001 From: Gregor Date: Mon, 25 Jul 2022 16:47:36 +0200 Subject: [PATCH 11/11] bump snarkyjs --- src/lib/snarky_js_bindings/snarkyjs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lib/snarky_js_bindings/snarkyjs b/src/lib/snarky_js_bindings/snarkyjs index 997eecd0e80..c0035b69bb8 160000 --- a/src/lib/snarky_js_bindings/snarkyjs +++ b/src/lib/snarky_js_bindings/snarkyjs @@ -1 +1 @@ -Subproject commit 997eecd0e80d182a057cdf88c65ebcbd0d2bd2c7 +Subproject commit c0035b69bb802b44c9b3b025e958a884690a9477