diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 5019ac8..7ed36d8 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -61,7 +61,7 @@ jobs: channel: [stable] target: # MSVC - - i686-pc-windows-msvc + # - i686-pc-windows-msvc - x86_64-pc-windows-msvc # GNU: # You typically only need to test Windows GNU if you're @@ -86,7 +86,7 @@ jobs: ~/.cargo/bin target key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }}-${{ matrix.target }} - + - uses: actions/download-artifact@v1 with: name: cross-apple-darwin @@ -106,6 +106,7 @@ jobs: channel: [stable] target: # macOS + - aarch64-apple-darwin - x86_64-apple-darwin # iOS # - aarch64-apple-ios @@ -165,8 +166,8 @@ jobs: # - armv7-unknown-linux-musleabihf # - i586-unknown-linux-gnu # - i586-unknown-linux-musl - - i686-unknown-linux-gnu - - i686-unknown-linux-musl + # - i686-unknown-linux-gnu + # - i686-unknown-linux-musl # - mips-unknown-linux-gnu # - mips-unknown-linux-musl # - mips64-unknown-linux-gnuabi64 diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index e0b9c20..f2485f3 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -41,7 +41,7 @@ jobs: matrix: target: # MSVC - - i686-pc-windows-msvc + # - i686-pc-windows-msvc - x86_64-pc-windows-msvc # GNU # - i686-pc-windows-gnu @@ -94,6 +94,7 @@ jobs: matrix: target: # macOS + - aarch64-apple-darwin - x86_64-apple-darwin # iOS # - aarch64-apple-ios @@ -150,10 +151,10 @@ jobs: # - wasm32-unknown-emscripten # Linux - aarch64-unknown-linux-gnu - - arm-unknown-linux-gnueabi + # - arm-unknown-linux-gnueabi # - armv7-unknown-linux-gnueabihf - - i686-unknown-linux-gnu - - i686-unknown-linux-musl + # - i686-unknown-linux-gnu + # - i686-unknown-linux-musl # - mips-unknown-linux-gnu # - mips64-unknown-linux-gnuabi64 # - mips64el-unknown-linux-gnuabi64 diff --git a/.gitignore b/.gitignore index ed90cad..fc6a50f 100644 --- a/.gitignore +++ b/.gitignore @@ -60,3 +60,6 @@ atlassian-ide-plugin.xml .idea/replstate.xml /.idea /.undodir # Vim Workspaces + +# VS Code +.vscode/* diff --git a/Cargo.lock b/Cargo.lock index ce275a6..75909df 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -29,24 +29,29 @@ checksum = "ee2a4ec343196209d6594e19543ae87a39f96d5534d7174822a3ad825dd6ed7e" [[package]] name = "aead" -version = "0.3.2" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fc95d1bdb8e6666b2b217308eeeb09f2d6728d104be3e31916cc74d15420331" +checksum = "0b613b8e1e3cf911a086f53f03bf286f52fd7a7258e4fa606f0ef220d39d8877" dependencies = [ "generic-array 0.14.4", ] [[package]] name = "ahash" -version = "0.4.7" +version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "739f4a8db6605981345c5654f3a85b056ce52f37a39d34da03f25bf2151ea16e" +checksum = "43bb833f0bf979d8475d38fbf09ed3b8a55e1885fe93ad3f93239fc6a4f17b98" +dependencies = [ + "getrandom 0.2.2", + "once_cell", + "version_check", +] [[package]] name = "aho-corasick" -version = "0.7.15" +version = "0.7.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7404febffaa47dac81aa44dba71523c9d069b1bdc50a77db41195149e17f68e5" +checksum = "1e37cfd5e7657ada45f742d6e99ca5788580b5c529dc78faf11ece6dc702656f" dependencies = [ "memchr", ] @@ -76,182 +81,250 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "afddf7f520a80dbf76e6f50a35bca42a2331ef227a28b3b6dc5c2e2338d114b1" [[package]] -name = "approx" -version = "0.3.2" +name = "ark-bls12-381" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0e60b75072ecd4168020818c0107f2857bb6c4e64252d8d3983f6263b40a5c3" +checksum = "65be532f9dd1e98ad0150b037276cde464c6f371059e6dd02c0222395761f6aa" dependencies = [ - "num-traits", + "ark-ec", + "ark-ff", + "ark-std", ] [[package]] -name = "arrayref" -version = "0.3.6" +name = "ark-bn254" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4c527152e37cf757a3f78aae5a06fbeefdb07ccc535c980a3208ee3060dd544" +checksum = "ea691771ebbb28aea556c044e2e5c5227398d840cee0c34d4d20fa8eb2689e8c" +dependencies = [ + "ark-ec", + "ark-ff", + "ark-std", +] [[package]] -name = "arrayvec" -version = "0.4.12" +name = "ark-crypto-primitives" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd9fd44efafa8690358b7408d253adf110036b88f55672a933f01d616ad9b1b9" +checksum = "ff773c0ef8c655c98071d3026a63950798a66b2f45baef22d8334c1756f1bd18" +dependencies = [ + "ark-ec", + "ark-ff", + "ark-nonnative-field", + "ark-r1cs-std", + "ark-relations", + "ark-serialize", + "ark-snark", + "ark-std", + "blake2", + "derivative", + "digest 0.9.0", + "tracing", +] + +[[package]] +name = "ark-ec" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dea978406c4b1ca13c2db2373b05cc55429c3575b8b21f1b9ee859aa5b03dd42" dependencies = [ - "nodrop", + "ark-ff", + "ark-serialize", + "ark-std", + "derivative", + "num-traits", + "zeroize", ] [[package]] -name = "arrayvec" -version = "0.5.2" +name = "ark-ed-on-bls12-381" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23b62fc65de8e4e7f52534fb52b0f3ed04746ae267519eef2a83941e8085068b" +checksum = "43b7ada17db3854f5994e74e60b18e10e818594935ee7e1d329800c117b32970" +dependencies = [ + "ark-bls12-381", + "ark-ec", + "ark-ff", + "ark-r1cs-std", + "ark-std", +] [[package]] -name = "arrayvec" -version = "0.7.0" +name = "ark-ed-on-bn254" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a2f58b0bb10c380af2b26e57212856b8c9a59e0925b4c20f4a174a49734eaf7" +checksum = "7fdc786b806fdbff4abebb08ec2fcb50cfe3941918e57120ab121228452903fd" +dependencies = [ + "ark-bn254", + "ark-ec", + "ark-ff", + "ark-r1cs-std", + "ark-std", +] [[package]] -name = "async-attributes" -version = "1.1.2" +name = "ark-ff" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3203e79f4dd9bdda415ed03cf14dae5a2bf775c683a00f94e9cd1faf0f596e5" +checksum = "6b3235cc41ee7a12aaaf2c575a2ad7b46713a8a50bda2fc3b003a04845c05dd6" +dependencies = [ + "ark-ff-asm", + "ark-ff-macros", + "ark-serialize", + "ark-std", + "derivative", + "num-bigint 0.4.3", + "num-traits", + "paste", + "rustc_version 0.3.3", + "zeroize", +] + +[[package]] +name = "ark-ff-asm" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db02d390bf6643fb404d3d22d31aee1c4bc4459600aef9113833d17e786c6e44" dependencies = [ "quote", "syn", ] [[package]] -name = "async-channel" -version = "1.5.1" +name = "ark-ff-macros" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59740d83946db6a5af71ae25ddf9562c2b176b2ca42cf99a455f09f4a220d6b9" +checksum = "db2fd794a08ccb318058009eefdf15bcaaaaf6f8161eb3345f907222bac38b20" dependencies = [ - "concurrent-queue", - "event-listener", - "futures-core", + "num-bigint 0.4.3", + "num-traits", + "quote", + "syn", ] [[package]] -name = "async-executor" -version = "1.4.0" +name = "ark-groth16" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb877970c7b440ead138f6321a3b5395d6061183af779340b65e20c0fede9146" +checksum = "38f8fff7468e947130b5caf9bdd27de8b913cf30e15104b4f0cd301726b3d897" dependencies = [ - "async-task", - "concurrent-queue", - "fastrand", - "futures-lite", - "once_cell", - "vec-arena", + "ark-crypto-primitives", + "ark-ec", + "ark-ff", + "ark-poly", + "ark-relations", + "ark-serialize", + "ark-std", ] [[package]] -name = "async-global-executor" -version = "2.0.2" +name = "ark-marlin" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9586ec52317f36de58453159d48351bc244bc24ced3effc1fce22f3d48664af6" +checksum = "caa8510faa8e64f0a6841ee4b58efe2d56f7a80d86fa0ce9891bbb3aa20166d9" dependencies = [ - "async-channel", - "async-executor", - "async-io", - "async-mutex", - "blocking", - "futures-lite", - "num_cpus", - "once_cell", + "ark-ff", + "ark-poly", + "ark-poly-commit", + "ark-relations", + "ark-serialize", + "ark-std", + "derivative", + "digest 0.9.0", + "rand_chacha 0.3.0", ] [[package]] -name = "async-io" -version = "1.3.1" +name = "ark-nonnative-field" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9315f8f07556761c3e48fec2e6b276004acf426e6dc068b2c2251854d65ee0fd" +checksum = "440ad4569974910adbeb84422b7e622b79e08d27142afd113785b7fcfb446186" dependencies = [ - "concurrent-queue", - "fastrand", - "futures-lite", - "libc", - "log", - "nb-connect", - "once_cell", - "parking", - "polling", - "vec-arena", - "waker-fn", - "winapi", + "ark-ec", + "ark-ff", + "ark-r1cs-std", + "ark-relations", + "ark-std", + "derivative", + "num-bigint 0.4.3", + "num-integer", + "num-traits", + "tracing", ] [[package]] -name = "async-lock" -version = "2.3.0" +name = "ark-poly" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1996609732bde4a9988bc42125f55f2af5f3c36370e27c778d5191a4a1b63bfb" +checksum = "7b0f78f47537c2f15706db7e98fe64cc1711dbf9def81218194e17239e53e5aa" dependencies = [ - "event-listener", + "ark-ff", + "ark-serialize", + "ark-std", + "derivative", + "hashbrown 0.11.2", ] [[package]] -name = "async-mutex" -version = "1.4.0" +name = "ark-poly-commit" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "479db852db25d9dbf6204e6cb6253698f175c15726470f78af0d918e99d6156e" +checksum = "a71ddfa72bad1446cab7bbecb6018dbbdc9abcbc3a0065483ae5186ad2a64dcd" dependencies = [ - "event-listener", + "ark-ec", + "ark-ff", + "ark-poly", + "ark-serialize", + "ark-std", + "derivative", + "digest 0.9.0", + "tracing", ] [[package]] -name = "async-std" -version = "1.9.0" +name = "ark-r1cs-std" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9f06685bad74e0570f5213741bea82158279a4103d988e57bfada11ad230341" +checksum = "22e8fdacb1931f238a0d866ced1e916a49d36de832fd8b83dc916b718ae72893" dependencies = [ - "async-attributes", - "async-channel", - "async-global-executor", - "async-io", - "async-lock", - "crossbeam-utils", - "futures-channel", - "futures-core", - "futures-io", - "futures-lite", - "gloo-timers", - "kv-log-macro", - "log", - "memchr", - "num_cpus", - "once_cell", - "pin-project-lite", - "pin-utils", - "slab", - "wasm-bindgen-futures", + "ark-ec", + "ark-ff", + "ark-relations", + "ark-std", + "derivative", + "num-bigint 0.4.3", + "num-traits", + "tracing", ] [[package]] -name = "async-task" -version = "4.0.3" +name = "ark-relations" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e91831deabf0d6d7ec49552e489aed63b7456a7a3c46cff62adad428110b0af0" +checksum = "4cba4c1c99792a6834bd97f7fd76578ec2cd58d2afc5139a17e1d1bec65b38f6" +dependencies = [ + "ark-ff", + "ark-std", + "tracing", + "tracing-subscriber 0.2.25", +] [[package]] -name = "async-tls" -version = "0.11.0" +name = "ark-serialize" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f23d769dbf1838d5df5156e7b1ad404f4c463d1ac2c6aeb6cd943630f8a8400" +checksum = "1d6c2b318ee6e10f8c2853e73a83adc0ccb88995aa978d8a3408d492ab2ee671" dependencies = [ - "futures-core", - "futures-io", - "rustls", - "webpki", - "webpki-roots", + "ark-serialize-derive", + "ark-std", + "digest 0.9.0", ] [[package]] -name = "async-trait" -version = "0.1.42" +name = "ark-serialize-derive" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d3a45e77e34375a7923b1e8febb049bb011f064714a8e17a1a616fef01da13d" +checksum = "8dd4e5f0bf8285d5ed538d27fab7411f3e297908fd93c62195de8bee3f199e82" dependencies = [ "proc-macro2", "quote", @@ -259,10 +332,143 @@ dependencies = [ ] [[package]] -name = "atomic-waker" -version = "1.0.0" +name = "ark-snark" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0dc3dff1a5f67a9c0b34df32b079752d8dd17f1e9d06253da0453db6c1b7cc8a" +dependencies = [ + "ark-ff", + "ark-relations", + "ark-std", +] + +[[package]] +name = "ark-std" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1df2c09229cbc5a028b1d70e00fdb2acee28b1055dfb5ca73eea49c5a25c4e7c" +dependencies = [ + "num-traits", + "rand 0.8.3", +] + +[[package]] +name = "arkworks-circuits" +version = "0.4.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eb921437dfdb2cf9ab56608621d20d31ef098f58cd25890682ed25eea6e9575f" +dependencies = [ + "ark-bls12-381", + "ark-bn254", + "ark-crypto-primitives", + "ark-ec", + "ark-ed-on-bls12-381", + "ark-ed-on-bn254", + "ark-ff", + "ark-groth16", + "ark-marlin", + "ark-poly", + "ark-poly-commit", + "ark-r1cs-std", + "ark-relations", + "ark-serialize", + "ark-snark", + "ark-std", + "arkworks-gadgets", + "arkworks-utils", + "blake2", + "digest 0.9.0", + "ethabi", + "hex-literal", + "tiny-keccak", +] + +[[package]] +name = "arkworks-gadgets" +version = "0.4.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7d33dbfa51845f74f31ca1bf7a91384591674ddf22e02046a6778384e65d37e" +dependencies = [ + "ark-crypto-primitives", + "ark-ec", + "ark-ff", + "ark-groth16", + "ark-marlin", + "ark-poly", + "ark-poly-commit", + "ark-r1cs-std", + "ark-relations", + "ark-serialize", + "ark-snark", + "ark-std", + "arkworks-utils", + "blake2", + "digest 0.9.0", +] + +[[package]] +name = "arkworks-utils" +version = "0.4.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c510357a5b584a7c2a069fa23167b95ff6389f4ee3532347431e5b4d694f5f2f" +dependencies = [ + "ark-bls12-381", + "ark-bn254", + "ark-crypto-primitives", + "ark-ec", + "ark-ed-on-bls12-381", + "ark-ed-on-bn254", + "ark-ff", + "ark-groth16", + "ark-marlin", + "ark-poly", + "ark-poly-commit", + "ark-r1cs-std", + "ark-relations", + "ark-serialize", + "ark-snark", + "ark-std", + "blake2", + "digest 0.9.0", +] + +[[package]] +name = "arrayref" +version = "0.3.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4c527152e37cf757a3f78aae5a06fbeefdb07ccc535c980a3208ee3060dd544" + +[[package]] +name = "arrayvec" +version = "0.4.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd9fd44efafa8690358b7408d253adf110036b88f55672a933f01d616ad9b1b9" +dependencies = [ + "nodrop", +] + +[[package]] +name = "arrayvec" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23b62fc65de8e4e7f52534fb52b0f3ed04746ae267519eef2a83941e8085068b" + +[[package]] +name = "arrayvec" +version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "065374052e7df7ee4047b1160cca5e1467a12351a40b3da123c870ba0b8eda2a" +checksum = "8da52d66c7071e2e3fa2a1e5c6d088fec47b593032b254f5e980de8ea54454d6" + +[[package]] +name = "async-trait" +version = "0.1.52" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "061a7acccaa286c011ddc30970520b98fa40e00c9d644633fb26b5fc63a265e3" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] [[package]] name = "atty" @@ -288,7 +494,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9d117600f438b1707d4e4ae15d3595657288f8235a0eb593e80ecc98ab34e1bc" dependencies = [ "addr2line", - "cfg-if 1.0.0", + "cfg-if", "libc", "miniz_oxide", "object", @@ -297,15 +503,9 @@ dependencies = [ [[package]] name = "base58" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5024ee8015f02155eee35c711107ddd9a9bf3cb689cf2a9089c97e79b6e1ae83" - -[[package]] -name = "base64" -version = "0.12.3" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3441f0f7b02788e948e47f457ca01f1d7e6d92c693bc132c22b087d3141c03ff" +checksum = "6107fe1be6682a68940da878d9e9f5e90ca5745b3dec9fd1bb393c8777d4f581" [[package]] name = "base64" @@ -314,16 +514,19 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "904dfeac50f3cdaba28fc6f57fdcddb75f49ed61346676a78c4ffe55877802fd" [[package]] -name = "bencher" -version = "0.1.5" +name = "beef" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7dfdb4953a096c551ce9ace855a604d702e6e62d77fac690575ae347571717f5" +checksum = "bed554bd50246729a1ec158d08aa3235d1b69d94ad120ebe187e28894787e736" +dependencies = [ + "serde", +] [[package]] name = "bitflags" -version = "1.2.1" +version = "1.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf1de2fe8c75bc145a2f577add951f8134889b4795d47466a54a5c846d691693" +checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitvec" @@ -337,6 +540,17 @@ dependencies = [ "wyz", ] +[[package]] +name = "blake2" +version = "0.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0a4e37d16930f5459780f5621038b6382b9bb37c19016f39fb6b5808d831f174" +dependencies = [ + "crypto-mac 0.8.0", + "digest 0.9.0", + "opaque-debug 0.3.0", +] + [[package]] name = "blake2-rfc" version = "0.2.18" @@ -369,6 +583,15 @@ dependencies = [ "generic-array 0.14.4", ] +[[package]] +name = "block-buffer" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1d36a02058e76b040de25a4464ba1c80935655595b661505c8b39b664828b95" +dependencies = [ + "generic-array 0.14.4", +] + [[package]] name = "block-padding" version = "0.1.5" @@ -384,20 +607,6 @@ version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8d696c370c750c948ada61c69a0ee2cbbb9c50b1019ddb86d9317157a99c2cae" -[[package]] -name = "blocking" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c5e170dbede1f740736619b776d7251cb1b9095c435c34d8ca9f57fcd2f335e9" -dependencies = [ - "async-channel", - "async-task", - "atomic-waker", - "fastrand", - "futures-lite", - "once_cell", -] - [[package]] name = "bstr" version = "0.2.15" @@ -410,33 +619,12 @@ dependencies = [ "serde", ] -[[package]] -name = "bulletproofs-gadgets" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f730544daa13f48320a9be1bf804dd3544193f20a4194901317fd3ec354861fb" -dependencies = [ - "bencher", - "curve25519-dalek 3.0.2", - "merlin", - "parity-scale-codec 1.3.6", - "rand_core 0.5.1", - "sp-std 2.0.1", - "webb-bulletproofs", -] - [[package]] name = "bumpalo" version = "3.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "099e596ef14349721d9016f6b80dd3419ea1bf289ab9b44df8e4dfd3a005d5d9" -[[package]] -name = "byte-slice-cast" -version = "0.3.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0a5e3906bcbf133e33c1d4d95afc664ad37fbdb9f6568d8043e7ea8c27d93d3" - [[package]] name = "byte-slice-cast" version = "1.0.0" @@ -455,31 +643,19 @@ version = "1.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ae44d1a3d5a19df61dd0c8beb138458ac2a53a7ac09eba97d55592540004306b" -[[package]] -name = "bytes" -version = "0.5.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e4cec68f03f32e44924783795810fa50a7035d8c8ebe78580ad7e6c703fba38" - [[package]] name = "bytes" version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b700ce4376041dcd0a327fd0097c41095743c4c8af8887265942faf1100bd040" -[[package]] -name = "cache-padded" -version = "1.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "631ae5198c9be5e753e5cc215e1bd73c2b466a3565173db433f52bb9d3e66dba" - [[package]] name = "cast" version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4b9434b9a5aa1450faa3f9cb14ea0e8c53bb5d2b3c1bfd1ab4fc03e9f33fbfb0" dependencies = [ - "rustc_version", + "rustc_version 0.2.3", ] [[package]] @@ -488,12 +664,6 @@ version = "1.0.66" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4c0496836a84f8d0495758516b8621a622beb77c0fed418570e50764093ced48" -[[package]] -name = "cfg-if" -version = "0.1.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822" - [[package]] name = "cfg-if" version = "1.0.0" @@ -502,27 +672,35 @@ checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" [[package]] name = "chacha20" -version = "0.6.0" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed8738f14471a99f0e316c327e68fc82a3611cc2895fcb604b89eedaf8f39d95" +checksum = "01b72a433d0cf2aef113ba70f62634c56fddb0f244e6377185c56a7cadbd8f91" dependencies = [ + "cfg-if", "cipher", - "zeroize 1.2.0", + "cpufeatures", + "zeroize", ] [[package]] name = "chacha20poly1305" -version = "0.7.1" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af1fc18e6d90c40164bf6c317476f2a98f04661e310e79830366b7e914c58a8e" +checksum = "3b84ed6d1d5f7aa9bdde921a5090e0ca4d934d250ea3b402a5fab3a994e28a2a" dependencies = [ "aead", "chacha20", "cipher", "poly1305", - "zeroize 1.2.0", + "zeroize", ] +[[package]] +name = "chameleon" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "12bd83544cd11113170ce1eee45383928f3f720bc8b305af18c2a3da3547e1ae" + [[package]] name = "chrono" version = "0.4.19" @@ -532,15 +710,14 @@ dependencies = [ "libc", "num-integer", "num-traits", - "time", "winapi", ] [[package]] name = "cipher" -version = "0.2.5" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12f8e7987cbd042a63249497f41aed09f8e65add917ea6566effbc56578d6801" +checksum = "7ee52072ec15386f770805afd189a01c8841be8696bed250fa2f13c4c0d6dfb7" dependencies = [ "generic-array 0.14.4", ] @@ -554,55 +731,21 @@ dependencies = [ "ansi_term 0.11.0", "atty", "bitflags", - "strsim", + "strsim 0.8.0", "textwrap", "unicode-width", "vec_map", ] -[[package]] -name = "clear_on_drop" -version = "0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9cc5db465b294c3fa986d5bbb0f3017cd850bff6dd6c52f9ccff8b4d21b7b08" -dependencies = [ - "cc", -] - -[[package]] -name = "concurrent-queue" -version = "1.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30ed07550be01594c6026cff2a1d7fe9c8f683caa798e12b68694ac9e88286a3" -dependencies = [ - "cache-padded", -] - [[package]] name = "console" -version = "0.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a50aab2529019abfabfa93f1e6c41ef392f91fbf179b347a7e96abb524884a08" -dependencies = [ - "encode_unicode", - "lazy_static", - "libc", - "regex", - "terminal_size", - "unicode-width", - "winapi", - "winapi-util", -] - -[[package]] -name = "console" -version = "0.14.0" +version = "0.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7cc80946b3480f421c2f17ed1cb841753a371c7c5104f51d507e13f532c856aa" +checksum = "a28b32d32ca44b70c3e4acd7db1babf555fa026e385fb95f18028f88848b3c31" dependencies = [ "encode_unicode", - "lazy_static", "libc", + "once_cell", "regex", "terminal_size", "unicode-width", @@ -621,6 +764,12 @@ version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "245097e9a4535ee1e3e3931fcfcd55a796a44c643e8596ff6566d68f09b87bbc" +[[package]] +name = "convert_case" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e" + [[package]] name = "core-foundation" version = "0.9.1" @@ -638,16 +787,19 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ea221b5284a47e40033bf9b66f35f984ec0ea2931eb03505246cd27a963f981b" [[package]] -name = "cpuid-bool" -version = "0.1.2" +name = "cpufeatures" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8aebca1129a03dc6dc2b127edd729435bbc4a37e1d5f4d7513165089ceb02634" +checksum = "95059428f66df56b63431fdb4e1947ed2190586af5c5a8a8b71122bdf5a7f469" +dependencies = [ + "libc", +] [[package]] name = "cpuid-bool" -version = "0.2.0" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dcb25d077389e53838a8158c8e99174c5a9d902dee4904320db714f3c653ffba" +checksum = "8aebca1129a03dc6dc2b127edd729435bbc4a37e1d5f4d7513165089ceb02634" [[package]] name = "crc32fast" @@ -655,7 +807,7 @@ version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "81156fece84ab6a9f2afdb109ce3ae577e42b1228441eded99bd77f627953b1a" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", ] [[package]] @@ -700,7 +852,7 @@ version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dca26ee1f8d361640700bde38b2c37d8c22b3ce2d360e1fc1c74ea4b0aa7d775" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", "crossbeam-utils", ] @@ -710,7 +862,7 @@ version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "94af6efb46fef72616855b036a624cf27ba656ffc9be1b9a3c931cfc7749a9a9" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", "crossbeam-epoch", "crossbeam-utils", ] @@ -721,7 +873,7 @@ version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a1aaa739f95311c2c7887a76863f500026092fb1dce0161dab577e559ef3569d" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", "const_fn", "crossbeam-utils", "lazy_static", @@ -736,7 +888,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "02d96d1e189ef58269ebe5b97953da3274d83a93af647c2ddd6f9dab28cedb8d" dependencies = [ "autocfg", - "cfg-if 1.0.0", + "cfg-if", "lazy_static", ] @@ -747,13 +899,12 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7" [[package]] -name = "crypto-mac" -version = "0.7.0" +name = "crypto-common" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4434400df11d95d556bac068ddfedd482915eb18fe8bea89bc80b6e4b1c179e5" +checksum = "683d6b536309245c849479fba3da410962a43ed8e51c26b729208ec0ac2798d0" dependencies = [ - "generic-array 0.12.3", - "subtle 1.0.0", + "generic-array 0.14.4", ] [[package]] @@ -763,7 +914,17 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b584a330336237c1eecd3e94266efb216c56ed91225d634cb2991c5f3fd1aeab" dependencies = [ "generic-array 0.14.4", - "subtle 2.4.0", + "subtle", +] + +[[package]] +name = "crypto-mac" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1d1a86f49236c215f271d40892d5fc950490551400b02ef360692c29815c714" +dependencies = [ + "generic-array 0.14.4", + "subtle", ] [[package]] @@ -788,25 +949,6 @@ dependencies = [ "memchr", ] -[[package]] -name = "ct-logs" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1a816186fa68d9e426e3cb4ae4dff1fcd8e4a2c34b781bf7a822574a0d0aac8" -dependencies = [ - "sct", -] - -[[package]] -name = "ctor" -version = "0.1.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8f45d9ad417bcef4817d614a501ab55cdd96a6fdb24f49aab89a54acfd66b19" -dependencies = [ - "quote", - "syn", -] - [[package]] name = "curve25519-dalek" version = "2.1.2" @@ -816,8 +958,8 @@ dependencies = [ "byteorder", "digest 0.8.1", "rand_core 0.5.1", - "subtle 2.4.0", - "zeroize 1.2.0", + "subtle", + "zeroize", ] [[package]] @@ -829,31 +971,79 @@ dependencies = [ "byteorder", "digest 0.9.0", "rand_core 0.5.1", - "subtle 2.4.0", - "zeroize 1.2.0", + "subtle", + "zeroize", +] + +[[package]] +name = "darling" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d0d720b8683f8dd83c65155f0530560cba68cd2bf395f6513a483caee57ff7f4" +dependencies = [ + "darling_core", + "darling_macro", +] + +[[package]] +name = "darling_core" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a340f241d2ceed1deb47ae36c4144b2707ec7dd0b649f894cb39bb595986324" +dependencies = [ + "fnv", + "ident_case", + "proc-macro2", + "quote", + "strsim 0.10.0", + "syn", +] + +[[package]] +name = "darling_macro" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72c41b3b7352feb3211a0d743dc5700a4e3b60f51bd2b368892d1e0f9a95f44b" +dependencies = [ + "darling_core", + "quote", + "syn", +] + +[[package]] +name = "derivative" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b" +dependencies = [ + "proc-macro2", + "quote", + "syn", ] [[package]] name = "derive_more" -version = "0.99.11" +version = "0.99.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41cb0e6161ad61ed084a36ba71fbba9e3ac5aee3606fb607fe08da6acbcf3d8c" +checksum = "4fb810d30a7c1953f91334de7244731fc3f3c10d7fe163338a35b9f640960321" dependencies = [ + "convert_case", "proc-macro2", "quote", + "rustc_version 0.4.0", "syn", ] [[package]] name = "dialoguer" -version = "0.7.1" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70f807b2943dc90f9747497d9d65d7e92472149be0b88bf4ce1201b4ac979c26" +checksum = "61579ada4ec0c6031cfac3f86fdba0d195a7ebeb5e36693bd53cb5999a25beeb" dependencies = [ - "console 0.13.0", + "console", "lazy_static", "tempfile", - "zeroize 0.9.3", + "zeroize", ] [[package]] @@ -874,13 +1064,24 @@ dependencies = [ "generic-array 0.14.4", ] +[[package]] +name = "digest" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b697d66081d42af4fba142d56918a3cb21dc8eb63372c6b85d14f44fb9c5979b" +dependencies = [ + "block-buffer 0.10.0", + "crypto-common", + "generic-array 0.14.4", +] + [[package]] name = "directories-next" version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "339ee130d97a610ea5a5872d2bbb130fdf68884ff09d3028b81bec8a1ac23bbc" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", "dirs-sys-next", ] @@ -895,6 +1096,12 @@ dependencies = [ "winapi", ] +[[package]] +name = "downcast-rs" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ea835d29036a4087793836fa931b08837ad5e957da9e23886b29586fb9b6650" + [[package]] name = "dyn-clonable" version = "0.9.0" @@ -941,8 +1148,8 @@ dependencies = [ "ed25519", "rand 0.7.3", "serde", - "sha2 0.9.3", - "zeroize 1.2.0", + "sha2 0.9.9", + "zeroize", ] [[package]] @@ -958,70 +1165,51 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a357d28ed41a50f9c765dbfe56cbc04a64e53e5fc58ba79fbc34c10ef3df831f" [[package]] -name = "env_logger" -version = "0.8.2" +name = "environmental" +version = "1.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f26ecb66b4bdca6c1409b40fb255eefc2bd4f6d135dab3c3124f80ffa2a9661e" -dependencies = [ - "atty", - "humantime", - "log", - "regex", - "termcolor", -] +checksum = "68b91989ae21441195d7d9b9993a2f9295c7e1a8c96255d8b729accddc124797" [[package]] -name = "environmental" -version = "1.1.2" +name = "ethabi" +version = "15.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6576a1755ddffd988788025e75bce9e74b018f7cc226198fe931d077911c6d7e" +checksum = "f76ef192b63e8a44b3d08832acebbb984c3fba154b5c26f70037c860202a0d4b" +dependencies = [ + "ethereum-types", + "hex", + "sha3", +] [[package]] name = "ethbloom" -version = "0.11.0" +version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "779864b9c7f7ead1f092972c3257496c6a84b46dba2ce131dd8a282cb2cc5972" +checksum = "bfb684ac8fa8f6c5759f788862bb22ec6fe3cb392f6bfd08e3c64b603661e3f8" dependencies = [ "crunchy", "fixed-hash", - "impl-codec", "tiny-keccak", ] [[package]] name = "ethereum-types" -version = "0.11.0" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f64b5df66a228d85e4b17e5d6c6aa43b0310898ffe8a85988c4c032357aaabfd" +checksum = "05136f7057fe789f06e6d41d07b34e6f70d8c86e5693b60f97aaa6553553bdaf" dependencies = [ "ethbloom", "fixed-hash", - "impl-codec", "primitive-types", "uint", ] -[[package]] -name = "event-listener" -version = "2.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7531096570974c3a9dcf9e4b8e1cede1ec26cf5046219fb3b9d897503b9be59" - [[package]] name = "fake-simd" version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e88a8acf291dafb59c2d96e8f59828f3838bb1a70398823ade51a84de6a6deed" -[[package]] -name = "fastrand" -version = "1.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca5faf057445ce5c9d4329e382b2ce7ca38550ef3b73a5348362d5f24e0c7fe3" -dependencies = [ - "instant", -] - [[package]] name = "fixed-hash" version = "0.7.0" @@ -1050,116 +1238,16 @@ dependencies = [ "percent-encoding", ] -[[package]] -name = "frame-benchmarking" -version = "3.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70fe99487f84579a3f2c4ba52650fec875492eea41be0e4eea8019187f105052" -dependencies = [ - "frame-support", - "frame-system", - "linregress", - "parity-scale-codec 2.1.0", - "paste 1.0.5", - "sp-api", - "sp-io", - "sp-runtime", - "sp-runtime-interface", - "sp-std 3.0.0", - "sp-storage", -] - [[package]] name = "frame-metadata" -version = "13.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "073f7bef18421362441a1708f8528e442234954611f95bdc554b313fb321948e" -dependencies = [ - "parity-scale-codec 2.1.0", - "serde", - "sp-core", - "sp-std 3.0.0", -] - -[[package]] -name = "frame-support" -version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04e521e6214615bd82ba6b5fc7fd40a9cc14fdeb40f83da5eba12aa2f8179fb8" -dependencies = [ - "bitflags", - "frame-metadata", - "frame-support-procedural", - "impl-trait-for-tuples", - "log", - "once_cell", - "parity-scale-codec 2.1.0", - "paste 1.0.5", - "serde", - "smallvec", - "sp-arithmetic", - "sp-core", - "sp-inherents", - "sp-io", - "sp-runtime", - "sp-staking", - "sp-state-machine", - "sp-std 3.0.0", - "sp-tracing", -] - -[[package]] -name = "frame-support-procedural" -version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2668e24cbaba7f0e91d0c92a94bd1ae425a942608ad0b775db32477f5df4da9e" -dependencies = [ - "Inflector", - "frame-support-procedural-tools", - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "frame-support-procedural-tools" -version = "3.0.0" +version = "14.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4f88cfd111e004590f4542b75e6d3302137b9067d7e7219e4ac47a535c3b5c1" +checksum = "37ed5e5c346de62ca5c184b4325a6600d1eaca210666e4606fe4e449574978d0" dependencies = [ - "frame-support-procedural-tools-derive", - "proc-macro-crate", - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "frame-support-procedural-tools-derive" -version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79285388b120ac96c15a791c56b26b9264f7231324fbe0fd05026acd92bf2e6a" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "frame-system" -version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f5fedbff05d665c00bf4e089b4377fcb15b8bd37ebc3e5fc06665474cf6e25d7" -dependencies = [ - "frame-support", - "impl-trait-for-tuples", - "parity-scale-codec 2.1.0", + "cfg-if", + "parity-scale-codec", + "scale-info", "serde", - "sp-core", - "sp-io", - "sp-runtime", - "sp-std 3.0.0", - "sp-version", ] [[package]] @@ -1180,9 +1268,9 @@ checksum = "fed34cd105917e91daa4da6b3728c47b068749d6a62c59811f06ed2ac71d9da7" [[package]] name = "futures" -version = "0.3.13" +version = "0.3.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f55667319111d593ba876406af7c409c0ebb44dc4be6132a783ccf163ea14c1" +checksum = "28560757fe2bb34e79f907794bb6b22ae8b0e5c669b638a1132f2592b19035b4" dependencies = [ "futures-channel", "futures-core", @@ -1195,9 +1283,9 @@ dependencies = [ [[package]] name = "futures-channel" -version = "0.3.13" +version = "0.3.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c2dd2df839b57db9ab69c2c9d8f3e8c81984781937fe2807dc6dcf3b2ad2939" +checksum = "ba3dda0b6588335f360afc675d0564c17a77a2bda81ca178a4b6081bd86c7f0b" dependencies = [ "futures-core", "futures-sink", @@ -1205,15 +1293,15 @@ dependencies = [ [[package]] name = "futures-core" -version = "0.3.13" +version = "0.3.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "15496a72fabf0e62bdc3df11a59a3787429221dd0710ba8ef163d6f7a9112c94" +checksum = "d0c8ff0461b82559810cdccfde3215c3f373807f5e5232b71479bff7bb2583d7" [[package]] name = "futures-executor" -version = "0.3.13" +version = "0.3.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "891a4b7b96d84d5940084b2a37632dd65deeae662c114ceaa2c879629c9c0ad1" +checksum = "29d6d2ff5bb10fb95c85b8ce46538a2e5f5e7fdc755623a7d4529ab8a4ed9d2a" dependencies = [ "futures-core", "futures-task", @@ -1223,32 +1311,16 @@ dependencies = [ [[package]] name = "futures-io" -version = "0.3.13" +version = "0.3.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d71c2c65c57704c32f5241c1223167c2c3294fd34ac020c807ddbe6db287ba59" - -[[package]] -name = "futures-lite" -version = "1.11.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4481d0cd0de1d204a4fa55e7d45f07b1d958abcb06714b3446438e2eff695fb" -dependencies = [ - "fastrand", - "futures-core", - "futures-io", - "memchr", - "parking", - "pin-project-lite", - "waker-fn", -] +checksum = "b1f9d34af5a1aac6fb380f735fe510746c38067c5bf16c7fd250280503c971b2" [[package]] name = "futures-macro" -version = "0.3.13" +version = "0.3.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea405816a5139fb39af82c2beb921d52143f556038378d6db21183a5c37fbfb7" +checksum = "6dbd947adfffb0efc70599b3ddcf7b5597bb5fa9e245eb99f62b3a5f7bb8bd3c" dependencies = [ - "proc-macro-hack", "proc-macro2", "quote", "syn", @@ -1256,21 +1328,21 @@ dependencies = [ [[package]] name = "futures-sink" -version = "0.3.13" +version = "0.3.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85754d98985841b7d4f5e8e6fbfa4a4ac847916893ec511a2917ccd8525b8bb3" +checksum = "e3055baccb68d74ff6480350f8d6eb8fcfa3aa11bdc1a1ae3afdd0514617d508" [[package]] name = "futures-task" -version = "0.3.13" +version = "0.3.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa189ef211c15ee602667a6fcfe1c1fd9e07d42250d2156382820fba33c9df80" +checksum = "6ee7c6485c30167ce4dfb83ac568a849fe53274c831081476ee13e0dce1aad72" [[package]] name = "futures-util" -version = "0.3.13" +version = "0.3.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1812c7ab8aedf8d6f2701a43e1243acdbcc2b36ab26e2ad421eb99ac963d96d1" +checksum = "d9b5cf40b47a271f77a8b1bec03ca09044d99d2372c0de244e66430761127164" dependencies = [ "futures-channel", "futures-core", @@ -1281,8 +1353,6 @@ dependencies = [ "memchr", "pin-project-lite", "pin-utils", - "proc-macro-hack", - "proc-macro-nested", "slab", ] @@ -1304,15 +1374,6 @@ dependencies = [ "typenum", ] -[[package]] -name = "generic-array" -version = "0.13.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f797e67af32588215eaaab8327027ee8e71b9dd0b2b26996aedf20c030fce309" -dependencies = [ - "typenum", -] - [[package]] name = "generic-array" version = "0.14.4" @@ -1329,9 +1390,11 @@ version = "0.1.16" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", + "js-sys", "libc", "wasi 0.9.0+wasi-snapshot-preview1", + "wasm-bindgen", ] [[package]] @@ -1340,7 +1403,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c9495705279e7140bf035dde1f6e750c162df8b625267cd52cc44e0b156732c8" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", "libc", "wasi 0.10.0+wasi-snapshot-preview1", ] @@ -1349,41 +1412,15 @@ dependencies = [ name = "gimli" version = "0.23.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6503fe142514ca4799d4c26297c4248239fe8838d827db6bd6065c6ed29a6ce" - -[[package]] -name = "globset" -version = "0.4.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c152169ef1e421390738366d2f796655fec62621dabbd0fd476f905934061e4a" -dependencies = [ - "aho-corasick", - "bstr", - "fnv", - "log", - "regex", -] - -[[package]] -name = "gloo-timers" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "47204a46aaff920a1ea58b11d03dec6f704287d27561724a4631e450654a891f" -dependencies = [ - "futures-channel", - "futures-core", - "js-sys", - "wasm-bindgen", - "web-sys", -] +checksum = "f6503fe142514ca4799d4c26297c4248239fe8838d827db6bd6065c6ed29a6ce" [[package]] name = "h2" -version = "0.3.2" +version = "0.3.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc018e188373e2777d0ef2467ebff62a08e66c3f5857b23c8fbec3018210dc00" +checksum = "d9f1f717ddc7b2ba36df7e871fd88db79326551d3d6f1fc406fbfd28b582ff8e" dependencies = [ - "bytes 1.0.1", + "bytes", "fnv", "futures-core", "futures-sink", @@ -1422,6 +1459,12 @@ name = "hashbrown" version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d7afe4a420e3fe79967a00898cc1f4db7c8a49a9333a29f8a4bd76a253d5cd04" + +[[package]] +name = "hashbrown" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ab5ef0d4909ef3724cc8cce6ccc8572c5c817592e9285f5464f8e86f8bd3726e" dependencies = [ "ahash", ] @@ -1451,14 +1494,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" [[package]] -name = "hmac" -version = "0.7.1" +name = "hex-literal" +version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5dcb5e64cda4c23119ab41ba960d1e170a774c8e4b9d9e6a9bc18aabf5e59695" -dependencies = [ - "crypto-mac 0.7.0", - "digest 0.8.1", -] +checksum = "7ebdb29d2ea9ed0083cd8cece49bbd968021bd99b0849edb4a9a7ee0fdf6a4e0" [[package]] name = "hmac" @@ -1470,15 +1509,25 @@ dependencies = [ "digest 0.9.0", ] +[[package]] +name = "hmac" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a2a2320eb7ec0ebe8da8f744d7812d9fc4cb4d09344ac01898dbcb6a20ae69b" +dependencies = [ + "crypto-mac 0.11.1", + "digest 0.9.0", +] + [[package]] name = "hmac-drbg" -version = "0.2.0" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c6e570451493f10f6581b48cdd530413b63ea9e780f544bfd3bdcaa0d89d1a7b" +checksum = "17ea0a1394df5b6574da6e0c1ade9e78868c9fb0a4e5ef4428e32da4676b85b1" dependencies = [ - "digest 0.8.1", - "generic-array 0.12.3", - "hmac 0.7.1", + "digest 0.9.0", + "generic-array 0.14.4", + "hmac 0.8.1", ] [[package]] @@ -1487,7 +1536,7 @@ version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7245cd7449cc792608c3c8a9eaf69bd4eabbabf802713748fd739c98b82f0747" dependencies = [ - "bytes 1.0.1", + "bytes", "fnv", "itoa", ] @@ -1498,36 +1547,30 @@ version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5dfb77c123b4e2f72a2069aeae0b4b4949cc7e966df277813fc16347e7549737" dependencies = [ - "bytes 1.0.1", + "bytes", "http", "pin-project-lite", ] [[package]] name = "httparse" -version = "1.3.5" +version = "1.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "615caabe2c3160b313d52ccc905335f4ed5f10881dd63dc5699d47e90be85691" +checksum = "acd94fdbe1d4ff688b67b04eee2e17bd50995534a61539e45adfefb45e5e5503" [[package]] name = "httpdate" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "494b4d60369511e7dea41cf646832512a94e542f68bb9c49e54518e0f468eb47" - -[[package]] -name = "humantime" -version = "2.1.0" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" +checksum = "c4a1e36c821dbe04574f602848a19f742f4fb3c98d40449f11bcad18d6b17421" [[package]] name = "hyper" -version = "0.14.5" +version = "0.14.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8bf09f61b52cfcf4c00de50df88ae423d6c02354e385a86341133b5338630ad1" +checksum = "b7ec3e62bdc98a2f0393a5048e4c30ef659440ea6e0e572965103e72bd836f55" dependencies = [ - "bytes 1.0.1", + "bytes", "futures-channel", "futures-core", "futures-util", @@ -1537,7 +1580,7 @@ dependencies = [ "httparse", "httpdate", "itoa", - "pin-project", + "pin-project-lite", "socket2", "tokio", "tower-service", @@ -1547,21 +1590,26 @@ dependencies = [ [[package]] name = "hyper-rustls" -version = "0.22.1" +version = "0.23.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f9f7a97316d44c0af9b0301e65010573a853a9fc97046d7331d7f6bc0fd5a64" +checksum = "d87c48c02e0dc5e3b849a2041db3029fd066650f8f717c07bf8ed78ccb895cac" dependencies = [ - "ct-logs", - "futures-util", + "http", "hyper", "log", "rustls", "rustls-native-certs", "tokio", "tokio-rustls", - "webpki", + "webpki-roots", ] +[[package]] +name = "ident_case" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" + [[package]] name = "idna" version = "0.2.1" @@ -1575,11 +1623,11 @@ dependencies = [ [[package]] name = "impl-codec" -version = "0.5.0" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df170efa359aebdd5cb7fe78edcc67107748e4737bdca8a8fb40d15ea7a877ed" +checksum = "161ebdfec3c8e3b52bf61c4f3550a1eea4f9579d10dc1b936f3171ebdcd6c443" dependencies = [ - "parity-scale-codec 2.1.0", + "parity-scale-codec", ] [[package]] @@ -1609,16 +1657,16 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4fb1fa934250de4de8aef298d81c729a7d33d8c239daa3a7575e6b92bfc7313b" dependencies = [ "autocfg", - "hashbrown", + "hashbrown 0.9.1", ] [[package]] name = "indicatif" -version = "0.15.0" +version = "0.16.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7baab56125e25686df467fe470785512329883aab42696d661247aca2a2896e4" +checksum = "2d207dc617c7a380ab07ff572a6e52fa202a2a8f355860ac9c38e23f8196be1b" dependencies = [ - "console 0.14.0", + "console", "lazy_static", "number_prefix", "regex", @@ -1630,7 +1678,7 @@ version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "61124eeebbd69b8190558df225adf7e4caafce0d743919e5d6b19652314ec5ec" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", ] [[package]] @@ -1676,92 +1724,111 @@ dependencies = [ ] [[package]] -name = "jsonrpsee-http-client" -version = "0.2.0-alpha.3" +name = "jsonrpsee" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b15fc3a0ef2e02d770aa1a221d3412443dcaedc43e27d80c957dd5bbd65321b" +checksum = "05fd8cd6c6b1bbd06881d2cf88f1fc83cc36c98f2219090f839115fb4a956cb9" dependencies = [ - "async-trait", - "futures", - "hyper", - "hyper-rustls", + "jsonrpsee-core", + "jsonrpsee-http-client", "jsonrpsee-types", - "jsonrpsee-utils", - "log", - "serde", - "serde_json", - "thiserror", - "unicase", - "url", + "jsonrpsee-ws-client", ] [[package]] -name = "jsonrpsee-types" -version = "0.2.0-alpha.3" +name = "jsonrpsee-client-transport" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c42a82588b5f7830e94341bb7e79d15f46070ab6f64dde1e3b3719721b61c5bf" +checksum = "3303cdf246e6ab76e2866fb3d9acb6c76a068b1b28bd923a1b7a8122257ad7b5" dependencies = [ - "async-trait", "futures", - "log", - "serde", - "serde_json", - "smallvec", + "http", + "jsonrpsee-core", + "jsonrpsee-types", + "pin-project", + "rustls-native-certs", + "soketto", "thiserror", + "tokio", + "tokio-rustls", + "tokio-util", + "tracing", + "webpki-roots", ] [[package]] -name = "jsonrpsee-utils" -version = "0.2.0-alpha.3" +name = "jsonrpsee-core" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e65c77838fce96bc554b4a3a159d0b9a2497319ae9305c66ee853998c7ed2fd3" +checksum = "f220b5a238dc7992b90f1144fbf6eaa585872c9376afe6fe6863ffead6191bf3" dependencies = [ - "futures", - "globset", + "anyhow", + "arrayvec 0.7.2", + "async-trait", + "beef", + "futures-channel", + "futures-util", "hyper", "jsonrpsee-types", - "lazy_static", - "log", - "unicase", + "rustc-hash", + "serde", + "serde_json", + "soketto", + "thiserror", + "tokio", + "tracing", ] [[package]] -name = "jsonrpsee-ws-client" -version = "0.2.0-alpha.3" +name = "jsonrpsee-http-client" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0398a066fe036d198e5fea8f3dd092b7bcd0e155d1784ef9e467afc332d4c783" +checksum = "9dce69e96aa236cc2e3a20467420b31cbc8464703aa95bc33a163d25b0f56023" dependencies = [ - "async-std", - "async-tls", "async-trait", - "fnv", - "futures", + "hyper", + "hyper-rustls", + "jsonrpsee-core", "jsonrpsee-types", - "log", - "pin-project", + "rustc-hash", "serde", "serde_json", - "soketto", "thiserror", - "url", - "webpki", + "tokio", + "tracing", ] [[package]] -name = "keccak" -version = "0.1.0" +name = "jsonrpsee-types" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67c21572b4949434e4fc1e1978b99c5f77064153c59d998bf13ecd96fb5ecba7" +checksum = "c1b3f601bbbe45cd63f5407b6f7d7950e08a7d4f82aa699ff41a4a5e9e54df58" +dependencies = [ + "anyhow", + "beef", + "serde", + "serde_json", + "thiserror", + "tracing", +] [[package]] -name = "kv-log-macro" -version = "1.0.7" +name = "jsonrpsee-ws-client" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0de8b303297635ad57c9f5059fd9cee7a47f8e8daa09df0fcd07dd39fb22977f" +checksum = "aff425cee7c779e33920913bc695447416078ee6d119f443f3060feffa4e86b5" dependencies = [ - "log", + "jsonrpsee-client-transport", + "jsonrpsee-core", + "jsonrpsee-types", ] +[[package]] +name = "keccak" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67c21572b4949434e4fc1e1978b99c5f77064153c59d998bf13ecd96fb5ecba7" + [[package]] name = "lazy_static" version = "1.4.0" @@ -1770,40 +1837,56 @@ checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" [[package]] name = "libc" -version = "0.2.86" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7282d924be3275cec7f6756ff4121987bc6481325397dde6ba3e7802b1a8b1c" - -[[package]] -name = "libm" -version = "0.2.1" +version = "0.2.117" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7d73b3f436185384286bd8098d17ec07c9a7d2388a6599f824d8502b529702a" +checksum = "e74d72e0f9b65b5b4ca49a346af3976df0f9c61d550727f349ecd559f251a26c" [[package]] name = "libsecp256k1" -version = "0.3.5" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fc1e2c808481a63dc6da2074752fdd4336a3c8fcc68b83db6f1fd5224ae7962" +checksum = "b0452aac8bab02242429380e9b2f94ea20cea2b37e2c1777a1358799bbe97f37" dependencies = [ "arrayref", - "crunchy", - "digest 0.8.1", + "base64", + "digest 0.9.0", "hmac-drbg", - "rand 0.7.3", - "sha2 0.8.2", - "subtle 2.4.0", + "libsecp256k1-core", + "libsecp256k1-gen-ecmult", + "libsecp256k1-gen-genmult", + "rand 0.8.3", + "serde", + "sha2 0.9.9", "typenum", ] [[package]] -name = "linregress" -version = "0.4.0" +name = "libsecp256k1-core" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5be9b9bb642d8522a44d533eab56c16c738301965504753b03ad1de3425d5451" +dependencies = [ + "crunchy", + "digest 0.9.0", + "subtle", +] + +[[package]] +name = "libsecp256k1-gen-ecmult" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3038c808c55c87e8a172643a7d87187fc6c4174468159cb3090659d55bcb4809" +dependencies = [ + "libsecp256k1-core", +] + +[[package]] +name = "libsecp256k1-gen-genmult" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d0ad4b5cc8385a881c561fac3501353d63d2a2b7a357b5064d71815c9a92724" +checksum = "3db8d6ba2cec9eacc40e6e8ccc98931840301f1006e95647ceb2dd5c3aa06f7c" dependencies = [ - "nalgebra", - "statrs", + "libsecp256k1-core", ] [[package]] @@ -1821,8 +1904,7 @@ version = "0.4.14" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "51b9bbe6c47d51fc3e1a9b945965946b4c44142ab8792c50835a980d362c2710" dependencies = [ - "cfg-if 1.0.0", - "value-bag", + "cfg-if", ] [[package]] @@ -1835,25 +1917,25 @@ dependencies = [ ] [[package]] -name = "matches" -version = "0.1.8" +name = "matchers" +version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ffc5c5338469d4d3ea17d269fa8ea3512ad247247c30bd2df69e68309ed0a08" +checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558" +dependencies = [ + "regex-automata", +] [[package]] -name = "matrixmultiply" -version = "0.2.4" +name = "matches" +version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "916806ba0031cd542105d916a97c8572e1fa6dd79c9c51e7eb43a09ec2dd84c1" -dependencies = [ - "rawpointer", -] +checksum = "7ffc5c5338469d4d3ea17d269fa8ea3512ad247247c30bd2df69e68309ed0a08" [[package]] name = "memchr" -version = "2.3.4" +version = "2.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ee1c47aaa256ecabcaea351eae4a9b01ef39ed810004e298d2511ed284b1525" +checksum = "308cc39be01b73d0d18f82a0e7b2a3df85245f84af96fdddc5d202d27e47b86a" [[package]] name = "memoffset" @@ -1866,12 +1948,12 @@ dependencies = [ [[package]] name = "memory-db" -version = "0.26.0" +version = "0.27.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "814bbecfc0451fc314eeea34f05bbcd5b98a7ad7af37faee088b86a1e633f1d4" +checksum = "de006e09d04fc301a5f7e817b75aa49801c4479a8af753764416b085337ddcc5" dependencies = [ "hash-db", - "hashbrown", + "hashbrown 0.11.2", "parity-util-mem", ] @@ -1890,7 +1972,7 @@ dependencies = [ "byteorder", "keccak", "rand_core 0.5.1", - "zeroize 1.2.0", + "zeroize", ] [[package]] @@ -1925,34 +2007,6 @@ dependencies = [ "winapi", ] -[[package]] -name = "nalgebra" -version = "0.21.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d6b6147c3d50b4f3cdabfe2ecc94a0191fd3d6ad58aefd9664cf396285883486" -dependencies = [ - "approx", - "generic-array 0.13.3", - "matrixmultiply", - "num-complex", - "num-rational", - "num-traits", - "rand 0.7.3", - "rand_distr", - "simba", - "typenum", -] - -[[package]] -name = "nb-connect" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8123a81538e457d44b933a02faf885d3fe8408806b23fa700e8f01c6c3a98998" -dependencies = [ - "libc", - "winapi", -] - [[package]] name = "nodrop" version = "0.1.14" @@ -1980,12 +2034,13 @@ dependencies = [ ] [[package]] -name = "num-complex" -version = "0.2.4" +name = "num-bigint" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6b19411a9719e753aff12e5187b74d60d3dc449ec3f4dc21e3989c3f554bc95" +checksum = "f93ab6289c7b344a8a9f60f88d80aa20032336fe78da341afc91c8a2341fc75f" dependencies = [ "autocfg", + "num-integer", "num-traits", ] @@ -2006,7 +2061,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5c000134b5dbf44adc5cb772486d335293351644b801551abe8f75c84cfa4aef" dependencies = [ "autocfg", - "num-bigint", + "num-bigint 0.2.6", "num-integer", "num-traits", ] @@ -2018,7 +2073,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9a64b1ec5cda2586e284722486d802acf1f7dbdc623e2bfc57e65ca1cd099290" dependencies = [ "autocfg", - "libm", ] [[package]] @@ -2033,9 +2087,9 @@ dependencies = [ [[package]] name = "number_prefix" -version = "0.3.0" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17b02fc0ff9a9e4b35b3342880f48e896ebf69f2967921fe8646bf5b7125956a" +checksum = "830b246a0e5f20af87141b25c173cd1b609bd7779a4617d6ec582abaf90870f3" [[package]] name = "object" @@ -2045,12 +2099,9 @@ checksum = "a9a7ab5d64814df0fe4a4b5ead45ed6c5f181ee3ff04ba344313a6c80446c5d4" [[package]] name = "once_cell" -version = "1.5.2" +version = "1.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13bd41f508810a131401606d54ac32a467c97172d74ba7662562ebba5ad07fa0" -dependencies = [ - "parking_lot", -] +checksum = "da32515d9f6e6e489d7bc9d84c71b060db7247dc035bbe44eac88cf87486d8d5" [[package]] name = "oorandom" @@ -2072,146 +2123,31 @@ checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5" [[package]] name = "openssl-probe" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77af24da69f9d9341038eba93a073b1fdaaa1b788221b00a69bce9e762cb32de" - -[[package]] -name = "pallet-authorship" -version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "47433a94141451e7079aabf3ca28f2bde8c642d84b568be9626e9b7cae8b11b1" -dependencies = [ - "frame-support", - "frame-system", - "impl-trait-for-tuples", - "parity-scale-codec 2.1.0", - "sp-authorship", - "sp-inherents", - "sp-runtime", - "sp-std 3.0.0", -] - -[[package]] -name = "pallet-indices" -version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c080576a1fbb1187b7da9f4cba739076bbb197f44964892b2d392755920bbf63" -dependencies = [ - "frame-support", - "frame-system", - "parity-scale-codec 2.1.0", - "serde", - "sp-core", - "sp-io", - "sp-keyring", - "sp-runtime", - "sp-std 3.0.0", -] - -[[package]] -name = "pallet-session" -version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d243c3ccac56a4c55fade6be5c5af1de07fac374fa7856377980a76b0c193cf" -dependencies = [ - "frame-support", - "frame-system", - "impl-trait-for-tuples", - "pallet-timestamp", - "parity-scale-codec 2.1.0", - "serde", - "sp-core", - "sp-io", - "sp-runtime", - "sp-session", - "sp-staking", - "sp-std 3.0.0", - "sp-trie", -] - -[[package]] -name = "pallet-staking" -version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c95853affe89b7b755b2e7d1fcf7f8804b074dea53d98703f9b8b6ebf28dfb32" -dependencies = [ - "frame-support", - "frame-system", - "pallet-authorship", - "pallet-session", - "parity-scale-codec 2.1.0", - "serde", - "sp-application-crypto", - "sp-io", - "sp-npos-elections", - "sp-runtime", - "sp-staking", - "sp-std 3.0.0", - "static_assertions", -] - -[[package]] -name = "pallet-timestamp" -version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b17dd274716a55a2c3e34d9c0ed66aaac3d7e0393ec9fd985e2b8532d697a7f3" -dependencies = [ - "frame-benchmarking", - "frame-support", - "frame-system", - "impl-trait-for-tuples", - "parity-scale-codec 2.1.0", - "serde", - "sp-inherents", - "sp-runtime", - "sp-std 3.0.0", - "sp-timestamp", -] - -[[package]] -name = "parity-scale-codec" -version = "1.3.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79602888a81ace83e3d1d4b2873286c1f5f906c84db667594e8db8da3506c383" -dependencies = [ - "arrayvec 0.5.2", - "byte-slice-cast 0.3.5", - "parity-scale-codec-derive 1.2.2", -] +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77af24da69f9d9341038eba93a073b1fdaaa1b788221b00a69bce9e762cb32de" [[package]] name = "parity-scale-codec" -version = "2.1.0" +version = "2.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "731f4d179ed52b1c7eeb29baf29c604ea9301b889b23ce93660220a5465d5c6f" +checksum = "373b1a4c1338d9cd3d1fa53b3a11bdab5ab6bd80a20f7f7becd76953ae2be909" dependencies = [ - "arrayvec 0.7.0", + "arrayvec 0.7.2", "bitvec", - "byte-slice-cast 1.0.0", - "parity-scale-codec-derive 2.1.0", + "byte-slice-cast", + "impl-trait-for-tuples", + "parity-scale-codec-derive", "serde", ] [[package]] name = "parity-scale-codec-derive" -version = "1.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "198db82bb1c18fc00176004462dd809b2a6d851669550aa17af6dacd21ae0c14" -dependencies = [ - "proc-macro-crate", - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "parity-scale-codec-derive" -version = "2.1.0" +version = "2.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f44c5f94427bd0b5076e8f7e15ca3f60a4d8ac0077e4793884e6fdfd8915344e" +checksum = "1557010476e0595c9b568d16dcfb81b93cdeb157612726f5170d31aa707bed27" dependencies = [ - "proc-macro-crate", + "proc-macro-crate 1.1.0", "proc-macro2", "quote", "syn", @@ -2219,12 +2155,12 @@ dependencies = [ [[package]] name = "parity-util-mem" -version = "0.9.0" +version = "0.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "664a8c6b8e62d8f9f2f937e391982eb433ab285b4cd9545b342441e04a906e42" +checksum = "6f4cb4e169446179cbc6b8b6320cc9fca49bd2e94e8db25f25f200a8ea774770" dependencies = [ - "cfg-if 1.0.0", - "hashbrown", + "cfg-if", + "hashbrown 0.11.2", "impl-trait-for-tuples", "parity-util-mem-derive", "parking_lot", @@ -2245,15 +2181,9 @@ dependencies = [ [[package]] name = "parity-wasm" -version = "0.41.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ddfc878dac00da22f8f61e7af3157988424567ab01d9920b962ef7dcbd7cd865" - -[[package]] -name = "parking" -version = "2.0.0" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "427c3892f9e783d91cc128285287e70a59e206ca452770ece88a76f7a3eddd72" +checksum = "be5e13c266502aadf83426d87d81a0f5d1ef45b8027f5a471c360abfe4bfae92" [[package]] name = "parking_lot" @@ -2272,7 +2202,7 @@ version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9ccb628cad4f84851442432c60ad8e1f607e29752d0bf072cbd0baf28aa34272" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", "instant", "libc", "redox_syscall 0.1.57", @@ -2280,31 +2210,12 @@ dependencies = [ "winapi", ] -[[package]] -name = "paste" -version = "0.1.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "45ca20c77d80be666aef2b45486da86238fabe33e38306bd3118fe4af33fa880" -dependencies = [ - "paste-impl", - "proc-macro-hack", -] - [[package]] name = "paste" version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "acbf547ad0c65e31259204bd90935776d1c693cec2f4ff7abb7a1bbbd40dfe58" -[[package]] -name = "paste-impl" -version = "0.1.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d95a7db200b97ef370c8e6de0088252f7e0dfff7d047a28528e47456c0fc98b6" -dependencies = [ - "proc-macro-hack", -] - [[package]] name = "paw" version = "1.0.0" @@ -2334,21 +2245,20 @@ checksum = "7f0b59668fe80c5afe998f0c0bf93322bf2cd66cafeeb80581f291716f3467f2" [[package]] name = "pbkdf2" -version = "0.3.0" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "006c038a43a45995a9670da19e67600114740e8511d4333bf97a56e66a7542d9" +checksum = "216eaa586a190f0a738f2f918511eecfa90f13295abec0e457cdebcceda80cbd" dependencies = [ - "byteorder", - "crypto-mac 0.7.0", + "crypto-mac 0.8.0", ] [[package]] name = "pbkdf2" -version = "0.4.0" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "216eaa586a190f0a738f2f918511eecfa90f13295abec0e457cdebcceda80cbd" +checksum = "d95f5254224e617595d2cc3cc73ff0a5eaf2637519e25f03388154e9378b6ffa" dependencies = [ - "crypto-mac 0.8.0", + "crypto-mac 0.11.1", ] [[package]] @@ -2357,6 +2267,15 @@ version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d4fd5641d01c8f18a23da7b6fe29298ff4b55afcccdf78973b24cf3175fee32e" +[[package]] +name = "pest" +version = "2.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "10f4872ae94d7b90ae48754df22fd42ad52ce740b8f370b03da4835417403e53" +dependencies = [ + "ucd-trie", +] + [[package]] name = "pin-project" version = "1.0.5" @@ -2417,26 +2336,14 @@ dependencies = [ "plotters-backend", ] -[[package]] -name = "polling" -version = "2.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2a7bc6b2a29e632e45451c941832803a18cce6781db04de8a04696cdca8bde4" -dependencies = [ - "cfg-if 0.1.10", - "libc", - "log", - "wepoll-sys", - "winapi", -] - [[package]] name = "poly1305" -version = "0.6.2" +version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b7456bc1ad2d4cf82b3a016be4c2ac48daf11bf990c1603ebd447fe6f30fca8" +checksum = "048aeb476be11a4b6ca432ca569e375810de9294ae78f4774e78ea98a9246ede" dependencies = [ - "cpuid-bool 0.2.0", + "cpufeatures", + "opaque-debug 0.3.0", "universal-hash", ] @@ -2448,13 +2355,14 @@ checksum = "ac74c624d6b2d21f425f752262f42188365d7b8ff1aff74c82e45136510a4857" [[package]] name = "primitive-types" -version = "0.9.0" +version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2415937401cb030a2a0a4d922483f945fa068f52a7dbb22ce0fe5f2b6f6adace" +checksum = "05e4722c697a58a99d5d06a08c30821d7c082a4632198de1eaa5a6c22ef42373" dependencies = [ "fixed-hash", "impl-codec", "impl-serde", + "scale-info", "uint", ] @@ -2467,6 +2375,16 @@ dependencies = [ "toml", ] +[[package]] +name = "proc-macro-crate" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ebace6889caf889b4d3f76becee12e90353f2b8c7d875534a71e5742f8f6f83" +dependencies = [ + "thiserror", + "toml", +] + [[package]] name = "proc-macro-error" version = "1.0.4" @@ -2491,45 +2409,33 @@ dependencies = [ "version_check", ] -[[package]] -name = "proc-macro-hack" -version = "0.5.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dbf0c48bc1d91375ae5c3cd81e3722dff1abcf81a30960240640d223f59fe0e5" - -[[package]] -name = "proc-macro-nested" -version = "0.1.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc881b2c22681370c6a780e47af9840ef841837bc98118431d4e1868bd0c1086" - [[package]] name = "proc-macro2" -version = "1.0.24" +version = "1.0.36" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e0704ee1a7e00d7bb417d0770ea303c1bccbabf0ef1667dae92b5967f5f8a71" +checksum = "c7342d5883fbccae1cc37a2353b09c87c9b0f3afd73f5fb9bba687a1f733b029" dependencies = [ "unicode-xid", ] [[package]] name = "prost" -version = "0.7.0" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e6984d2f1a23009bd270b8bb56d0926810a3d483f59c987d77969e9d8e840b2" +checksum = "444879275cb4fd84958b1a1d5420d15e6fcf7c235fe47f053c9c2a80aceb6001" dependencies = [ - "bytes 1.0.1", + "bytes", "prost-derive", ] [[package]] name = "prost-derive" -version = "0.7.0" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "169a15f3008ecb5160cba7d37bcd690a7601b6d30cfb87a117d45e59d52af5d4" +checksum = "f9cc1a3263e07e0bf68e96268f37665207b49560d98739662cdfaae215c720fe" dependencies = [ "anyhow", - "itertools 0.9.0", + "itertools 0.10.0", "proc-macro2", "quote", "syn", @@ -2537,9 +2443,9 @@ dependencies = [ [[package]] name = "quote" -version = "1.0.8" +version = "1.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "991431c3519a3f36861882da93630ce66b52918dcf1b8e2fd66b397fc96f28df" +checksum = "864d3e96a899863136fc6e99f3d7cae289dafe43bf2c5ac19b70df7210c0a145" dependencies = [ "proc-macro2", ] @@ -2614,15 +2520,6 @@ dependencies = [ "getrandom 0.2.2", ] -[[package]] -name = "rand_distr" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96977acbdd3a6576fb1d27391900035bf3863d4a16422973a409b488cf29ffb2" -dependencies = [ - "rand 0.7.3", -] - [[package]] name = "rand_hc" version = "0.2.0" @@ -2650,12 +2547,6 @@ dependencies = [ "rand_core 0.5.1", ] -[[package]] -name = "rawpointer" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "60a357793950651c4ed0f3f52338f53b2f809f32d83a07f72909fa13e4c6c1e3" - [[package]] name = "rayon" version = "1.5.0" @@ -2728,14 +2619,13 @@ dependencies = [ [[package]] name = "regex" -version = "1.4.3" +version = "1.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9251239e129e16308e70d853559389de218ac275b515068abc96829d05b948a" +checksum = "d07a8629359eb56f1e2fb1652bb04212c072a87ba68546a04065d525673ac461" dependencies = [ "aho-corasick", "memchr", "regex-syntax", - "thread_local", ] [[package]] @@ -2750,9 +2640,9 @@ dependencies = [ [[package]] name = "regex-syntax" -version = "0.6.22" +version = "0.6.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5eb417147ba9860a96cfe72a0b93bf88fee1744b5636ec99ab20c1aa9376581" +checksum = "f497285884f3fcff424ffc933e56d7cbca511def0c9831a7f9b5f6153e3cc89b" [[package]] name = "remove_dir_all" @@ -2802,16 +2692,33 @@ version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a" dependencies = [ - "semver", + "semver 0.9.0", +] + +[[package]] +name = "rustc_version" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0dfe2087c51c460008730de8b57e6a320782fbfb312e1f4d520e6c6fae155ee" +dependencies = [ + "semver 0.11.0", +] + +[[package]] +name = "rustc_version" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" +dependencies = [ + "semver 1.0.4", ] [[package]] name = "rustls" -version = "0.19.0" +version = "0.20.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "064fd21ff87c6e87ed4506e68beb42459caa4a0e2eb144932e6776768556980b" +checksum = "d37e5e2290f3e040b594b1a9e04377c2c671f1a1cfd9bfdef82106ac1c113f84" dependencies = [ - "base64 0.13.0", "log", "ring", "sct", @@ -2820,16 +2727,25 @@ dependencies = [ [[package]] name = "rustls-native-certs" -version = "0.5.0" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a07b7c1885bd8ed3831c289b7870b13ef46fe0e856d288c30d9cc17d75a2092" +checksum = "5ca9ebdfa27d3fc180e42879037b5338ab1c040c06affd00d8338598e7800943" dependencies = [ "openssl-probe", - "rustls", + "rustls-pemfile", "schannel", "security-framework", ] +[[package]] +name = "rustls-pemfile" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5eebeaeb360c87bfb72e84abdb3447159c0eaececf1bef2aecd65a8be949d1c9" +dependencies = [ + "base64", +] + [[package]] name = "ryu" version = "1.0.5" @@ -2845,6 +2761,32 @@ dependencies = [ "winapi-util", ] +[[package]] +name = "scale-info" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c55b744399c25532d63a0d2789b109df8d46fc93752d46b0782991a931a782f" +dependencies = [ + "bitvec", + "cfg-if", + "derive_more", + "parity-scale-codec", + "scale-info-derive", + "serde", +] + +[[package]] +name = "scale-info-derive" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baeb2780690380592f86205aa4ee49815feb2acad8c2f59e6dd207148c3f1fcd" +dependencies = [ + "proc-macro-crate 1.1.0", + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "schannel" version = "0.1.19" @@ -2868,10 +2810,9 @@ dependencies = [ "merlin", "rand 0.7.3", "rand_core 0.5.1", - "serde", "sha2 0.8.2", - "subtle 2.4.0", - "zeroize 1.2.0", + "subtle", + "zeroize", ] [[package]] @@ -2882,9 +2823,9 @@ checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" [[package]] name = "sct" -version = "0.6.0" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3042af939fca8c3453b7af0f1c66e533a15a86169e39de2657310ade8f98d3c" +checksum = "d53dcdb7c9f8158937a7981b48accfd39a43af418591a5d008c7b22b5e1b7ca4" dependencies = [ "ring", "untrusted", @@ -2892,11 +2833,11 @@ dependencies = [ [[package]] name = "secrecy" -version = "0.7.0" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0673d6a6449f5e7d12a1caf424fd9363e2af3a4953023ed455e3c4beef4597c0" +checksum = "9bd1c54ea06cfd2f6b63219704de0b9b4f72dcc2b8fdef820be6cd799780e91e" dependencies = [ - "zeroize 1.2.0", + "zeroize", ] [[package]] @@ -2928,20 +2869,44 @@ version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403" dependencies = [ - "semver-parser", + "semver-parser 0.7.0", +] + +[[package]] +name = "semver" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f301af10236f6df4160f7c3f04eec6dbc70ace82d23326abad5edee88801c6b6" +dependencies = [ + "semver-parser 0.10.2", ] +[[package]] +name = "semver" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "568a8e6258aa33c13358f81fd834adb854c6f7c9468520910a9b1e8fac068012" + [[package]] name = "semver-parser" version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" +[[package]] +name = "semver-parser" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00b0bef5b7f9e0df16536d3961cfb6e84331c065b4066afb39768d0e319411f7" +dependencies = [ + "pest", +] + [[package]] name = "serde" -version = "1.0.125" +version = "1.0.136" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "558dc50e1a5a5fa7112ca2ce4effcb321b0300c0d4ccf0776a9f60cd89031171" +checksum = "ce31e24b01e1e524df96f1c2fdd054405f8d7376249a5110886fb4b658484789" dependencies = [ "serde_derive", ] @@ -2958,9 +2923,9 @@ dependencies = [ [[package]] name = "serde_derive" -version = "1.0.125" +version = "1.0.136" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b093b7a2bb58203b5da3056c05b4ec1fed827dcfdb37347a8841695263b3d06d" +checksum = "08597e7152fcd306f41838ed3e37be9eaeed2b61c42e2117266a554fab4662f9" dependencies = [ "proc-macro2", "quote", @@ -2985,8 +2950,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dfebf75d25bd900fd1e7d11501efab59bc846dbc76196839663e6637bba9f25f" dependencies = [ "block-buffer 0.9.0", - "cfg-if 1.0.0", - "cpuid-bool 0.1.2", + "cfg-if", + "cpuid-bool", "digest 0.9.0", "opaque-debug 0.3.0", ] @@ -3005,17 +2970,28 @@ dependencies = [ [[package]] name = "sha2" -version = "0.9.3" +version = "0.9.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa827a14b29ab7f44778d14a88d3cb76e949c45083f7dbfa507d0cb699dc12de" +checksum = "4d58a1e1bf39749807d89cf2d98ac2dfa0ff1cb3faa38fbb64dd88ac8013d800" dependencies = [ "block-buffer 0.9.0", - "cfg-if 1.0.0", - "cpuid-bool 0.1.2", + "cfg-if", + "cpufeatures", "digest 0.9.0", "opaque-debug 0.3.0", ] +[[package]] +name = "sha2" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "99c3bd8169c58782adad9290a9af5939994036b76187f7b4f0e6de91dbbfc0ec" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest 0.10.1", +] + [[package]] name = "sha3" version = "0.9.1" @@ -3038,22 +3014,19 @@ dependencies = [ ] [[package]] -name = "signature" -version = "1.3.0" +name = "signal-hook-registry" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f0242b8e50dd9accdd56170e94ca1ebd223b098eb9c83539a6e367d0f36ae68" +checksum = "e51e73328dc4ac0c7ccbda3a494dfa03df1de2f46018127f60c693f2648455b0" +dependencies = [ + "libc", +] [[package]] -name = "simba" -version = "0.1.5" +name = "signature" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb931b1367faadea6b1ab1c306a860ec17aaa5fa39f367d0c744e69d971a1fb2" -dependencies = [ - "approx", - "num-complex", - "num-traits", - "paste 0.1.18", -] +checksum = "0f0242b8e50dd9accdd56170e94ca1ebd223b098eb9c83539a6e367d0f36ae68" [[package]] name = "slab" @@ -3079,9 +3052,9 @@ dependencies = [ [[package]] name = "smallvec" -version = "1.6.1" +version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe0f37c9e8f3c5a4a66ad655a93c74daac4ad00c441533bf5c6e7990bb42604e" +checksum = "f2dd574626839106c320a323308629dcb1acfc96e32a8cba364ddc61ac23ee83" [[package]] name = "socket2" @@ -3095,95 +3068,57 @@ dependencies = [ [[package]] name = "soketto" -version = "0.4.2" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5c71ed3d54db0a699f4948e1bb3e45b450fa31fe602621dee6680361d569c88" +checksum = "41d1c5305e39e09653383c2c7244f2f78b3bcae37cf50c64cb4789c9f5096ec2" dependencies = [ - "base64 0.12.3", - "bytes 0.5.6", + "base64", + "bytes", "futures", "httparse", "log", - "rand 0.7.3", + "rand 0.8.3", "sha-1", ] -[[package]] -name = "sp-api" -version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e63c3460d5daecf67df542c34c2bbd636214a5a200d4bddcfa2ffb9e72c346af" -dependencies = [ - "hash-db", - "parity-scale-codec 2.1.0", - "sp-api-proc-macro", - "sp-core", - "sp-runtime", - "sp-state-machine", - "sp-std 3.0.0", - "sp-version", - "thiserror", -] - -[[package]] -name = "sp-api-proc-macro" -version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "289624f4fe0f61e63a5019ed26c3bc732b5145eb52796ac6053cd72656d947a1" -dependencies = [ - "blake2-rfc", - "proc-macro-crate", - "proc-macro2", - "quote", - "syn", -] - [[package]] name = "sp-application-crypto" -version = "3.0.0" +version = "4.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c52e2e6d43036b97c4fce1ed87c5262c1ffdc78c655ada4d3024a3f8094bdd2c" +checksum = "d0a11468fbf1d08502f95a69388b16e927a872df556085b5be7e5c55cdd3022c" dependencies = [ - "parity-scale-codec 2.1.0", + "parity-scale-codec", + "scale-info", "serde", "sp-core", "sp-io", - "sp-std 3.0.0", + "sp-std", ] [[package]] name = "sp-arithmetic" -version = "3.0.0" +version = "4.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0f1c69966c192d1dee8521f0b29ece2b14db07b9b44d801a94e295234761645" +checksum = "aa92b9707afdaa807bcb985fcc70645ebbe6fbb2442620d61dc47e7f3553a7ae" dependencies = [ "integer-sqrt", "num-traits", - "parity-scale-codec 2.1.0", + "parity-scale-codec", + "scale-info", "serde", "sp-debug-derive", - "sp-std 3.0.0", -] - -[[package]] -name = "sp-authorship" -version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ec68fb8e5a37548b06c14ee91a9c574cc330324c86d37810ec29dd4f8bc68d7" -dependencies = [ - "parity-scale-codec 2.1.0", - "sp-inherents", - "sp-runtime", - "sp-std 3.0.0", + "sp-std", + "static_assertions", ] [[package]] name = "sp-core" -version = "3.0.0" +version = "4.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "abbc8d4e9b8a7d5819ed26f1374017bb32833ef4890e4ff065e1da30669876bc" +checksum = "8295f7e800feaa16453768efb63c3063401ec765590f8f6ac9fac808a790435e" dependencies = [ "base58", + "bitflags", "blake2-rfc", "byteorder", "dyn-clonable", @@ -3198,35 +3133,52 @@ dependencies = [ "log", "merlin", "num-traits", - "parity-scale-codec 2.1.0", + "parity-scale-codec", "parity-util-mem", "parking_lot", "primitive-types", "rand 0.7.3", "regex", + "scale-info", "schnorrkel", "secrecy", "serde", - "sha2 0.9.3", + "sha2 0.9.9", + "sp-core-hashing", "sp-debug-derive", "sp-externalities", "sp-runtime-interface", - "sp-std 3.0.0", + "sp-std", "sp-storage", + "ss58-registry", "substrate-bip39", "thiserror", "tiny-bip39", "tiny-keccak", "twox-hash", "wasmi", - "zeroize 1.2.0", + "zeroize", +] + +[[package]] +name = "sp-core-hashing" +version = "4.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec864a6a67249f0c8dd3d5acab43623a61677e85ff4f2f9b04b802d2fe780e83" +dependencies = [ + "blake2-rfc", + "byteorder", + "sha2 0.9.9", + "sp-std", + "tiny-keccak", + "twox-hash", ] [[package]] name = "sp-debug-derive" -version = "3.0.0" +version = "4.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e80275f23b4e7ba8f54dec5f90f016530e7307d2ee9445f617ab986cbe97f31e" +checksum = "d676664972e22a0796176e81e7bec41df461d1edf52090955cdab55f2c956ff2" dependencies = [ "proc-macro2", "quote", @@ -3235,47 +3187,34 @@ dependencies = [ [[package]] name = "sp-externalities" -version = "0.9.0" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2fdc625f8c7b13b9a136d334888b21b5743d2081cb666cb03efca1dc9b8f74d1" +checksum = "54226438dbff5ced9718b51eb44b7f38fe139c40a923a088275914519bf451d3" dependencies = [ "environmental", - "parity-scale-codec 2.1.0", - "sp-std 3.0.0", + "parity-scale-codec", + "sp-std", "sp-storage", ] -[[package]] -name = "sp-inherents" -version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2542380b535c6941502a0a3069a657eb5abb70fd67b11afa164d4a4b038ba73a" -dependencies = [ - "parity-scale-codec 2.1.0", - "parking_lot", - "sp-core", - "sp-std 3.0.0", - "thiserror", -] - [[package]] name = "sp-io" -version = "3.0.0" +version = "4.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33fd69f0a6e91bedc2fb1c5cc3689c212474b6c918274cb4cb14dbbe3c428c14" +checksum = "cfe902ca84673ea25897b04f1bae4db2955a0e01105fc115df3cfd5447f78848" dependencies = [ "futures", "hash-db", "libsecp256k1", "log", - "parity-scale-codec 2.1.0", + "parity-scale-codec", "parking_lot", "sp-core", "sp-externalities", "sp-keystore", "sp-runtime-interface", "sp-state-machine", - "sp-std 3.0.0", + "sp-std", "sp-tracing", "sp-trie", "sp-wasm-interface", @@ -3285,9 +3224,9 @@ dependencies = [ [[package]] name = "sp-keyring" -version = "3.0.0" +version = "4.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b59f2b0e94b2048d4984aa6eb40eef2e4c05d3adf27a083dd3c9b0fce74ef7a" +checksum = "886def304c161e61410a8339e9e9f662af214108f318f3d06beaa3f43e4820f7" dependencies = [ "lazy_static", "sp-core", @@ -3297,100 +3236,67 @@ dependencies = [ [[package]] name = "sp-keystore" -version = "0.9.0" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db6ccd2baf189112355338e8b224dc513cd239b974dbd717f12b3dc7a7248c3b" +checksum = "d37621e7224fff35ca9eb235e3edfe0a4a556408a23901f5f4a23f7b435c0c66" dependencies = [ "async-trait", "derive_more", "futures", "merlin", - "parity-scale-codec 2.1.0", + "parity-scale-codec", "parking_lot", "schnorrkel", "sp-core", "sp-externalities", ] -[[package]] -name = "sp-npos-elections" -version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "54e6e8b84ee0dc7bb65b55beba55ffbc17803222ab7c746a74f72fc5869c7320" -dependencies = [ - "parity-scale-codec 2.1.0", - "serde", - "sp-arithmetic", - "sp-core", - "sp-npos-elections-compact", - "sp-std 3.0.0", -] - -[[package]] -name = "sp-npos-elections-compact" -version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "085fbb1aa72d85a17524047fc1e708bc3bd038b02b46dc7ac601fa39c8af93d3" -dependencies = [ - "proc-macro-crate", - "proc-macro2", - "quote", - "syn", -] - [[package]] name = "sp-panic-handler" -version = "3.0.0" +version = "4.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "54702e109f1c8a870dd4065a497d2612d42cec5817126e96cc0658c5ea975784" +checksum = "2101f3c555fceafcfcfb0e61c55ea9ed80dc60bd77d54d9f25b369edb029e9a4" dependencies = [ "backtrace", -] - -[[package]] -name = "sp-rpc" -version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2e5b1ed655d11449073b914b048895f45241e02b3919d1d0187f315435fee18" -dependencies = [ - "serde", - "sp-core", + "lazy_static", + "regex", ] [[package]] name = "sp-runtime" -version = "3.0.0" +version = "4.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfa4b353b76f04616dbdb8d269d58dcac47acb31c006d3b70e7b64233e68695e" +checksum = "5c31cd604c0fc105f764ef77eb38a9d0bf71e7bd289f28fd09f32f7132c3c46f" dependencies = [ "either", "hash256-std-hasher", "impl-trait-for-tuples", "log", - "parity-scale-codec 2.1.0", + "parity-scale-codec", "parity-util-mem", - "paste 1.0.5", + "paste", "rand 0.7.3", + "scale-info", "serde", "sp-application-crypto", "sp-arithmetic", "sp-core", "sp-io", - "sp-std 3.0.0", + "sp-std", ] [[package]] name = "sp-runtime-interface" -version = "3.0.0" +version = "4.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2e5c88b4bc8d607e4e2ff767a85db58cf7101f3dd6064f06929342ea67fe8fb" +checksum = "7e0176151f1195b386ddb4e07d716713e1e29f36b65c0e6e91fe354fc2cec84d" dependencies = [ "impl-trait-for-tuples", - "parity-scale-codec 2.1.0", + "parity-scale-codec", "primitive-types", "sp-externalities", "sp-runtime-interface-proc-macro", - "sp-std 3.0.0", + "sp-std", "sp-storage", "sp-tracing", "sp-wasm-interface", @@ -3399,157 +3305,128 @@ dependencies = [ [[package]] name = "sp-runtime-interface-proc-macro" -version = "3.0.0" +version = "4.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19a6c7c2251512c9e533d15db8a863b06ece1cbee778130dd9adbe44b6b39aa9" +checksum = "2b58cc6060b2d2f35061db5b4172f4a47353c3f01a89f281699a6c3f05d1267a" dependencies = [ "Inflector", - "proc-macro-crate", + "proc-macro-crate 1.1.0", "proc-macro2", "quote", "syn", ] -[[package]] -name = "sp-session" -version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c7cf161533725a78083b04f3269effe4c3b4b6ce5f655019b3eec3e729ba4d4" -dependencies = [ - "parity-scale-codec 2.1.0", - "sp-api", - "sp-core", - "sp-runtime", - "sp-staking", - "sp-std 3.0.0", -] - -[[package]] -name = "sp-staking" -version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc729eb10f8809c61a1fe439ac118a4413de004aaf863003ee8752ac0b596e73" -dependencies = [ - "parity-scale-codec 2.1.0", - "sp-runtime", - "sp-std 3.0.0", -] - [[package]] name = "sp-state-machine" -version = "0.9.0" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46fa4143e58e9130f726d4e8a9b86f3530a8bd19a2eedcdcf4af205f4b5a6d4f" +checksum = "f3e3d9e8443f9d92348d779b06029603fbe536a59a05a0d8593ea2d3711c2330" dependencies = [ "hash-db", "log", "num-traits", - "parity-scale-codec 2.1.0", + "parity-scale-codec", "parking_lot", "rand 0.7.3", "smallvec", "sp-core", "sp-externalities", "sp-panic-handler", - "sp-std 3.0.0", + "sp-std", "sp-trie", "thiserror", + "tracing", "trie-db", "trie-root", ] [[package]] name = "sp-std" -version = "2.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2585fb8f5f4fde53c2f9ccebac4517da4dc435373a8fcaf5db7f54b798da66c2" - -[[package]] -name = "sp-std" -version = "3.0.0" +version = "4.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35391ea974fa5ee869cb094d5b437688fbf3d8127d64d1b9fed5822a1ed39b12" +checksum = "14804d6069ee7a388240b665f17908d98386ffb0b5d39f89a4099fc7a2a4c03f" [[package]] name = "sp-storage" -version = "3.0.0" +version = "4.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86af458d4a0251c490cdde9dcaaccb88d398f3b97ac6694cdd49ed9337e6b961" +checksum = "851e1315a935cd5a0ce1bb6e41b0d611ac2370ede860d551f9f133007487043a" dependencies = [ "impl-serde", - "parity-scale-codec 2.1.0", + "parity-scale-codec", "ref-cast", "serde", "sp-debug-derive", - "sp-std 3.0.0", -] - -[[package]] -name = "sp-timestamp" -version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "27387c541197b9f47f3d9ddcab5649a3ecdca582d2f2ea2b511af24a3d3cbf83" -dependencies = [ - "impl-trait-for-tuples", - "parity-scale-codec 2.1.0", - "sp-api", - "sp-inherents", - "sp-runtime", - "sp-std 3.0.0", - "wasm-timer", + "sp-std", ] [[package]] name = "sp-tracing" -version = "3.0.0" +version = "4.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "567382d8d4e14fb572752863b5cd57a78f9e9a6583332b590b726f061f3ea957" +checksum = "a4688fceac497cee7e9b72c387fef20fa517e2bf6a3bf52a4a45dcc9391d6201" dependencies = [ - "log", - "parity-scale-codec 2.1.0", - "sp-std 3.0.0", + "parity-scale-codec", + "sp-std", "tracing", "tracing-core", - "tracing-subscriber", + "tracing-subscriber 0.2.25", ] [[package]] name = "sp-trie" -version = "3.0.0" +version = "4.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b85b7f745da41ef825c6f7b93f1fdc897b03df94a4884adfbb70fbcd0aed1298" +checksum = "feb344969de755877440fccb691860acedd565061774d289886ff9c690206cc0" dependencies = [ "hash-db", "memory-db", - "parity-scale-codec 2.1.0", + "parity-scale-codec", + "scale-info", "sp-core", - "sp-std 3.0.0", + "sp-std", "trie-db", "trie-root", ] [[package]] name = "sp-version" -version = "3.0.0" +version = "4.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dbeffa538a13d715d30e01d57a2636ba32845b737a29a3ea32403576588222e7" +checksum = "8b57388721427e65bdfadf636eebf444a6f84f7a05b56af2e7c6928cf554c618" dependencies = [ "impl-serde", - "parity-scale-codec 2.1.0", + "parity-scale-codec", + "parity-wasm", + "scale-info", "serde", "sp-runtime", - "sp-std 3.0.0", + "sp-std", + "sp-version-proc-macro", + "thiserror", +] + +[[package]] +name = "sp-version-proc-macro" +version = "4.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "48fcafba97053cfa9fa366e6b30fd0d0e9d15530c4a738efaa117a4d5707d147" +dependencies = [ + "parity-scale-codec", + "proc-macro2", + "quote", + "syn", ] [[package]] name = "sp-wasm-interface" -version = "3.0.0" +version = "4.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b214e125666a6416cf30a70cc6a5dacd34a4e5197f8a3d479f714af7e1dc7a47" +checksum = "89a5b0fe5b5bd3259e914edc35b33b6f7b4b0c803981290256e8ed75eecf1b27" dependencies = [ "impl-trait-for-tuples", - "parity-scale-codec 2.1.0", - "sp-std 3.0.0", + "parity-scale-codec", + "sp-std", "wasmi", ] @@ -3559,6 +3436,20 @@ version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d" +[[package]] +name = "ss58-registry" +version = "1.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8319f44e20b42e5c11b88b1ad4130c35fe2974665a007b08b02322070177136a" +dependencies = [ + "Inflector", + "proc-macro2", + "quote", + "serde", + "serde_json", + "unicode-xid", +] + [[package]] name = "static_assertions" version = "1.1.0" @@ -3566,19 +3457,16 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" [[package]] -name = "statrs" -version = "0.12.0" +name = "strsim" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cce16f6de653e88beca7bd13780d08e09d4489dbca1f9210e041bc4852481382" -dependencies = [ - "rand 0.7.3", -] +checksum = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a" [[package]] name = "strsim" -version = "0.8.0" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a" +checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" [[package]] name = "structopt" @@ -3607,18 +3495,18 @@ dependencies = [ [[package]] name = "strum" -version = "0.20.0" +version = "0.22.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7318c509b5ba57f18533982607f24070a55d353e90d4cae30c467cdb2ad5ac5c" +checksum = "f7ac893c7d471c8a21f31cfe213ec4f6d9afeed25537c772e08ef3f005f8729e" dependencies = [ "strum_macros", ] [[package]] name = "strum_macros" -version = "0.20.1" +version = "0.22.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee8bc6b87a5112aeeab1f4a9f7ab634fe6cbefc4850006df31267f4cfb9e3149" +checksum = "339f799d8b549e3744c7ac7feb216383e4005d94bdb22561b3ab8f3b808ae9fb" dependencies = [ "heck", "proc-macro2", @@ -3628,82 +3516,95 @@ dependencies = [ [[package]] name = "substrate-bip39" -version = "0.4.2" +version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bed6646a0159b9935b5d045611560eeef842b78d7adc3ba36f5ca325a13a0236" +checksum = "49eee6965196b32f882dd2ee85a92b1dbead41b04e53907f269de3b0dc04733c" dependencies = [ - "hmac 0.7.1", - "pbkdf2 0.3.0", + "hmac 0.11.0", + "pbkdf2 0.8.0", "schnorrkel", - "sha2 0.8.2", - "zeroize 1.2.0", + "sha2 0.9.9", + "zeroize", ] [[package]] -name = "substrate-subxt" -version = "0.15.0" +name = "subtle" +version = "2.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e81da0851ada1f3e9d4312c704aa4f8806f0f9d69faaf8df2f3464b4a9437c2" + +[[package]] +name = "subxt" +version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "feb057a856b185f95a2b4dff834604a05c224e44fefa2d98a0a51ce9b2d666d0" +checksum = "22edb9ecb322f8c13ee0c7c39b2e47c2f77bd7501c1bec70f309d23fa407343d" dependencies = [ - "dyn-clone", + "async-trait", + "bitvec", + "chameleon", + "derivative", "frame-metadata", - "frame-support", - "funty", "futures", "hex", - "jsonrpsee-http-client", - "jsonrpsee-types", - "jsonrpsee-ws-client", + "jsonrpsee", "log", "num-traits", - "pallet-indices", - "pallet-staking", - "parity-scale-codec 2.1.0", + "parity-scale-codec", + "scale-info", "serde", "serde_json", - "sp-application-crypto", "sp-core", - "sp-rpc", "sp-runtime", - "sp-std 3.0.0", "sp-version", - "substrate-subxt-proc-macro", + "subxt-macro", "thiserror", "url", ] [[package]] -name = "substrate-subxt-proc-macro" -version = "0.15.0" +name = "subxt-codegen" +version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9995016a22428cb7ffd83193a03eea32f6158a516a0c130bb60c5e5f6c467c44" +checksum = "fbd96909c61fc5035e77bca490b75228a92b0d90b19ea70aa7b86d8448bd79de" dependencies = [ + "async-trait", + "darling", + "frame-metadata", "heck", - "proc-macro-crate", + "parity-scale-codec", + "proc-macro-crate 0.1.5", "proc-macro-error", "proc-macro2", "quote", + "scale-info", "syn", - "synstructure", ] [[package]] -name = "subtle" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d67a5a62ba6e01cb2192ff309324cb4875d0c451d55fe2319433abe7a05a8ee" - -[[package]] -name = "subtle" -version = "2.4.0" +name = "subxt-macro" +version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e81da0851ada1f3e9d4312c704aa4f8806f0f9d69faaf8df2f3464b4a9437c2" +checksum = "7f138aa4f7d73ecae3c3c2589803f311595a38260c71c4c79c395261038c295f" +dependencies = [ + "async-trait", + "darling", + "frame-metadata", + "heck", + "parity-scale-codec", + "proc-macro-crate 0.1.5", + "proc-macro-error", + "proc-macro2", + "quote", + "scale-info", + "subxt-codegen", + "syn", +] [[package]] name = "syn" -version = "1.0.60" +version = "1.0.86" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c700597eca8a5a762beb35753ef6b94df201c81cca676604f547495a0d7f0081" +checksum = "8a65b3f4ffa0092e9887669db0eae07941f023991ab58ea44da8fe8e2d511c6b" dependencies = [ "proc-macro2", "quote", @@ -3734,7 +3635,7 @@ version = "3.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dac1c663cfc93810f88aed9b8941d48cabf856a1b111c29a40439018d870eb22" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", "libc", "rand 0.8.3", "redox_syscall 0.2.4", @@ -3742,15 +3643,6 @@ dependencies = [ "winapi", ] -[[package]] -name = "termcolor" -version = "1.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2dfed899f0eb03f32ee8c6a0aabdb8a7949659e3466561fc0adf54e26d88c5f4" -dependencies = [ - "winapi-util", -] - [[package]] name = "terminal_size" version = "0.1.16" @@ -3772,18 +3664,18 @@ dependencies = [ [[package]] name = "thiserror" -version = "1.0.24" +version = "1.0.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0f4a65597094d4483ddaed134f409b2cb7c1beccf25201a9f73c719254fa98e" +checksum = "854babe52e4df1653706b98fcfc05843010039b406875930a70e4d9644e5c417" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.24" +version = "1.0.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7765189610d8241a44529806d6fd1f2e0a08734313a35d5b3a556f92b381f3c0" +checksum = "aa32fd3f627f367fe16f893e2597ae3c05020f8bba2666a4e6ea73d377e5714b" dependencies = [ "proc-macro2", "quote", @@ -3799,22 +3691,11 @@ dependencies = [ "once_cell", ] -[[package]] -name = "time" -version = "0.1.44" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6db9e6914ab8b1ae1c260a4ae7a49b6c5611b40328a735b21862567685e73255" -dependencies = [ - "libc", - "wasi 0.10.0+wasi-snapshot-preview1", - "winapi", -] - [[package]] name = "tiny-bip39" -version = "0.8.0" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9e44c4759bae7f1032e286a7ef990bd9ed23fe831b7eeba0beb97484c2e59b8" +checksum = "ffc59cb9dfc85bb312c3a78fd6aa8a8582e310b0fa885d5bb877f6dcc601839d" dependencies = [ "anyhow", "hmac 0.8.1", @@ -3822,10 +3703,11 @@ dependencies = [ "pbkdf2 0.4.0", "rand 0.7.3", "rustc-hash", - "sha2 0.9.3", + "sha2 0.9.9", "thiserror", "unicode-normalization", - "zeroize 1.2.0", + "wasm-bindgen", + "zeroize", ] [[package]] @@ -3864,23 +3746,39 @@ checksum = "cda74da7e1a664f795bb1f8a87ec406fb89a02522cf6e50620d016add6dbbf5c" [[package]] name = "tokio" -version = "1.4.0" +version = "1.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "134af885d758d645f0f0505c9a8b3f9bf8a348fd822e112ab5248138348f1722" +checksum = "0c27a64b625de6d309e8c57716ba93021dccf1b3b5c97edd6d3dd2d2135afc0a" dependencies = [ - "autocfg", - "bytes 1.0.1", + "bytes", "libc", "memchr", "mio", + "num_cpus", + "once_cell", + "parking_lot", "pin-project-lite", + "signal-hook-registry", + "tokio-macros", + "winapi", +] + +[[package]] +name = "tokio-macros" +version = "1.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b557f72f448c511a979e2564e55d74e6c4432fc96ff4f6241bc6bded342643b7" +dependencies = [ + "proc-macro2", + "quote", + "syn", ] [[package]] name = "tokio-rustls" -version = "0.22.0" +version = "0.23.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc6844de72e57df1980054b38be3a9f4702aba4858be64dd700181a8a6d0e1b6" +checksum = "a27d5f2b839802bd8267fa19b0530f5a08b9c08cd417976be2a65d130fe1c11b" dependencies = [ "rustls", "tokio", @@ -3893,8 +3791,9 @@ version = "0.6.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5143d049e85af7fbc36f5454d990e62c2df705b3589f123b71f441b6b59f443f" dependencies = [ - "bytes 1.0.1", + "bytes", "futures-core", + "futures-io", "futures-sink", "log", "pin-project-lite", @@ -3918,11 +3817,11 @@ checksum = "360dfd1d6d30e05fda32ace2c8c70e9c0a9da713275777f5a4dbb8a1893930c6" [[package]] name = "tracing" -version = "0.1.23" +version = "0.1.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7d40a22fd029e33300d8d89a5cc8ffce18bb7c587662f54629e94c9de5487f3" +checksum = "2d8d93354fe2a8e50d5953f5ae2e47a3fc2ef03292e7ea46e3cc38f549525fb9" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", "pin-project-lite", "tracing-attributes", "tracing-core", @@ -3930,9 +3829,9 @@ dependencies = [ [[package]] name = "tracing-attributes" -version = "0.1.12" +version = "0.1.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43f080ea7e4107844ef4766459426fa2d5c1ada2e47edba05dc7fa99d9629f47" +checksum = "8276d9a4a3a558d7b7ad5303ad50b53d58264641b82914b7ada36bd762e7a716" dependencies = [ "proc-macro2", "quote", @@ -3941,18 +3840,19 @@ dependencies = [ [[package]] name = "tracing-core" -version = "0.1.17" +version = "0.1.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f50de3927f93d202783f4513cda820ab47ef17f624b03c096e86ef00c67e6b5f" +checksum = "03cfcb51380632a72d3111cb8d3447a8d908e577d31beeac006f836383d29a23" dependencies = [ "lazy_static", + "valuable", ] [[package]] name = "tracing-log" -version = "0.1.1" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e0f8c7178e13481ff6765bd169b33e8d554c5d2bbede5e32c356194be02b9b9" +checksum = "a6923477a48e41c1951f1999ef8bb5a3023eb723ceadafe78ffb65dc366761e3" dependencies = [ "lazy_static", "log", @@ -3971,14 +3871,14 @@ dependencies = [ [[package]] name = "tracing-subscriber" -version = "0.2.15" +version = "0.2.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1fa8f0c8f4c594e4fc9debc1990deab13238077271ba84dd853d54902ee3401" +checksum = "0e0d2eaa99c3c2e41547cfa109e910a68ea03823cccad4a0525dcbc9b01e8c71" dependencies = [ "ansi_term 0.12.1", "chrono", "lazy_static", - "matchers", + "matchers 0.0.1", "regex", "serde", "serde_json", @@ -3991,14 +3891,32 @@ dependencies = [ "tracing-serde", ] +[[package]] +name = "tracing-subscriber" +version = "0.3.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77be66445c4eeebb934a7340f227bfe7b338173d3f8c00a60a5a58005c9faecf" +dependencies = [ + "ansi_term 0.12.1", + "lazy_static", + "matchers 0.1.0", + "regex", + "sharded-slab", + "smallvec", + "thread_local", + "tracing", + "tracing-core", + "tracing-log", +] + [[package]] name = "trie-db" -version = "0.22.3" +version = "0.22.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec051edf7f0fc9499a2cb0947652cab2148b9d7f61cee7605e312e9f970dacaf" +checksum = "9eac131e334e81b6b3be07399482042838adcd7957aa0010231d0813e39e02fa" dependencies = [ "hash-db", - "hashbrown", + "hashbrown 0.11.2", "log", "rustc-hex", "smallvec", @@ -4021,21 +3939,38 @@ checksum = "59547bce71d9c38b83d9c0e92b6066c4253371f15005def0c30d9657f50c7642" [[package]] name = "twox-hash" -version = "1.6.0" +version = "1.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04f8ab788026715fa63b31960869617cba39117e520eb415b0139543e325ab59" +checksum = "4ee73e6e4924fe940354b8d4d98cad5231175d615cd855b758adc658c0aac6a0" dependencies = [ - "cfg-if 0.1.10", - "rand 0.7.3", + "cfg-if", + "rand 0.8.3", "static_assertions", ] +[[package]] +name = "typed-builder" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a46ee5bd706ff79131be9c94e7edcb82b703c487766a114434e5790361cf08c5" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "typenum" version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "373c8a200f9e67a0c95e62a4f52fbf80c23b4381c05a17845531982fa99e6b33" +[[package]] +name = "ucd-trie" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56dee185309b50d1f11bfedef0fe6d036842e3fb77413abef29f8f8d1c5d4c1c" + [[package]] name = "uint" version = "0.9.0" @@ -4048,15 +3983,6 @@ dependencies = [ "static_assertions", ] -[[package]] -name = "unicase" -version = "2.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50f37be617794602aabbeee0be4f259dc1778fabe05e2d67ee8f79326d5cb4f6" -dependencies = [ - "version_check", -] - [[package]] name = "unicode-bidi" version = "0.3.4" @@ -4100,7 +4026,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8326b2c654932e3e4f9196e69d08fdf7cfd718e1dc6f66b347e6024a0c961402" dependencies = [ "generic-array 0.14.4", - "subtle 2.4.0", + "subtle", ] [[package]] @@ -4131,19 +4057,10 @@ dependencies = [ ] [[package]] -name = "value-bag" -version = "1.0.0-alpha.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b676010e055c99033117c2343b33a40a30b91fecd6c49055ac9cd2d6c305ab1" -dependencies = [ - "ctor", -] - -[[package]] -name = "vec-arena" -version = "1.0.0" +name = "valuable" +version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eafc1b9b2dfc6f5529177b62cf806484db55b32dc7c9658a118e11bbeb33061d" +checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" [[package]] name = "vec_map" @@ -4157,12 +4074,6 @@ version = "0.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b5a972e5669d67ba988ce3dc826706fb0a8b01471c088cb0b6110b805cc36aed" -[[package]] -name = "waker-fn" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d5b2c62b4012a3e1eca5a7e077d13b3bf498c4073e33ccd58626607748ceeca" - [[package]] name = "walkdir" version = "2.3.1" @@ -4202,7 +4113,7 @@ version = "0.2.70" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "55c0f7123de74f0dab9b7d00fd614e7b19349cd1e2f5252bbe9b1754b59433be" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", "wasm-bindgen-macro", ] @@ -4221,18 +4132,6 @@ dependencies = [ "wasm-bindgen-shared", ] -[[package]] -name = "wasm-bindgen-futures" -version = "0.4.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3de431a2910c86679c34283a33f66f4e4abd7e0aec27b6669060148872aadf94" -dependencies = [ - "cfg-if 1.0.0", - "js-sys", - "wasm-bindgen", - "web-sys", -] - [[package]] name = "wasm-bindgen-macro" version = "0.2.70" @@ -4262,27 +4161,13 @@ version = "0.2.70" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dd4945e4943ae02d15c13962b38a5b1e81eadd4b71214eee75af64a4d6a4fd64" -[[package]] -name = "wasm-timer" -version = "0.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be0ecb0db480561e9a7642b5d3e4187c128914e58aa84330b9493e3eb68c5e7f" -dependencies = [ - "futures", - "js-sys", - "parking_lot", - "pin-utils", - "wasm-bindgen", - "wasm-bindgen-futures", - "web-sys", -] - [[package]] name = "wasmi" -version = "0.6.2" +version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf617d864d25af3587aa745529f7aaa541066c876d57e050c0d0c85c61c92aff" +checksum = "ca00c5147c319a8ec91ec1a0edbec31e566ce2c9cc93b3f9bb86a9efd0eb795d" dependencies = [ + "downcast-rs", "libc", "memory_units", "num-rational", @@ -4293,9 +4178,9 @@ dependencies = [ [[package]] name = "wasmi-validation" -version = "0.3.0" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea78c597064ba73596099281e2f4cfc019075122a65cdda3205af94f0b264d93" +checksum = "165343ecd6c018fc09ebcae280752702c9a2ef3e6f8d02f1cfcbdb53ef6d7937" dependencies = [ "parity-wasm", ] @@ -4311,20 +4196,18 @@ dependencies = [ ] [[package]] -name = "webb-bulletproofs" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3dcc103f95a2509aea2ca010f7f06b137bc4693cf57f39947937ae00d487266" +name = "webb" +version = "0.2.6" +source = "git+https://github.com/webb-tools/webb-rs.git?rev=4037988#4037988730f64d3ddb842e32b55ca7aae141fb42" dependencies = [ - "byteorder", - "clear_on_drop", - "curve25519-dalek 3.0.2", - "digest 0.9.0", - "merlin", - "rand_core 0.5.1", - "sha3", - "sp-std 2.0.1", - "subtle 2.4.0", + "async-trait", + "hex", + "parity-scale-codec", + "rand 0.8.3", + "serde_json", + "subxt", + "tempfile", + "thiserror", ] [[package]] @@ -4332,48 +4215,63 @@ name = "webb-cli" version = "0.1.0-beta.2" dependencies = [ "anyhow", - "async-std", + "ark-bls12-381", + "ark-bn254", + "ark-crypto-primitives", + "ark-ed-on-bn254", + "ark-ff", + "ark-serialize", + "ark-std", + "arkworks-circuits", + "arkworks-gadgets", + "arkworks-utils", "async-trait", - "bulletproofs-gadgets", "chacha20poly1305", - "console 0.13.0", + "console", "criterion", - "curve25519-dalek 3.0.2", "dialoguer", "directories-next", - "env_logger", - "ethereum-types", - "frame-support", "hex", "indicatif", - "jsonrpsee-types", - "jsonrpsee-ws-client", - "log", - "merlin", - "parity-scale-codec 2.1.0", "paw", "prost", "rand 0.8.3", "secrecy", + "serde", "serde_json", - "sha2 0.9.3", + "sha2 0.10.1", "sled", "sp-keyring", "structopt", - "substrate-subxt", "thiserror", "tiny-bip39", + "tokio", + "tracing", + "tracing-subscriber 0.3.6", + "typed-builder", "url", "uuid", - "webb-bulletproofs", - "zeroize 1.2.0", + "webb", + "webb-pedersen-hash", + "zeroize", +] + +[[package]] +name = "webb-pedersen-hash" +version = "0.1.0" +source = "git+https://github.com/webb-tools/webb-rs.git?rev=4037988#4037988730f64d3ddb842e32b55ca7aae141fb42" +dependencies = [ + "ark-crypto-primitives", + "ark-ed-on-bn254", + "ark-ff", + "rand_chacha 0.3.0", ] [[package]] name = "webpki" -version = "0.21.4" +version = "0.22.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8e38c0608262c46d4a56202ebabdeb094cef7e560ca7a226c6bf055188aa4ea" +checksum = "f095d78192e208183081cc07bc5515ef55216397af48b873e5edcd72637fa1bd" dependencies = [ "ring", "untrusted", @@ -4381,22 +4279,13 @@ dependencies = [ [[package]] name = "webpki-roots" -version = "0.21.1" +version = "0.22.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aabe153544e473b775453675851ecc86863d2a81d786d741f6b76778f2a48940" +checksum = "552ceb903e957524388c4d3475725ff2c8b7960922063af6ce53c9a43da07449" dependencies = [ "webpki", ] -[[package]] -name = "wepoll-sys" -version = "3.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fcb14dea929042224824779fbc82d9fab8d2e6d3cbc0ac404de8edf489e77ff" -dependencies = [ - "cc", -] - [[package]] name = "winapi" version = "0.3.9" @@ -4436,15 +4325,9 @@ checksum = "85e60b0d1b5f99db2556934e21937020776a5d31520bf169e851ac44e6420214" [[package]] name = "zeroize" -version = "0.9.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "45af6a010d13e4cf5b54c94ba5a2b2eba5596b9e46bf5875612d332a1f2b3f86" - -[[package]] -name = "zeroize" -version = "1.2.0" +version = "1.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81a974bcdd357f0dca4d41677db03436324d45a4c9ed2d0b873a5a360ce41c36" +checksum = "d68d9dcec5f9b43a30d38c49f91dfedfaac384cb8f085faca366c26207dd1619" dependencies = [ "zeroize_derive", ] diff --git a/Cargo.toml b/Cargo.toml index 8590a63..1530e62 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -3,9 +3,9 @@ name = "webb-cli" version = "0.1.0-beta.2" authors = [ "Webb Developers ", - "Shady Khalifa " + "Shady Khalifa ", ] -edition = "2018" +edition = "2021" [[bin]] @@ -18,66 +18,69 @@ name = "mixer" harness = false [dependencies] -async-std = "1.8" async-trait = "0.1" -log = "0.4" -subxt = { version = "0.15", package = "substrate-subxt" } -jsonrpsee-types = "=0.2.0-alpha.3" -jsonrpsee-ws-client = "=0.2.0-alpha.3" +tracing = "0.1" thiserror = "1.0" zeroize = "^1" tiny-bip39 = "0.8" +serde = { version = "1.0", features = ["derive"] } uuid = { version = "0.8", features = ["v4"] } -codec = { package = "parity-scale-codec", version = "2.0.0", features = ["derive", "full"] } -ethereum-types = { version = "0.11", default-features = false, features = ["codec"] } rand = "0.8" -sha2 = "0.9" +sha2 = "0.10" hex = "0.4" url = "2.2" +typed-builder = "0.9.1" -# Pallets -frame-support = "3.0.0" +# Arkworks +ark-ff = { version = "^0.3.0", default-features = true } +ark-serialize = "0.3.0" +ark-crypto-primitives = { version = "^0.3.0", default-features = true, features = [ + "r1cs", +] } +ark-ed-on-bn254 = { version = "^0.3.0", default-features = true, features = [ + "r1cs", +] } +ark-bn254 = { version = "^0.3.0", default-features = true, features = [ + "curve", +] } +ark-bls12-381 = { version = "^0.3.0", default-features = false, features = [ + "curve", +] } +ark-std = { version = "^0.3.0" } +arkworks-gadgets = { version = "0.4.18", default-features = true } +arkworks-circuits = { version = "0.4.18", default-features = false } +arkworks-utils = { version = "0.4.18", default-features = false } +# Runtime +tokio = { version = "^1", features = ["full"] } +# SDK +webb = { git = "https://github.com/webb-tools/webb-rs.git", rev = "4037988", default-features = false } +webb-pedersen-hash = { git = "https://github.com/webb-tools/webb-rs.git", rev = "4037988", default-features = false } # CLI anyhow = { version = "1.0", optional = true } -env_logger = { version = "0.8", optional = true } +tracing-subscriber = { version = "0.3", optional = true, features = [ + "env-filter", +] } structopt = { version = "0.3", optional = true, features = ["paw"] } paw = { version = "1.0", optional = true } sled = { version = "0.34", optional = true } directories-next = { version = "2.0", optional = true } -prost = { version = "0.7", optional = true } -secrecy = { version = "0.7", optional = true } -chacha = { version = "0.7", optional = true, package = "chacha20poly1305" } -console = { version = "0.13", optional = true } -indicatif = { version = "0.15", optional = true } -dialoguer = { version = "0.7", optional = true } +prost = { version = "0.9", optional = true } +secrecy = { version = "0.8", optional = true } +chacha = { version = "0.9", optional = true, package = "chacha20poly1305" } +console = { version = "0.15", optional = true } +indicatif = { version = "0.16", optional = true } +dialoguer = { version = "0.9", optional = true } serde_json = { version = "1", optional = true } -# Anon -merlin = "2.0.0" -[dependencies.curve25519-dalek] -version = "3.0.0" -default-features = false -features = ["u64_backend", "alloc"] - -[dependencies.bulletproofs] -version = "2.0.0" -package = "webb-bulletproofs" -default-features = false -features = ["yoloproofs"] - -[dependencies.bulletproofs-gadgets] -version = "2.0.0" -default-features = false [features] -default = [] +default = ["webb/substrate-runtime"] cli = [ "structopt", "paw", - "env_logger", + "tracing-subscriber", "anyhow", - "async-std/attributes", "sled", "directories-next", "prost", @@ -86,11 +89,11 @@ cli = [ "console", "indicatif", "dialoguer", - "serde_json" + "serde_json", + "webb/substrate-runtime", ] integration-tests = [] [dev-dependencies] -async-std = { version = "1.8", features = ["attributes"] } -sp-keyring = "3.0.0" +sp-keyring = "4.0.0" criterion = "0.3" diff --git a/rustfmt.toml b/rustfmt.toml index d147ae5..01143d7 100644 --- a/rustfmt.toml +++ b/rustfmt.toml @@ -4,7 +4,7 @@ fn_single_line = true match_block_trailing_comma = true normalize_comments = true wrap_comments = true -imports_granularity = "Module" +imports_granularity = "Crate" reorder_impl_items = true use_field_init_shorthand = true use_try_shorthand = true diff --git a/src/account.rs b/src/account.rs index 61c535b..7491041 100644 --- a/src/account.rs +++ b/src/account.rs @@ -1,19 +1,25 @@ use core::fmt; -use subxt::sp_core::sr25519::Pair as Sr25519Pair; -use subxt::sp_core::Pair; -use subxt::PairSigner; use uuid::Uuid; +use webb::substrate::subxt::{ + sp_core::{crypto::Pair, sr25519::Pair as Sr25519Pair}, + PairSigner, {self}, +}; -use crate::error::Error; -use crate::keystore::{KeyPair, PublicFor}; -use crate::runtime::WebbRuntime; +use crate::{ + error::Error, + keystore::{KeyPair, PublicFor}, +}; pub struct Account { pub uuid: Uuid, pub alias: String, pub address: PublicFor, - pub signer: PairSigner, + pub signer: PairSigner< + subxt::DefaultConfig, + subxt::DefaultExtra, + Sr25519Pair, + >, pub seed: [u8; 32], } @@ -24,7 +30,7 @@ impl fmt::Debug for Account { .field("alias", &self.alias) .field("address", &self.address) .field("signer", &"[....]") - .field("entropy", &"[....]") + .field("seed", &"[....]") .finish() } } diff --git a/src/commands/account.rs b/src/commands/account.rs index d61b6f7..05fdf80 100644 --- a/src/commands/account.rs +++ b/src/commands/account.rs @@ -6,11 +6,13 @@ use console::{style, Emoji}; use dialoguer::theme::ColorfulTheme; use secrecy::SecretString; use structopt::StructOpt; -use subxt::sp_core::crypto::{Ss58AddressFormat, Ss58Codec}; -use subxt::sp_runtime::traits::IdentifyAccount; +use subxt::{ + sp_core::crypto::{Ss58AddressFormatRegistry, Ss58Codec}, + sp_runtime::traits::IdentifyAccount, +}; +use webb::substrate::subxt; -use crate::context::ExecutionContext; -use crate::ext::OptionPromptExt; +use crate::{context::ExecutionContext, ext::OptionPromptExt}; /// Modify or query the saved accounts. #[derive(StructOpt)] @@ -119,9 +121,9 @@ impl super::CommandExec for ImportAccount { context.set_secret(password); } let address = context.import_account(alias.clone(), paper_key)?; - let account = address - .into_account() - .to_ss58check_with_version(Ss58AddressFormat::SubstrateAccount); + let account = address.into_account().to_ss58check_with_version( + Ss58AddressFormatRegistry::SubstrateAccount.into(), + ); writeln!(term, "{} Account Imported!", Emoji("🎉", "※"))?; writeln!( term, @@ -175,7 +177,7 @@ impl super::CommandExec for GenerateAccount { writeln!(term, "Keep it carefully to not lose your assets.")?; writeln!(term)?; writeln!(term, "To set this account as default:")?; - writeln!(term, " $ webb default {}", alias)?; + writeln!(term, " $ webb default -a {}", alias)?; Ok(()) } } diff --git a/src/commands/default.rs b/src/commands/default.rs index b68d71f..c4ff428 100644 --- a/src/commands/default.rs +++ b/src/commands/default.rs @@ -29,8 +29,8 @@ impl super::CommandExec for DefaultCommand { // Prompt the user to choose one of the accounts. let non_default_accounts: Vec<_> = context .accounts() - .to_owned() - .into_iter() + .iter() + .cloned() .filter(|a| !a.is_default) .map(|v| v.alias) .collect(); diff --git a/src/commands/mixer.rs b/src/commands/mixer.rs index 46b05bd..d11d9bb 100644 --- a/src/commands/mixer.rs +++ b/src/commands/mixer.rs @@ -1,24 +1,19 @@ -use std::io::Write; -use std::str::FromStr; +use std::{collections::HashMap, io::Write, str::FromStr}; use anyhow::Context; use async_trait::async_trait; use console::{style, Emoji}; use indicatif::{ProgressBar, ProgressStyle}; -use jsonrpsee_types::jsonrpc::Params; use secrecy::SecretString; use structopt::StructOpt; -use subxt::sp_core::crypto::AccountId32; -use subxt::system::*; -use subxt::{RpcClient, Signer}; -use webb_cli::mixer::{Mixer, Note, TokenSymbol}; -use webb_cli::pallet::merkle::*; -use webb_cli::pallet::mixer::*; -use webb_cli::pallet::ScalarData; -use webb_cli::runtime::WebbRuntime; +use subxt::Signer; +use webb::substrate::subxt::{self, TransactionStatus}; +use webb_cli::{mixer, note::Note}; -use crate::context::{ExecutionContext, SystemProperties}; -use crate::ext::OptionPromptExt; +use crate::{ + context::{ExecutionContext, SystemProperties}, + ext::OptionPromptExt, +}; /// Webb Crypto Mixer. #[derive(StructOpt)] @@ -137,21 +132,19 @@ pub struct GenerateNote { /// an easy to remember the Note. #[structopt(short, long)] alias: Option, - /// the mixer group that this note will be generated for. + /// the mixer size that this note will be generated for. /// /// you can't change this later when you try to do a deposit /// using this note. /// - /// leave empty to prompt with the available mixer groups. + /// leave empty to prompt with the available mixer sizes. #[structopt(short, long)] - group: Option, + size: Option, } #[async_trait] impl super::CommandExec for GenerateNote { async fn exec(self, context: &mut ExecutionContext) -> anyhow::Result<()> { - type MixerTreeIds = MixerTreeIdsStore; - let mut term = console::Term::stdout(); let theme = dialoguer::theme::ColorfulTheme::default(); let alias = self.alias.unwrap_or_prompt("Note Alias", &theme)?; @@ -163,33 +156,65 @@ impl super::CommandExec for GenerateNote { pb.set_style(pb_style.clone()); pb.set_prefix("[1/3]"); pb.set_message("Connecting .."); - let client = context.client().await?; + let api = context.client().await?; + let props_raw = api.client.rpc().system_properties().await?; + let props = SystemProperties::from(props_raw); + let chain_id = api.constants().bridge().chain_identifier()?; pb.set_prefix("[2/3]"); - pb.set_message("Getting Mixer Groups .."); - let mixer_group_ids = client - .fetch_or_default(&MixerTreeIds::default(), None) - .await?; + pb.set_message("Fetching Mixers and assets .."); + let mut mixers_iter = + api.storage().mixer_bn254().mixers_iter(None).await?; + let mut mixers = Vec::new(); + let mut assets = HashMap::new(); + while let Some((_, mixer)) = mixers_iter.next().await? { + let asset = api + .storage() + .asset_registry() + .assets(mixer.asset, None) + .await? + .context(format!( + "failed to fetch asset #{} information", + mixer.asset + ))?; + assets.insert(mixer.asset, asset); + mixers.push(mixer); + } pb.finish_and_clear(); - let mixer_group_id = if let Some(val) = self.group { - if mixer_group_ids.contains(&val) { - val - } else { - writeln!(term, "Available groups: {:?}", mixer_group_ids)?; - anyhow::bail!("Invalid Mixer group!"); + let (asset, mixer) = if let Some(val) = self.size { + // find the mixer with the size. + let size = val; + let maybe_mixer = mixers + .iter() + .find(|mixer| mixer.deposit_size == size) + .cloned(); + match maybe_mixer { + Some(v) => (assets[&v.asset].clone(), v), + None => { + let sizes = mixers + .iter() + .map(|mixer| mixer.deposit_size) + .collect::>(); + writeln!(term, "Available sizes: {:?}", sizes)?; + anyhow::bail!("Invalid Mixer size!"); + }, } } else { - let f = |i| format!("Group #{} with 1,000{} EDG", i, "0".repeat(i)); - let items: Vec<_> = mixer_group_ids + let f = |(size, asset)| format!("Mixer {size} {asset}"); + let items: Vec<_> = mixers .iter() - .cloned() - .map(|v| v as usize) + .map(|v| { + ( + v.deposit_size, + String::from_utf8_lossy(&assets[&v.asset].name.0), + ) + }) .map(f) .collect(); let i = dialoguer::Select::with_theme(&theme) - .with_prompt("Select Mixer Group") + .with_prompt("Select Your Mixer") .items(&items) .interact_on(&term)?; - mixer_group_ids[i] + (assets[&mixers[i].asset].clone(), mixers[i].clone()) }; if !context.has_secret() { let password = Option::::None @@ -209,16 +234,17 @@ impl super::CommandExec for GenerateNote { pb.set_message("Generating Note.."); context.generate_note( alias.clone(), - mixer_group_id, - TokenSymbol::Edg, + asset, + mixer, + props.token_decimals, + chain_id as _, )?; pb.finish_with_message("Done!"); pb.finish_and_clear(); writeln!( term, - "Note Generated with alias {} for #{} Mixer Group", + "Note Generated with alias {} and saved locally", style(alias).green(), - mixer_group_id )?; writeln!(term)?; writeln!(term, "Next, Do a dopist using this note.")?; @@ -265,7 +291,7 @@ impl super::CommandExec for DepositAsset { writeln!(term, "try generating new ones or importing them.")?; writeln!(term)?; writeln!(term, "$ webb mixer help")?; - return Ok(()); + anyhow::bail!("No notes saved!"); } let note = if let Some(val) = self.alias { notes @@ -296,46 +322,114 @@ impl super::CommandExec for DepositAsset { .signer() .context("incorrect default account password!")?; let secret_note = context.decrypt_note(note.uuid.clone())?; + let api = context.client().await?; let pb = ProgressBar::new_spinner(); let pb_style = ProgressStyle::default_spinner() .tick_chars("⠁⠂⠄⡀⢀⠠⠐⠈ ") .template("{prefix:.bold.dim} {spinner} {wide_msg}"); pb.enable_steady_tick(60); pb.set_style(pb_style); - pb.set_prefix("[1/4]"); - pb.set_message("Creating Mixer.."); - let mut mixer = Mixer::new(secret_note.mixer_id); - pb.set_prefix("[2/4]"); - pb.set_message("Adding Note to the Mixer ..."); - let leaf = mixer.save_note(secret_note); - pb.set_prefix("[3/4]"); - pb.set_message("Connecting to the network..."); - let client = context.client().await?; - pb.set_prefix("[4/4]"); + pb.set_prefix("[1/3]"); + pb.set_message("Fetching Mixers and assets .."); + let mixer_count = + api.storage().merkle_tree_bn254().next_tree_id(None).await?; + let mut mixers = HashMap::new(); + let mut assets = HashMap::new(); + for i in 0..mixer_count { + let maybe_mixer = + api.storage().mixer_bn254().mixers(i, None).await?; + let mixer = match maybe_mixer { + Some(m) => m, + None => continue, + }; + let asset = api + .storage() + .asset_registry() + .assets(mixer.asset, None) + .await? + .context(format!( + "failed to fetch asset #{} information", + mixer.asset + ))?; + assets.insert(mixer.asset, asset); + mixers.insert(i, mixer); + } + + let (asset_id, _) = assets + .into_iter() + .find(|(_, a)| a.name.0 == secret_note.token_symbol.as_bytes()) + .context(format!( + "No asset with symbol {} found on-chain!", + secret_note.token_symbol + ))?; + let note_deposit_size = u128::from_str(&secret_note.amount) + .context("failed to parse note deposit size from it's amount")?; + let (mixer_id, _) = mixers + .into_iter() + .find(|(_, m)| { + m.asset == asset_id && m.deposit_size == note_deposit_size + }) + .context("No mixer found for this asset!")?; + pb.set_prefix("[2/3]"); + pb.set_message("Generating Your secret leaf ..."); + let (leaf, ..) = mixer::get_leaf_from_note(&secret_note)?; + pb.set_prefix("[3/3]"); pb.set_message("Doing the deposit..."); - let xt = client - .deposit_and_watch(&signer, note.mixer_id, vec![leaf]) + let mut progress = api + .tx() + .mixer_bn254() + .deposit(mixer_id, leaf) + .sign_and_submit_then_watch(&signer) .await?; + while let Some(state) = progress.next_item().await { + let s = state?; + match s { + TransactionStatus::Ready => { + pb.set_message("Transaction is ready ...") + }, + TransactionStatus::Broadcast(_) => { + pb.set_message("Transaction is broadcasted ..."); + }, + TransactionStatus::InBlock(details) => { + let tx_hash = details.block_hash(); + pb.set_message(format!( + "Transaction is in block {tx_hash}" + )); + }, + TransactionStatus::Retracted(_) => { + pb.set_message("Transaction is retracted ..."); + }, + TransactionStatus::FinalityTimeout(_) => { + pb.set_message("Transaction is timeout ..."); + }, + TransactionStatus::Finalized(details) => { + let tx_hash = details.block_hash(); + pb.set_message(format!( + "Transaction is finalized {tx_hash}" + )); + }, + TransactionStatus::Usurped(_) => { + pb.set_message("Transaction is usurped ..."); + }, + TransactionStatus::Dropped => { + pb.set_message("Transaction is dropped ..."); + }, + TransactionStatus::Invalid => { + pb.set_message("Transaction is invalid ..."); + anyhow::bail!("Transaction is invalid!"); + }, + _ => continue, + }; + } context.mark_note_as_used(note.uuid)?; pb.finish_and_clear(); - let xt_block = xt.block; - let maybe_block = client.block(Some(xt_block)).await?; - let signed_block = - maybe_block.context("reading block from network!")?; - let number = signed_block.block.header.number; - let hash = signed_block.block.header.hash(); - let account_id = signer.account_id(); - let account = client.account(&account_id, None).await?; - let props = SystemProperties::from(client.properties()); + let account_id = signer.account_id().clone(); + let account = api.storage().system().account(account_id, None).await?; + let props_raw = api.client.rpc().system_properties().await?; + let props = SystemProperties::from(props_raw); let balance = account.data.free / 10u128.pow(props.token_decimals as u32); writeln!(term, "{} Note Deposited Successfully!", Emoji("🎉", "※"))?; - writeln!( - term, - "Block Number: #{} {}", - style(number).blue(), - style(hash).dim().green() - )?; writeln!(term)?; writeln!( term, @@ -367,161 +461,6 @@ pub struct WithdrawAsset { #[async_trait] impl super::CommandExec for WithdrawAsset { async fn exec(self, context: &mut ExecutionContext) -> anyhow::Result<()> { - type MixerTrees = MixerTreesStore; - type CachedRoots = CachedRootsStore; - - let mut term = console::Term::stdout(); - let theme = dialoguer::theme::ColorfulTheme::default(); - let notes: Vec<_> = context.notes().iter().filter(|n| n.used).collect(); - if notes.is_empty() { - writeln!(term)?; - writeln!(term, "there is no used notes!")?; - writeln!(term, "try generating new ones and do a deposit first or importing them.")?; - writeln!(term)?; - writeln!(term, "$ webb mixer help")?; - return Ok(()); - } - let note = if let Some(val) = self.alias { - notes - .into_iter() - .cloned() - .find(|n| n.alias == val) - .context("note not found") - } else { - let items: Vec<_> = - notes.iter().map(|n| format!("{}", n)).collect(); - let notes = notes.to_owned(); - let i = dialoguer::Select::with_theme(&theme) - .with_prompt("Select one of these notes") - .items(&items) - .interact_on(&term)?; - Ok(notes[i].clone()) - }?; - - if !context.has_secret() { - let password = Option::::None - .unwrap_or_prompt_password( - "Default Account Password", - &theme, - )?; - context.set_secret(password); - } - let signer = context - .signer() - .context("incorrect default account password!")?; - let secret_note = context.decrypt_note(note.uuid.clone())?; - let pb = ProgressBar::new_spinner(); - let pb_style = ProgressStyle::default_spinner() - .tick_chars("⠁⠂⠄⡀⢀⠠⠐⠈ ") - .template("{prefix:.bold.dim} {spinner} {wide_msg}"); - pb.enable_steady_tick(60); - pb.set_style(pb_style); - pb.set_prefix("[1/6]"); - pb.set_message("Creating Mixer.."); - let mut mixer = Mixer::new(secret_note.mixer_id); - pb.set_prefix("[2/6]"); - pb.set_message("Adding Note to the Mixer ..."); - let leaf = mixer.save_note(secret_note); - pb.set_prefix("[3/6]"); - pb.set_message("Connecting to the network..."); - let client = context.client().await?; - pb.set_prefix("[4/6]"); - pb.set_message(&format!("Getting Mixer #{} leaves", note.mixer_id)); - client - .fetch(&MixerTrees::new(note.mixer_id), None) - .await? - .context("mixer info not found!")?; - let rpc_client = context.rpc_client().await?; - let leaves = fetch_tree_leaves(&rpc_client, note.mixer_id).await?; - mixer.add_leaves(leaves); - let recent_hash = client.block_hash(None).await?; - let recent = client - .block(recent_hash) - .await? - .context("getting last block")?; - let roots = client - .fetch( - &CachedRoots::new(recent.block.header.number, note.mixer_id), - None, - ) - .await? - .context("no cached roots on the block!")?; - let root = roots.first().cloned().context("recent roots are empty!")?; - pb.set_prefix("[5/6]"); - pb.set_message("Generating zkProof .."); - let zkproof = mixer.generate_proof(root, leaf); - pb.set_prefix("[6/6]"); - pb.set_message("Doing the Withdraw! ..."); - let xt = client - .withdraw_and_watch( - &signer, - WithdrawProof { - mixer_id: note.mixer_id, - proof_commitments: zkproof.proof_commitments, - leaf_index_commitments: zkproof.leaf_index_commitments, - proof_bytes: zkproof.proof_bytes, - nullifier_hash: zkproof.nullifier_hash, - comms: zkproof.comms, - relayer: Some(AccountId32::new(zkproof.relayer.0)), - recipient: Some(AccountId32::new(zkproof.recipient.0)), - cached_root: root, - cached_block: recent.block.header.number, - }, - ) - .await?; - context.forget_note(note.uuid).context("remove old note")?; - pb.finish_and_clear(); - let xt_block = xt.block; - let maybe_block = client.block(Some(xt_block)).await?; - let signed_block = - maybe_block.context("reading block from network!")?; - let number = signed_block.block.header.number; - let hash = signed_block.block.header.hash(); - let account_id = signer.account_id(); - let account = client.account(&account_id, None).await?; - let props = SystemProperties::from(client.properties()); - let balance = - account.data.free / 10u128.pow(props.token_decimals as u32); - writeln!(term, "{} Note Withdrawn Successfully!", Emoji("🎉", "※"))?; - writeln!( - term, - "Block Number: #{} {}", - style(number).blue(), - style(hash).dim().green() - )?; - writeln!(term)?; - writeln!( - term, - "Your Current Free Balance: {} {}", - style(balance).green().bold(), - props.token_symbol, - )?; - Ok(()) - } -} - -/// fetch all the tree leaves in batches. -async fn fetch_tree_leaves( - rpc_client: &RpcClient, - tree_id: u32, -) -> anyhow::Result> { - let mut from: u32 = 0; - let mut to: u32 = 511; - let mut total_leaves = Vec::new(); - loop { - let leaves: Vec<[u8; 32]> = rpc_client - .request( - "merkle_treeLeaves", - Params::Array(vec![tree_id.into(), from.into(), to.into()]), - ) - .await?; - if leaves.is_empty() { - break; - } else { - total_leaves.extend(leaves.into_iter().map(ScalarData)); - } - from = to; - to += 511; + todo!(); } - Ok(total_leaves) } diff --git a/src/commands/mod.rs b/src/commands/mod.rs index 47ea341..8ccaf07 100644 --- a/src/commands/mod.rs +++ b/src/commands/mod.rs @@ -4,8 +4,7 @@ use async_trait::async_trait; use secrecy::SecretString; use structopt::StructOpt; -use crate::context::ExecutionContext; -use crate::utils; +use crate::{context::ExecutionContext, utils}; mod account; mod default; diff --git a/src/context.rs b/src/context.rs index e5f9ef2..98de3e3 100644 --- a/src/context.rs +++ b/src/context.rs @@ -1,22 +1,33 @@ -use std::path::PathBuf; -use std::sync::Arc; +use std::{path::PathBuf, str::FromStr}; use anyhow::{Context, Result}; use bip39::Mnemonic; use directories_next::ProjectDirs; -use jsonrpsee_ws_client::{WsClient, WsConfig}; -use secrecy::SecretString; -use subxt::sp_core::sr25519::Pair as Sr25519Pair; -use subxt::sp_core::Pair; -use subxt::{Client, PairSigner, RpcClient}; -use webb_cli::account; -use webb_cli::keystore::PublicFor; -use webb_cli::mixer::{Mixer, Note, TokenSymbol}; -use webb_cli::runtime::WebbRuntime; +use secrecy::{SecretString, Zeroize}; +use subxt::{ + sp_core::{sr25519::Pair as Sr25519Pair, Pair}, + PairSigner, +}; +use webb::substrate::{ + protocol_substrate_runtime::api::{ + runtime_types::{ + frame_support::storage::bounded_vec::BoundedVec, + pallet_asset_registry::types::AssetDetails, + pallet_mixer::types::MixerMetadata, + }, + RuntimeApi, + }, + subxt, +}; +use webb_cli::{account, keystore::PublicFor, mixer, note}; -use crate::database::SledDatastore; -use crate::raw::{AccountRaw, AccountsIds, NoteRaw, NotesIds}; +use crate::{ + database::SledDatastore, + raw::{AccountRaw, AccountsIds, NoteRaw, NotesIds}, +}; +type WebbRuntimeApi = + RuntimeApi>; /// Commands Execution Context. /// /// Holds the state needed for all commands. @@ -58,7 +69,15 @@ impl ExecutionContext { .context("must have a default account") } - pub fn signer(&self) -> Result> { + pub fn signer( + &self, + ) -> Result< + PairSigner< + subxt::DefaultConfig, + subxt::DefaultExtra, + Sr25519Pair, + >, + > { let default_account = self.default_account()?; let mut seed_key = default_account.uuid.clone(); seed_key.push_str("_seed"); @@ -79,18 +98,12 @@ impl ExecutionContext { pub fn notes(&self) -> &[NoteRaw] { self.notes.as_slice() } - pub async fn client(&self) -> Result> { + pub async fn client(&self) -> Result { let client = subxt::ClientBuilder::new() .set_url(self.rpc_url.as_str()) .build() .await?; - Ok(client) - } - - pub async fn rpc_client(&self) -> Result { - let mut config = WsConfig::with_url(self.rpc_url.as_str()); - config.max_notifs_per_subscription = 4096; - Ok(RpcClient::WebSocket(Arc::new(WsClient::new(config).await?))) + Ok(client.to_runtime_api()) } pub fn has_secret(&self) -> bool { self.db.has_secret() } @@ -212,21 +225,49 @@ impl ExecutionContext { pub fn generate_note( &mut self, alias: String, - mixer_id: u32, - token_symbol: TokenSymbol, + asset: AssetDetails>, + mixer: MixerMetadata, + denomination: u8, + chain_id: u32, ) -> Result<()> { - let mut mixer = Mixer::new(mixer_id); - let note = mixer.generate_note(token_symbol); - self.import_note(alias, note)?; + let curve = note::Curve::Bn254; + let exponentiation = 5; + let width = 5; + let rng = &mut rand::thread_rng(); + let asset_name = String::from_utf8_lossy(&asset.name.0).to_string(); + let secret = + mixer::generate_secrets(curve, exponentiation, width, rng)?; + let v = note::Note::builder() + .prefix(note::NotePrefix::Mixer) + .version(note::NoteVersion::V1) + .target_chain_id(chain_id) + .source_chain_id(chain_id) + .backend(note::Backend::Circom) + .hash_function(note::HashFunction::Poseidon) + .curve(curve) + .exponentiation(exponentiation) + .width(width) + .token_symbol(asset_name) + .amount(mixer.deposit_size.to_string()) + .denomination(denomination) + .secret(secret) + .build(); + self.import_note(alias, v)?; Ok(()) } - pub fn import_note(&mut self, alias: String, note: Note) -> Result { + pub fn import_note( + &mut self, + alias: String, + mut note: note::Note, + ) -> Result { let uuid = uuid::Uuid::new_v4(); + let secret = zeroize::Zeroizing::new(note.secret); + // zeroize the secret in the note. + note.secret.zeroize(); let raw = NoteRaw { alias, - mixer_id: note.mixer_id, - token_symbol: note.token_symbol.to_string(), + value: note.to_string(), uuid: uuid.to_string(), used: false, }; @@ -235,8 +276,7 @@ impl ExecutionContext { self.db.write_plaintext(uuid.to_string().as_bytes(), buf)?; let mut secret_key = uuid.to_string(); secret_key.push_str("_secret"); - let note_secret = note.to_string().into_bytes(); - self.db.write(secret_key.as_bytes(), note_secret)?; + self.db.write(secret_key.as_bytes(), &secret[..])?; let maybe_ids = self.db.read_plaintext(b"notes_ids")?; let v = match maybe_ids { Some(b) => { @@ -251,18 +291,28 @@ impl ExecutionContext { let mut buf = Vec::new(); prost::Message::encode(&v, &mut buf)?; self.db.write_plaintext(b"notes_ids", buf)?; - Ok(raw.mixer_id) + Ok(raw.uuid) } - pub fn decrypt_note(&self, uuid: String) -> Result { + pub fn decrypt_note(&self, uuid: String) -> Result { let mut key = uuid; + let raw = self + .db + .read_plaintext(key.as_bytes())? + .context("note not found")?; + let note: NoteRaw = prost::Message::decode(raw.as_ref())?; key.push_str("_secret"); - let buf = self + let secret = self .db .read(key.as_bytes())? - .context("finding the encrypted note")?; - let note_str = String::from_utf8(buf.to_vec())?; - let note = note_str.parse()?; + .context("finding the encrypted note")? + .to_vec() + .try_into() + .map_err(|_| { + anyhow::anyhow!("invalid secret bytes (not 64 bytes)") + })?; + let mut note = note::Note::from_str(¬e.value)?; + note.secret = secret; Ok(note) } @@ -327,7 +377,8 @@ impl ExecutionContext { } } -#[derive(Debug, Clone)] +#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)] +#[serde(rename_all = "camelCase")] pub struct SystemProperties { /// The address format pub ss58_format: u8, @@ -340,23 +391,22 @@ pub struct SystemProperties { impl Default for SystemProperties { fn default() -> Self { Self { - ss58_format: 100, + ss58_format: 42, token_decimals: 12, token_symbol: String::from("Unit"), } } } -impl<'a> From<&'a subxt::SystemProperties> for SystemProperties { - fn from(v: &'a subxt::SystemProperties) -> Self { - if subxt::SystemProperties::default().eq(v) { - Self::default() - } else { - Self { - ss58_format: v.ss58_format, - token_decimals: v.token_decimals, - token_symbol: v.token_symbol.clone(), - } +impl From for SystemProperties { + fn from(v: subxt::SystemProperties) -> Self { + let json = serde_json::Value::Object(v); + match serde_json::from_value(json) { + Ok(v) => v, + Err(e) => { + tracing::warn!("Failed to deserialize SystemProperties: {}", e); + Self::default() + }, } } } diff --git a/src/database.rs b/src/database.rs index 09b98a7..367702d 100644 --- a/src/database.rs +++ b/src/database.rs @@ -1,6 +1,8 @@ use anyhow::Context; -use chacha::aead::{Aead, NewAead}; -use chacha::{Key, XChaCha20Poly1305, XNonce}; +use chacha::{ + aead::{Aead, NewAead}, + Key, XChaCha20Poly1305, XNonce, +}; use directories_next::ProjectDirs; use rand::RngCore; use secrecy::{SecretString, Zeroize}; @@ -83,7 +85,7 @@ impl SledDatastore { let enckey = Key::from_slice(&enckey_hash); let aead = XChaCha20Poly1305::new(enckey); let mut encrypted = aead - .encrypt(&nonce, value.into().as_ref()) + .encrypt(nonce, value.into().as_ref()) .map_err(|_| anyhow::anyhow!("datastore encryption failed")) .context("data encryption")?; buffer.extend(&nonce_bytes); // add nonce. [0..24] diff --git a/src/error.rs b/src/error.rs index 5d215d3..f2749a3 100644 --- a/src/error.rs +++ b/src/error.rs @@ -1,11 +1,12 @@ use thiserror::Error; +use webb::substrate::{protocol_substrate_runtime::api::DispatchError, subxt}; #[derive(Debug, Error)] pub enum Error { #[error(transparent)] Io(#[from] std::io::Error), #[error(transparent)] - Subxt(#[from] subxt::Error), + Subxt(#[from] subxt::Error), #[error("Mnemonic: {}", _0)] Mnemonic(String), #[error("Secret: {:?}", _0)] @@ -18,16 +19,24 @@ pub enum Error { UnsupportedTokenSymbol(String), #[error("Unsupported Note Version: {}", _0)] UnsupportedNoteVersion(String), - #[error("Invalid Note Length")] - InvalidNoteLength, - #[error("Invalid Note Prefix")] - InvalidNotePrefix, - #[error("Invalid Note Mixer ID")] - InvalidNoteMixerId, - #[error("Invalid Note Block Number")] - InvalidNoteBlockNumber, - #[error("Invalid Note Footer")] - InvalidNoteFooter, + #[error("Unsupported Note Backend: {}", _0)] + UnsupportedNoteBackend(String), + #[error("Unsupported Note Curve: {}", _0)] + UnsupportedNoteCurve(String), + #[error("Unsupported Note Hash Function: {}", _0)] + UnsupportedNoteHashFunction(String), + #[error("Unsupported Note Prefix: {}", _0)] + UnsupportedNotePrefix(String), + #[error("Invalid Note format! Please double check your note.")] + InvalidNoteFormat, + #[error("Invalid Chain Id in your note.")] + InvalidChainId, + #[error("Invalid Note Secrets (must be 64 bytes).")] + InvalidNoteSecrets, #[error("not A 32 bytes array")] NotA32BytesArray, + #[error("Failed to generate secure secrets.")] + FailedToGenerateSecrets, + #[error("Failed to generate leaf.")] + FailedToGenerateLeaf, } diff --git a/src/ext.rs b/src/ext.rs index 1a3dee9..ab28b92 100644 --- a/src/ext.rs +++ b/src/ext.rs @@ -1,5 +1,4 @@ -use std::error::Error; -use std::str::FromStr; +use std::{error::Error, str::FromStr}; use dialoguer::theme::Theme; diff --git a/src/keystore.rs b/src/keystore.rs index 6e45c6f..dc7ac13 100644 --- a/src/keystore.rs +++ b/src/keystore.rs @@ -1,5 +1,5 @@ -use subxt::sp_core::sr25519::Pair as Sr25519Pair; -use subxt::sp_core::Pair; +use subxt::sp_core::{sr25519::Pair as Sr25519Pair, Pair}; +use webb::substrate::subxt; use zeroize::Zeroize; use crate::error::Error; diff --git a/src/lib.rs b/src/lib.rs index d61ac11..49c0709 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -4,5 +4,4 @@ pub mod account; pub mod error; pub mod keystore; pub mod mixer; -pub mod pallet; -pub mod runtime; +pub mod note; diff --git a/src/main.rs b/src/main.rs index d308798..f258421 100644 --- a/src/main.rs +++ b/src/main.rs @@ -15,6 +15,7 @@ mod utils; use commands::{CommandExec, NodeOpts, PasswordOpts, SubCommand}; use context::ExecutionContext; use database::SledDatastore; +use tracing::Level; const PACKAGE_ID: [&str; 3] = ["tools", "webb", "webb-cli"]; @@ -55,21 +56,25 @@ struct Opts { } #[paw::main] -#[async_std::main] +#[tokio::main] async fn main(args: Opts) -> anyhow::Result<()> { let log_level = match args.verbose { - 0 => log::LevelFilter::Error, - 1 => log::LevelFilter::Warn, - 2 => log::LevelFilter::Info, - 3 => log::LevelFilter::Debug, - _ => log::LevelFilter::max(), + 0 => Level::ERROR, + 1 => Level::WARN, + 2 => Level::INFO, + 3 => Level::DEBUG, + _ => Level::TRACE, }; // setup logger - env_logger::builder() - .format_timestamp(None) - .filter_module("webb", log_level) + let env_filter = tracing_subscriber::EnvFilter::from_default_env() + .add_directive(format!("webb={}", log_level).parse()?); + tracing_subscriber::fmt() + .pretty() + .with_target(true) + .with_max_level(log_level) + .with_env_filter(env_filter) .init(); - log::debug!("Getting default dirs for webb cli"); + tracing::debug!("Getting default dirs for webb cli"); let dirs = ProjectDirs::from( crate::PACKAGE_ID[0], crate::PACKAGE_ID[1], @@ -77,18 +82,18 @@ async fn main(args: Opts) -> anyhow::Result<()> { ) .context("getting project data")?; - log::debug!("our data dirs live in: {}", dirs.data_dir().display()); - log::debug!("now let's try to get the account password"); + tracing::debug!("our data dirs live in: {}", dirs.data_dir().display()); + tracing::debug!("now let's try to get the account password"); let db = if let Some(secret) = password(&args)? { - log::debug!("now we have a secret, creating a secret datastore!"); + tracing::debug!("now we have a secret, creating a secret datastore!"); SledDatastore::with_secret(secret) } else { - log::debug!("no secrets provided, open the datastore anyway"); + tracing::debug!("no secrets provided, open the datastore anyway"); SledDatastore::new() } .context("failed to open the secret datastore!")?; - log::debug!("creating an execution context for all of the commands"); + tracing::debug!("creating an execution context for all of the commands"); let mut context = ExecutionContext::new(db, dirs, args.node.url) .context("create execution context for other commands")?; match args.sub { @@ -114,7 +119,7 @@ fn password(args: &Opts) -> anyhow::Result> { .context("trying to read the password from the file")?; Ok(Some(SecretString::new(password))) } else if password_opts.password.is_some() && args.unsafe_flag { - log::warn!("using unsafe flag!!"); + tracing::warn!("using unsafe flag!!"); // TODO(shekohex): emit a warning here about unsafe flag. Ok(password_opts.password.clone()) } else if password_opts.password.is_some() && !args.unsafe_flag { diff --git a/src/mixer.rs b/src/mixer.rs index e47c8f0..5995cc9 100644 --- a/src/mixer.rs +++ b/src/mixer.rs @@ -1,287 +1,67 @@ -use std::convert::TryInto; -use std::fmt; -use std::str::FromStr; - -use bulletproofs::r1cs::Prover; -use bulletproofs::{BulletproofGens, PedersenGens}; -use bulletproofs_gadgets::fixed_deposit_tree::builder::{ - FixedDepositTree, FixedDepositTreeBuilder, +use ark_bls12_381::Fr as BlsFr; +use ark_bn254::Fr as Bn254Fr; +use arkworks_circuits::setup::mixer::{ + setup_leaf_with_privates_raw_x5_5, setup_leaf_x5_5, }; -use bulletproofs_gadgets::poseidon::builder::Poseidon; -use bulletproofs_gadgets::poseidon::{PoseidonBuilder, PoseidonSbox}; -use curve25519_dalek::scalar::Scalar; -use merlin::Transcript; - -use crate::error::Error; -use crate::pallet::{Commitment, ScalarData}; - -const NOTE_PREFIX: &str = "webb.mix"; - -#[derive(Debug, Clone, Copy, PartialEq, Eq)] -pub enum TokenSymbol { - Edg, -} - -#[derive(Debug, Clone, Copy, PartialEq, Eq)] -pub enum NoteVersion { - V1, -} - -#[derive(Debug, Clone, PartialEq, Eq)] -pub struct Note { - pub prefix: String, - pub version: NoteVersion, - pub token_symbol: TokenSymbol, - pub mixer_id: u32, - pub block_number: Option, - r: ScalarData, - nullifier: ScalarData, -} - -#[derive(Debug, Clone, PartialEq, Eq)] -pub struct ZkProof { - pub comms: Vec, - pub nullifier_hash: ScalarData, - pub proof_bytes: Vec, - pub leaf_index_commitments: Vec, - pub proof_commitments: Vec, - pub recipient: ScalarData, - pub relayer: ScalarData, -} - -impl fmt::Display for TokenSymbol { - fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { - match self { - TokenSymbol::Edg => write!(f, "EDG"), - } - } -} - -impl fmt::Display for NoteVersion { - fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { - match self { - NoteVersion::V1 => write!(f, "v1"), - } - } -} - -impl fmt::Display for Note { - fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { - let encoded_r = hex::encode(&self.r.0); - let encoded_nullifier = hex::encode(&self.nullifier.0); - let mut parts = vec![ - self.prefix.clone(), - self.version.to_string(), - format!("{}", self.token_symbol), - format!("{}", self.mixer_id), - ]; - if let Some(bn) = self.block_number { - parts.push(format!("{}", bn)); - } - parts.push(format!("{}{}", encoded_r, encoded_nullifier)); - let note = parts.join("-"); - write!(f, "{}", note) - } -} - -impl FromStr for TokenSymbol { - type Err = Error; - - fn from_str(s: &str) -> Result { - match s { - "EDG" => Ok(TokenSymbol::Edg), - v => Err(Error::UnsupportedTokenSymbol(v.to_owned())), - } - } -} - -impl FromStr for NoteVersion { - type Err = Error; - - fn from_str(s: &str) -> Result { - match s { - "v1" => Ok(NoteVersion::V1), - v => Err(Error::UnsupportedNoteVersion(v.to_owned())), - } - } -} - -impl FromStr for Note { - type Err = Error; - - fn from_str(s: &str) -> Result { - let parts: Vec<&str> = s.split('-').collect(); - let partial = parts.len() == 5; - let full = parts.len() == 6; - if !partial && !full { - return Err(Error::InvalidNoteLength); - } - - if parts[0] != NOTE_PREFIX { - return Err(Error::InvalidNotePrefix); - } - - let version: NoteVersion = parts[1].parse()?; - let token_symbol: TokenSymbol = parts[2].parse()?; - let mixer_id = - parts[3].parse().map_err(|_| Error::InvalidNoteMixerId)?; - let (block_number, note_val) = match partial { - true => (None, parts[4]), - false => { - let bn = parts[4] - .parse() - .map_err(|_| Error::InvalidNoteBlockNumber)?; - (Some(bn), parts[5]) - }, - }; - if note_val.len() != 128 { - return Err(Error::InvalidNoteFooter); - } - - let r = hex::decode(¬e_val[..64]).map(|v| { - v.try_into() - .map_err(|_| Error::NotA32BytesArray) - .map(ScalarData) - })??; - let nullifier = hex::decode(¬e_val[64..]).map(|v| { - v.try_into() - .map_err(|_| Error::NotA32BytesArray) - .map(ScalarData) - })??; - Ok(Note { - prefix: NOTE_PREFIX.to_owned(), - version, - token_symbol, - mixer_id, - block_number, - r, - nullifier, - }) - } -} - -pub struct Mixer { - id: u32, - tree: FixedDepositTree, -} +use arkworks_utils::utils::common::Curve as ArkworksCurve; +use rand::RngCore; +use webb::substrate::protocol_substrate_runtime::api::runtime_types::webb_standalone_runtime::Element; -impl Default for Mixer { - fn default() -> Self { Self::new(0) } -} +use crate::{ + error::Error, + note::{Curve, Note}, +}; -/// Default hasher instance used to construct the tree -pub fn default_hasher() -> Poseidon { - let width = 6; - // TODO: should be able to pass the number of generators - let bp_gens = BulletproofGens::new(16400, 1); - PoseidonBuilder::new(width) - .bulletproof_gens(bp_gens) - .sbox(PoseidonSbox::Exponentiation3) - .build() +pub fn generate_secrets( + curve: Curve, + exponentiation: u8, + width: usize, + rng: &mut impl RngCore, +) -> Result<[u8; 64], Error> { + let (secret_bytes, nullifier_bytes, ..) = match (curve, exponentiation, width) { + (Curve::Bls381, 5, 5) => setup_leaf_x5_5::(ArkworksCurve::Bls381, rng), + (Curve::Bn254, 5, 5) => setup_leaf_x5_5::(ArkworksCurve::Bn254, rng), + _ => todo!( + "mixer for curve {curve}, exponentiation {exponentiation}, and width {width}" + ), + }.map_err(|_| Error::FailedToGenerateSecrets)?; + let mut secrets = [0u8; 64]; + secrets[0..32].copy_from_slice(&secret_bytes); + secrets[32..].copy_from_slice(&nullifier_bytes); + + Ok(secrets) } -impl Mixer { - pub fn new(id: u32) -> Self { - Self { - id, - tree: FixedDepositTreeBuilder::new() - .hash_params(default_hasher()) - .depth(32) - .build(), - } - } - - pub fn add_leaves(&mut self, leaves: Vec) { - let vals = leaves.into_iter().map(|v| v.0).collect(); - self.tree.tree.add_leaves(vals, None); +pub fn get_leaf_from_note(note: &Note) -> Result<(Element, Element), Error> { + if note.secret.len() < 64 { + return Err(Error::InvalidNoteSecrets); } - pub fn root(&self) -> ScalarData { - let root = self.tree.tree.root; - ScalarData(root.to_bytes()) - } - - pub fn generate_note(&mut self, token_symbol: TokenSymbol) -> Note { - let leaf = self.tree.generate_secrets(); - let (r, nullifier, ..) = self.tree.get_secrets(leaf); - Note { - prefix: NOTE_PREFIX.to_owned(), - version: NoteVersion::V1, - token_symbol, - mixer_id: self.id, - block_number: None, - r: ScalarData(r.to_bytes()), - nullifier: ScalarData(nullifier.to_bytes()), - } - } - - pub fn save_note(&mut self, note: Note) -> ScalarData { - let (r, nullifier, nullifier_hash, leaf) = - self.tree.leaf_data_from_bytes(note.r.0, note.nullifier.0); - self.tree.add_secrets(leaf, r, nullifier, nullifier_hash); - ScalarData(leaf.to_bytes()) - } - - pub fn generate_proof( - &mut self, - root: ScalarData, - leaf: ScalarData, - ) -> ZkProof { - let pc_gens = PedersenGens::default(); - let bp_gens = BulletproofGens::new(16400, 1); - let mut prover_transcript = Transcript::new(b"zk_membership_proof"); - let prover = Prover::new(&pc_gens, &mut prover_transcript); - - let root = Scalar::from_bytes_mod_order(root.0); - let leaf = Scalar::from_bytes_mod_order(leaf.0); - let recipient = Scalar::default(); - let relayer = Scalar::default(); - let ( - proof_bytes, - (comms, nullifier_hash, leaf_index_commitments, proof_commitments), - ) = self - .tree - .prove_zk(root, leaf, recipient, relayer, &bp_gens, prover); - - let comms = comms - .into_iter() - .map(|v| Commitment(v.to_bytes())) - .collect(); - let leaf_index_commitments = leaf_index_commitments - .into_iter() - .map(|v| Commitment(v.to_bytes())) - .collect(); - let proof_commitments = proof_commitments - .into_iter() - .map(|v| Commitment(v.to_bytes())) - .collect(); - let nullifier_hash = ScalarData(nullifier_hash.to_bytes()); - let proof_bytes = proof_bytes.to_bytes(); - let recipient = ScalarData(recipient.to_bytes()); - let relayer = ScalarData(relayer.to_bytes()); - - ZkProof { - comms, - nullifier_hash, - proof_bytes, - leaf_index_commitments, - proof_commitments, - recipient, - relayer, - } - } -} - -#[cfg(test)] -mod tests { - use super::*; - - #[test] - fn generate_note() { - let mut mixer = Mixer::new(0); - let note = mixer.generate_note(TokenSymbol::Edg); - assert_eq!(note.mixer_id, 0); - assert_eq!(note.token_symbol, TokenSymbol::Edg); - eprintln!("{:#?}", note); + let curve = note.curve; + let exponentiation = note.exponentiation; + let width = note.width; + + let secret = note.secret[..32].to_vec(); + let nullifer = note.secret[32..64].to_vec(); + let (leaf, nullifer_hash) = match (curve, exponentiation, width) { + (Curve::Bls381, 5, 5) => setup_leaf_with_privates_raw_x5_5::( + ArkworksCurve::Bls381, + secret, + nullifer, + ), + (Curve::Bn254, 5, 5) => setup_leaf_with_privates_raw_x5_5::( + ArkworksCurve::Bn254, + secret, + nullifer, + ), + _ => todo!( + "mixer leaf for curve {curve}, exponentiation {exponentiation}, and width {width}" + ), } + .map(|(l, h)| match (l.try_into(), h.try_into()) { + (Ok(l), Ok(h)) => Ok((Element(l), Element(h))), + _ => Err(Error::NotA32BytesArray), + }) + .map_err(|_| Error::FailedToGenerateLeaf)??; + Ok((leaf, nullifer_hash)) } diff --git a/src/note.rs b/src/note.rs new file mode 100644 index 0000000..d2a4ea8 --- /dev/null +++ b/src/note.rs @@ -0,0 +1,302 @@ +use core::fmt; +use std::str::FromStr; + +use arkworks_utils::utils::common::Curve as ArkCurve; +use typed_builder::TypedBuilder; +use zeroize::Zeroize; + +use crate::error::Error; +#[derive(Clone, Copy, PartialEq, Eq, Debug)] +pub enum NoteVersion { + V1, +} + +#[derive(Clone, Copy, PartialEq, Eq, Debug)] +pub enum Backend { + Arkworks, + Circom, +} + +#[derive(Clone, Copy, PartialEq, Eq, Debug)] +pub enum Curve { + Bls381, + Bn254, +} + +#[derive(Clone, Copy, PartialEq, Eq, Debug)] +pub enum HashFunction { + Poseidon, + MiMCTornado, +} + +#[derive(Clone, Copy, PartialEq, Eq, Debug)] +pub enum NotePrefix { + Mixer, + Bridge, + Anchor, + VAnchor, +} + +impl fmt::Display for NoteVersion { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + match self { + NoteVersion::V1 => write!(f, "v1"), + } + } +} + +impl FromStr for NoteVersion { + type Err = Error; + + fn from_str(s: &str) -> Result { + match s { + "v1" => Ok(NoteVersion::V1), + v => Err(Error::UnsupportedNoteVersion(v.into())), + } + } +} + +impl fmt::Display for Backend { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + match self { + Backend::Arkworks => write!(f, "Arkworks"), + Backend::Circom => write!(f, "Circom"), + } + } +} + +impl FromStr for Backend { + type Err = Error; + + fn from_str(s: &str) -> Result { + match s { + "Arkworks" => Ok(Backend::Arkworks), + "Circom" => Ok(Backend::Circom), + v => Err(Error::UnsupportedNoteBackend(v.into())), + } + } +} + +impl fmt::Display for Curve { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + match self { + Curve::Bls381 => write!(f, "Bls381"), + Curve::Bn254 => write!(f, "Bn254"), + } + } +} + +impl FromStr for Curve { + type Err = Error; + + fn from_str(s: &str) -> Result { + match s { + "Bls381" => Ok(Curve::Bls381), + "Bn254" => Ok(Curve::Bn254), + v => Err(Error::UnsupportedNoteCurve(v.into())), + } + } +} + +impl fmt::Display for HashFunction { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + match self { + HashFunction::Poseidon => write!(f, "Poseidon"), + HashFunction::MiMCTornado => write!(f, "MiMCTornado"), + } + } +} + +impl FromStr for NotePrefix { + type Err = Error; + + fn from_str(s: &str) -> Result { + match s { + "webb.mixer" => Ok(NotePrefix::Mixer), + "webb.bridge" => Ok(NotePrefix::Bridge), + "webb.anchor" => Ok(NotePrefix::Anchor), + "webb.vanchor" => Ok(NotePrefix::VAnchor), + v => Err(Error::UnsupportedNotePrefix(v.into())), + } + } +} + +impl fmt::Display for NotePrefix { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + match self { + NotePrefix::Mixer => write!(f, "webb.mixer"), + NotePrefix::Bridge => write!(f, "webb.bridge"), + NotePrefix::Anchor => write!(f, "webb.anchor"), + NotePrefix::VAnchor => write!(f, "webb.vanchor"), + } + } +} + +impl FromStr for HashFunction { + type Err = Error; + + fn from_str(s: &str) -> Result { + match s { + "Poseidon" => Ok(HashFunction::Poseidon), + "MiMCTornado" => Ok(HashFunction::MiMCTornado), + v => Err(Error::UnsupportedNoteHashFunction(v.into())), + } + } +} + +impl From for ArkCurve { + fn from(curve: Curve) -> Self { + match curve { + Curve::Bls381 => ArkCurve::Bls381, + Curve::Bn254 => ArkCurve::Bn254, + } + } +} + +#[derive(Debug, Eq, PartialEq, Clone, TypedBuilder)] +pub struct Note { + pub prefix: NotePrefix, + #[builder(default = NoteVersion::V1)] + pub version: NoteVersion, + #[builder(setter(into))] + pub target_chain_id: u32, + #[builder(setter(into))] + pub source_chain_id: u32, + #[builder(default = Backend::Circom)] + pub backend: Backend, + #[builder(default = HashFunction::Poseidon)] + pub hash_function: HashFunction, + #[builder(default = Curve::Bn254)] + pub curve: Curve, + #[builder(default = 5)] + pub exponentiation: u8, + #[builder(default = 5)] + pub width: usize, + pub secret: [u8; 64], + #[builder(setter(into))] + pub token_symbol: String, + #[builder(setter(into))] + pub amount: String, + #[builder(setter(into))] + pub denomination: u8, +} + +impl Zeroize for Note { + fn zeroize(&mut self) { self.secret.zeroize() } +} + +impl fmt::Display for Note { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + let secrets = hex::encode(&self.secret); + let parts: Vec = vec![ + // 0 => prefix + self.prefix.to_string(), + // 1 => version + self.version.to_string(), + // 2 => chain + self.target_chain_id.to_string(), + // 3 => chain + self.source_chain_id.to_string(), + // 4 => backend + self.backend.to_string(), + // 5 => curve + self.curve.to_string(), + // 6 => hash_function + self.hash_function.to_string(), + // 7 => token_symbol + self.token_symbol.clone(), + // 8 => denomination + self.denomination.to_string(), + // 9 => amount + self.amount.clone(), + // 10 + self.exponentiation.to_string(), + // 11 + self.width.to_string(), + // 12 + secrets, + ]; + let note = parts.join(":"); + write!(f, "{}", note) + } +} + +impl FromStr for Note { + type Err = Error; + + fn from_str(s: &str) -> Result { + let parts: Vec<_> = s.split(':').collect(); + if parts.len() != 13 { + return Err(Error::InvalidNoteFormat); + } + let prefix = parts[0].parse()?; + let version = parts[1].parse()?; + let target_chain_id = + parts[2].parse().map_err(|_| Error::InvalidChainId)?; + let source_chain_id = + parts[3].parse().map_err(|_| Error::InvalidChainId)?; + let backend = parts[4].parse()?; + let curve = parts[5].parse()?; + let hash_function = parts[6].parse()?; + let token_symbol = parts[7].to_owned(); + let denomination = parts[8].parse().unwrap(); + let amount = parts[9].to_string(); + let exponentiation = parts[10].parse().unwrap(); + let width = parts[11].parse().unwrap(); + + let note_val = parts[12]; + let secret = hex::decode(¬e_val.replace("0x", ""))? + .try_into() + .map_err(|_| Error::InvalidNoteSecrets)?; + + Ok(Note { + prefix, + version, + target_chain_id, + source_chain_id, + token_symbol, + curve, + hash_function, + backend, + denomination, + amount, + exponentiation, + width, + secret, + }) + } +} + +#[cfg(test)] +mod tests { + use super::*; + use crate::mixer; + + #[test] + fn should_generate_and_parse_note_correctly() { + let curve = Curve::Bn254; + let exponentiation = 5; + let width = 5; + let rng = &mut rand::thread_rng(); + let secret = + mixer::generate_secrets(curve, exponentiation, width, rng).unwrap(); + let note = Note::builder() + .prefix(NotePrefix::Mixer) + .version(NoteVersion::V1) + .target_chain_id(1u32) + .source_chain_id(2u32) + .backend(Backend::Circom) + .hash_function(HashFunction::Poseidon) + .curve(curve) + .exponentiation(exponentiation) + .width(width) + .token_symbol("TEST") + .amount("1") + .denomination(1) + .secret(secret) + .build(); + let note_str = note.to_string(); + let parsed_note = note_str.parse::().unwrap(); + assert_eq!(note, parsed_note); + } +} diff --git a/src/pallet/merkle.rs b/src/pallet/merkle.rs deleted file mode 100644 index b8b24a5..0000000 --- a/src/pallet/merkle.rs +++ /dev/null @@ -1,39 +0,0 @@ -use codec::{Decode, Encode}; -use frame_support::Parameter; -use subxt::balances::*; -use subxt::sp_runtime::traits::AtLeast32Bit; -use subxt::system::*; - -use super::*; - -#[subxt::module] -pub trait Merkle: System + Balances { - /// The overarching tree ID type - type TreeId: 'static - + Encode - + Decode - + Parameter - + AtLeast32Bit - + Default - + Copy - + Send - + Sync; -} - -// Storage .. - -#[derive(Clone, Debug, Eq, Encode, PartialEq, subxt::Store)] -pub struct CachedRootsStore { - #[store(returns = Vec)] - block_number: T::BlockNumber, - tree_id: T::TreeId, -} - -impl CachedRootsStore { - pub fn new(block_number: T::BlockNumber, tree_id: T::TreeId) -> Self { - Self { - block_number, - tree_id, - } - } -} diff --git a/src/pallet/mixer.rs b/src/pallet/mixer.rs deleted file mode 100644 index 0e74de7..0000000 --- a/src/pallet/mixer.rs +++ /dev/null @@ -1,142 +0,0 @@ -#![allow(clippy::too_many_arguments)] - -use std::marker::PhantomData; - -use codec::{Decode, Encode}; -use frame_support::Parameter; -use subxt::balances::*; -use subxt::system::*; - -use crate::runtime::BalanceOf; - -use super::*; - -#[subxt::module] -pub trait Mixer: System + Balances + super::merkle::Merkle { - #![event_type(DepositEvent)] - - type ScalarData: Encode - + Decode - + Parameter - + PartialEq - + Eq - + Default - + Send - + Sync - + 'static; - type Nullifier: Encode - + Decode - + Parameter - + PartialEq - + Eq - + Default - + Send - + Sync - + 'static; - type Commitment: Encode - + Decode - + Parameter - + PartialEq - + Eq - + Default - + Send - + Sync - + 'static; - type CurrencyId: Encode - + Decode - + Parameter - + Eq - + Default - + Send - + Sync - + 'static; -} - -/// Proof data for withdrawal -#[derive(Encode, Decode, PartialEq, Clone)] -pub struct WithdrawProof { - /// The mixer id this withdraw proof corresponds to - pub mixer_id: T::TreeId, - /// The cached block for the cached root being proven against - pub cached_block: T::BlockNumber, - /// The cached root being proven against - pub cached_root: ScalarData, - /// The individual scalar commitments (to the randomness and nullifier) - pub comms: Vec, - /// The nullifier hash with itself - pub nullifier_hash: ScalarData, - /// The proof in bytes representation - pub proof_bytes: Vec, - /// The leaf index scalar commitments to decide on which side to hash - pub leaf_index_commitments: Vec, - /// The scalar commitments to merkle proof path elements - pub proof_commitments: Vec, - /// The recipient to withdraw amount of currency to - pub recipient: Option, - /// The recipient to withdraw amount of currency to - pub relayer: Option, -} - -// return types .. - -#[derive(Encode, Decode, PartialEq, Debug)] -pub struct MixerInfo { - pub minimum_deposit_length_for_reward: T::BlockNumber, - pub fixed_deposit_size: BalanceOf, - pub currency_id: T::CurrencyId, -} - -// Storage .. - -#[derive(Clone, Debug, Eq, Encode, PartialEq, subxt::Store)] -pub struct MixerTreesStore { - #[store(returns = MixerInfo)] - id: T::TreeId, -} - -impl MixerTreesStore { - pub fn new(id: T::TreeId) -> Self { Self { id } } -} - -#[derive(Clone, Debug, Eq, Encode, PartialEq, subxt::Store)] -pub struct MixerTreeIdsStore { - #[store(returns = Vec)] - __unused: PhantomData, -} - -impl Default for MixerTreeIdsStore { - fn default() -> Self { - Self { - __unused: PhantomData, - } - } -} - -// Events .. - -#[derive(Clone, Debug, Encode, Decode, Eq, PartialEq, subxt::Event)] -pub struct DepositEvent { - tree_id: T::TreeId, - account_id: T::AccountId, - balance: BalanceOf, -} - -#[derive(Clone, Debug, Encode, Decode, Eq, PartialEq, subxt::Event)] -pub struct WithdrawEvent { - group_id: T::TreeId, - account_id: T::AccountId, - nullifier: Nullifier, -} - -// Calls .. - -#[derive(Clone, Debug, Encode, Eq, PartialEq, subxt::Call)] -pub struct DepositCall { - group_id: T::TreeId, - data_points: Vec, -} - -#[derive(Clone, Encode, PartialEq, subxt::Call)] -pub struct WithdrawCall { - withdraw_proof: WithdrawProof, -} diff --git a/src/pallet/mod.rs b/src/pallet/mod.rs deleted file mode 100644 index 38ee973..0000000 --- a/src/pallet/mod.rs +++ /dev/null @@ -1,18 +0,0 @@ -use codec::{Decode, Encode}; - -pub mod merkle; -pub mod mixer; - -pub type CurrencyId = u64; -pub type TreeId = u32; -pub type Amount = i128; -pub type BlockLength = u64; - -#[derive(Debug, Clone, Copy, Eq, PartialEq, Default, Encode, Decode)] -pub struct ScalarData(pub [u8; 32]); - -#[derive(Debug, Clone, Copy, Eq, PartialEq, Default, Encode, Decode)] -pub struct Nullifier(pub [u8; 32]); - -#[derive(Debug, Clone, Copy, Eq, PartialEq, Default, Encode, Decode)] -pub struct Commitment(pub [u8; 32]); diff --git a/src/raw.rs b/src/raw.rs index 3c00c36..02f63ee 100644 --- a/src/raw.rs +++ b/src/raw.rs @@ -2,6 +2,7 @@ use std::fmt; use console::Emoji; use prost::Message; +use webb_cli::note::Note; #[derive(Clone, PartialEq, Message)] pub struct AccountRaw { @@ -43,16 +44,18 @@ pub struct NoteRaw { pub uuid: String, #[prost(string, tag = "2")] pub alias: String, - #[prost(string, tag = "3")] - pub token_symbol: String, - #[prost(uint32, tag = "4")] - pub mixer_id: u32, - #[prost(bool, tag = "6")] + #[prost(bool, tag = "3")] pub used: bool, + #[prost(string, tag = "4")] + pub value: String, } impl fmt::Display for NoteRaw { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + let note = self.value.parse::().map_err(|e| { + let _ = write!(f, "Error parsing note: {}", e); + fmt::Error + })?; write!( f, "{} ", @@ -64,8 +67,8 @@ impl fmt::Display for NoteRaw { )?; write!( f, - "{} with {} Token at #{} Mixer Group", - self.alias, self.token_symbol, self.mixer_id + "{} with {} {}", + self.alias, note.amount, note.token_symbol, )?; Ok(()) } diff --git a/src/runtime.rs b/src/runtime.rs deleted file mode 100644 index 4a7ee9d..0000000 --- a/src/runtime.rs +++ /dev/null @@ -1,162 +0,0 @@ -use subxt::balances::*; -use subxt::extrinsic::*; -use subxt::sp_runtime::generic::Header; -use subxt::sp_runtime::traits::{BlakeTwo256, IdentifyAccount, Verify}; -use subxt::sp_runtime::{MultiSignature, OpaqueExtrinsic}; -use subxt::system::*; -use subxt::{sp_core, EventTypeRegistry}; - -use crate::pallet; - -/// an easy way to extract the balance type from `T` -pub type BalanceOf = ::Balance; - -/// Alias to 512-bit hash when used in the context of a transaction signature on -/// the chain. -pub type Signature = MultiSignature; - -/// Some way of identifying an account on the chain. We intentionally make it -/// equivalent to the public key of our transaction signing scheme. -pub type AccountId = - <::Signer as IdentifyAccount>::AccountId; - -/// The type for looking up accounts. We don't expect more than 4 billion of -/// them, but you never know... -pub type AccountIndex = u32; - -/// Balance of an account. -pub type Balance = u128; - -/// Index of a transaction in the chain. -pub type Index = u32; - -/// A hash of some data used by the chain. -pub type Hash = sp_core::H256; - -/// Webb Runtime with `mixer` pallet. -#[derive(Debug, Clone, Eq, PartialEq)] -pub struct WebbRuntime; - -impl subxt::Runtime for WebbRuntime { - type Extra = DefaultExtra; - type Signature = Signature; - - fn register_type_sizes(event_type_registry: &mut EventTypeRegistry) { - event_type_registry.with_system(); - event_type_registry.with_balances(); - subxt::register_default_type_sizes(event_type_registry); - event_type_registry.register_type_size::("BalanceOf"); - event_type_registry - .register_type_size::("ScalarData"); - event_type_registry - .register_type_size::("Nullifier"); - event_type_registry - .register_type_size::("Commitment"); - // ORML stuff - event_type_registry.register_type_size::("T::Balance"); - event_type_registry.register_type_size::("T::AccountId"); - event_type_registry - .register_type_size::("T::CurrencyId"); - event_type_registry - .register_type_size::("CurrencyIdOf"); - event_type_registry.register_type_size::("Amount"); - event_type_registry.register_type_size::("AmountOf"); - event_type_registry - .register_type_size::("BlockLength"); - event_type_registry.register_type_size::("TreeId"); - // EVM Stuff - event_type_registry.register_type_size::("H160"); - event_type_registry.register_type_size::("H256"); - event_type_registry.register_type_size::("U256"); - event_type_registry.register_type_size::>("Log"); - event_type_registry.register_type_size::("ExitReason"); - } -} - -impl System for WebbRuntime { - type AccountData = AccountData>; - type AccountId = AccountId; - type Address = AccountId; - type BlockNumber = u32; - type Extrinsic = OpaqueExtrinsic; - type Hash = Hash; - type Hashing = BlakeTwo256; - type Header = Header; - type Index = Index; -} - -impl Balances for WebbRuntime { - type Balance = Balance; -} - -impl pallet::mixer::Mixer for WebbRuntime { - type Commitment = pallet::Commitment; - type CurrencyId = pallet::CurrencyId; - type Nullifier = pallet::Nullifier; - type ScalarData = pallet::ScalarData; -} - -impl pallet::merkle::Merkle for WebbRuntime { - type TreeId = pallet::TreeId; -} - -#[cfg(all(test, feature = "integration-tests"))] -mod tests { - use super::*; - use crate::pallet::merkle::*; - use crate::pallet::mixer::*; - use crate::pallet::ScalarData; - use sp_keyring::AccountKeyring; - use subxt::PairSigner; - - type MixerTrees = MixerTreesStore; - type MixerTreeIds = MixerTreeIdsStore; - type CachedRoots = CachedRootsStore; - - async fn get_client() -> subxt::Client { - subxt::ClientBuilder::new() - .set_url("ws://127.0.0.1:9944") - .build() - .await - .unwrap() - } - - #[async_std::test] - async fn get_all_mixers() { - let client = get_client().await; - let mut iter = client.iter::(None).await.unwrap(); - let mut tress = Vec::new(); - while let Some((_, info)) = iter.next().await.unwrap() { - tress.push(info); - } - - assert!(!tress.is_empty()); - - let ids = client - .fetch_or_default::(&MixerTreeIds::default(), None) - .await - .unwrap(); - assert!(!ids.is_empty()); - } - - #[async_std::test] - async fn deposit() { - let client = get_client().await; - let signer = PairSigner::new(AccountKeyring::Alice.pair()); - let leaf = ScalarData([1u8; 32]); - let result = client.deposit_and_watch(&signer, 0, vec![leaf]).await; - dbg!(&result); - assert!(result.is_ok()); - let xt = result.unwrap(); - println!("Hash: {:?}", xt.block); - let maybe_block = client.block(Some(xt.block)).await.unwrap(); - let signed_block = maybe_block.unwrap(); - println!("Number: #{}", signed_block.block.header.number); - - let cached_roots = client - .fetch(&CachedRoots::new(signed_block.block.header.number, 3), None) - .await - .unwrap(); - println!("Cached Roots: {:?}", cached_roots); - } -}