diff --git a/Cargo.lock b/Cargo.lock index fd1b30d5cb..4e69c36abe 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -549,7 +549,7 @@ dependencies = [ [[package]] name = "ark-bls12-381" version = "0.5.0" -source = "git+https://github.com/PolymeshAssociation/arkworks-algebra.git?branch=dart-v0.1.0#78293c66a89c34dede911f1b4adce164cf1cedc2" +source = "git+https://github.com/PolymeshAssociation/arkworks-algebra.git?branch=polymesh-master#a7750396233657ec6e3b6937000f3805aa4d0b4e" dependencies = [ "ark-ec 0.5.0", "ark-ff 0.5.0", @@ -560,7 +560,7 @@ dependencies = [ [[package]] name = "ark-bn254" version = "0.5.0" -source = "git+https://github.com/PolymeshAssociation/arkworks-algebra.git?branch=dart-v0.1.0#78293c66a89c34dede911f1b4adce164cf1cedc2" +source = "git+https://github.com/PolymeshAssociation/arkworks-algebra.git?branch=polymesh-master#a7750396233657ec6e3b6937000f3805aa4d0b4e" dependencies = [ "ark-ec 0.5.0", "ark-ff 0.5.0", @@ -603,7 +603,7 @@ dependencies = [ [[package]] name = "ark-curve25519" version = "0.5.0" -source = "git+https://github.com/PolymeshAssociation/arkworks-algebra.git?branch=dart-v0.1.0#78293c66a89c34dede911f1b4adce164cf1cedc2" +source = "git+https://github.com/PolymeshAssociation/arkworks-algebra.git?branch=polymesh-master#a7750396233657ec6e3b6937000f3805aa4d0b4e" dependencies = [ "ark-ec 0.5.0", "ark-ff 0.5.0", @@ -613,7 +613,7 @@ dependencies = [ [[package]] name = "ark-dlog-gadget" version = "0.1.0" -source = "git+https://github.com/PolymeshAssociation/curve-trees?branch=dart-v0.1.0#c37812ba7a88831c0fe2c411fa6ea9035f927dac" +source = "git+https://github.com/PolymeshAssociation/curve-trees?branch=polymesh#9483ceb4994440b4fdd41c6dade80001b272b43c" dependencies = [ "ark-curve25519", "ark-ec 0.5.0", @@ -656,12 +656,12 @@ dependencies = [ [[package]] name = "ark-ec" version = "0.5.0" -source = "git+https://github.com/PolymeshAssociation/arkworks-algebra.git?branch=dart-v0.1.0#78293c66a89c34dede911f1b4adce164cf1cedc2" +source = "git+https://github.com/PolymeshAssociation/arkworks-algebra.git?branch=polymesh-master#a7750396233657ec6e3b6937000f3805aa4d0b4e" dependencies = [ "ahash 0.8.12", "ark-ff 0.5.0", "ark-host-msm", - "ark-poly 0.5.0 (git+https://github.com/PolymeshAssociation/arkworks-algebra.git?branch=dart-v0.1.0)", + "ark-poly 0.5.0 (git+https://github.com/PolymeshAssociation/arkworks-algebra.git?branch=polymesh-master)", "ark-serialize 0.5.0", "ark-std 0.5.0", "educe", @@ -678,7 +678,7 @@ dependencies = [ [[package]] name = "ark-ec-divisors" version = "0.1.0" -source = "git+https://github.com/PolymeshAssociation/curve-trees?branch=dart-v0.1.0#c37812ba7a88831c0fe2c411fa6ea9035f927dac" +source = "git+https://github.com/PolymeshAssociation/curve-trees?branch=polymesh#9483ceb4994440b4fdd41c6dade80001b272b43c" dependencies = [ "ark-curve25519", "ark-ec 0.5.0", @@ -686,6 +686,8 @@ dependencies = [ "ark-ff 0.5.0", "ark-helios", "ark-pallas", + "ark-secp256k1", + "ark-secq256k1", "ark-selene", "ark-serialize 0.5.0", "ark-std 0.5.0", @@ -716,7 +718,7 @@ dependencies = [ [[package]] name = "ark-ed25519" version = "0.5.0" -source = "git+https://github.com/PolymeshAssociation/arkworks-algebra.git?branch=dart-v0.1.0#78293c66a89c34dede911f1b4adce164cf1cedc2" +source = "git+https://github.com/PolymeshAssociation/arkworks-algebra.git?branch=polymesh-master#a7750396233657ec6e3b6937000f3805aa4d0b4e" dependencies = [ "ark-curve25519", "ark-ec 0.5.0", @@ -765,7 +767,7 @@ dependencies = [ [[package]] name = "ark-ff" version = "0.5.0" -source = "git+https://github.com/PolymeshAssociation/arkworks-algebra.git?branch=dart-v0.1.0#78293c66a89c34dede911f1b4adce164cf1cedc2" +source = "git+https://github.com/PolymeshAssociation/arkworks-algebra.git?branch=polymesh-master#a7750396233657ec6e3b6937000f3805aa4d0b4e" dependencies = [ "ark-ff-asm 0.5.0", "ark-ff-macros 0.5.0", @@ -819,7 +821,7 @@ dependencies = [ [[package]] name = "ark-ff-asm" version = "0.5.0" -source = "git+https://github.com/PolymeshAssociation/arkworks-algebra.git?branch=dart-v0.1.0#78293c66a89c34dede911f1b4adce164cf1cedc2" +source = "git+https://github.com/PolymeshAssociation/arkworks-algebra.git?branch=polymesh-master#a7750396233657ec6e3b6937000f3805aa4d0b4e" dependencies = [ "quote", "syn 2.0.119", @@ -863,7 +865,7 @@ dependencies = [ [[package]] name = "ark-ff-macros" version = "0.5.0" -source = "git+https://github.com/PolymeshAssociation/arkworks-algebra.git?branch=dart-v0.1.0#78293c66a89c34dede911f1b4adce164cf1cedc2" +source = "git+https://github.com/PolymeshAssociation/arkworks-algebra.git?branch=polymesh-master#a7750396233657ec6e3b6937000f3805aa4d0b4e" dependencies = [ "num-bigint", "num-traits", @@ -888,7 +890,7 @@ dependencies = [ [[package]] name = "ark-helios" version = "0.5.0" -source = "git+https://github.com/PolymeshAssociation/arkworks-algebra.git?branch=dart-v0.1.0#78293c66a89c34dede911f1b4adce164cf1cedc2" +source = "git+https://github.com/PolymeshAssociation/arkworks-algebra.git?branch=polymesh-master#a7750396233657ec6e3b6937000f3805aa4d0b4e" dependencies = [ "ark-ec 0.5.0", "ark-ff 0.5.0", @@ -900,7 +902,7 @@ dependencies = [ [[package]] name = "ark-host-msm" version = "0.5.0" -source = "git+https://github.com/PolymeshAssociation/arkworks-algebra.git?branch=dart-v0.1.0#78293c66a89c34dede911f1b4adce164cf1cedc2" +source = "git+https://github.com/PolymeshAssociation/arkworks-algebra.git?branch=polymesh-master#a7750396233657ec6e3b6937000f3805aa4d0b4e" dependencies = [ "ark-serialize 0.5.0", "ark-std 0.5.0", @@ -910,7 +912,7 @@ dependencies = [ [[package]] name = "ark-host-msm-impl" version = "0.5.0" -source = "git+https://github.com/PolymeshAssociation/arkworks-algebra.git?branch=dart-v0.1.0#78293c66a89c34dede911f1b4adce164cf1cedc2" +source = "git+https://github.com/PolymeshAssociation/arkworks-algebra.git?branch=polymesh-master#a7750396233657ec6e3b6937000f3805aa4d0b4e" dependencies = [ "ark-ec 0.5.0", "ark-ff 0.5.0", @@ -925,7 +927,7 @@ dependencies = [ [[package]] name = "ark-pallas" version = "0.5.0" -source = "git+https://github.com/PolymeshAssociation/arkworks-algebra.git?branch=dart-v0.1.0#78293c66a89c34dede911f1b4adce164cf1cedc2" +source = "git+https://github.com/PolymeshAssociation/arkworks-algebra.git?branch=polymesh-master#a7750396233657ec6e3b6937000f3805aa4d0b4e" dependencies = [ "ark-ec 0.5.0", "ark-ff 0.5.0", @@ -965,7 +967,7 @@ dependencies = [ [[package]] name = "ark-poly" version = "0.5.0" -source = "git+https://github.com/PolymeshAssociation/arkworks-algebra.git?branch=dart-v0.1.0#78293c66a89c34dede911f1b4adce164cf1cedc2" +source = "git+https://github.com/PolymeshAssociation/arkworks-algebra.git?branch=polymesh-master#a7750396233657ec6e3b6937000f3805aa4d0b4e" dependencies = [ "ahash 0.8.12", "ark-ff 0.5.0", @@ -1005,10 +1007,31 @@ dependencies = [ "tracing-subscriber 0.2.25", ] +[[package]] +name = "ark-secp256k1" +version = "0.5.0" +source = "git+https://github.com/PolymeshAssociation/arkworks-algebra.git?branch=polymesh-master#a7750396233657ec6e3b6937000f3805aa4d0b4e" +dependencies = [ + "ark-ec 0.5.0", + "ark-ff 0.5.0", + "ark-std 0.5.0", +] + +[[package]] +name = "ark-secq256k1" +version = "0.5.0" +source = "git+https://github.com/PolymeshAssociation/arkworks-algebra.git?branch=polymesh-master#a7750396233657ec6e3b6937000f3805aa4d0b4e" +dependencies = [ + "ark-ec 0.5.0", + "ark-ff 0.5.0", + "ark-secp256k1", + "ark-std 0.5.0", +] + [[package]] name = "ark-selene" version = "0.5.0" -source = "git+https://github.com/PolymeshAssociation/arkworks-algebra.git?branch=dart-v0.1.0#78293c66a89c34dede911f1b4adce164cf1cedc2" +source = "git+https://github.com/PolymeshAssociation/arkworks-algebra.git?branch=polymesh-master#a7750396233657ec6e3b6937000f3805aa4d0b4e" dependencies = [ "ark-curve25519", "ark-ec 0.5.0", @@ -1042,7 +1065,7 @@ dependencies = [ [[package]] name = "ark-serialize" version = "0.5.0" -source = "git+https://github.com/PolymeshAssociation/arkworks-algebra.git?branch=dart-v0.1.0#78293c66a89c34dede911f1b4adce164cf1cedc2" +source = "git+https://github.com/PolymeshAssociation/arkworks-algebra.git?branch=polymesh-master#a7750396233657ec6e3b6937000f3805aa4d0b4e" dependencies = [ "ark-serialize-derive 0.5.0", "ark-std 0.5.0", @@ -1080,7 +1103,7 @@ dependencies = [ [[package]] name = "ark-serialize-derive" version = "0.5.0" -source = "git+https://github.com/PolymeshAssociation/arkworks-algebra.git?branch=dart-v0.1.0#78293c66a89c34dede911f1b4adce164cf1cedc2" +source = "git+https://github.com/PolymeshAssociation/arkworks-algebra.git?branch=polymesh-master#a7750396233657ec6e3b6937000f3805aa4d0b4e" dependencies = [ "proc-macro2", "quote", @@ -1168,7 +1191,7 @@ dependencies = [ [[package]] name = "ark-vesta" version = "0.5.0" -source = "git+https://github.com/PolymeshAssociation/arkworks-algebra.git?branch=dart-v0.1.0#78293c66a89c34dede911f1b4adce164cf1cedc2" +source = "git+https://github.com/PolymeshAssociation/arkworks-algebra.git?branch=polymesh-master#a7750396233657ec6e3b6937000f3805aa4d0b4e" dependencies = [ "ark-ec 0.5.0", "ark-ff 0.5.0", @@ -1199,7 +1222,7 @@ dependencies = [ [[package]] name = "ark-wei25519" version = "0.5.0" -source = "git+https://github.com/PolymeshAssociation/arkworks-algebra.git?branch=dart-v0.1.0#78293c66a89c34dede911f1b4adce164cf1cedc2" +source = "git+https://github.com/PolymeshAssociation/arkworks-algebra.git?branch=polymesh-master#a7750396233657ec6e3b6937000f3805aa4d0b4e" dependencies = [ "ark-curve25519", "ark-ec 0.5.0", @@ -1913,7 +1936,7 @@ dependencies = [ [[package]] name = "bulletproofs" version = "2.0.0" -source = "git+https://github.com/PolymeshAssociation/curve-trees?branch=dart-v0.1.0#c37812ba7a88831c0fe2c411fa6ea9035f927dac" +source = "git+https://github.com/PolymeshAssociation/curve-trees?branch=polymesh#9483ceb4994440b4fdd41c6dade80001b272b43c" dependencies = [ "ahash 0.8.12", "ark-ec 0.5.0", @@ -1921,6 +1944,8 @@ dependencies = [ "ark-helios", "ark-host-msm", "ark-pallas", + "ark-secp256k1", + "ark-secq256k1", "ark-selene", "ark-serialize 0.5.0", "ark-std 0.5.0", @@ -3969,7 +3994,7 @@ dependencies = [ [[package]] name = "dock_crypto_utils" version = "0.22.0" -source = "git+https://github.com/PolymeshAssociation/crypto?branch=dart-v0.1.0#23da69bd41300fca555c69ea6accf04802eb1aed" +source = "git+https://github.com/PolymeshAssociation/crypto?branch=main#7e3922f860ed6b6139d4520429cdc60437c1abac" dependencies = [ "aead", "ark-ec 0.5.0", @@ -3989,13 +4014,14 @@ dependencies = [ "rayon", "serde", "sha2 0.10.9", + "smallvec", "zeroize", ] [[package]] name = "dock_merlin" version = "3.0.0" -source = "git+https://github.com/PolymeshAssociation/crypto?branch=dart-v0.1.0#23da69bd41300fca555c69ea6accf04802eb1aed" +source = "git+https://github.com/PolymeshAssociation/crypto?branch=main#7e3922f860ed6b6139d4520429cdc60437c1abac" dependencies = [ "ark-serialize 0.5.0", "ark-std 0.5.0", @@ -5214,6 +5240,7 @@ checksum = "337d46834ee672ab3e48caca2cb0c78cc174fb12b3a68d0d88f99a0519a5e36e" dependencies = [ "rustversion", "typenum", + "zeroize", ] [[package]] @@ -10837,8 +10864,8 @@ dependencies = [ [[package]] name = "polymesh-dart" -version = "0.1.0" -source = "git+https://github.com/PolymeshAssociation/polymesh-dart?branch=dart-v0.1.0#9df3109dad012884fcec31eccb848a8a8996ead6" +version = "1.0.0" +source = "git+https://github.com/PolymeshAssociation/polymesh-dart?branch=prepare_v1_0#c104e9b4295084a989fbd4390e3fb93135832da1" dependencies = [ "ark-dlog-gadget", "ark-ec 0.5.0", @@ -10875,8 +10902,8 @@ dependencies = [ [[package]] name = "polymesh-dart-bp" -version = "0.1.0" -source = "git+https://github.com/PolymeshAssociation/polymesh-dart?branch=dart-v0.1.0#9df3109dad012884fcec31eccb848a8a8996ead6" +version = "1.0.0" +source = "git+https://github.com/PolymeshAssociation/polymesh-dart?branch=prepare_v1_0#c104e9b4295084a989fbd4390e3fb93135832da1" dependencies = [ "ark-dlog-gadget", "ark-ec 0.5.0", @@ -10906,8 +10933,8 @@ dependencies = [ [[package]] name = "polymesh-dart-common" -version = "0.1.0" -source = "git+https://github.com/PolymeshAssociation/polymesh-dart?branch=dart-v0.1.0#9df3109dad012884fcec31eccb848a8a8996ead6" +version = "1.0.0" +source = "git+https://github.com/PolymeshAssociation/polymesh-dart?branch=prepare_v1_0#c104e9b4295084a989fbd4390e3fb93135832da1" [[package]] name = "polymesh-exec-macro" @@ -12623,7 +12650,7 @@ dependencies = [ [[package]] name = "relations" version = "0.1.0" -source = "git+https://github.com/PolymeshAssociation/curve-trees?branch=dart-v0.1.0#c37812ba7a88831c0fe2c411fa6ea9035f927dac" +source = "git+https://github.com/PolymeshAssociation/curve-trees?branch=polymesh#9483ceb4994440b4fdd41c6dade80001b272b43c" dependencies = [ "ark-crypto-primitives", "ark-dlog-gadget", @@ -12632,6 +12659,7 @@ dependencies = [ "ark-ff 0.5.0", "ark-helios", "ark-pallas", + "ark-poly 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)", "ark-selene", "ark-serialize 0.5.0", "ark-std 0.5.0", @@ -14665,7 +14693,7 @@ dependencies = [ [[package]] name = "schnorr_pok" version = "0.22.0" -source = "git+https://github.com/PolymeshAssociation/crypto?branch=dart-v0.1.0#23da69bd41300fca555c69ea6accf04802eb1aed" +source = "git+https://github.com/PolymeshAssociation/crypto?branch=main#7e3922f860ed6b6139d4520429cdc60437c1abac" dependencies = [ "ark-ec 0.5.0", "ark-ff 0.5.0", diff --git a/Cargo.toml b/Cargo.toml index 2faa3df91f..0bef299641 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -23,22 +23,22 @@ sp-crypto-hashing = { git = "https://github.com/PolymeshAssociation/polkadot-sdk #ark-ec-divisors = { package = "ark-ec-divisors", path = "../curve-trees/ark-ec-divisors"} #ark-dlog-gadget = { package = "ark-dlog-gadget", path = "../curve-trees/ark-dlog-gadget"} # If want to pull code for curve-trees from git, comment above 2 relations and uncomment below 2 -curve_tree_bulletproofs = { package = "bulletproofs", git = "https://github.com/PolymeshAssociation/curve-trees", branch = "dart-v0.1.0" } -curve_tree_relations = { package = "relations", git = "https://github.com/PolymeshAssociation/curve-trees", branch = "dart-v0.1.0" } -ark-ec-divisors = { package = "ark-ec-divisors", git = "https://github.com/PolymeshAssociation/curve-trees", branch = "dart-v0.1.0" } -ark-dlog-gadget = { package = "ark-dlog-gadget", git = "https://github.com/PolymeshAssociation/curve-trees", branch = "dart-v0.1.0" } +curve_tree_bulletproofs = { package = "bulletproofs", git = "https://github.com/PolymeshAssociation/curve-trees", branch = "polymesh" } +curve_tree_relations = { package = "relations", git = "https://github.com/PolymeshAssociation/curve-trees", branch = "polymesh" } +ark-ec-divisors = { package = "ark-ec-divisors", git = "https://github.com/PolymeshAssociation/curve-trees", branch = "polymesh" } +ark-dlog-gadget = { package = "ark-dlog-gadget", git = "https://github.com/PolymeshAssociation/curve-trees", branch = "polymesh" } #dock_crypto_utils = { path = "../crypto/utils" } #schnorr_pok = { path = "../crypto/schnorr_pok" } -dock_crypto_utils = { git = "https://github.com/PolymeshAssociation/crypto", branch = "dart-v0.1.0" } -schnorr_pok = { git = "https://github.com/PolymeshAssociation/crypto", branch = "dart-v0.1.0" } +dock_crypto_utils = { git = "https://github.com/PolymeshAssociation/crypto", branch = "main" } +schnorr_pok = { git = "https://github.com/PolymeshAssociation/crypto", branch = "main" } #polymesh-dart = { path = "../polymesh-dart" } #polymesh-dart-bp = { path = "../polymesh-dart/dart-bp" } #polymesh-dart-common = { path = "../polymesh-dart/dart-common" } -polymesh-dart = { git = "https://github.com/PolymeshAssociation/polymesh-dart", branch = "dart-v0.1.0" } -polymesh-dart-bp = { git = "https://github.com/PolymeshAssociation/polymesh-dart", branch = "dart-v0.1.0" } -polymesh-dart-common = { git = "https://github.com/PolymeshAssociation/polymesh-dart", branch = "dart-v0.1.0" } +polymesh-dart = { git = "https://github.com/PolymeshAssociation/polymesh-dart", branch = "prepare_v1_0" } +polymesh-dart-bp = { git = "https://github.com/PolymeshAssociation/polymesh-dart", branch = "prepare_v1_0" } +polymesh-dart-common = { git = "https://github.com/PolymeshAssociation/polymesh-dart", branch = "prepare_v1_0" } # Polymesh changes to Arkworks. #ark-serialize = { path = "../arkworks-algebra/serialize" } @@ -56,23 +56,25 @@ polymesh-dart-common = { git = "https://github.com/PolymeshAssociation/polymesh- #ark-bn254 = { path = "../arkworks-algebra/curves/bn254" } #ark-bls12-381 = { path = "../arkworks-algebra/curves/bls12_381" } -ark-serialize = { git = "https://github.com/PolymeshAssociation/arkworks-algebra.git", branch = "dart-v0.1.0" } -ark-ec = { git = "https://github.com/PolymeshAssociation/arkworks-algebra.git", branch = "dart-v0.1.0" } -ark-host-msm = { git = "https://github.com/PolymeshAssociation/arkworks-algebra.git", branch = "dart-v0.1.0" } -ark-host-msm-impl = { git = "https://github.com/PolymeshAssociation/arkworks-algebra.git", branch = "dart-v0.1.0" } -ark-ff = { git = "https://github.com/PolymeshAssociation/arkworks-algebra.git", branch = "dart-v0.1.0" } -ark-pallas = { git = "https://github.com/PolymeshAssociation/arkworks-algebra.git", branch = "dart-v0.1.0" } -ark-vesta = { git = "https://github.com/PolymeshAssociation/arkworks-algebra.git", branch = "dart-v0.1.0" } -ark-helios = { git = "https://github.com/PolymeshAssociation/arkworks-algebra.git", branch = "dart-v0.1.0" } -ark-selene = { git = "https://github.com/PolymeshAssociation/arkworks-algebra.git", branch = "dart-v0.1.0" } -ark-wei25519 = { git = "https://github.com/PolymeshAssociation/arkworks-algebra.git", branch = "dart-v0.1.0" } -ark-curve25519 = { git = "https://github.com/PolymeshAssociation/arkworks-algebra.git", branch = "dart-v0.1.0" } -ark-ed25519 = { git = "https://github.com/PolymeshAssociation/arkworks-algebra.git", branch = "dart-v0.1.0" } -ark-bn254 = { git = "https://github.com/PolymeshAssociation/arkworks-algebra.git", branch = "dart-v0.1.0" } -ark-bls12-381 = { git = "https://github.com/PolymeshAssociation/arkworks-algebra.git", branch = "dart-v0.1.0" } +ark-serialize = { git = "https://github.com/PolymeshAssociation/arkworks-algebra.git", branch = "polymesh-master" } +ark-ec = { git = "https://github.com/PolymeshAssociation/arkworks-algebra.git", branch = "polymesh-master" } +ark-host-msm = { git = "https://github.com/PolymeshAssociation/arkworks-algebra.git", branch = "polymesh-master" } +ark-host-msm-impl = { git = "https://github.com/PolymeshAssociation/arkworks-algebra.git", branch = "polymesh-master" } +ark-ff = { git = "https://github.com/PolymeshAssociation/arkworks-algebra.git", branch = "polymesh-master" } +ark-pallas = { git = "https://github.com/PolymeshAssociation/arkworks-algebra.git", branch = "polymesh-master" } +ark-vesta = { git = "https://github.com/PolymeshAssociation/arkworks-algebra.git", branch = "polymesh-master" } +ark-helios = { git = "https://github.com/PolymeshAssociation/arkworks-algebra.git", branch = "polymesh-master" } +ark-selene = { git = "https://github.com/PolymeshAssociation/arkworks-algebra.git", branch = "polymesh-master" } +ark-wei25519 = { git = "https://github.com/PolymeshAssociation/arkworks-algebra.git", branch = "polymesh-master" } +ark-curve25519 = { git = "https://github.com/PolymeshAssociation/arkworks-algebra.git", branch = "polymesh-master" } +ark-ed25519 = { git = "https://github.com/PolymeshAssociation/arkworks-algebra.git", branch = "polymesh-master" } +ark-bn254 = { git = "https://github.com/PolymeshAssociation/arkworks-algebra.git", branch = "polymesh-master" } +ark-bls12-381 = { git = "https://github.com/PolymeshAssociation/arkworks-algebra.git", branch = "polymesh-master" } +ark-secp256k1 = { git = "https://github.com/PolymeshAssociation/arkworks-algebra.git", branch = "polymesh-master" } +ark-secq256k1 = { git = "https://github.com/PolymeshAssociation/arkworks-algebra.git", branch = "polymesh-master" } #ark-bls12-377 = { path = "../arkworks-algebra/curves/bls12_377" } -#ark-bls12-377 = { git = "https://github.com/PolymeshAssociation/arkworks-algebra.git", branch = "dart-v0.1.0" } +#ark-bls12-377 = { git = "https://github.com/PolymeshAssociation/arkworks-algebra.git", branch = "polymesh-master" } [workspace] members = [ @@ -345,8 +347,8 @@ rand_core = { version = "0.6", default-features = false } rand_chacha = { version = "0.3", default-features = false } # DART -polymesh-dart = { version = "0.1.0", default-features = false } -polymesh-dart-common = { version = "0.1.0", default-features = false } +polymesh-dart = { version = "1.0.0", default-features = false } +polymesh-dart-common = { version = "1.0.0", default-features = false } ark-serialize = { version = "0.5", default-features = false } ark-ec = { version = "0.5", default-features = false } ark-ff = { version = "0.5", default-features = false } diff --git a/integration/Cargo.lock b/integration/Cargo.lock index 8e563d28be..2c47e79e7f 100644 --- a/integration/Cargo.lock +++ b/integration/Cargo.lock @@ -844,7 +844,7 @@ dependencies = [ [[package]] name = "ark-curve25519" version = "0.5.0" -source = "git+https://github.com/PolymeshAssociation/arkworks-algebra.git?branch=dart-v0.1.0#78293c66a89c34dede911f1b4adce164cf1cedc2" +source = "git+https://github.com/PolymeshAssociation/arkworks-algebra.git?branch=polymesh-master#a7750396233657ec6e3b6937000f3805aa4d0b4e" dependencies = [ "ark-ec 0.5.0", "ark-ff 0.5.0", @@ -854,7 +854,7 @@ dependencies = [ [[package]] name = "ark-dlog-gadget" version = "0.1.0" -source = "git+https://github.com/PolymeshAssociation/curve-trees?branch=dart-v0.1.0#c37812ba7a88831c0fe2c411fa6ea9035f927dac" +source = "git+https://github.com/PolymeshAssociation/curve-trees?branch=polymesh#9483ceb4994440b4fdd41c6dade80001b272b43c" dependencies = [ "ark-curve25519", "ark-ec 0.5.0", @@ -896,12 +896,12 @@ dependencies = [ [[package]] name = "ark-ec" version = "0.5.0" -source = "git+https://github.com/PolymeshAssociation/arkworks-algebra.git?branch=dart-v0.1.0#78293c66a89c34dede911f1b4adce164cf1cedc2" +source = "git+https://github.com/PolymeshAssociation/arkworks-algebra.git?branch=polymesh-master#a7750396233657ec6e3b6937000f3805aa4d0b4e" dependencies = [ "ahash", "ark-ff 0.5.0", "ark-host-msm", - "ark-poly 0.5.0 (git+https://github.com/PolymeshAssociation/arkworks-algebra.git?branch=dart-v0.1.0)", + "ark-poly 0.5.0 (git+https://github.com/PolymeshAssociation/arkworks-algebra.git?branch=polymesh-master)", "ark-serialize 0.5.0", "ark-std 0.5.0", "educe", @@ -917,7 +917,7 @@ dependencies = [ [[package]] name = "ark-ec-divisors" version = "0.1.0" -source = "git+https://github.com/PolymeshAssociation/curve-trees?branch=dart-v0.1.0#c37812ba7a88831c0fe2c411fa6ea9035f927dac" +source = "git+https://github.com/PolymeshAssociation/curve-trees?branch=polymesh#9483ceb4994440b4fdd41c6dade80001b272b43c" dependencies = [ "ark-curve25519", "ark-ec 0.5.0", @@ -925,6 +925,8 @@ dependencies = [ "ark-ff 0.5.0", "ark-helios", "ark-pallas", + "ark-secp256k1", + "ark-secq256k1", "ark-selene", "ark-serialize 0.5.0", "ark-std 0.5.0", @@ -954,7 +956,7 @@ dependencies = [ [[package]] name = "ark-ed25519" version = "0.5.0" -source = "git+https://github.com/PolymeshAssociation/arkworks-algebra.git?branch=dart-v0.1.0#78293c66a89c34dede911f1b4adce164cf1cedc2" +source = "git+https://github.com/PolymeshAssociation/arkworks-algebra.git?branch=polymesh-master#a7750396233657ec6e3b6937000f3805aa4d0b4e" dependencies = [ "ark-curve25519", "ark-ec 0.5.0", @@ -1003,7 +1005,7 @@ dependencies = [ [[package]] name = "ark-ff" version = "0.5.0" -source = "git+https://github.com/PolymeshAssociation/arkworks-algebra.git?branch=dart-v0.1.0#78293c66a89c34dede911f1b4adce164cf1cedc2" +source = "git+https://github.com/PolymeshAssociation/arkworks-algebra.git?branch=polymesh-master#a7750396233657ec6e3b6937000f3805aa4d0b4e" dependencies = [ "ark-ff-asm 0.5.0", "ark-ff-macros 0.5.0", @@ -1057,7 +1059,7 @@ dependencies = [ [[package]] name = "ark-ff-asm" version = "0.5.0" -source = "git+https://github.com/PolymeshAssociation/arkworks-algebra.git?branch=dart-v0.1.0#78293c66a89c34dede911f1b4adce164cf1cedc2" +source = "git+https://github.com/PolymeshAssociation/arkworks-algebra.git?branch=polymesh-master#a7750396233657ec6e3b6937000f3805aa4d0b4e" dependencies = [ "quote", "syn 2.0.119", @@ -1101,7 +1103,7 @@ dependencies = [ [[package]] name = "ark-ff-macros" version = "0.5.0" -source = "git+https://github.com/PolymeshAssociation/arkworks-algebra.git?branch=dart-v0.1.0#78293c66a89c34dede911f1b4adce164cf1cedc2" +source = "git+https://github.com/PolymeshAssociation/arkworks-algebra.git?branch=polymesh-master#a7750396233657ec6e3b6937000f3805aa4d0b4e" dependencies = [ "num-bigint", "num-traits", @@ -1126,7 +1128,7 @@ dependencies = [ [[package]] name = "ark-helios" version = "0.5.0" -source = "git+https://github.com/PolymeshAssociation/arkworks-algebra.git?branch=dart-v0.1.0#78293c66a89c34dede911f1b4adce164cf1cedc2" +source = "git+https://github.com/PolymeshAssociation/arkworks-algebra.git?branch=polymesh-master#a7750396233657ec6e3b6937000f3805aa4d0b4e" dependencies = [ "ark-ec 0.5.0", "ark-ff 0.5.0", @@ -1138,7 +1140,7 @@ dependencies = [ [[package]] name = "ark-host-msm" version = "0.5.0" -source = "git+https://github.com/PolymeshAssociation/arkworks-algebra.git?branch=dart-v0.1.0#78293c66a89c34dede911f1b4adce164cf1cedc2" +source = "git+https://github.com/PolymeshAssociation/arkworks-algebra.git?branch=polymesh-master#a7750396233657ec6e3b6937000f3805aa4d0b4e" dependencies = [ "ark-serialize 0.5.0", "ark-std 0.5.0", @@ -1147,7 +1149,7 @@ dependencies = [ [[package]] name = "ark-pallas" version = "0.5.0" -source = "git+https://github.com/PolymeshAssociation/arkworks-algebra.git?branch=dart-v0.1.0#78293c66a89c34dede911f1b4adce164cf1cedc2" +source = "git+https://github.com/PolymeshAssociation/arkworks-algebra.git?branch=polymesh-master#a7750396233657ec6e3b6937000f3805aa4d0b4e" dependencies = [ "ark-ec 0.5.0", "ark-ff 0.5.0", @@ -1186,7 +1188,7 @@ dependencies = [ [[package]] name = "ark-poly" version = "0.5.0" -source = "git+https://github.com/PolymeshAssociation/arkworks-algebra.git?branch=dart-v0.1.0#78293c66a89c34dede911f1b4adce164cf1cedc2" +source = "git+https://github.com/PolymeshAssociation/arkworks-algebra.git?branch=polymesh-master#a7750396233657ec6e3b6937000f3805aa4d0b4e" dependencies = [ "ahash", "ark-ff 0.5.0", @@ -1208,10 +1210,31 @@ dependencies = [ "tracing", ] +[[package]] +name = "ark-secp256k1" +version = "0.5.0" +source = "git+https://github.com/PolymeshAssociation/arkworks-algebra.git?branch=polymesh-master#a7750396233657ec6e3b6937000f3805aa4d0b4e" +dependencies = [ + "ark-ec 0.5.0", + "ark-ff 0.5.0", + "ark-std 0.5.0", +] + +[[package]] +name = "ark-secq256k1" +version = "0.5.0" +source = "git+https://github.com/PolymeshAssociation/arkworks-algebra.git?branch=polymesh-master#a7750396233657ec6e3b6937000f3805aa4d0b4e" +dependencies = [ + "ark-ec 0.5.0", + "ark-ff 0.5.0", + "ark-secp256k1", + "ark-std 0.5.0", +] + [[package]] name = "ark-selene" version = "0.5.0" -source = "git+https://github.com/PolymeshAssociation/arkworks-algebra.git?branch=dart-v0.1.0#78293c66a89c34dede911f1b4adce164cf1cedc2" +source = "git+https://github.com/PolymeshAssociation/arkworks-algebra.git?branch=polymesh-master#a7750396233657ec6e3b6937000f3805aa4d0b4e" dependencies = [ "ark-curve25519", "ark-ec 0.5.0", @@ -1245,7 +1268,7 @@ dependencies = [ [[package]] name = "ark-serialize" version = "0.5.0" -source = "git+https://github.com/PolymeshAssociation/arkworks-algebra.git?branch=dart-v0.1.0#78293c66a89c34dede911f1b4adce164cf1cedc2" +source = "git+https://github.com/PolymeshAssociation/arkworks-algebra.git?branch=polymesh-master#a7750396233657ec6e3b6937000f3805aa4d0b4e" dependencies = [ "ark-serialize-derive 0.5.0", "ark-std 0.5.0", @@ -1283,7 +1306,7 @@ dependencies = [ [[package]] name = "ark-serialize-derive" version = "0.5.0" -source = "git+https://github.com/PolymeshAssociation/arkworks-algebra.git?branch=dart-v0.1.0#78293c66a89c34dede911f1b4adce164cf1cedc2" +source = "git+https://github.com/PolymeshAssociation/arkworks-algebra.git?branch=polymesh-master#a7750396233657ec6e3b6937000f3805aa4d0b4e" dependencies = [ "proc-macro2", "quote", @@ -1371,7 +1394,7 @@ dependencies = [ [[package]] name = "ark-vesta" version = "0.5.0" -source = "git+https://github.com/PolymeshAssociation/arkworks-algebra.git?branch=dart-v0.1.0#78293c66a89c34dede911f1b4adce164cf1cedc2" +source = "git+https://github.com/PolymeshAssociation/arkworks-algebra.git?branch=polymesh-master#a7750396233657ec6e3b6937000f3805aa4d0b4e" dependencies = [ "ark-ec 0.5.0", "ark-ff 0.5.0", @@ -1402,7 +1425,7 @@ dependencies = [ [[package]] name = "ark-wei25519" version = "0.5.0" -source = "git+https://github.com/PolymeshAssociation/arkworks-algebra.git?branch=dart-v0.1.0#78293c66a89c34dede911f1b4adce164cf1cedc2" +source = "git+https://github.com/PolymeshAssociation/arkworks-algebra.git?branch=polymesh-master#a7750396233657ec6e3b6937000f3805aa4d0b4e" dependencies = [ "ark-curve25519", "ark-ec 0.5.0", @@ -1767,7 +1790,7 @@ dependencies = [ [[package]] name = "bulletproofs" version = "2.0.0" -source = "git+https://github.com/PolymeshAssociation/curve-trees?branch=dart-v0.1.0#c37812ba7a88831c0fe2c411fa6ea9035f927dac" +source = "git+https://github.com/PolymeshAssociation/curve-trees?branch=polymesh#9483ceb4994440b4fdd41c6dade80001b272b43c" dependencies = [ "ahash", "ark-ec 0.5.0", @@ -1775,6 +1798,8 @@ dependencies = [ "ark-helios", "ark-host-msm", "ark-pallas", + "ark-secp256k1", + "ark-secq256k1", "ark-selene", "ark-serialize 0.5.0", "ark-std 0.5.0", @@ -2450,7 +2475,7 @@ dependencies = [ [[package]] name = "dock_crypto_utils" version = "0.22.0" -source = "git+https://github.com/PolymeshAssociation/crypto?branch=dart-v0.1.0#23da69bd41300fca555c69ea6accf04802eb1aed" +source = "git+https://github.com/PolymeshAssociation/crypto?branch=main#7e3922f860ed6b6139d4520429cdc60437c1abac" dependencies = [ "aead", "ark-ec 0.5.0", @@ -2470,13 +2495,14 @@ dependencies = [ "rayon", "serde", "sha2 0.10.9", + "smallvec", "zeroize", ] [[package]] name = "dock_merlin" version = "3.0.0" -source = "git+https://github.com/PolymeshAssociation/crypto?branch=dart-v0.1.0#23da69bd41300fca555c69ea6accf04802eb1aed" +source = "git+https://github.com/PolymeshAssociation/crypto?branch=main#7e3922f860ed6b6139d4520429cdc60437c1abac" dependencies = [ "ark-serialize 0.5.0", "ark-std 0.5.0", @@ -3005,6 +3031,7 @@ checksum = "337d46834ee672ab3e48caca2cb0c78cc174fb12b3a68d0d88f99a0519a5e36e" dependencies = [ "rustversion", "typenum", + "zeroize", ] [[package]] @@ -5048,8 +5075,8 @@ dependencies = [ [[package]] name = "polymesh-dart" -version = "0.1.0" -source = "git+https://github.com/PolymeshAssociation/polymesh-dart?branch=dart-v0.1.0#9df3109dad012884fcec31eccb848a8a8996ead6" +version = "1.0.0" +source = "git+https://github.com/PolymeshAssociation/polymesh-dart?branch=prepare_v1_0#b098c68287a43b9e2dfa02c06c2f93939534a147" dependencies = [ "ark-dlog-gadget", "ark-ec 0.5.0", @@ -5084,8 +5111,8 @@ dependencies = [ [[package]] name = "polymesh-dart-bp" -version = "0.1.0" -source = "git+https://github.com/PolymeshAssociation/polymesh-dart?branch=dart-v0.1.0#9df3109dad012884fcec31eccb848a8a8996ead6" +version = "1.0.0" +source = "git+https://github.com/PolymeshAssociation/polymesh-dart?branch=prepare_v1_0#b098c68287a43b9e2dfa02c06c2f93939534a147" dependencies = [ "ark-dlog-gadget", "ark-ec 0.5.0", @@ -5115,8 +5142,8 @@ dependencies = [ [[package]] name = "polymesh-dart-common" -version = "0.1.0" -source = "git+https://github.com/PolymeshAssociation/polymesh-dart?branch=dart-v0.1.0#9df3109dad012884fcec31eccb848a8a8996ead6" +version = "1.0.0" +source = "git+https://github.com/PolymeshAssociation/polymesh-dart?branch=prepare_v1_0#b098c68287a43b9e2dfa02c06c2f93939534a147" [[package]] name = "polymesh-precompiles" @@ -5501,7 +5528,7 @@ checksum = "d6f6ff9a378485b298a5286656da665ba74413d36db0979633275d2e708145d4" [[package]] name = "relations" version = "0.1.0" -source = "git+https://github.com/PolymeshAssociation/curve-trees?branch=dart-v0.1.0#c37812ba7a88831c0fe2c411fa6ea9035f927dac" +source = "git+https://github.com/PolymeshAssociation/curve-trees?branch=polymesh#9483ceb4994440b4fdd41c6dade80001b272b43c" dependencies = [ "ark-crypto-primitives", "ark-dlog-gadget", @@ -5510,6 +5537,7 @@ dependencies = [ "ark-ff 0.5.0", "ark-helios", "ark-pallas", + "ark-poly 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)", "ark-selene", "ark-serialize 0.5.0", "ark-std 0.5.0", @@ -5898,7 +5926,7 @@ dependencies = [ [[package]] name = "schnorr_pok" version = "0.22.0" -source = "git+https://github.com/PolymeshAssociation/crypto?branch=dart-v0.1.0#23da69bd41300fca555c69ea6accf04802eb1aed" +source = "git+https://github.com/PolymeshAssociation/crypto?branch=main#7e3922f860ed6b6139d4520429cdc60437c1abac" dependencies = [ "ark-ec 0.5.0", "ark-ff 0.5.0", diff --git a/integration/Cargo.toml b/integration/Cargo.toml index 3c3e455f02..0a6da5dd2c 100644 --- a/integration/Cargo.toml +++ b/integration/Cargo.toml @@ -26,22 +26,22 @@ edition = "2021" #ark-ec-divisors = { package = "ark-ec-divisors", path = "../../curve-trees/ark-ec-divisors" } #ark-dlog-gadget = { package = "ark-dlog-gadget", path = "../../curve-trees/ark-dlog-gadget" } # If want to pull code for curve-trees from git, comment above 2 relations and uncomment below 2 -curve_tree_bulletproofs = { package = "bulletproofs", git = "https://github.com/PolymeshAssociation/curve-trees", branch = "dart-v0.1.0" } -curve_tree_relations = { package = "relations", git = "https://github.com/PolymeshAssociation/curve-trees", branch = "dart-v0.1.0" } -ark-ec-divisors = { package = "ark-ec-divisors", git = "https://github.com/PolymeshAssociation/curve-trees", branch = "dart-v0.1.0" } -ark-dlog-gadget = { package = "ark-dlog-gadget", git = "https://github.com/PolymeshAssociation/curve-trees", branch = "dart-v0.1.0" } +curve_tree_bulletproofs = { package = "bulletproofs", git = "https://github.com/PolymeshAssociation/curve-trees", branch = "polymesh" } +curve_tree_relations = { package = "relations", git = "https://github.com/PolymeshAssociation/curve-trees", branch = "polymesh" } +ark-ec-divisors = { package = "ark-ec-divisors", git = "https://github.com/PolymeshAssociation/curve-trees", branch = "polymesh" } +ark-dlog-gadget = { package = "ark-dlog-gadget", git = "https://github.com/PolymeshAssociation/curve-trees", branch = "polymesh" } #dock_crypto_utils = { path = "../../crypto/utils" } #schnorr_pok = { path = "../../crypto/schnorr_pok" } -dock_crypto_utils = { git = "https://github.com/PolymeshAssociation/crypto", branch = "dart-v0.1.0" } -schnorr_pok = { git = "https://github.com/PolymeshAssociation/crypto", branch = "dart-v0.1.0" } +dock_crypto_utils = { git = "https://github.com/PolymeshAssociation/crypto", branch = "main" } +schnorr_pok = { git = "https://github.com/PolymeshAssociation/crypto", branch = "main" } #polymesh-dart = { path = "../../polymesh-dart" } #polymesh-dart-bp = { path = "../../polymesh-dart/dart-bp" } #polymesh-dart-common = { path = "../../polymesh-dart/dart-common" } -polymesh-dart = { git = "https://github.com/PolymeshAssociation/polymesh-dart", branch = "dart-v0.1.0" } -polymesh-dart-bp = { git = "https://github.com/PolymeshAssociation/polymesh-dart", branch = "dart-v0.1.0" } -polymesh-dart-common = { git = "https://github.com/PolymeshAssociation/polymesh-dart", branch = "dart-v0.1.0" } +polymesh-dart = { git = "https://github.com/PolymeshAssociation/polymesh-dart", branch = "prepare_v1_0" } +polymesh-dart-bp = { git = "https://github.com/PolymeshAssociation/polymesh-dart", branch = "prepare_v1_0" } +polymesh-dart-common = { git = "https://github.com/PolymeshAssociation/polymesh-dart", branch = "prepare_v1_0" } # Polymesh changes to Arkworks. #ark-serialize = { path = "../../arkworks-algebra/serialize" } @@ -57,18 +57,20 @@ polymesh-dart-common = { git = "https://github.com/PolymeshAssociation/polymesh- #ark-curve25519 = { path = "../../arkworks-algebra/curves/curve25519" } #ark-ed25519 = { path = "../../arkworks-algebra/curves/ed25519" } -ark-serialize = { git = "https://github.com/PolymeshAssociation/arkworks-algebra.git", branch = "dart-v0.1.0" } -ark-ec = { git = "https://github.com/PolymeshAssociation/arkworks-algebra.git", branch = "dart-v0.1.0" } -ark-host-msm = { git = "https://github.com/PolymeshAssociation/arkworks-algebra.git", branch = "dart-v0.1.0" } -#ark-host-msm-impl = { git = "https://github.com/PolymeshAssociation/arkworks-algebra.git", branch = "dart-v0.1.0" } -ark-ff = { git = "https://github.com/PolymeshAssociation/arkworks-algebra.git", branch = "dart-v0.1.0" } -ark-pallas = { git = "https://github.com/PolymeshAssociation/arkworks-algebra.git", branch = "dart-v0.1.0" } -ark-vesta = { git = "https://github.com/PolymeshAssociation/arkworks-algebra.git", branch = "dart-v0.1.0" } -ark-helios = { git = "https://github.com/PolymeshAssociation/arkworks-algebra.git", branch = "dart-v0.1.0" } -ark-selene = { git = "https://github.com/PolymeshAssociation/arkworks-algebra.git", branch = "dart-v0.1.0" } -ark-wei25519 = { git = "https://github.com/PolymeshAssociation/arkworks-algebra.git", branch = "dart-v0.1.0" } -ark-curve25519 = { git = "https://github.com/PolymeshAssociation/arkworks-algebra.git", branch = "dart-v0.1.0" } -ark-ed25519 = { git = "https://github.com/PolymeshAssociation/arkworks-algebra.git", branch = "dart-v0.1.0" } +ark-serialize = { git = "https://github.com/PolymeshAssociation/arkworks-algebra.git", branch = "polymesh-master" } +ark-ec = { git = "https://github.com/PolymeshAssociation/arkworks-algebra.git", branch = "polymesh-master" } +ark-host-msm = { git = "https://github.com/PolymeshAssociation/arkworks-algebra.git", branch = "polymesh-master" } +#ark-host-msm-impl = { git = "https://github.com/PolymeshAssociation/arkworks-algebra.git", branch = "polymesh-master" } +ark-ff = { git = "https://github.com/PolymeshAssociation/arkworks-algebra.git", branch = "polymesh-master" } +ark-pallas = { git = "https://github.com/PolymeshAssociation/arkworks-algebra.git", branch = "polymesh-master" } +ark-vesta = { git = "https://github.com/PolymeshAssociation/arkworks-algebra.git", branch = "polymesh-master" } +ark-helios = { git = "https://github.com/PolymeshAssociation/arkworks-algebra.git", branch = "polymesh-master" } +ark-selene = { git = "https://github.com/PolymeshAssociation/arkworks-algebra.git", branch = "polymesh-master" } +ark-wei25519 = { git = "https://github.com/PolymeshAssociation/arkworks-algebra.git", branch = "polymesh-master" } +ark-curve25519 = { git = "https://github.com/PolymeshAssociation/arkworks-algebra.git", branch = "polymesh-master" } +ark-ed25519 = { git = "https://github.com/PolymeshAssociation/arkworks-algebra.git", branch = "polymesh-master" } +ark-secp256k1 = { git = "https://github.com/PolymeshAssociation/arkworks-algebra.git", branch = "polymesh-master" } +ark-secq256k1 = { git = "https://github.com/PolymeshAssociation/arkworks-algebra.git", branch = "polymesh-master" } [features] default = ["current_release"] @@ -137,7 +139,7 @@ alloy = { version = "=2.1.1", default-features = false, features = [ ] } # DART Assets -polymesh-dart = { version = "0.1.0", default-features = false, features = [ +polymesh-dart = { version = "1.0.0", default-features = false, features = [ "std", "asm", "parallel", diff --git a/integration/src/confidential_assets_helper.rs b/integration/src/confidential_assets_helper.rs index d069c7a98b..d372351742 100644 --- a/integration/src/confidential_assets_helper.rs +++ b/integration/src/confidential_assets_helper.rs @@ -919,6 +919,7 @@ impl DartUserInner { 0, &did.0[..], params, + None, )?; let asset_state = DartUserAccountAssetState::new(asset_state, &self.keys); (proof, asset_state) @@ -1147,6 +1148,7 @@ impl DartUserInner { &self.keys, &leg_ref, &leg_enc, + amount, asset_state.as_mut(), account_lookup, )? @@ -1385,6 +1387,8 @@ impl DartUserInner { accept: bool, asset_and_amount: Option<(DartAssetId, DartBalance)>, ) -> Result { + let asset_id = asset_and_amount.map(|(asset_id, _)| asset_id); + let amount = asset_and_amount.map(|(_, amount)| amount); // Get the encrypted settlement leg from the chain. let leg_enc = tester .get_settlement_leg(leg_ref) @@ -1392,9 +1396,13 @@ impl DartUserInner { .ok_or_else(|| anyhow::anyhow!("Settlement leg not found"))?; // Try to decrypt the leg as the mediator - let leg = leg_enc - .decrypt(LegRole::mediator(mediator_id), &self.keys) - .unwrap(); + let (leg, _role) = leg_enc.try_decrypt_with_key( + &self.keys.enc, + None, + Some(&self.keys.acct.public), + asset_id, + amount, + )?; // Check the leg asset and amount if provided. if let Some((asset_id, amount)) = asset_and_amount { @@ -1409,12 +1417,30 @@ impl DartUserInner { } } - // Generate mediator affirmation proof. - let mut rng = rand::thread_rng(); - let med_enc = leg_enc.mediator_encryption(mediator_id)?; - Ok(MediatorAffirmationProof::new( - &mut rng, &leg_ref, &med_enc, &self.keys, 0, accept, - )?) + // Check if the asset id is revealed in the leg encryption. This is important for mediators to know if they need to look for their specific encryption entry. + if leg_enc.is_asset_id_revealed()? { + // Generate mediator affirmation proof. + let mut rng = rand::thread_rng(); + Ok(MediatorAffirmationProof::new_revealed( + &mut rng, + &leg_ref, + &self.keys, + mediator_id, + accept, + )?) + } else { + // Generate mediator affirmation proof. + let mut rng = rand::thread_rng(); + let med_enc = leg_enc.mediator_encryption(mediator_id)?; + Ok(MediatorAffirmationProof::new( + &mut rng, + &leg_ref, + &med_enc, + &self.keys, + mediator_id, + accept, + )?) + } } pub async fn mediator_affirmation( @@ -1515,6 +1541,7 @@ impl DartUserInner { // Try to decrypt the leg as the sender let leg = leg_enc.decrypt(LegRole::sender(), &self.keys)?; + let amount = leg.amount(); // Get our current account asset state. let asset_state = self @@ -1534,6 +1561,7 @@ impl DartUserInner { &self.keys, &leg_ref, &leg_enc, + amount, asset_state.as_mut(), account_lookup, )? @@ -1621,6 +1649,7 @@ impl DartUserInner { // Try to decrypt the leg as the receiver let leg = leg_enc.decrypt(LegRole::receiver(), &self.keys)?; let asset_id = leg.asset_id(); + let amount = leg.amount(); // Get our current account asset state. let asset_state = self @@ -1640,6 +1669,7 @@ impl DartUserInner { &self.keys, &leg_ref, &leg_enc, + amount, asset_state.as_mut(), account_lookup, )? @@ -2155,8 +2185,8 @@ pub struct DartTestAssetInner { pub issuer: DartUser, pub name: String, issuer_balance: DartBalance, - pub auditors: Vec, - pub mediators: Vec, + pub auditors: BTreeMap, + pub mediators: BTreeMap, pub total_supply: DartBalance, } @@ -2165,12 +2195,12 @@ impl DartTestAssetInner { account_tree: &AccountCurveTree, asset_issuer: &DartUser, name: &str, - mediators: &[&DartUser], - auditors: &[&DartUser], + mediator_users: &[&DartUser], + auditor_users: &[&DartUser], mint_amount: Option, ) -> Result { assert!( - (auditors.len() + mediators.len()) >= 1, + (auditor_users.len() + mediator_users.len()) >= 1, "At least one auditor or mediator is required" ); @@ -2180,18 +2210,22 @@ impl DartTestAssetInner { // Create mediator user and keys. let mut track_enc_keys = BTreeSet::new(); let mut auditor_keys = BTreeSet::new(); - for &auditor in auditors { + let mut auditors = BTreeMap::new(); + for &auditor in auditor_users { auditor.register_encryption_key().await?; let enc_key = auditor.public_keys().await.enc; track_enc_keys.insert(enc_key); auditor_keys.insert(enc_key); + auditors.insert(enc_key, auditor.clone()); } let mut mediator_keys = BTreeMap::new(); - for &mediator in mediators { + let mut mediators = BTreeMap::new(); + for &mediator in mediator_users { mediator.register_account().await?; let med_keys = mediator.public_keys().await; track_enc_keys.insert(med_keys.enc); mediator_keys.insert(med_keys.acct, med_keys.enc); + mediators.insert(med_keys.acct, mediator.clone()); } // Create the asset. @@ -2215,8 +2249,8 @@ impl DartTestAssetInner { name: name.to_string(), issuer: asset_issuer.clone(), issuer_balance: mint_amount, - mediators: mediators.into_iter().copied().cloned().collect(), - auditors: auditors.into_iter().copied().cloned().collect(), + mediators, + auditors, total_supply: mint_amount, }) } @@ -2225,17 +2259,17 @@ impl DartTestAssetInner { self.mediators.len() } - pub fn mediators(&self) -> Vec { + pub fn mediators(&self) -> BTreeMap { self.mediators.clone() } pub async fn asset_state(&self) -> Result { let mut auditors = Vec::new(); - for auditor in &self.auditors { - auditors.push(auditor.public_keys().await.enc); + for (enc, _auditor) in &self.auditors { + auditors.push(*enc); } let mut mediators = Vec::new(); - for mediator in &self.mediators { + for mediator in self.mediators.values() { let med_keys = mediator.public_keys().await; mediators.push((med_keys.acct, med_keys.enc)); } @@ -2350,7 +2384,7 @@ impl DartTestAsset { inner.issuer.clone() } - pub async fn mediators(&self) -> Vec { + pub async fn mediators(&self) -> BTreeMap { let inner = self.inner.read().await; inner.mediators() } @@ -2412,7 +2446,7 @@ pub struct DartSettlementLegState { pub receiver: DartUser, pub asset_id: DartAssetId, pub amount: DartBalance, - pub mediators: Vec, + pub mediators: BTreeMap, } impl DartSettlementLegState { @@ -2445,12 +2479,12 @@ impl DartSettlementLegState { } pub async fn mediators_affirm(&self, tester: &DartAssetTester, accept: bool) -> Result<()> { - for (id, mediator) in self.mediators.iter().enumerate() { + for (id, (acct, mediator)) in self.mediators.iter().enumerate() { log::debug!( - "Leg {:?}: Mediator {:?} affirming with keys {:?}, accept={}", + "Leg {:?}: Mediator {:?} affirming with account key {:?}, accept={}", self.leg_ref, id, - mediator.public_keys().await, + acct, accept ); mediator @@ -2591,7 +2625,7 @@ impl DartSettlementState { .await?; let mut mediators = Vec::new(); - for (id, mediator) in leg_state.mediators.iter().enumerate() { + for (id, mediator) in leg_state.mediators.values().enumerate() { let mediator_proof = mediator .mediator_affirmation_proof(tester, leg_ref, id as _, true, None) .await?; diff --git a/pallets/confidential-assets/src/benchmarking.rs b/pallets/confidential-assets/src/benchmarking.rs index 70bcb6af5f..fa86a0d052 100644 --- a/pallets/confidential-assets/src/benchmarking.rs +++ b/pallets/confidential-assets/src/benchmarking.rs @@ -333,7 +333,7 @@ benchmarks! { let account = user.new_account("Batching account", idx); accounts.push(account.keys()); - account_assets.push((account.keys(), asset.id, 0)); + account_assets.push((account.keys(), asset.id, 0, None)); } // Register all the accounts first. @@ -723,7 +723,7 @@ benchmarks! { off_chain.apply_new_leaves(); // Generate the sender's update counter proof. - let (proof, _) = leg.sender.sender_counter_update_proof(&off_chain, leg.leg_ref, leg.asset_id); + let (proof, _) = leg.sender.sender_counter_update_proof(&off_chain, leg.leg_ref, leg.asset_id, leg.amount); }: _(leg.sender.raw_origin(), proof) sender_revert_affirmation { @@ -783,6 +783,6 @@ benchmarks! { leg.mediator_affirmation(&off_chain, false); // Generate the receiver's revert affirmation proof. - let (proof, _) = leg.receiver.receiver_revert_affirmation_proof(&off_chain, leg.leg_ref, leg.asset_id); + let (proof, _) = leg.receiver.receiver_revert_affirmation_proof(&off_chain, leg.leg_ref, leg.asset_id, leg.amount); }: _(leg.receiver.raw_origin(), proof) } diff --git a/pallets/confidential-assets/src/lib.rs b/pallets/confidential-assets/src/lib.rs index 5ce1b8703d..079d398b4f 100644 --- a/pallets/confidential-assets/src/lib.rs +++ b/pallets/confidential-assets/src/lib.rs @@ -29,7 +29,7 @@ use frame_support::{ BoundedVec, PalletId, }; use frame_system::pallet_prelude::*; -use polymesh_dart::{AssetKeysLookup, ReceiverRevertAffirmationProof}; +use polymesh_dart::{AssetKeysLookup, AssetPkTLookup, ReceiverRevertAffirmationProof}; use polymesh_primitives::{ erc20::{Name, Symbol, MAX_DECIMALS, MAX_NAME_LEN, MAX_SYMBOL_LEN}, Balance, IdentityId, @@ -316,6 +316,15 @@ pub struct AssetDetails { pub data: BoundedVec, } +/// Represents a settlement leg with a revealed asset ID and its mediators' affirmation keys. +/// +/// This struct is used to store the asset ID and the corresponding mediators' affirmation keys for settlement legs where the asset ID is revealed. +#[derive(Clone, Encode, Decode, Debug, TypeInfo)] +pub struct LegMediatorKeys { + /// The mediators' affirmation keys for this asset. + pub mediators: BTreeSet, +} + pub use pallet::*; #[frame_support::pallet] @@ -717,6 +726,10 @@ pub mod pallet { InvalidAssetName, /// Invalid affirmation status transition. InvalidAffirmationStatusTransition, + /// Missing leg mediators. + MissingLegMediators, + /// Encryption key does not match the registered key for the account. + EncryptionKeyMismatch, } impl From for Error { @@ -1059,6 +1072,15 @@ pub mod pallet { OptionQuery, >; + /// For settlement legs with revealed asset IDs, this keeps track of the mediators' affirmation keys. + #[pallet::storage] + pub(crate) type LegMediators = StorageNMap< + _, + (NMapKey, NMapKey), + LegMediatorKeys, + OptionQuery, + >; + /// The WorkerSessionId for the current block. #[pallet::storage] pub(crate) type CurrentWorkerSessionId = @@ -1294,10 +1316,13 @@ pub mod pallet { let mut seen_asset = BTreeSet::new(); let mut registrations = Vec::with_capacity(proof.proofs.len()); for p in &proof.proofs { - if !seen_account.contains(&p.account.acct) { - seen_account.insert(p.account.acct.clone()); + if !seen_account.contains(&p.account) { + seen_account.insert(p.account.clone()); // Ensure the Confidential account is registered to the caller's identity. - Self::ensure_dart_account_owner(caller_did, &p.account.acct)?; + Self::ensure_dart_account_and_encryption_key_registered( + &p.account.acct, + &p.account.enc, + )?; } if !seen_asset.contains(&p.asset_id) { seen_asset.insert(p.asset_id); @@ -1316,8 +1341,10 @@ pub mod pallet { } // Verify the proof. + // TODO: Support force-transfer/freeze keys (`pk_t`) once the pallet tracks them per asset. Self::submit_and_wait(VerifyDartAssetRequest::BatchedAccountAssetRegistration { did: caller_did.into(), + asset_lookup: AssetPkTLookup::new(), proof, })?; @@ -1986,7 +2013,7 @@ impl Pallet { let root = Self::get_asset_curve_tree_root(root_block)?; Self::submit_and_wait(VerifyDartAssetRequest::CreateSettlement { root, - asset_lookup, + asset_lookup: asset_lookup.clone(), proof, })?; @@ -1997,7 +2024,23 @@ impl Pallet { let mut pending_affirmations = 0; for (leg_idx, leg) in proof_legs.iter().enumerate() { let leg_idx = leg_idx as LegId; - let mediators = leg.mediator_count().map_err(Error::::from)? as u32; + let mediators = if let Some(asset_id) = leg.revealed_asset_id() { + // When the asset ID is revealed, we need to save the mediator affirmation keys for the leg. + let asset_keys = asset_lookup + .assets + .get(&asset_id) + .ok_or(Error::::AssetMissing)?; + LegMediators::::insert( + (settlement_ref, leg_idx), + LegMediatorKeys { + mediators: asset_keys.mediators.clone(), + }, + ); + asset_keys.mediators.len() as u32 + } else { + leg.mediator_count(&asset_lookup) + .map_err(Error::::from)? as u32 + }; pending_affirmations = pending_affirmations .saturating_add(2) @@ -2075,9 +2118,17 @@ impl Pallet { pub fn base_execute_instant_settlement( proof: InstantSettlementProof, ) -> DispatchResult { + // Handle revealed asset ids, needed to check mediator affirmations in leg references. + let mut asset_lookup = AssetKeysLookup::new(); + for asset_id in proof.settlement.revealed_asset_ids() { + let keys = Keys::::get(asset_id).ok_or(Error::::AssetMissing)?; + let asset_state = AssetState { asset_id, keys }; + asset_lookup.add(asset_state); + } + // Ensure that the all the leg affirmations have the same settlement reference. ensure!( - proof.check_leg_references(), + proof.check_leg_references(&asset_lookup), Error::::BatchedSettlementInvalidLegRefs ); let settlement_ref = proof.settlement.settlement_ref(); @@ -2662,6 +2713,21 @@ impl Pallet { Ok(()) } + /// Ensure Confidential account is registered and linked to the given encryption key. + pub fn ensure_dart_account_and_encryption_key_registered( + account: &AccountPublicKey, + encryption: &EncryptionPublicKey, + ) -> Result> { + let identity_id = Self::ensure_dart_account_registered(account)?; + let account_encryption = + AccountEncryptionKey::::get(account).ok_or(Error::::EncryptionKeyMissing)?; + ensure!( + account_encryption == *encryption, + Error::::EncryptionKeyMismatch + ); + Ok(identity_id) + } + /// Ensure Confidential account is registered. pub fn ensure_dart_account_registered( account: &AccountPublicKey, @@ -2731,8 +2797,8 @@ impl Pallet { /// Ensure mediator encryption public keys are registered. pub fn ensure_mediators_registered(keys: &MediatorKeys) -> Result<(), Error> { - for key in keys { - Self::ensure_dart_account_registered(&key.0)?; + for (acct, enc) in keys { + Self::ensure_dart_account_and_encryption_key_registered(acct, enc)?; } Ok(()) } diff --git a/pallets/confidential-assets/src/settlement.rs b/pallets/confidential-assets/src/settlement.rs index 7542129a1b..517fb204f6 100644 --- a/pallets/confidential-assets/src/settlement.rs +++ b/pallets/confidential-assets/src/settlement.rs @@ -342,9 +342,26 @@ impl UpdateSettlementStatus { // Affirm as the mediator if they have not already affirmed. let pending = self.party_affirms(LegAffirmParty::Mediator(mediator_id), accept, false)?; + // Retrieve the encrypted settlement leg for further processing. + let leg_enc = self.get_leg()?; + + let mediator = if proof.is_asset_id_revealed() { + let mediators = LegMediators::::get((self.settlement_ref, self.leg_id)) + .ok_or(Error::::MissingLegMediators)?; + let mediator = mediators + .mediators + .iter() + .nth(mediator_id as usize) + .ok_or(Error::::WrongMediatorId)?; + Some(mediator.clone()) + } else { + None + }; + // verify the proof. Pallet::::submit_and_wait(VerifyDartAssetRequest::MediatorAffirmation { - leg_enc: self.get_leg()?, + leg_enc, + mediator, proof, })?; diff --git a/pallets/confidential-assets/src/testing.rs b/pallets/confidential-assets/src/testing.rs index 6ee6a544b5..04735d3ac7 100644 --- a/pallets/confidential-assets/src/testing.rs +++ b/pallets/confidential-assets/src/testing.rs @@ -289,6 +289,7 @@ impl DartUserInner { did: self.did().into(), asset_id, counter: 0, + pk_t: None, }; if let GenerateDartProofResponse::AccountAssetRegistration { proof, @@ -489,7 +490,7 @@ impl DartUserInner { off_chain: &OffchainProverState, leg_ref: LegRef, asset_id: ConfidentialAssetId, - _amount: DartBalance, + amount: DartBalance, ) -> ( ReceiverAffirmationProof, &mut AccountAssetState, @@ -510,6 +511,7 @@ impl DartUserInner { keys: self.keys.clone(), leg_ref, leg_enc: leg_enc.clone(), + amount, path: off_chain .account_tree .get_path_and_root(current_state_commitment.as_leaf_value().expect("leaf path")) @@ -725,6 +727,7 @@ impl DartUserInner { off_chain: &OffchainProverState, leg_ref: LegRef, asset_id: ConfidentialAssetId, + amount: DartBalance, ) -> ( ReceiverRevertAffirmationProof, &mut AccountAssetState, @@ -745,6 +748,7 @@ impl DartUserInner { keys: self.keys.clone(), leg_ref, leg_enc: leg_enc.clone(), + amount, path: off_chain .account_tree .get_path_and_root(current_state_commitment.as_leaf_value().expect("leaf path")) @@ -768,10 +772,11 @@ impl DartUserInner { off_chain: &OffchainProverState, leg_ref: LegRef, asset_id: ConfidentialAssetId, + amount: DartBalance, ) { let origin = self.origin(); let (proof, account_state) = - self.receiver_revert_affirmation_proof(off_chain, leg_ref, asset_id); + self.receiver_revert_affirmation_proof(off_chain, leg_ref, asset_id, amount); assert_ok!(Pallet::::receiver_revert_affirmation(origin, proof)); @@ -786,6 +791,7 @@ impl DartUserInner { off_chain: &OffchainProverState, leg_ref: LegRef, asset_id: ConfidentialAssetId, + amount: DartBalance, ) -> ( SenderCounterUpdateProof, &mut AccountAssetState, @@ -806,6 +812,7 @@ impl DartUserInner { keys: self.keys.clone(), leg_ref, leg_enc: leg_enc.clone(), + amount, path: off_chain .account_tree .get_path_and_root(current_state_commitment.as_leaf_value().expect("leaf path")) @@ -829,9 +836,11 @@ impl DartUserInner { off_chain: &OffchainProverState, leg_ref: LegRef, asset_id: ConfidentialAssetId, + amount: DartBalance, ) { let origin = self.origin(); - let (proof, account_state) = self.sender_counter_update_proof(off_chain, leg_ref, asset_id); + let (proof, account_state) = + self.sender_counter_update_proof(off_chain, leg_ref, asset_id, amount); assert_ok!(Pallet::::sender_update_counter(origin, proof)); @@ -1177,13 +1186,14 @@ impl DartUser { off_chain: &OffchainProverState, leg_ref: LegRef, asset_id: ConfidentialAssetId, + amount: DartBalance, ) -> ( ReceiverRevertAffirmationProof, AccountAssetState, ) { let mut inner = self.0.borrow_mut(); let (proof, account_state) = - inner.receiver_revert_affirmation_proof(off_chain, leg_ref, asset_id); + inner.receiver_revert_affirmation_proof(off_chain, leg_ref, asset_id, amount); (proof, account_state.clone()) } @@ -1193,9 +1203,10 @@ impl DartUser { off_chain: &OffchainProverState, leg_ref: LegRef, asset_id: ConfidentialAssetId, + amount: DartBalance, ) { let mut inner = self.0.borrow_mut(); - inner.receiver_revert_affirmation(off_chain, leg_ref, asset_id); + inner.receiver_revert_affirmation(off_chain, leg_ref, asset_id, amount); } pub fn sender_counter_update_proof( @@ -1203,13 +1214,14 @@ impl DartUser { off_chain: &OffchainProverState, leg_ref: LegRef, asset_id: ConfidentialAssetId, + amount: DartBalance, ) -> ( SenderCounterUpdateProof, AccountAssetState, ) { let mut inner = self.0.borrow_mut(); let (proof, account_state) = - inner.sender_counter_update_proof(off_chain, leg_ref, asset_id); + inner.sender_counter_update_proof(off_chain, leg_ref, asset_id, amount); (proof, account_state.clone()) } @@ -1219,9 +1231,10 @@ impl DartUser { off_chain: &OffchainProverState, leg_ref: LegRef, asset_id: ConfidentialAssetId, + amount: DartBalance, ) { let mut inner = self.0.borrow_mut(); - inner.sender_counter_update(off_chain, leg_ref, asset_id); + inner.sender_counter_update(off_chain, leg_ref, asset_id, amount); } pub fn mediator_affirmation_proof( diff --git a/worker/modules/dart/v1/polymesh-worker-protocol-dart-v1.config.json b/worker/modules/dart/v1/polymesh-worker-protocol-dart-v1.config.json index ee8426c081..1dbed005ab 100644 --- a/worker/modules/dart/v1/polymesh-worker-protocol-dart-v1.config.json +++ b/worker/modules/dart/v1/polymesh-worker-protocol-dart-v1.config.json @@ -12,22 +12,22 @@ { "module_kind": "PolkaVM", "module_version": 2, - "code_hash": "0xd6d60dcfd38bea1962699e3ede72475aa28fa3787a56ee467554b817b350b29f" + "code_hash": "0xeffbfd9ef03b485e7e01e7fd20296fffd8962592c0dc82db9ecc0c59eec28a2e" }, { "module_kind": "PolkaVM", "module_version": 1, - "code_hash": "0x13b5562d5f3b61f559924ac7a27f448049b8d601278b81ad596928da2db2c15b" + "code_hash": "0xa92ed7e65b26fa51a7e4e73ae30591238aae6c72b579317263a12909697d0f58" }, { "module_kind": "Wasm", "module_version": 2, - "code_hash": "0xc21ed003e1cd9e7f1254e4a127c457b331217e0d248a7603b77af1655ac517bc" + "code_hash": "0xa30ab9f51b5f00294684c38448f53d7b0781257e6a06fc2f684070eea72e0611" }, { "module_kind": "Wasm", "module_version": 1, - "code_hash": "0x887d9a9c62402698d97d142e5bad5285b6e2b234887c7eee536b024fa88f910b" + "code_hash": "0xe994e459cc1393d7fc354c3771d387b990d790d2964faa9c64cb8b4ac93ffed2" }, { "module_kind": "Native", diff --git a/worker/modules/dart/v1/polymesh-worker-protocol-dart-v1.config.scale b/worker/modules/dart/v1/polymesh-worker-protocol-dart-v1.config.scale index 799683d6f1..0b8b10fbb6 100644 Binary files a/worker/modules/dart/v1/polymesh-worker-protocol-dart-v1.config.scale and b/worker/modules/dart/v1/polymesh-worker-protocol-dart-v1.config.scale differ diff --git a/worker/modules/dart/v1/polymesh-worker-protocol-dart-v1.polkavm b/worker/modules/dart/v1/polymesh-worker-protocol-dart-v1.polkavm index 2f24290e53..2ad1c2a959 100644 Binary files a/worker/modules/dart/v1/polymesh-worker-protocol-dart-v1.polkavm and b/worker/modules/dart/v1/polymesh-worker-protocol-dart-v1.polkavm differ diff --git a/worker/modules/dart/v1/polymesh-worker-protocol-dart-v1.polkavm.zst b/worker/modules/dart/v1/polymesh-worker-protocol-dart-v1.polkavm.zst index 5e8a4ec138..9de34a23a0 100644 Binary files a/worker/modules/dart/v1/polymesh-worker-protocol-dart-v1.polkavm.zst and b/worker/modules/dart/v1/polymesh-worker-protocol-dart-v1.polkavm.zst differ diff --git a/worker/modules/dart/v1/polymesh-worker-protocol-dart-v1.testing.polkavm b/worker/modules/dart/v1/polymesh-worker-protocol-dart-v1.testing.polkavm index 34cb993519..898b6d7642 100644 Binary files a/worker/modules/dart/v1/polymesh-worker-protocol-dart-v1.testing.polkavm and b/worker/modules/dart/v1/polymesh-worker-protocol-dart-v1.testing.polkavm differ diff --git a/worker/modules/dart/v1/polymesh-worker-protocol-dart-v1.testing.polkavm.zst b/worker/modules/dart/v1/polymesh-worker-protocol-dart-v1.testing.polkavm.zst index 25e502ca59..6f3a3ca063 100644 Binary files a/worker/modules/dart/v1/polymesh-worker-protocol-dart-v1.testing.polkavm.zst and b/worker/modules/dart/v1/polymesh-worker-protocol-dart-v1.testing.polkavm.zst differ diff --git a/worker/modules/dart/v1/polymesh-worker-protocol-dart-v1.testing.wasm b/worker/modules/dart/v1/polymesh-worker-protocol-dart-v1.testing.wasm index a2beb2748c..b181c262ac 100755 Binary files a/worker/modules/dart/v1/polymesh-worker-protocol-dart-v1.testing.wasm and b/worker/modules/dart/v1/polymesh-worker-protocol-dart-v1.testing.wasm differ diff --git a/worker/modules/dart/v1/polymesh-worker-protocol-dart-v1.testing.wasm.zst b/worker/modules/dart/v1/polymesh-worker-protocol-dart-v1.testing.wasm.zst index 0599dabfbc..b9ac1ffac9 100644 Binary files a/worker/modules/dart/v1/polymesh-worker-protocol-dart-v1.testing.wasm.zst and b/worker/modules/dart/v1/polymesh-worker-protocol-dart-v1.testing.wasm.zst differ diff --git a/worker/modules/dart/v1/polymesh-worker-protocol-dart-v1.wasm b/worker/modules/dart/v1/polymesh-worker-protocol-dart-v1.wasm index 853c587145..b8236598e7 100755 Binary files a/worker/modules/dart/v1/polymesh-worker-protocol-dart-v1.wasm and b/worker/modules/dart/v1/polymesh-worker-protocol-dart-v1.wasm differ diff --git a/worker/modules/dart/v1/polymesh-worker-protocol-dart-v1.wasm.zst b/worker/modules/dart/v1/polymesh-worker-protocol-dart-v1.wasm.zst index 6649999b0b..558f89ce58 100644 Binary files a/worker/modules/dart/v1/polymesh-worker-protocol-dart-v1.wasm.zst and b/worker/modules/dart/v1/polymesh-worker-protocol-dart-v1.wasm.zst differ diff --git a/worker/protocol/dart-v1/src/testing.rs b/worker/protocol/dart-v1/src/testing.rs index 0b5f02e3ab..9d7fce05af 100644 --- a/worker/protocol/dart-v1/src/testing.rs +++ b/worker/protocol/dart-v1/src/testing.rs @@ -49,10 +49,11 @@ pub enum GenerateDartProofRequest { did: Did, asset_id: AssetId, counter: u16, + pk_t: Option, }, BatchedAccountAssetRegistration { did: Did, - account_assets: Vec<(AccountKeys, AssetId, u16)>, + account_assets: Vec<(AccountKeys, AssetId, u16, Option)>, }, MintAsset { keys: AccountKeys, @@ -77,6 +78,7 @@ pub enum GenerateDartProofRequest { keys: AccountKeys, leg_ref: LegRef, leg_enc: LegEncrypted, + amount: Balance, path: AccountLeafPathAndRoot, account_state: AccountAssetState, }, @@ -99,6 +101,7 @@ pub enum GenerateDartProofRequest { keys: AccountKeys, leg_ref: LegRef, leg_enc: LegEncrypted, + amount: Balance, path: AccountLeafPathAndRoot, account_state: AccountAssetState, }, @@ -114,6 +117,7 @@ pub enum GenerateDartProofRequest { keys: AccountKeys, leg_ref: LegRef, leg_enc: LegEncrypted, + amount: Balance, path: AccountLeafPathAndRoot, account_state: AccountAssetState, }, @@ -198,10 +202,11 @@ impl GenerateDartProofRequest { did, asset_id, counter, + pk_t, } => { let params = get_account_curve_tree_parameters(); let (proof, account_state) = AccountAssetRegistrationProof::new( - &mut rng, &keys, asset_id, counter, &did, params, + &mut rng, &keys, asset_id, counter, &did, params, pk_t, )?; Ok(GenerateDartProofResponse::AccountAssetRegistration { proof, @@ -278,6 +283,7 @@ impl GenerateDartProofRequest { keys, leg_ref, leg_enc, + amount, path, mut account_state, } => { @@ -286,6 +292,7 @@ impl GenerateDartProofRequest { &keys, &leg_ref, &leg_enc, + amount, &mut account_state, path, )?; @@ -380,6 +387,7 @@ impl GenerateDartProofRequest { keys, leg_ref, leg_enc, + amount, path, mut account_state, } => { @@ -388,6 +396,7 @@ impl GenerateDartProofRequest { &keys, &leg_ref, &leg_enc, + amount, &mut account_state, path, )?; @@ -422,6 +431,7 @@ impl GenerateDartProofRequest { keys, leg_ref, leg_enc, + amount, path, mut account_state, } => { @@ -430,6 +440,7 @@ impl GenerateDartProofRequest { &keys, &leg_ref, &leg_enc, + amount, &mut account_state, path, )?; diff --git a/worker/protocol/dart-v1/src/verify.rs b/worker/protocol/dart-v1/src/verify.rs index e6c95a32a1..9c484a7854 100644 --- a/worker/protocol/dart-v1/src/verify.rs +++ b/worker/protocol/dart-v1/src/verify.rs @@ -10,15 +10,15 @@ use polymesh_dart::curve_tree::get_account_curve_tree_parameters; use polymesh_dart::{ AccountPublicKey, AccountPublicKeys, AccountRegistrationProof, AccountStateCommitment, AccountStateNullifier, AccountStateUpdate, AssetId, AssetKeysLookup, AssetMintingProof, - Balance, BatchedAccountAssetRegistrationProof, BatchedFeeAccountRegistrationProof, - BatchedFeeAccountTopupProof, DartLimits, EncryptionKeyRegistrationProof, EncryptionPublicKey, - Error as DartError, FeeAccountPaymentProof, FeeAccountRegistrationProof, - FeeAccountStateCommitment, FeeAccountStateNullifier, FeeAccountTopupProof, - InstantReceiverAffirmationProof, InstantSenderAffirmationProof, LegEncrypted, LegRef, - MediatorAffirmationProof, PolymeshLimits, ProofHash, ReceiverAffirmationProof, - ReceiverClaimProof, ReceiverRevertAffirmationProof, SenderAffirmationProof, - SenderCounterUpdateProof, SenderRevertAffirmationProof, SettlementProof, SettlementRef, - blake2_256, + AssetPkTLookup, Balance, BatchedAccountAssetRegistrationProof, + BatchedFeeAccountRegistrationProof, BatchedFeeAccountTopupProof, DartLimits, + EncryptionKeyRegistrationProof, EncryptionPublicKey, Error as DartError, + FeeAccountPaymentProof, FeeAccountRegistrationProof, FeeAccountStateCommitment, + FeeAccountStateNullifier, FeeAccountTopupProof, InstantReceiverAffirmationProof, + InstantSenderAffirmationProof, LegEncrypted, LegRef, MediatorAffirmationProof, PolymeshLimits, + ProofHash, ReceiverAffirmationProof, ReceiverClaimProof, ReceiverRevertAffirmationProof, + SenderAffirmationProof, SenderCounterUpdateProof, SenderRevertAffirmationProof, + SettlementProof, SettlementRef, blake2_256, }; use polymesh_dart_common::NullifierSkGenCounter; use polymesh_worker_common::{ProtocolError, WorkSeed, WorkerSessionId}; @@ -38,6 +38,7 @@ pub enum VerifyDartAssetRequest { }, BatchedAccountAssetRegistration { did: Did, + asset_lookup: AssetPkTLookup, proof: BatchedAccountAssetRegistrationProof, }, MintAsset { @@ -62,6 +63,7 @@ pub enum VerifyDartAssetRequest { }, MediatorAffirmation { leg_enc: LegEncrypted, + mediator: Option, proof: MediatorAffirmationProof, }, SenderCounterUpdate { @@ -143,10 +145,14 @@ impl VerifyDartAssetRequest { Self::EncryptionKeyRegistration { did, proof } => { proof.verify(did)?; } - Self::BatchedAccountAssetRegistration { did, proof } => { + Self::BatchedAccountAssetRegistration { + did, + proof, + asset_lookup, + } => { let mut rng = Rng::from_seed(seed); let params = get_account_curve_tree_parameters(); - proof.batched_verify(did, ¶ms, &mut rng)?; + proof.batched_verify(did, ¶ms, &mut rng, &asset_lookup)?; } Self::MintAsset { did, root, proof } => { let mut rng = Rng::from_seed(seed); @@ -192,10 +198,21 @@ impl VerifyDartAssetRequest { let mut rng = Rng::from_seed(seed); proof.verify(&leg_enc, root, &mut rng)?; } - Self::MediatorAffirmation { leg_enc, proof } => { + Self::MediatorAffirmation { + leg_enc, + mediator: None, + proof, + } => { let med_enc = leg_enc.mediator_encryption(proof.key_index)?; proof.verify(&med_enc)?; } + Self::MediatorAffirmation { + leg_enc: _, + mediator: Some(mediator), + proof, + } => { + proof.verify_revealed(mediator)?; + } Self::SenderCounterUpdate { leg_enc, root, @@ -271,7 +288,7 @@ impl VerifyDartAssetRequest { keys: proof.keys.clone(), }) } - Self::BatchedAccountAssetRegistration { did, proof } => { + Self::BatchedAccountAssetRegistration { did, proof, .. } => { let registrations = proof .proofs .iter() diff --git a/worker/tester/src/main.rs b/worker/tester/src/main.rs index 738866c534..f9034a7f99 100644 --- a/worker/tester/src/main.rs +++ b/worker/tester/src/main.rs @@ -1,7 +1,7 @@ use codec::{Decode, Encode}; use polymesh_dart::{ - AccountAssetRegistrationProof, BatchedAccountAssetRegistrationProof, LegEncrypted, - PolymeshLimits, SenderAffirmationProof, curve_tree::AccountTreeConfig, + AccountAssetRegistrationProof, AssetPkTLookup, BatchedAccountAssetRegistrationProof, + LegEncrypted, PolymeshLimits, SenderAffirmationProof, curve_tree::AccountTreeConfig, }; use polymesh_worker::{backend::*, *}; use polymesh_worker_common::{PROTOCOL_PDART, ResolvedInitializationMethod}; @@ -157,6 +157,7 @@ pub fn main() { "verify_register_account_asset_proof", DartWorkRequest::VerifyProof(VerifyDartAssetRequest::BatchedAccountAssetRegistration { did, + asset_lookup: AssetPkTLookup::new(), proof: BatchedAccountAssetRegistrationProof { proofs: vec![proof] .try_into()