From 3beeed85d77f636db3009dfacf139a0b178db914 Mon Sep 17 00:00:00 2001 From: Gregory Hill Date: Tue, 5 Apr 2022 16:12:28 +0100 Subject: [PATCH 01/12] chore: upgrade to polkadot-v0.9.18 and pull subxt upstream Signed-off-by: Gregory Hill --- Cargo.lock | 2049 +++++++++++++++++++++++++++++-------- Cargo.toml | 1 + bitcoin/Cargo.toml | 6 +- bitcoin/src/lib.rs | 2 +- faucet/Cargo.toml | 4 +- runtime/Cargo.toml | 46 +- runtime/client/Cargo.toml | 42 + runtime/client/src/lib.rs | 245 +++++ runtime/src/error.rs | 43 +- runtime/src/lib.rs | 16 +- runtime/src/rpc.rs | 337 +++--- runtime/src/types.rs | 2 +- vault/Cargo.toml | 10 +- 13 files changed, 2131 insertions(+), 672 deletions(-) create mode 100644 runtime/client/Cargo.toml create mode 100644 runtime/client/src/lib.rs diff --git a/Cargo.lock b/Cargo.lock index 05193007f..3173cf04d 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -85,7 +85,7 @@ dependencies = [ [[package]] name = "annuity" version = "1.0.0" -source = "git+https://github.com/interlay/interbtc?rev=e7a6b41abe69de294abf32a5d350c0c5b719cce3#e7a6b41abe69de294abf32a5d350c0c5b719cce3" +source = "git+https://github.com/gregdhill/interbtc?rev=278d379087bc39932b328bce9f497a20c2403c5b#278d379087bc39932b328bce9f497a20c2403c5b" dependencies = [ "frame-benchmarking", "frame-support", @@ -158,6 +158,22 @@ version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e22d1f4b888c298a027c99dc9048015fac177587de20fc30232a057dfbe24a21" +[[package]] +name = "assert_matches" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b34d609dfbaf33d6889b2b7106d3ca345eacad44200913df5ba02bfd31d2ba9" + +[[package]] +name = "async-attributes" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a3203e79f4dd9bdda415ed03cf14dae5a2bf775c683a00f94e9cd1faf0f596e5" +dependencies = [ + "quote", + "syn", +] + [[package]] name = "async-channel" version = "1.6.1" @@ -236,34 +252,17 @@ dependencies = [ "event-listener", ] -[[package]] -name = "async-process" -version = "1.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83137067e3a2a6a06d67168e49e68a0957d215410473a740cea95a2425c0b7c6" -dependencies = [ - "async-io", - "blocking", - "cfg-if 1.0.0", - "event-listener", - "futures-lite", - "libc", - "once_cell", - "signal-hook", - "winapi 0.3.9", -] - [[package]] name = "async-std" version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f8056f1455169ab86dd47b47391e4ab0cbd25410a70e9fe675544f49bafaf952" dependencies = [ + "async-attributes", "async-channel", "async-global-executor", "async-io", "async-lock", - "async-process", "crossbeam-utils", "futures-channel", "futures-core", @@ -526,7 +525,7 @@ dependencies = [ [[package]] name = "bitcoin" version = "1.2.0" -source = "git+https://github.com/interlay/interbtc?rev=e7a6b41abe69de294abf32a5d350c0c5b719cce3#e7a6b41abe69de294abf32a5d350c0c5b719cce3" +source = "git+https://github.com/gregdhill/interbtc?rev=278d379087bc39932b328bce9f497a20c2403c5b#278d379087bc39932b328bce9f497a20c2403c5b" dependencies = [ "bitcoin_hashes 0.7.6", "frame-support", @@ -587,9 +586,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitvec" -version = "0.20.4" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7774144344a4faa177370406a7ff5f1da24303817368584c6206c8303eb07848" +checksum = "1489fcb93a5bb47da0462ca93ad252ad6af2145cce58d10d46a83931ba9f016b" dependencies = [ "funty", "radium", @@ -608,6 +607,15 @@ dependencies = [ "opaque-debug 0.3.0", ] +[[package]] +name = "blake2" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9cf849ee05b2ee5fba5e36f97ff8ec2533916700fc0758d40d92136a42f3388" +dependencies = [ + "digest 0.10.3", +] + [[package]] name = "blake2-rfc" version = "0.2.18" @@ -739,7 +747,7 @@ checksum = "bd769563b4ea2953e2825c9e6b7470a5f55f67e0be00030bf3e390a2a6071f64" [[package]] name = "btc-relay" version = "1.2.0" -source = "git+https://github.com/interlay/interbtc?rev=e7a6b41abe69de294abf32a5d350c0c5b719cce3#e7a6b41abe69de294abf32a5d350c0c5b719cce3" +source = "git+https://github.com/gregdhill/interbtc?rev=278d379087bc39932b328bce9f497a20c2403c5b#278d379087bc39932b328bce9f497a20c2403c5b" dependencies = [ "bitcoin 1.2.0", "frame-benchmarking", @@ -815,6 +823,17 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c4872d67bab6358e59559027aa3b9157c53d9358c51423c17554809a8858e0f8" +[[package]] +name = "bzip2-sys" +version = "0.1.11+1.0.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "736a955f3fa7875102d57c82b8cac37ec45224a07fd32d58f9f7a186b6cd4cdc" +dependencies = [ + "cc", + "libc", + "pkg-config", +] + [[package]] name = "cache-padded" version = "1.2.0" @@ -946,6 +965,15 @@ dependencies = [ "generic-array 0.14.5", ] +[[package]] +name = "ckb-merkle-mountain-range" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4f061f97d64fd1822664bdfb722f7ae5469a97b77567390f7442be5b5dc82a5b" +dependencies = [ + "cfg-if 0.1.10", +] + [[package]] name = "clang-sys" version = "1.3.1" @@ -1272,7 +1300,7 @@ dependencies = [ [[package]] name = "currency" version = "1.2.0" -source = "git+https://github.com/interlay/interbtc?rev=e7a6b41abe69de294abf32a5d350c0c5b719cce3#e7a6b41abe69de294abf32a5d350c0c5b719cce3" +source = "git+https://github.com/gregdhill/interbtc?rev=278d379087bc39932b328bce9f497a20c2403c5b#278d379087bc39932b328bce9f497a20c2403c5b" dependencies = [ "frame-support", "frame-system", @@ -1378,7 +1406,7 @@ dependencies = [ [[package]] name = "democracy" version = "1.2.0" -source = "git+https://github.com/interlay/interbtc?rev=e7a6b41abe69de294abf32a5d350c0c5b719cce3#e7a6b41abe69de294abf32a5d350c0c5b719cce3" +source = "git+https://github.com/gregdhill/interbtc?rev=278d379087bc39932b328bce9f497a20c2403c5b#278d379087bc39932b328bce9f497a20c2403c5b" dependencies = [ "frame-benchmarking", "frame-support", @@ -1448,6 +1476,7 @@ checksum = "f2fb860ca6fafa5552fb6d0e816a69c8e49f0908bf524e30a90d97c85892d506" dependencies = [ "block-buffer 0.10.2", "crypto-common", + "subtle", ] [[package]] @@ -1596,6 +1625,26 @@ dependencies = [ "syn", ] +[[package]] +name = "enumflags2" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "83c8d82922337cd23a15f88b70d8e4ef5f11da38dd7cdb55e84dd5de99695da0" +dependencies = [ + "enumflags2_derive", +] + +[[package]] +name = "enumflags2_derive" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "946ee94e3dbf58fdd324f9ce245c7b238d46a66f00e86a020b71996349e46cce" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "env_logger" version = "0.6.2" @@ -1678,7 +1727,7 @@ dependencies = [ [[package]] name = "escrow" version = "1.0.0" -source = "git+https://github.com/interlay/interbtc?rev=e7a6b41abe69de294abf32a5d350c0c5b719cce3#e7a6b41abe69de294abf32a5d350c0c5b719cce3" +source = "git+https://github.com/gregdhill/interbtc?rev=278d379087bc39932b328bce9f497a20c2403c5b#278d379087bc39932b328bce9f497a20c2403c5b" dependencies = [ "frame-benchmarking", "frame-support", @@ -1780,7 +1829,7 @@ dependencies = [ [[package]] name = "fee" version = "1.2.0" -source = "git+https://github.com/interlay/interbtc?rev=e7a6b41abe69de294abf32a5d350c0c5b719cce3#e7a6b41abe69de294abf32a5d350c0c5b719cce3" +source = "git+https://github.com/gregdhill/interbtc?rev=278d379087bc39932b328bce9f497a20c2403c5b#278d379087bc39932b328bce9f497a20c2403c5b" dependencies = [ "currency", "frame-benchmarking", @@ -1812,9 +1861,9 @@ dependencies = [ [[package]] name = "finality-grandpa" -version = "0.14.4" +version = "0.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8ac3ff5224ef91f3c97e03eb1de2db82743427e91aaa5ac635f454f0b164f5a" +checksum = "d9def033d8505edf199f6a5d07aa7e6d2d6185b164293b77f0efd108f4f3e11d" dependencies = [ "either", "futures 0.3.21", @@ -1890,7 +1939,7 @@ checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" [[package]] name = "fork-tree" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.17#22d40c761a985482f93bbbea5ba4199bdba74f8e" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" dependencies = [ "parity-scale-codec", ] @@ -1914,7 +1963,7 @@ checksum = "8da1b8f89c5b5a5b7e59405cfcf0bb9588e5ed19f0b57a4cd542bbba3f164a6d" [[package]] name = "frame-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.17#22d40c761a985482f93bbbea5ba4199bdba74f8e" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" dependencies = [ "frame-support", "frame-system", @@ -1936,7 +1985,7 @@ dependencies = [ [[package]] name = "frame-benchmarking-cli" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.17#22d40c761a985482f93bbbea5ba4199bdba74f8e" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" dependencies = [ "Inflector", "chrono", @@ -1944,26 +1993,54 @@ dependencies = [ "frame-benchmarking", "frame-support", "handlebars", + "hash-db", + "hex", + "itertools", + "kvdb", "linked-hash-map", "log 0.4.16", + "memory-db", "parity-scale-codec", + "rand 0.8.5", "sc-cli", + "sc-client-api", "sc-client-db", "sc-executor", "sc-service", "serde", "serde_json", + "serde_nanos", + "sp-api", + "sp-blockchain", "sp-core", + "sp-database", "sp-externalities", "sp-keystore", "sp-runtime", "sp-state-machine", + "sp-std", + "sp-storage", + "sp-trie", +] + +[[package]] +name = "frame-election-provider-support" +version = "4.0.0-dev" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" +dependencies = [ + "frame-support", + "frame-system", + "parity-scale-codec", + "scale-info", + "sp-arithmetic", + "sp-npos-elections", + "sp-std", ] [[package]] name = "frame-executive" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.17#22d40c761a985482f93bbbea5ba4199bdba74f8e" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" dependencies = [ "frame-support", "frame-system", @@ -1978,9 +2055,9 @@ dependencies = [ [[package]] name = "frame-metadata" -version = "14.2.0" +version = "15.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37ed5e5c346de62ca5c184b4325a6600d1eaca210666e4606fe4e449574978d0" +checksum = "df6bb8542ef006ef0de09a5c4420787d79823c0ed7924225822362fd2bf2ff2d" dependencies = [ "cfg-if 1.0.0", "parity-scale-codec", @@ -1991,7 +2068,7 @@ dependencies = [ [[package]] name = "frame-support" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.17#22d40c761a985482f93bbbea5ba4199bdba74f8e" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" dependencies = [ "bitflags", "frame-metadata", @@ -2020,7 +2097,7 @@ dependencies = [ [[package]] name = "frame-support-procedural" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.17#22d40c761a985482f93bbbea5ba4199bdba74f8e" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" dependencies = [ "Inflector", "frame-support-procedural-tools", @@ -2032,7 +2109,7 @@ dependencies = [ [[package]] name = "frame-support-procedural-tools" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.17#22d40c761a985482f93bbbea5ba4199bdba74f8e" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" dependencies = [ "frame-support-procedural-tools-derive", "proc-macro-crate 1.1.3", @@ -2044,7 +2121,7 @@ dependencies = [ [[package]] name = "frame-support-procedural-tools-derive" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.17#22d40c761a985482f93bbbea5ba4199bdba74f8e" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" dependencies = [ "proc-macro2", "quote", @@ -2054,7 +2131,7 @@ dependencies = [ [[package]] name = "frame-system" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.17#22d40c761a985482f93bbbea5ba4199bdba74f8e" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" dependencies = [ "frame-support", "log 0.4.16", @@ -2071,12 +2148,23 @@ dependencies = [ [[package]] name = "frame-system-rpc-runtime-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.17#22d40c761a985482f93bbbea5ba4199bdba74f8e" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" dependencies = [ "parity-scale-codec", "sp-api", ] +[[package]] +name = "frame-try-runtime" +version = "0.10.0-dev" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" +dependencies = [ + "frame-support", + "sp-api", + "sp-runtime", + "sp-std", +] + [[package]] name = "fs-swap" version = "0.2.6" @@ -2099,6 +2187,12 @@ dependencies = [ "winapi 0.3.9", ] +[[package]] +name = "fs_extra" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2022715d62ab30faffd124d40b76f4134a550a87792276512b18d63272333394" + [[package]] name = "fuchsia-cprng" version = "0.1.1" @@ -2123,9 +2217,9 @@ checksum = "3dcaa9ae7725d12cdb85b3ad99a434db70b468c09ded17e012d86b5c1010f7a7" [[package]] name = "funty" -version = "1.1.0" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fed34cd105917e91daa4da6b3728c47b068749d6a62c59811f06ed2ac71d9da7" +checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" [[package]] name = "futures" @@ -2513,6 +2607,12 @@ dependencies = [ "proc-macro-hack", ] +[[package]] +name = "hex-literal" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ebdb29d2ea9ed0083cd8cece49bbd968021bd99b0849edb4a9a7ee0fdf6a4e0" + [[package]] name = "hex-literal-impl" version = "0.2.3" @@ -2775,9 +2875,9 @@ dependencies = [ [[package]] name = "impl-codec" -version = "0.5.1" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "161ebdfec3c8e3b52bf61c4f3550a1eea4f9579d10dc1b936f3171ebdcd6c443" +checksum = "ba6a270039626615617f3f36d15fc827041df3b78c439da2cadfa47455a77f2f" dependencies = [ "parity-scale-codec", ] @@ -2834,7 +2934,7 @@ dependencies = [ [[package]] name = "interbtc-primitives" version = "1.2.0" -source = "git+https://github.com/interlay/interbtc?rev=e7a6b41abe69de294abf32a5d350c0c5b719cce3#e7a6b41abe69de294abf32a5d350c0c5b719cce3" +source = "git+https://github.com/gregdhill/interbtc?rev=278d379087bc39932b328bce9f497a20c2403c5b#278d379087bc39932b328bce9f497a20c2403c5b" dependencies = [ "bitcoin 1.2.0", "bstringify", @@ -2849,7 +2949,7 @@ dependencies = [ [[package]] name = "interbtc-rpc" version = "1.2.0" -source = "git+https://github.com/interlay/interbtc?rev=e7a6b41abe69de294abf32a5d350c0c5b719cce3#e7a6b41abe69de294abf32a5d350c0c5b719cce3" +source = "git+https://github.com/gregdhill/interbtc?rev=278d379087bc39932b328bce9f497a20c2403c5b#278d379087bc39932b328bce9f497a20c2403c5b" dependencies = [ "interbtc-primitives", "jsonrpc-core", @@ -2877,7 +2977,7 @@ dependencies = [ [[package]] name = "interbtc-runtime-standalone" version = "1.2.0" -source = "git+https://github.com/interlay/interbtc?rev=e7a6b41abe69de294abf32a5d350c0c5b719cce3#e7a6b41abe69de294abf32a5d350c0c5b719cce3" +source = "git+https://github.com/gregdhill/interbtc?rev=278d379087bc39932b328bce9f497a20c2403c5b#278d379087bc39932b328bce9f497a20c2403c5b" dependencies = [ "annuity", "btc-relay", @@ -2952,14 +3052,14 @@ dependencies = [ [[package]] name = "interbtc-standalone" version = "1.2.0" -source = "git+https://github.com/interlay/interbtc?rev=e7a6b41abe69de294abf32a5d350c0c5b719cce3#e7a6b41abe69de294abf32a5d350c0c5b719cce3" +source = "git+https://github.com/gregdhill/interbtc?rev=278d379087bc39932b328bce9f497a20c2403c5b#278d379087bc39932b328bce9f497a20c2403c5b" dependencies = [ "bitcoin 1.2.0", "clap", "frame-benchmarking", "frame-benchmarking-cli", "frame-support", - "hex-literal", + "hex-literal 0.2.2", "interbtc-primitives", "interbtc-rpc", "interbtc-runtime-standalone", @@ -3039,7 +3139,7 @@ checksum = "35e70ee094dc02fd9c13fdad4940090f22dbd6ac7c9e7094a46cf0232a50bc7c" [[package]] name = "issue" version = "1.2.0" -source = "git+https://github.com/interlay/interbtc?rev=e7a6b41abe69de294abf32a5d350c0c5b719cce3#e7a6b41abe69de294abf32a5d350c0c5b719cce3" +source = "git+https://github.com/gregdhill/interbtc?rev=278d379087bc39932b328bce9f497a20c2403c5b#278d379087bc39932b328bce9f497a20c2403c5b" dependencies = [ "bitcoin 1.2.0", "btc-relay", @@ -3254,9 +3354,9 @@ dependencies = [ [[package]] name = "jsonrpsee" -version = "0.8.0" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05fd8cd6c6b1bbd06881d2cf88f1fc83cc36c98f2219090f839115fb4a956cb9" +checksum = "f0d0b8cc1959f8c05256ace093b2317482da9127f1d9227564f47e7e6bf9bda8" dependencies = [ "jsonrpsee-client-transport", "jsonrpsee-core", @@ -3268,9 +3368,9 @@ dependencies = [ [[package]] name = "jsonrpsee-client-transport" -version = "0.8.0" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3303cdf246e6ab76e2866fb3d9acb6c76a068b1b28bd923a1b7a8122257ad7b5" +checksum = "fa370c2c717d798c3c0a315ae3f0a707a388c6963c11f9da7dbbe1d3f7392f5f" dependencies = [ "futures 0.3.21", "http", @@ -3289,9 +3389,9 @@ dependencies = [ [[package]] name = "jsonrpsee-core" -version = "0.8.0" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f220b5a238dc7992b90f1144fbf6eaa585872c9376afe6fe6863ffead6191bf3" +checksum = "22abc3274b265dcefe2e26c4beecf9fda4fffa48cf94930443a6c73678f020d5" dependencies = [ "anyhow", "arrayvec 0.7.2", @@ -3312,9 +3412,9 @@ dependencies = [ [[package]] name = "jsonrpsee-http-client" -version = "0.8.0" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9dce69e96aa236cc2e3a20467420b31cbc8464703aa95bc33a163d25b0f56023" +checksum = "d31b837273d09dd80051eefa57d337769dff6c3266108c43a3544ac7ffed9d68" dependencies = [ "async-trait", "hyper 0.14.17", @@ -3331,9 +3431,9 @@ dependencies = [ [[package]] name = "jsonrpsee-proc-macros" -version = "0.8.0" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4299ebf790ea9de1cb72e73ff2ae44c723ef264299e5e2d5ef46a371eb3ac3d8" +checksum = "63e171d8071079c8ccdce1b4ab34411c5afa6158d57db7963311ad3c6d073cb1" dependencies = [ "proc-macro-crate 1.1.3", "proc-macro2", @@ -3343,9 +3443,9 @@ dependencies = [ [[package]] name = "jsonrpsee-types" -version = "0.8.0" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1b3f601bbbe45cd63f5407b6f7d7950e08a7d4f82aa699ff41a4a5e9e54df58" +checksum = "9f4c45d2e2aa1db4c7d7d7dbaabc10a5b5258d99cd9d42fbfd5260b76f80c324" dependencies = [ "anyhow", "beef", @@ -3357,9 +3457,9 @@ dependencies = [ [[package]] name = "jsonrpsee-ws-client" -version = "0.8.0" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aff425cee7c779e33920913bc695447416078ee6d119f443f3060feffa4e86b5" +checksum = "31b58983485b2b626c276f1eb367d62dae82132451b281072a7bfa536a33ddf3" dependencies = [ "jsonrpsee-client-transport", "jsonrpsee-core", @@ -3406,9 +3506,9 @@ dependencies = [ [[package]] name = "kvdb" -version = "0.10.0" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "45a3f58dc069ec0e205a27f5b45920722a46faed802a0541538241af6228f512" +checksum = "a301d8ecb7989d4a6e2c57a49baca77d353bdbf879909debe3f375fe25d61f86" dependencies = [ "parity-util-mem", "smallvec", @@ -3416,20 +3516,20 @@ dependencies = [ [[package]] name = "kvdb-memorydb" -version = "0.10.0" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3b6b85fc643f5acd0bffb2cc8a6d150209379267af0d41db72170021841f9f5" +checksum = "ece7e668abd21387aeb6628130a6f4c802787f014fa46bc83221448322250357" dependencies = [ "kvdb", "parity-util-mem", - "parking_lot 0.11.2", + "parking_lot 0.12.0", ] [[package]] name = "kvdb-rocksdb" -version = "0.14.0" +version = "0.15.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b1b6ea8f2536f504b645ad78419c8246550e19d2c3419a167080ce08edee35a" +checksum = "ca7fbdfd71cd663dceb0faf3367a99f8cf724514933e9867cec4995b6027cbc1" dependencies = [ "fs-swap", "kvdb", @@ -3437,7 +3537,7 @@ dependencies = [ "num_cpus", "owning_ref", "parity-util-mem", - "parking_lot 0.11.2", + "parking_lot 0.12.0", "regex", "rocksdb", "smallvec", @@ -3799,7 +3899,7 @@ dependencies = [ "pin-project 1.0.10", "rand 0.7.3", "salsa20", - "sha3", + "sha3 0.9.1", ] [[package]] @@ -3968,14 +4068,17 @@ dependencies = [ [[package]] name = "librocksdb-sys" -version = "6.20.3" +version = "0.6.1+6.28.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c309a9d2470844aceb9a4a098cf5286154d20596868b75a6b36357d2bb9ca25d" +checksum = "81bc587013734dadb7cf23468e531aa120788b87243648be42e2d3a072186291" dependencies = [ "bindgen", + "bzip2-sys", "cc", "glob", "libc", + "libz-sys", + "tikv-jemalloc-sys", ] [[package]] @@ -4223,12 +4326,12 @@ dependencies = [ [[package]] name = "memory-db" -version = "0.28.0" +version = "0.29.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d505169b746dacf02f7d14d8c80b34edfd8212159c63d23c977739a0d960c626" +checksum = "6566c70c1016f525ced45d7b7f97730a2bafb037c788211d0c186ef5b2189f0a" dependencies = [ "hash-db", - "hashbrown 0.11.2", + "hashbrown 0.12.0", "parity-util-mem", ] @@ -4407,7 +4510,7 @@ dependencies = [ [[package]] name = "module-btc-relay-rpc" version = "1.2.0" -source = "git+https://github.com/interlay/interbtc?rev=e7a6b41abe69de294abf32a5d350c0c5b719cce3#e7a6b41abe69de294abf32a5d350c0c5b719cce3" +source = "git+https://github.com/gregdhill/interbtc?rev=278d379087bc39932b328bce9f497a20c2403c5b#278d379087bc39932b328bce9f497a20c2403c5b" dependencies = [ "jsonrpc-core", "jsonrpc-core-client", @@ -4422,7 +4525,7 @@ dependencies = [ [[package]] name = "module-btc-relay-rpc-runtime-api" version = "1.2.0" -source = "git+https://github.com/interlay/interbtc?rev=e7a6b41abe69de294abf32a5d350c0c5b719cce3#e7a6b41abe69de294abf32a5d350c0c5b719cce3" +source = "git+https://github.com/gregdhill/interbtc?rev=278d379087bc39932b328bce9f497a20c2403c5b#278d379087bc39932b328bce9f497a20c2403c5b" dependencies = [ "frame-support", "parity-scale-codec", @@ -4433,7 +4536,7 @@ dependencies = [ [[package]] name = "module-issue-rpc" version = "1.2.0" -source = "git+https://github.com/interlay/interbtc?rev=e7a6b41abe69de294abf32a5d350c0c5b719cce3#e7a6b41abe69de294abf32a5d350c0c5b719cce3" +source = "git+https://github.com/gregdhill/interbtc?rev=278d379087bc39932b328bce9f497a20c2403c5b#278d379087bc39932b328bce9f497a20c2403c5b" dependencies = [ "jsonrpc-core", "jsonrpc-core-client", @@ -4448,7 +4551,7 @@ dependencies = [ [[package]] name = "module-issue-rpc-runtime-api" version = "1.2.0" -source = "git+https://github.com/interlay/interbtc?rev=e7a6b41abe69de294abf32a5d350c0c5b719cce3#e7a6b41abe69de294abf32a5d350c0c5b719cce3" +source = "git+https://github.com/gregdhill/interbtc?rev=278d379087bc39932b328bce9f497a20c2403c5b#278d379087bc39932b328bce9f497a20c2403c5b" dependencies = [ "frame-support", "parity-scale-codec", @@ -4459,7 +4562,7 @@ dependencies = [ [[package]] name = "module-oracle-rpc" version = "1.2.0" -source = "git+https://github.com/interlay/interbtc?rev=e7a6b41abe69de294abf32a5d350c0c5b719cce3#e7a6b41abe69de294abf32a5d350c0c5b719cce3" +source = "git+https://github.com/gregdhill/interbtc?rev=278d379087bc39932b328bce9f497a20c2403c5b#278d379087bc39932b328bce9f497a20c2403c5b" dependencies = [ "jsonrpc-core", "jsonrpc-core-client", @@ -4474,7 +4577,7 @@ dependencies = [ [[package]] name = "module-oracle-rpc-runtime-api" version = "1.2.0" -source = "git+https://github.com/interlay/interbtc?rev=e7a6b41abe69de294abf32a5d350c0c5b719cce3#e7a6b41abe69de294abf32a5d350c0c5b719cce3" +source = "git+https://github.com/gregdhill/interbtc?rev=278d379087bc39932b328bce9f497a20c2403c5b#278d379087bc39932b328bce9f497a20c2403c5b" dependencies = [ "frame-support", "parity-scale-codec", @@ -4486,7 +4589,7 @@ dependencies = [ [[package]] name = "module-redeem-rpc" version = "1.2.0" -source = "git+https://github.com/interlay/interbtc?rev=e7a6b41abe69de294abf32a5d350c0c5b719cce3#e7a6b41abe69de294abf32a5d350c0c5b719cce3" +source = "git+https://github.com/gregdhill/interbtc?rev=278d379087bc39932b328bce9f497a20c2403c5b#278d379087bc39932b328bce9f497a20c2403c5b" dependencies = [ "jsonrpc-core", "jsonrpc-core-client", @@ -4501,7 +4604,7 @@ dependencies = [ [[package]] name = "module-redeem-rpc-runtime-api" version = "1.2.0" -source = "git+https://github.com/interlay/interbtc?rev=e7a6b41abe69de294abf32a5d350c0c5b719cce3#e7a6b41abe69de294abf32a5d350c0c5b719cce3" +source = "git+https://github.com/gregdhill/interbtc?rev=278d379087bc39932b328bce9f497a20c2403c5b#278d379087bc39932b328bce9f497a20c2403c5b" dependencies = [ "frame-support", "parity-scale-codec", @@ -4512,7 +4615,7 @@ dependencies = [ [[package]] name = "module-refund-rpc" version = "1.2.0" -source = "git+https://github.com/interlay/interbtc?rev=e7a6b41abe69de294abf32a5d350c0c5b719cce3#e7a6b41abe69de294abf32a5d350c0c5b719cce3" +source = "git+https://github.com/gregdhill/interbtc?rev=278d379087bc39932b328bce9f497a20c2403c5b#278d379087bc39932b328bce9f497a20c2403c5b" dependencies = [ "jsonrpc-core", "jsonrpc-core-client", @@ -4527,7 +4630,7 @@ dependencies = [ [[package]] name = "module-refund-rpc-runtime-api" version = "1.2.0" -source = "git+https://github.com/interlay/interbtc?rev=e7a6b41abe69de294abf32a5d350c0c5b719cce3#e7a6b41abe69de294abf32a5d350c0c5b719cce3" +source = "git+https://github.com/gregdhill/interbtc?rev=278d379087bc39932b328bce9f497a20c2403c5b#278d379087bc39932b328bce9f497a20c2403c5b" dependencies = [ "frame-support", "parity-scale-codec", @@ -4538,7 +4641,7 @@ dependencies = [ [[package]] name = "module-relay-rpc" version = "1.2.0" -source = "git+https://github.com/interlay/interbtc?rev=e7a6b41abe69de294abf32a5d350c0c5b719cce3#e7a6b41abe69de294abf32a5d350c0c5b719cce3" +source = "git+https://github.com/gregdhill/interbtc?rev=278d379087bc39932b328bce9f497a20c2403c5b#278d379087bc39932b328bce9f497a20c2403c5b" dependencies = [ "jsonrpc-core", "jsonrpc-core-client", @@ -4553,7 +4656,7 @@ dependencies = [ [[package]] name = "module-relay-rpc-runtime-api" version = "1.2.0" -source = "git+https://github.com/interlay/interbtc?rev=e7a6b41abe69de294abf32a5d350c0c5b719cce3#e7a6b41abe69de294abf32a5d350c0c5b719cce3" +source = "git+https://github.com/gregdhill/interbtc?rev=278d379087bc39932b328bce9f497a20c2403c5b#278d379087bc39932b328bce9f497a20c2403c5b" dependencies = [ "frame-support", "parity-scale-codec", @@ -4564,7 +4667,7 @@ dependencies = [ [[package]] name = "module-replace-rpc" version = "1.2.0" -source = "git+https://github.com/interlay/interbtc?rev=e7a6b41abe69de294abf32a5d350c0c5b719cce3#e7a6b41abe69de294abf32a5d350c0c5b719cce3" +source = "git+https://github.com/gregdhill/interbtc?rev=278d379087bc39932b328bce9f497a20c2403c5b#278d379087bc39932b328bce9f497a20c2403c5b" dependencies = [ "jsonrpc-core", "jsonrpc-core-client", @@ -4579,7 +4682,7 @@ dependencies = [ [[package]] name = "module-replace-rpc-runtime-api" version = "1.2.0" -source = "git+https://github.com/interlay/interbtc?rev=e7a6b41abe69de294abf32a5d350c0c5b719cce3#e7a6b41abe69de294abf32a5d350c0c5b719cce3" +source = "git+https://github.com/gregdhill/interbtc?rev=278d379087bc39932b328bce9f497a20c2403c5b#278d379087bc39932b328bce9f497a20c2403c5b" dependencies = [ "frame-support", "parity-scale-codec", @@ -4590,7 +4693,7 @@ dependencies = [ [[package]] name = "module-vault-registry-rpc" version = "0.3.0" -source = "git+https://github.com/interlay/interbtc?rev=e7a6b41abe69de294abf32a5d350c0c5b719cce3#e7a6b41abe69de294abf32a5d350c0c5b719cce3" +source = "git+https://github.com/gregdhill/interbtc?rev=278d379087bc39932b328bce9f497a20c2403c5b#278d379087bc39932b328bce9f497a20c2403c5b" dependencies = [ "jsonrpc-core", "jsonrpc-core-client", @@ -4606,7 +4709,7 @@ dependencies = [ [[package]] name = "module-vault-registry-rpc-runtime-api" version = "0.3.0" -source = "git+https://github.com/interlay/interbtc?rev=e7a6b41abe69de294abf32a5d350c0c5b719cce3#e7a6b41abe69de294abf32a5d350c0c5b719cce3" +source = "git+https://github.com/gregdhill/interbtc?rev=278d379087bc39932b328bce9f497a20c2403c5b#278d379087bc39932b328bce9f497a20c2403c5b" dependencies = [ "frame-support", "module-oracle-rpc-runtime-api", @@ -4663,7 +4766,7 @@ dependencies = [ "generic-array 0.14.5", "multihash-derive", "sha2 0.9.9", - "sha3", + "sha3 0.9.1", "unsigned-varint 0.5.1", ] @@ -4800,82 +4903,284 @@ dependencies = [ ] [[package]] -name = "nodrop" -version = "0.1.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72ef4a56884ca558e5ddb05a1d1e7e1bfd9a68d9ed024c21704cc98872dae1bb" - -[[package]] -name = "nohash-hasher" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2bf50223579dc7cdcfb3bfcacf7069ff68243f8c363f62ffa99cf000a6b9c451" +name = "node-cli" +version = "3.0.0-dev" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" +dependencies = [ + "frame-system", + "frame-system-rpc-runtime-api", + "futures 0.3.21", + "hex-literal 0.3.4", + "log 0.4.16", + "node-executor", + "node-primitives", + "node-rpc", + "node-runtime", + "pallet-asset-tx-payment", + "pallet-balances", + "pallet-im-online", + "pallet-transaction-payment", + "parity-scale-codec", + "rand 0.8.5", + "sc-authority-discovery", + "sc-basic-authorship", + "sc-chain-spec", + "sc-client-api", + "sc-consensus", + "sc-consensus-babe", + "sc-consensus-slots", + "sc-consensus-uncles", + "sc-executor", + "sc-finality-grandpa", + "sc-network", + "sc-rpc", + "sc-service", + "sc-sync-state-rpc", + "sc-telemetry", + "sc-transaction-pool", + "sc-transaction-pool-api", + "serde", + "sp-api", + "sp-authority-discovery", + "sp-authorship", + "sp-consensus", + "sp-consensus-babe", + "sp-core", + "sp-finality-grandpa", + "sp-inherents", + "sp-keyring", + "sp-keystore", + "sp-runtime", + "sp-timestamp", + "sp-transaction-pool", + "sp-transaction-storage-proof", + "sp-trie", +] [[package]] -name = "nom" -version = "7.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8903e5a29a317527874d0402f867152a3d21c908bb0b933e416c65e301d4c36" +name = "node-executor" +version = "3.0.0-dev" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" dependencies = [ - "memchr", - "minimal-lexical", + "frame-benchmarking", + "node-primitives", + "node-runtime", + "parity-scale-codec", + "sc-executor", + "scale-info", + "sp-core", + "sp-keystore", + "sp-state-machine", + "sp-tracing", + "sp-trie", ] [[package]] -name = "nomination" -version = "0.5.0" -source = "git+https://github.com/interlay/interbtc?rev=e7a6b41abe69de294abf32a5d350c0c5b719cce3#e7a6b41abe69de294abf32a5d350c0c5b719cce3" +name = "node-primitives" +version = "2.0.0" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" dependencies = [ - "currency", - "fee", - "frame-benchmarking", - "frame-support", "frame-system", - "interbtc-primitives", - "oracle 1.2.0", - "orml-tokens", - "orml-traits", - "pallet-timestamp", "parity-scale-codec", - "reward", "scale-info", - "security", - "serde", - "sp-arithmetic", + "sp-application-crypto", "sp-core", - "sp-io", "sp-runtime", - "sp-std", - "staking", - "vault-registry", ] [[package]] -name = "normalize-line-endings" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61807f77802ff30975e01f4f071c8ba10c022052f98b3294119f3e615d13e5be" - -[[package]] -name = "ntapi" -version = "0.3.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c28774a7fd2fbb4f0babd8237ce554b73af68021b5f695a3cebd6c59bac0980f" +name = "node-rpc" +version = "3.0.0-dev" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" dependencies = [ - "winapi 0.3.9", + "jsonrpc-core", + "node-primitives", + "pallet-contracts-rpc", + "pallet-mmr-rpc", + "pallet-transaction-payment-rpc", + "sc-chain-spec", + "sc-client-api", + "sc-consensus-babe", + "sc-consensus-babe-rpc", + "sc-consensus-epochs", + "sc-finality-grandpa", + "sc-finality-grandpa-rpc", + "sc-rpc", + "sc-rpc-api", + "sc-sync-state-rpc", + "sc-transaction-pool-api", + "sp-api", + "sp-block-builder", + "sp-blockchain", + "sp-consensus", + "sp-consensus-babe", + "sp-keystore", + "sp-runtime", + "substrate-frame-rpc-system", ] [[package]] -name = "num" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8536030f9fea7127f841b45bb6243b27255787fb4eb83958aa1ef9d2fdc0c36" +name = "node-runtime" +version = "3.0.0-dev" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" dependencies = [ - "num-bigint", - "num-complex 0.2.4", - "num-integer", - "num-iter", - "num-rational 0.2.4", + "frame-benchmarking", + "frame-election-provider-support", + "frame-executive", + "frame-support", + "frame-system", + "frame-system-rpc-runtime-api", + "frame-try-runtime", + "log 0.4.16", + "node-primitives", + "pallet-asset-tx-payment", + "pallet-assets", + "pallet-authority-discovery", + "pallet-authorship", + "pallet-babe", + "pallet-bags-list", + "pallet-balances", + "pallet-bounties", + "pallet-child-bounties", + "pallet-collective", + "pallet-contracts", + "pallet-contracts-primitives", + "pallet-contracts-rpc-runtime-api", + "pallet-conviction-voting", + "pallet-democracy", + "pallet-election-provider-multi-phase", + "pallet-elections-phragmen", + "pallet-gilt", + "pallet-grandpa", + "pallet-identity", + "pallet-im-online", + "pallet-indices", + "pallet-lottery", + "pallet-membership", + "pallet-mmr", + "pallet-multisig", + "pallet-offences", + "pallet-preimage", + "pallet-proxy", + "pallet-randomness-collective-flip", + "pallet-recovery", + "pallet-referenda", + "pallet-scheduler", + "pallet-session", + "pallet-society", + "pallet-staking", + "pallet-staking-reward-curve", + "pallet-state-trie-migration", + "pallet-sudo", + "pallet-timestamp", + "pallet-tips", + "pallet-transaction-payment", + "pallet-transaction-payment-rpc-runtime-api", + "pallet-transaction-storage", + "pallet-treasury", + "pallet-uniques", + "pallet-utility", + "pallet-vesting", + "pallet-whitelist", + "parity-scale-codec", + "scale-info", + "sp-api", + "sp-authority-discovery", + "sp-block-builder", + "sp-consensus-babe", + "sp-core", + "sp-inherents", + "sp-io", + "sp-npos-elections", + "sp-offchain", + "sp-runtime", + "sp-sandbox", + "sp-session", + "sp-staking", + "sp-std", + "sp-transaction-pool", + "sp-version", + "static_assertions", + "substrate-wasm-builder", +] + +[[package]] +name = "nodrop" +version = "0.1.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72ef4a56884ca558e5ddb05a1d1e7e1bfd9a68d9ed024c21704cc98872dae1bb" + +[[package]] +name = "nohash-hasher" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2bf50223579dc7cdcfb3bfcacf7069ff68243f8c363f62ffa99cf000a6b9c451" + +[[package]] +name = "nom" +version = "7.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8903e5a29a317527874d0402f867152a3d21c908bb0b933e416c65e301d4c36" +dependencies = [ + "memchr", + "minimal-lexical", +] + +[[package]] +name = "nomination" +version = "0.5.0" +source = "git+https://github.com/gregdhill/interbtc?rev=278d379087bc39932b328bce9f497a20c2403c5b#278d379087bc39932b328bce9f497a20c2403c5b" +dependencies = [ + "currency", + "fee", + "frame-benchmarking", + "frame-support", + "frame-system", + "interbtc-primitives", + "oracle 1.2.0", + "orml-tokens", + "orml-traits", + "pallet-timestamp", + "parity-scale-codec", + "reward", + "scale-info", + "security", + "serde", + "sp-arithmetic", + "sp-core", + "sp-io", + "sp-runtime", + "sp-std", + "staking", + "vault-registry", +] + +[[package]] +name = "normalize-line-endings" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "61807f77802ff30975e01f4f071c8ba10c022052f98b3294119f3e615d13e5be" + +[[package]] +name = "ntapi" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c28774a7fd2fbb4f0babd8237ce554b73af68021b5f695a3cebd6c59bac0980f" +dependencies = [ + "winapi 0.3.9", +] + +[[package]] +name = "num" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8536030f9fea7127f841b45bb6243b27255787fb4eb83958aa1ef9d2fdc0c36" +dependencies = [ + "num-bigint", + "num-complex 0.2.4", + "num-integer", + "num-iter", + "num-rational 0.2.4", "num-traits", ] @@ -5099,7 +5404,7 @@ dependencies = [ [[package]] name = "oracle" version = "1.2.0" -source = "git+https://github.com/interlay/interbtc?rev=e7a6b41abe69de294abf32a5d350c0c5b719cce3#e7a6b41abe69de294abf32a5d350c0c5b719cce3" +source = "git+https://github.com/gregdhill/interbtc?rev=278d379087bc39932b328bce9f497a20c2403c5b#278d379087bc39932b328bce9f497a20c2403c5b" dependencies = [ "currency", "frame-benchmarking", @@ -5121,7 +5426,7 @@ dependencies = [ [[package]] name = "orml-tokens" version = "0.4.1-dev" -source = "git+https://github.com/open-web3-stack/open-runtime-module-library?rev=aac79b3b31953381669a2ffa9b3e9bfe48e87f38#aac79b3b31953381669a2ffa9b3e9bfe48e87f38" +source = "git+https://github.com/open-web3-stack/open-runtime-module-library?rev=2b5d4ce1d08fb54c0007c2055653892d2c93a92e#2b5d4ce1d08fb54c0007c2055653892d2c93a92e" dependencies = [ "frame-support", "frame-system", @@ -5136,7 +5441,7 @@ dependencies = [ [[package]] name = "orml-traits" version = "0.4.1-dev" -source = "git+https://github.com/open-web3-stack/open-runtime-module-library?rev=aac79b3b31953381669a2ffa9b3e9bfe48e87f38#aac79b3b31953381669a2ffa9b3e9bfe48e87f38" +source = "git+https://github.com/open-web3-stack/open-runtime-module-library?rev=2b5d4ce1d08fb54c0007c2055653892d2c93a92e#2b5d4ce1d08fb54c0007c2055653892d2c93a92e" dependencies = [ "frame-support", "impl-trait-for-tuples", @@ -5154,7 +5459,7 @@ dependencies = [ [[package]] name = "orml-utilities" version = "0.4.1-dev" -source = "git+https://github.com/open-web3-stack/open-runtime-module-library?rev=aac79b3b31953381669a2ffa9b3e9bfe48e87f38#aac79b3b31953381669a2ffa9b3e9bfe48e87f38" +source = "git+https://github.com/open-web3-stack/open-runtime-module-library?rev=2b5d4ce1d08fb54c0007c2055653892d2c93a92e#2b5d4ce1d08fb54c0007c2055653892d2c93a92e" dependencies = [ "frame-support", "parity-scale-codec", @@ -5168,7 +5473,7 @@ dependencies = [ [[package]] name = "orml-vesting" version = "0.4.1-dev" -source = "git+https://github.com/open-web3-stack/open-runtime-module-library?rev=aac79b3b31953381669a2ffa9b3e9bfe48e87f38#aac79b3b31953381669a2ffa9b3e9bfe48e87f38" +source = "git+https://github.com/open-web3-stack/open-runtime-module-library?rev=2b5d4ce1d08fb54c0007c2055653892d2c93a92e#2b5d4ce1d08fb54c0007c2055653892d2c93a92e" dependencies = [ "frame-support", "frame-system", @@ -5198,10 +5503,41 @@ dependencies = [ "stable_deref_trait", ] +[[package]] +name = "pallet-asset-tx-payment" +version = "4.0.0-dev" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" +dependencies = [ + "frame-support", + "frame-system", + "pallet-transaction-payment", + "parity-scale-codec", + "scale-info", + "serde", + "sp-core", + "sp-io", + "sp-runtime", + "sp-std", +] + +[[package]] +name = "pallet-assets" +version = "4.0.0-dev" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" +dependencies = [ + "frame-benchmarking", + "frame-support", + "frame-system", + "parity-scale-codec", + "scale-info", + "sp-runtime", + "sp-std", +] + [[package]] name = "pallet-aura" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.17#22d40c761a985482f93bbbea5ba4199bdba74f8e" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" dependencies = [ "frame-support", "frame-system", @@ -5214,10 +5550,26 @@ dependencies = [ "sp-std", ] +[[package]] +name = "pallet-authority-discovery" +version = "4.0.0-dev" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" +dependencies = [ + "frame-support", + "frame-system", + "pallet-session", + "parity-scale-codec", + "scale-info", + "sp-application-crypto", + "sp-authority-discovery", + "sp-runtime", + "sp-std", +] + [[package]] name = "pallet-authorship" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.17#22d40c761a985482f93bbbea5ba4199bdba74f8e" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" dependencies = [ "frame-support", "frame-system", @@ -5230,14 +5582,38 @@ dependencies = [ ] [[package]] -name = "pallet-balances" +name = "pallet-babe" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.17#22d40c761a985482f93bbbea5ba4199bdba74f8e" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" dependencies = [ "frame-benchmarking", "frame-support", "frame-system", "log 0.4.16", + "pallet-authorship", + "pallet-session", + "pallet-timestamp", + "parity-scale-codec", + "scale-info", + "sp-application-crypto", + "sp-consensus-babe", + "sp-consensus-vrf", + "sp-io", + "sp-runtime", + "sp-session", + "sp-staking", + "sp-std", +] + +[[package]] +name = "pallet-bags-list" +version = "4.0.0-dev" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" +dependencies = [ + "frame-election-provider-support", + "frame-support", + "frame-system", + "log 0.4.16", "parity-scale-codec", "scale-info", "sp-runtime", @@ -5245,9 +5621,9 @@ dependencies = [ ] [[package]] -name = "pallet-collective" +name = "pallet-balances" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.17#22d40c761a985482f93bbbea5ba4199bdba74f8e" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" dependencies = [ "frame-benchmarking", "frame-support", @@ -5255,44 +5631,37 @@ dependencies = [ "log 0.4.16", "parity-scale-codec", "scale-info", - "sp-core", - "sp-io", "sp-runtime", "sp-std", ] [[package]] -name = "pallet-grandpa" +name = "pallet-bounties" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.17#22d40c761a985482f93bbbea5ba4199bdba74f8e" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" dependencies = [ - "frame-benchmarking", "frame-support", "frame-system", "log 0.4.16", - "pallet-authorship", - "pallet-session", + "pallet-treasury", "parity-scale-codec", "scale-info", - "sp-application-crypto", "sp-core", - "sp-finality-grandpa", "sp-io", "sp-runtime", - "sp-session", - "sp-staking", "sp-std", ] [[package]] -name = "pallet-membership" +name = "pallet-child-bounties" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.17#22d40c761a985482f93bbbea5ba4199bdba74f8e" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" dependencies = [ - "frame-benchmarking", "frame-support", "frame-system", "log 0.4.16", + "pallet-bounties", + "pallet-treasury", "parity-scale-codec", "scale-info", "sp-core", @@ -5302,121 +5671,606 @@ dependencies = [ ] [[package]] -name = "pallet-multisig" +name = "pallet-collective" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.17#22d40c761a985482f93bbbea5ba4199bdba74f8e" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" dependencies = [ + "frame-benchmarking", "frame-support", "frame-system", + "log 0.4.16", "parity-scale-codec", "scale-info", + "sp-core", "sp-io", "sp-runtime", "sp-std", ] [[package]] -name = "pallet-preimage" +name = "pallet-contracts" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.17#22d40c761a985482f93bbbea5ba4199bdba74f8e" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" dependencies = [ + "bitflags", "frame-benchmarking", "frame-support", "frame-system", + "log 0.4.16", + "pallet-contracts-primitives", + "pallet-contracts-proc-macro", "parity-scale-codec", + "rand 0.8.5", "scale-info", + "serde", + "smallvec", "sp-core", "sp-io", "sp-runtime", + "sp-sandbox", "sp-std", + "wasm-instrument", + "wasmi-validation", ] [[package]] -name = "pallet-scheduler" +name = "pallet-contracts-primitives" +version = "6.0.0" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" +dependencies = [ + "bitflags", + "parity-scale-codec", + "scale-info", + "serde", + "sp-core", + "sp-rpc", + "sp-runtime", + "sp-std", +] + +[[package]] +name = "pallet-contracts-proc-macro" +version = "4.0.0-dev" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "pallet-contracts-rpc" +version = "4.0.0-dev" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" +dependencies = [ + "jsonrpc-core", + "jsonrpc-core-client", + "jsonrpc-derive", + "pallet-contracts-primitives", + "pallet-contracts-rpc-runtime-api", + "parity-scale-codec", + "serde", + "sp-api", + "sp-blockchain", + "sp-core", + "sp-rpc", + "sp-runtime", +] + +[[package]] +name = "pallet-contracts-rpc-runtime-api" +version = "4.0.0-dev" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" +dependencies = [ + "pallet-contracts-primitives", + "parity-scale-codec", + "scale-info", + "sp-api", + "sp-runtime", + "sp-std", +] + +[[package]] +name = "pallet-conviction-voting" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.17#22d40c761a985482f93bbbea5ba4199bdba74f8e" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" dependencies = [ + "assert_matches", "frame-benchmarking", "frame-support", "frame-system", - "log 0.4.16", "parity-scale-codec", "scale-info", + "serde", "sp-io", "sp-runtime", "sp-std", ] [[package]] -name = "pallet-session" +name = "pallet-democracy" +version = "4.0.0-dev" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" +dependencies = [ + "frame-benchmarking", + "frame-support", + "frame-system", + "parity-scale-codec", + "scale-info", + "serde", + "sp-io", + "sp-runtime", + "sp-std", +] + +[[package]] +name = "pallet-election-provider-multi-phase" +version = "4.0.0-dev" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" +dependencies = [ + "frame-benchmarking", + "frame-election-provider-support", + "frame-support", + "frame-system", + "log 0.4.16", + "parity-scale-codec", + "rand 0.7.3", + "scale-info", + "sp-arithmetic", + "sp-core", + "sp-io", + "sp-npos-elections", + "sp-runtime", + "sp-std", + "static_assertions", + "strum", +] + +[[package]] +name = "pallet-elections-phragmen" +version = "5.0.0-dev" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" +dependencies = [ + "frame-support", + "frame-system", + "log 0.4.16", + "parity-scale-codec", + "scale-info", + "sp-core", + "sp-io", + "sp-npos-elections", + "sp-runtime", + "sp-std", +] + +[[package]] +name = "pallet-gilt" +version = "4.0.0-dev" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" +dependencies = [ + "frame-benchmarking", + "frame-support", + "frame-system", + "parity-scale-codec", + "scale-info", + "sp-arithmetic", + "sp-runtime", + "sp-std", +] + +[[package]] +name = "pallet-grandpa" +version = "4.0.0-dev" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" +dependencies = [ + "frame-benchmarking", + "frame-support", + "frame-system", + "log 0.4.16", + "pallet-authorship", + "pallet-session", + "parity-scale-codec", + "scale-info", + "sp-application-crypto", + "sp-core", + "sp-finality-grandpa", + "sp-io", + "sp-runtime", + "sp-session", + "sp-staking", + "sp-std", +] + +[[package]] +name = "pallet-identity" +version = "4.0.0-dev" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" +dependencies = [ + "enumflags2", + "frame-benchmarking", + "frame-support", + "frame-system", + "parity-scale-codec", + "scale-info", + "sp-io", + "sp-runtime", + "sp-std", +] + +[[package]] +name = "pallet-im-online" +version = "4.0.0-dev" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" +dependencies = [ + "frame-support", + "frame-system", + "log 0.4.16", + "pallet-authorship", + "parity-scale-codec", + "scale-info", + "sp-application-crypto", + "sp-core", + "sp-io", + "sp-runtime", + "sp-staking", + "sp-std", +] + +[[package]] +name = "pallet-indices" +version = "4.0.0-dev" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" +dependencies = [ + "frame-support", + "frame-system", + "parity-scale-codec", + "scale-info", + "sp-core", + "sp-io", + "sp-keyring", + "sp-runtime", + "sp-std", +] + +[[package]] +name = "pallet-lottery" +version = "4.0.0-dev" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" +dependencies = [ + "frame-support", + "frame-system", + "parity-scale-codec", + "scale-info", + "sp-runtime", + "sp-std", +] + +[[package]] +name = "pallet-membership" +version = "4.0.0-dev" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" +dependencies = [ + "frame-benchmarking", + "frame-support", + "frame-system", + "log 0.4.16", + "parity-scale-codec", + "scale-info", + "sp-core", + "sp-io", + "sp-runtime", + "sp-std", +] + +[[package]] +name = "pallet-mmr" +version = "4.0.0-dev" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" +dependencies = [ + "ckb-merkle-mountain-range", + "frame-benchmarking", + "frame-support", + "frame-system", + "pallet-mmr-primitives", + "parity-scale-codec", + "scale-info", + "sp-core", + "sp-io", + "sp-runtime", + "sp-std", +] + +[[package]] +name = "pallet-mmr-primitives" +version = "4.0.0-dev" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" +dependencies = [ + "frame-support", + "frame-system", + "log 0.4.16", + "parity-scale-codec", + "serde", + "sp-api", + "sp-core", + "sp-runtime", + "sp-std", +] + +[[package]] +name = "pallet-mmr-rpc" +version = "3.0.0" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" +dependencies = [ + "jsonrpc-core", + "jsonrpc-core-client", + "jsonrpc-derive", + "pallet-mmr-primitives", + "parity-scale-codec", + "serde", + "sp-api", + "sp-blockchain", + "sp-core", + "sp-runtime", +] + +[[package]] +name = "pallet-multisig" +version = "4.0.0-dev" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" +dependencies = [ + "frame-support", + "frame-system", + "parity-scale-codec", + "scale-info", + "sp-io", + "sp-runtime", + "sp-std", +] + +[[package]] +name = "pallet-offences" +version = "4.0.0-dev" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" +dependencies = [ + "frame-support", + "frame-system", + "log 0.4.16", + "pallet-balances", + "parity-scale-codec", + "scale-info", + "serde", + "sp-runtime", + "sp-staking", + "sp-std", +] + +[[package]] +name = "pallet-preimage" +version = "4.0.0-dev" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" +dependencies = [ + "frame-benchmarking", + "frame-support", + "frame-system", + "parity-scale-codec", + "scale-info", + "sp-core", + "sp-io", + "sp-runtime", + "sp-std", +] + +[[package]] +name = "pallet-proxy" +version = "4.0.0-dev" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" +dependencies = [ + "frame-support", + "frame-system", + "parity-scale-codec", + "scale-info", + "sp-io", + "sp-runtime", + "sp-std", +] + +[[package]] +name = "pallet-randomness-collective-flip" +version = "4.0.0-dev" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" +dependencies = [ + "frame-support", + "frame-system", + "parity-scale-codec", + "safe-mix", + "scale-info", + "sp-runtime", + "sp-std", +] + +[[package]] +name = "pallet-recovery" +version = "4.0.0-dev" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" +dependencies = [ + "frame-support", + "frame-system", + "parity-scale-codec", + "scale-info", + "sp-io", + "sp-runtime", + "sp-std", +] + +[[package]] +name = "pallet-referenda" +version = "4.0.0-dev" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" +dependencies = [ + "frame-benchmarking", + "frame-support", + "frame-system", + "parity-scale-codec", + "scale-info", + "serde", + "sp-io", + "sp-runtime", + "sp-std", +] + +[[package]] +name = "pallet-scheduler" +version = "4.0.0-dev" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" +dependencies = [ + "frame-benchmarking", + "frame-support", + "frame-system", + "log 0.4.16", + "parity-scale-codec", + "scale-info", + "sp-io", + "sp-runtime", + "sp-std", +] + +[[package]] +name = "pallet-session" +version = "4.0.0-dev" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" +dependencies = [ + "frame-support", + "frame-system", + "impl-trait-for-tuples", + "log 0.4.16", + "pallet-timestamp", + "parity-scale-codec", + "scale-info", + "sp-core", + "sp-io", + "sp-runtime", + "sp-session", + "sp-staking", + "sp-std", + "sp-trie", +] + +[[package]] +name = "pallet-society" +version = "4.0.0-dev" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" +dependencies = [ + "frame-support", + "frame-system", + "parity-scale-codec", + "rand_chacha 0.2.2", + "scale-info", + "sp-runtime", + "sp-std", +] + +[[package]] +name = "pallet-staking" +version = "4.0.0-dev" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" +dependencies = [ + "frame-election-provider-support", + "frame-support", + "frame-system", + "log 0.4.16", + "pallet-authorship", + "pallet-session", + "parity-scale-codec", + "scale-info", + "serde", + "sp-application-crypto", + "sp-io", + "sp-runtime", + "sp-staking", + "sp-std", +] + +[[package]] +name = "pallet-staking-reward-curve" +version = "4.0.0-dev" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" +dependencies = [ + "proc-macro-crate 1.1.3", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "pallet-state-trie-migration" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.17#22d40c761a985482f93bbbea5ba4199bdba74f8e" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" dependencies = [ + "frame-benchmarking", "frame-support", "frame-system", - "impl-trait-for-tuples", "log 0.4.16", - "pallet-timestamp", "parity-scale-codec", "scale-info", "sp-core", "sp-io", "sp-runtime", - "sp-session", - "sp-staking", "sp-std", - "sp-trie", ] [[package]] -name = "pallet-society" +name = "pallet-sudo" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.17#22d40c761a985482f93bbbea5ba4199bdba74f8e" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" dependencies = [ "frame-support", "frame-system", "parity-scale-codec", - "rand_chacha 0.2.2", "scale-info", + "sp-io", "sp-runtime", "sp-std", ] [[package]] -name = "pallet-sudo" +name = "pallet-timestamp" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.17#22d40c761a985482f93bbbea5ba4199bdba74f8e" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" dependencies = [ + "frame-benchmarking", "frame-support", "frame-system", + "log 0.4.16", "parity-scale-codec", "scale-info", - "sp-io", + "sp-inherents", "sp-runtime", "sp-std", + "sp-timestamp", ] [[package]] -name = "pallet-timestamp" +name = "pallet-tips" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.17#22d40c761a985482f93bbbea5ba4199bdba74f8e" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" dependencies = [ - "frame-benchmarking", "frame-support", "frame-system", "log 0.4.16", + "pallet-treasury", "parity-scale-codec", "scale-info", - "sp-inherents", + "serde", + "sp-core", + "sp-io", "sp-runtime", "sp-std", - "sp-timestamp", ] [[package]] name = "pallet-transaction-payment" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.17#22d40c761a985482f93bbbea5ba4199bdba74f8e" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" dependencies = [ "frame-support", "frame-system", @@ -5433,7 +6287,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment-rpc" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.17#22d40c761a985482f93bbbea5ba4199bdba74f8e" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" dependencies = [ "jsonrpc-core", "jsonrpc-core-client", @@ -5450,7 +6304,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment-rpc-runtime-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.17#22d40c761a985482f93bbbea5ba4199bdba74f8e" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" dependencies = [ "pallet-transaction-payment", "parity-scale-codec", @@ -5458,10 +6312,28 @@ dependencies = [ "sp-runtime", ] +[[package]] +name = "pallet-transaction-storage" +version = "4.0.0-dev" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" +dependencies = [ + "frame-support", + "frame-system", + "pallet-balances", + "parity-scale-codec", + "scale-info", + "serde", + "sp-inherents", + "sp-io", + "sp-runtime", + "sp-std", + "sp-transaction-storage-proof", +] + [[package]] name = "pallet-treasury" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.17#22d40c761a985482f93bbbea5ba4199bdba74f8e" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" dependencies = [ "frame-support", "frame-system", @@ -5474,10 +6346,25 @@ dependencies = [ "sp-std", ] +[[package]] +name = "pallet-uniques" +version = "4.0.0-dev" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" +dependencies = [ + "frame-benchmarking", + "frame-support", + "frame-system", + "log 0.4.16", + "parity-scale-codec", + "scale-info", + "sp-runtime", + "sp-std", +] + [[package]] name = "pallet-utility" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.17#22d40c761a985482f93bbbea5ba4199bdba74f8e" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" dependencies = [ "frame-support", "frame-system", @@ -5489,6 +6376,35 @@ dependencies = [ "sp-std", ] +[[package]] +name = "pallet-vesting" +version = "4.0.0-dev" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" +dependencies = [ + "frame-support", + "frame-system", + "log 0.4.16", + "parity-scale-codec", + "scale-info", + "sp-runtime", + "sp-std", +] + +[[package]] +name = "pallet-whitelist" +version = "4.0.0-dev" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" +dependencies = [ + "frame-support", + "frame-system", + "parity-scale-codec", + "scale-info", + "sp-api", + "sp-io", + "sp-runtime", + "sp-std", +] + [[package]] name = "parity-db" version = "0.3.9" @@ -5510,9 +6426,9 @@ dependencies = [ [[package]] name = "parity-scale-codec" -version = "2.3.1" +version = "3.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "373b1a4c1338d9cd3d1fa53b3a11bdab5ab6bd80a20f7f7becd76953ae2be909" +checksum = "e8b44461635bbb1a0300f100a841e571e7d919c81c73075ef5d152ffdb521066" dependencies = [ "arrayvec 0.7.2", "bitvec", @@ -5524,9 +6440,9 @@ dependencies = [ [[package]] name = "parity-scale-codec-derive" -version = "2.3.1" +version = "3.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1557010476e0595c9b568d16dcfb81b93cdeb157612726f5170d31aa707bed27" +checksum = "c45ed1f39709f5a89338fab50e59816b2e8815f5bb58276e7ddf9afd495f73f8" dependencies = [ "proc-macro-crate 1.1.3", "proc-macro2", @@ -5556,15 +6472,15 @@ dependencies = [ [[package]] name = "parity-util-mem" -version = "0.10.2" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f4cb4e169446179cbc6b8b6320cc9fca49bd2e94e8db25f25f200a8ea774770" +checksum = "c32561d248d352148124f036cac253a644685a21dc9fea383eb4907d7bd35a8f" dependencies = [ "cfg-if 1.0.0", - "hashbrown 0.11.2", + "hashbrown 0.12.0", "impl-trait-for-tuples", "parity-util-mem-derive", - "parking_lot 0.11.2", + "parking_lot 0.12.0", "primitive-types", "smallvec", "winapi 0.3.9", @@ -5835,8 +6751,8 @@ checksum = "e8d0eef3571242013a0d5dc84861c3ae4a652e56e12adf8bdc26ff5f8cb34c94" [[package]] name = "polkadot-core-primitives" -version = "0.9.17" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.17#de0ecd4760b146ecf33f5e867d707d789e21e060" +version = "0.9.18" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.18#9ed0c98204d25eaad8a6b40248daee8e6a40d111" dependencies = [ "parity-scale-codec", "parity-util-mem", @@ -5848,8 +6764,8 @@ dependencies = [ [[package]] name = "polkadot-parachain" -version = "0.9.17" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.17#de0ecd4760b146ecf33f5e867d707d789e21e060" +version = "0.9.18" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.18#9ed0c98204d25eaad8a6b40248daee8e6a40d111" dependencies = [ "derive_more", "frame-support", @@ -5936,9 +6852,9 @@ dependencies = [ [[package]] name = "primitive-types" -version = "0.10.1" +version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05e4722c697a58a99d5d06a08c30821d7c082a4632198de1eaa5a6c22ef42373" +checksum = "e28720988bff275df1f51b171e1b2a18c30d194c4d2b61defdacecd625a5d94a" dependencies = [ "fixed-hash", "impl-codec", @@ -6152,9 +7068,9 @@ dependencies = [ [[package]] name = "radium" -version = "0.6.2" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "643f8f41a8ebc4c5dc4515c82bb8abd397b527fc20fd681b7c011c2aee5d44fb" +checksum = "dc33ff2d4973d518d823d61aa239014831e521c75da58e3df4840d3f47749d09" [[package]] name = "rand" @@ -6318,7 +7234,7 @@ dependencies = [ [[package]] name = "redeem" version = "1.2.0" -source = "git+https://github.com/interlay/interbtc?rev=e7a6b41abe69de294abf32a5d350c0c5b719cce3#e7a6b41abe69de294abf32a5d350c0c5b719cce3" +source = "git+https://github.com/gregdhill/interbtc?rev=278d379087bc39932b328bce9f497a20c2403c5b#278d379087bc39932b328bce9f497a20c2403c5b" dependencies = [ "bitcoin 1.2.0", "btc-relay", @@ -6387,7 +7303,7 @@ dependencies = [ [[package]] name = "refund" version = "1.2.0" -source = "git+https://github.com/interlay/interbtc?rev=e7a6b41abe69de294abf32a5d350c0c5b719cce3#e7a6b41abe69de294abf32a5d350c0c5b719cce3" +source = "git+https://github.com/gregdhill/interbtc?rev=278d379087bc39932b328bce9f497a20c2403c5b#278d379087bc39932b328bce9f497a20c2403c5b" dependencies = [ "bitcoin 1.2.0", "btc-relay", @@ -6465,7 +7381,7 @@ dependencies = [ [[package]] name = "relay" version = "1.2.0" -source = "git+https://github.com/interlay/interbtc?rev=e7a6b41abe69de294abf32a5d350c0c5b719cce3#e7a6b41abe69de294abf32a5d350c0c5b719cce3" +source = "git+https://github.com/gregdhill/interbtc?rev=278d379087bc39932b328bce9f497a20c2403c5b#278d379087bc39932b328bce9f497a20c2403c5b" dependencies = [ "bitcoin 1.2.0", "btc-relay", @@ -6506,7 +7422,7 @@ dependencies = [ [[package]] name = "replace" version = "1.2.0" -source = "git+https://github.com/interlay/interbtc?rev=e7a6b41abe69de294abf32a5d350c0c5b719cce3#e7a6b41abe69de294abf32a5d350c0c5b719cce3" +source = "git+https://github.com/gregdhill/interbtc?rev=278d379087bc39932b328bce9f497a20c2403c5b#278d379087bc39932b328bce9f497a20c2403c5b" dependencies = [ "bitcoin 1.2.0", "btc-relay", @@ -6589,7 +7505,7 @@ checksum = "8c31b5c4033f8fdde8700e4657be2c497e7288f01515be52168c631e2e4d4086" [[package]] name = "reward" version = "1.2.0" -source = "git+https://github.com/interlay/interbtc?rev=e7a6b41abe69de294abf32a5d350c0c5b719cce3#e7a6b41abe69de294abf32a5d350c0c5b719cce3" +source = "git+https://github.com/gregdhill/interbtc?rev=278d379087bc39932b328bce9f497a20c2403c5b#278d379087bc39932b328bce9f497a20c2403c5b" dependencies = [ "frame-benchmarking", "frame-support", @@ -6622,9 +7538,9 @@ dependencies = [ [[package]] name = "rocksdb" -version = "0.17.0" +version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a62eca5cacf2c8261128631bed9f045598d40bfbe4b29f5163f0f802f8f44a7" +checksum = "620f4129485ff1a7128d184bc687470c21c7951b64779ebc9cfdad3dcd920290" dependencies = [ "libc", "librocksdb-sys", @@ -6698,6 +7614,15 @@ version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3e75f6a532d0fd9f7f13144f392b6ad56a32696bfcd9c78f797f16bbb6f072d6" +[[package]] +name = "rustc_version" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a" +dependencies = [ + "semver 0.9.0", +] + [[package]] name = "rustc_version" version = "0.3.3" @@ -6811,6 +7736,15 @@ version = "1.0.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "73b4b750c782965c211b42f022f59af1fbceabdd026623714f104152f1ec149f" +[[package]] +name = "safe-mix" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d3d055a2582e6b00ed7a31c1524040aa391092bf636328350813f3a0605215c" +dependencies = [ + "rustc_version 0.2.3", +] + [[package]] name = "safemem" version = "0.3.3" @@ -6838,7 +7772,7 @@ dependencies = [ [[package]] name = "sc-allocator" version = "4.1.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.17#22d40c761a985482f93bbbea5ba4199bdba74f8e" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" dependencies = [ "log 0.4.16", "sp-core", @@ -6846,10 +7780,37 @@ dependencies = [ "thiserror", ] +[[package]] +name = "sc-authority-discovery" +version = "0.10.0-dev" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" +dependencies = [ + "async-trait", + "futures 0.3.21", + "futures-timer", + "ip_network", + "libp2p", + "log 0.4.16", + "parity-scale-codec", + "prost", + "prost-build", + "rand 0.7.3", + "sc-client-api", + "sc-network", + "sp-api", + "sp-authority-discovery", + "sp-blockchain", + "sp-core", + "sp-keystore", + "sp-runtime", + "substrate-prometheus-endpoint", + "thiserror", +] + [[package]] name = "sc-basic-authorship" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.17#22d40c761a985482f93bbbea5ba4199bdba74f8e" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" dependencies = [ "futures 0.3.21", "futures-timer", @@ -6872,7 +7833,7 @@ dependencies = [ [[package]] name = "sc-block-builder" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.17#22d40c761a985482f93bbbea5ba4199bdba74f8e" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" dependencies = [ "parity-scale-codec", "sc-client-api", @@ -6888,7 +7849,7 @@ dependencies = [ [[package]] name = "sc-chain-spec" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.17#22d40c761a985482f93bbbea5ba4199bdba74f8e" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" dependencies = [ "impl-trait-for-tuples", "memmap2 0.5.3", @@ -6905,7 +7866,7 @@ dependencies = [ [[package]] name = "sc-chain-spec-derive" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.17#22d40c761a985482f93bbbea5ba4199bdba74f8e" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" dependencies = [ "proc-macro-crate 1.1.3", "proc-macro2", @@ -6916,7 +7877,7 @@ dependencies = [ [[package]] name = "sc-cli" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.17#22d40c761a985482f93bbbea5ba4199bdba74f8e" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" dependencies = [ "chrono", "clap", @@ -6954,14 +7915,14 @@ dependencies = [ [[package]] name = "sc-client-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.17#22d40c761a985482f93bbbea5ba4199bdba74f8e" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" dependencies = [ "fnv", "futures 0.3.21", "hash-db", "log 0.4.16", "parity-scale-codec", - "parking_lot 0.11.2", + "parking_lot 0.12.0", "sc-executor", "sc-transaction-pool-api", "sc-utils", @@ -6982,7 +7943,7 @@ dependencies = [ [[package]] name = "sc-client-db" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.17#22d40c761a985482f93bbbea5ba4199bdba74f8e" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" dependencies = [ "hash-db", "kvdb", @@ -6992,7 +7953,7 @@ dependencies = [ "log 0.4.16", "parity-db", "parity-scale-codec", - "parking_lot 0.11.2", + "parking_lot 0.12.0", "sc-client-api", "sc-state-db", "sp-arithmetic", @@ -7007,14 +7968,14 @@ dependencies = [ [[package]] name = "sc-consensus" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.17#22d40c761a985482f93bbbea5ba4199bdba74f8e" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" dependencies = [ "async-trait", "futures 0.3.21", "futures-timer", "libp2p", "log 0.4.16", - "parking_lot 0.11.2", + "parking_lot 0.12.0", "sc-client-api", "sc-utils", "serde", @@ -7031,7 +7992,7 @@ dependencies = [ [[package]] name = "sc-consensus-aura" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.17#22d40c761a985482f93bbbea5ba4199bdba74f8e" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" dependencies = [ "async-trait", "futures 0.3.21", @@ -7057,10 +8018,90 @@ dependencies = [ "thiserror", ] +[[package]] +name = "sc-consensus-babe" +version = "0.10.0-dev" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" +dependencies = [ + "async-trait", + "fork-tree", + "futures 0.3.21", + "log 0.4.16", + "merlin", + "num-bigint", + "num-rational 0.2.4", + "num-traits", + "parity-scale-codec", + "parking_lot 0.12.0", + "rand 0.7.3", + "retain_mut", + "sc-client-api", + "sc-consensus", + "sc-consensus-epochs", + "sc-consensus-slots", + "sc-keystore", + "sc-telemetry", + "schnorrkel", + "serde", + "sp-api", + "sp-application-crypto", + "sp-block-builder", + "sp-blockchain", + "sp-consensus", + "sp-consensus-babe", + "sp-consensus-slots", + "sp-consensus-vrf", + "sp-core", + "sp-inherents", + "sp-io", + "sp-keystore", + "sp-runtime", + "sp-version", + "substrate-prometheus-endpoint", + "thiserror", +] + +[[package]] +name = "sc-consensus-babe-rpc" +version = "0.10.0-dev" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" +dependencies = [ + "futures 0.3.21", + "jsonrpc-core", + "jsonrpc-core-client", + "jsonrpc-derive", + "sc-consensus-babe", + "sc-consensus-epochs", + "sc-rpc-api", + "serde", + "sp-api", + "sp-application-crypto", + "sp-blockchain", + "sp-consensus", + "sp-consensus-babe", + "sp-core", + "sp-keystore", + "sp-runtime", + "thiserror", +] + +[[package]] +name = "sc-consensus-epochs" +version = "0.10.0-dev" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" +dependencies = [ + "fork-tree", + "parity-scale-codec", + "sc-client-api", + "sc-consensus", + "sp-blockchain", + "sp-runtime", +] + [[package]] name = "sc-consensus-slots" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.17#22d40c761a985482f93bbbea5ba4199bdba74f8e" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" dependencies = [ "async-trait", "futures 0.3.21", @@ -7082,17 +8123,26 @@ dependencies = [ "thiserror", ] +[[package]] +name = "sc-consensus-uncles" +version = "0.10.0-dev" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" +dependencies = [ + "sc-client-api", + "sp-authorship", + "sp-runtime", + "thiserror", +] + [[package]] name = "sc-executor" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.17#22d40c761a985482f93bbbea5ba4199bdba74f8e" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" dependencies = [ "lazy_static", - "libsecp256k1", - "log 0.4.16", "lru 0.6.6", "parity-scale-codec", - "parking_lot 0.11.2", + "parking_lot 0.12.0", "sc-executor-common", "sc-executor-wasmi", "sc-executor-wasmtime", @@ -7107,13 +8157,14 @@ dependencies = [ "sp-trie", "sp-version", "sp-wasm-interface", + "tracing", "wasmi", ] [[package]] name = "sc-executor-common" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.17#22d40c761a985482f93bbbea5ba4199bdba74f8e" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" dependencies = [ "environmental", "parity-scale-codec", @@ -7130,7 +8181,7 @@ dependencies = [ [[package]] name = "sc-executor-wasmi" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.17#22d40c761a985482f93bbbea5ba4199bdba74f8e" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" dependencies = [ "log 0.4.16", "parity-scale-codec", @@ -7146,7 +8197,7 @@ dependencies = [ [[package]] name = "sc-executor-wasmtime" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.17#22d40c761a985482f93bbbea5ba4199bdba74f8e" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" dependencies = [ "cfg-if 1.0.0", "libc", @@ -7164,17 +8215,19 @@ dependencies = [ [[package]] name = "sc-finality-grandpa" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.17#22d40c761a985482f93bbbea5ba4199bdba74f8e" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" dependencies = [ + "ahash", "async-trait", "dyn-clone", "finality-grandpa", "fork-tree", "futures 0.3.21", "futures-timer", + "hex", "log 0.4.16", "parity-scale-codec", - "parking_lot 0.11.2", + "parking_lot 0.12.0", "rand 0.8.5", "sc-block-builder", "sc-chain-spec", @@ -7186,23 +8239,47 @@ dependencies = [ "sc-telemetry", "sc-utils", "serde_json", - "sp-api", - "sp-application-crypto", - "sp-arithmetic", + "sp-api", + "sp-application-crypto", + "sp-arithmetic", + "sp-blockchain", + "sp-consensus", + "sp-core", + "sp-finality-grandpa", + "sp-keystore", + "sp-runtime", + "substrate-prometheus-endpoint", + "thiserror", +] + +[[package]] +name = "sc-finality-grandpa-rpc" +version = "0.10.0-dev" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" +dependencies = [ + "finality-grandpa", + "futures 0.3.21", + "jsonrpc-core", + "jsonrpc-core-client", + "jsonrpc-derive", + "jsonrpc-pubsub", + "log 0.4.16", + "parity-scale-codec", + "sc-client-api", + "sc-finality-grandpa", + "sc-rpc", + "serde", + "serde_json", "sp-blockchain", - "sp-consensus", "sp-core", - "sp-finality-grandpa", - "sp-keystore", "sp-runtime", - "substrate-prometheus-endpoint", "thiserror", ] [[package]] name = "sc-informant" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.17#22d40c761a985482f93bbbea5ba4199bdba74f8e" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" dependencies = [ "ansi_term", "futures 0.3.21", @@ -7219,11 +8296,11 @@ dependencies = [ [[package]] name = "sc-keystore" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.17#22d40c761a985482f93bbbea5ba4199bdba74f8e" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" dependencies = [ "async-trait", "hex", - "parking_lot 0.11.2", + "parking_lot 0.12.0", "serde_json", "sp-application-crypto", "sp-core", @@ -7234,9 +8311,8 @@ dependencies = [ [[package]] name = "sc-network" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.17#22d40c761a985482f93bbbea5ba4199bdba74f8e" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" dependencies = [ - "async-std", "async-trait", "asynchronous-codec 0.5.0", "bitflags", @@ -7255,7 +8331,7 @@ dependencies = [ "log 0.4.16", "lru 0.7.3", "parity-scale-codec", - "parking_lot 0.11.2", + "parking_lot 0.12.0", "pin-project 1.0.10", "prost", "prost-build", @@ -7284,8 +8360,9 @@ dependencies = [ [[package]] name = "sc-network-gossip" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.17#22d40c761a985482f93bbbea5ba4199bdba74f8e" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" dependencies = [ + "ahash", "futures 0.3.21", "futures-timer", "libp2p", @@ -7300,7 +8377,7 @@ dependencies = [ [[package]] name = "sc-offchain" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.17#22d40c761a985482f93bbbea5ba4199bdba74f8e" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" dependencies = [ "bytes 1.1.0", "fnv", @@ -7312,7 +8389,7 @@ dependencies = [ "num_cpus", "once_cell", "parity-scale-codec", - "parking_lot 0.11.2", + "parking_lot 0.12.0", "rand 0.7.3", "sc-client-api", "sc-network", @@ -7328,7 +8405,7 @@ dependencies = [ [[package]] name = "sc-peerset" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.17#22d40c761a985482f93bbbea5ba4199bdba74f8e" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" dependencies = [ "futures 0.3.21", "libp2p", @@ -7341,7 +8418,7 @@ dependencies = [ [[package]] name = "sc-proposer-metrics" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.17#22d40c761a985482f93bbbea5ba4199bdba74f8e" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" dependencies = [ "log 0.4.16", "substrate-prometheus-endpoint", @@ -7350,7 +8427,7 @@ dependencies = [ [[package]] name = "sc-rpc" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.17#22d40c761a985482f93bbbea5ba4199bdba74f8e" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" dependencies = [ "futures 0.3.21", "hash-db", @@ -7358,7 +8435,7 @@ dependencies = [ "jsonrpc-pubsub", "log 0.4.16", "parity-scale-codec", - "parking_lot 0.11.2", + "parking_lot 0.12.0", "sc-block-builder", "sc-chain-spec", "sc-client-api", @@ -7381,7 +8458,7 @@ dependencies = [ [[package]] name = "sc-rpc-api" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.17#22d40c761a985482f93bbbea5ba4199bdba74f8e" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" dependencies = [ "futures 0.3.21", "jsonrpc-core", @@ -7390,7 +8467,7 @@ dependencies = [ "jsonrpc-pubsub", "log 0.4.16", "parity-scale-codec", - "parking_lot 0.11.2", + "parking_lot 0.12.0", "sc-chain-spec", "sc-transaction-pool-api", "serde", @@ -7406,7 +8483,7 @@ dependencies = [ [[package]] name = "sc-rpc-server" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.17#22d40c761a985482f93bbbea5ba4199bdba74f8e" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" dependencies = [ "futures 0.3.21", "jsonrpc-core", @@ -7423,7 +8500,7 @@ dependencies = [ [[package]] name = "sc-service" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.17#22d40c761a985482f93bbbea5ba4199bdba74f8e" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" dependencies = [ "async-trait", "directories", @@ -7436,7 +8513,7 @@ dependencies = [ "log 0.4.16", "parity-scale-codec", "parity-util-mem", - "parking_lot 0.11.2", + "parking_lot 0.12.0", "pin-project 1.0.10", "rand 0.7.3", "sc-block-builder", @@ -7487,27 +8564,48 @@ dependencies = [ [[package]] name = "sc-state-db" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.17#22d40c761a985482f93bbbea5ba4199bdba74f8e" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" dependencies = [ "log 0.4.16", "parity-scale-codec", "parity-util-mem", "parity-util-mem-derive", - "parking_lot 0.11.2", + "parking_lot 0.12.0", "sc-client-api", "sp-core", ] +[[package]] +name = "sc-sync-state-rpc" +version = "0.10.0-dev" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" +dependencies = [ + "jsonrpc-core", + "jsonrpc-core-client", + "jsonrpc-derive", + "parity-scale-codec", + "sc-chain-spec", + "sc-client-api", + "sc-consensus-babe", + "sc-consensus-epochs", + "sc-finality-grandpa", + "serde", + "serde_json", + "sp-blockchain", + "sp-runtime", + "thiserror", +] + [[package]] name = "sc-telemetry" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.17#22d40c761a985482f93bbbea5ba4199bdba74f8e" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" dependencies = [ "chrono", "futures 0.3.21", "libp2p", "log 0.4.16", - "parking_lot 0.11.2", + "parking_lot 0.12.0", "pin-project 1.0.10", "rand 0.7.3", "serde", @@ -7519,7 +8617,7 @@ dependencies = [ [[package]] name = "sc-tracing" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.17#22d40c761a985482f93bbbea5ba4199bdba74f8e" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" dependencies = [ "ansi_term", "atty", @@ -7528,7 +8626,7 @@ dependencies = [ "libc", "log 0.4.16", "once_cell", - "parking_lot 0.11.2", + "parking_lot 0.12.0", "regex", "rustc-hash", "sc-client-api", @@ -7550,7 +8648,7 @@ dependencies = [ [[package]] name = "sc-tracing-proc-macro" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.17#22d40c761a985482f93bbbea5ba4199bdba74f8e" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" dependencies = [ "proc-macro-crate 1.1.3", "proc-macro2", @@ -7561,7 +8659,7 @@ dependencies = [ [[package]] name = "sc-transaction-pool" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.17#22d40c761a985482f93bbbea5ba4199bdba74f8e" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" dependencies = [ "futures 0.3.21", "futures-timer", @@ -7569,7 +8667,7 @@ dependencies = [ "log 0.4.16", "parity-scale-codec", "parity-util-mem", - "parking_lot 0.11.2", + "parking_lot 0.12.0", "retain_mut", "sc-client-api", "sc-transaction-pool-api", @@ -7588,7 +8686,7 @@ dependencies = [ [[package]] name = "sc-transaction-pool-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.17#22d40c761a985482f93bbbea5ba4199bdba74f8e" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" dependencies = [ "futures 0.3.21", "log 0.4.16", @@ -7601,20 +8699,21 @@ dependencies = [ [[package]] name = "sc-utils" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.17#22d40c761a985482f93bbbea5ba4199bdba74f8e" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" dependencies = [ "futures 0.3.21", "futures-timer", "lazy_static", - "parking_lot 0.11.2", + "log 0.4.16", + "parking_lot 0.12.0", "prometheus 0.13.0", ] [[package]] name = "scale-info" -version = "1.0.0" +version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c55b744399c25532d63a0d2789b109df8d46fc93752d46b0782991a931a782f" +checksum = "0563970d79bcbf3c537ce3ad36d859b30d36fc5b190efd227f1f7a84d7cf0d42" dependencies = [ "bitvec", "cfg-if 1.0.0", @@ -7626,9 +8725,9 @@ dependencies = [ [[package]] name = "scale-info-derive" -version = "1.0.0" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "baeb2780690380592f86205aa4ee49815feb2acad8c2f59e6dd207148c3f1fcd" +checksum = "b7805950c36512db9e3251c970bb7ac425f326716941862205d612ab3b5e46e2" dependencies = [ "proc-macro-crate 1.1.3", "proc-macro2", @@ -7714,6 +8813,15 @@ dependencies = [ "serde", ] +[[package]] +name = "secp256k1" +version = "0.21.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c42e6f1735c5f00f51e43e28d6634141f2bcad10931b2609ddd74a86d751260" +dependencies = [ + "secp256k1-sys 0.4.2", +] + [[package]] name = "secp256k1-sys" version = "0.4.0" @@ -7743,7 +8851,7 @@ dependencies = [ [[package]] name = "security" version = "1.2.0" -source = "git+https://github.com/interlay/interbtc?rev=e7a6b41abe69de294abf32a5d350c0c5b719cce3#e7a6b41abe69de294abf32a5d350c0c5b719cce3" +source = "git+https://github.com/gregdhill/interbtc?rev=278d379087bc39932b328bce9f497a20c2403c5b#278d379087bc39932b328bce9f497a20c2403c5b" dependencies = [ "frame-support", "frame-system", @@ -7788,6 +8896,15 @@ dependencies = [ "semver-parser 0.7.0", ] +[[package]] +name = "semver" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403" +dependencies = [ + "semver-parser 0.7.0", +] + [[package]] name = "semver" version = "0.11.0" @@ -7852,6 +8969,15 @@ dependencies = [ "serde", ] +[[package]] +name = "serde_nanos" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e44969a61f5d316be20a42ff97816efb3b407a924d06824c3d8a49fa8450de0e" +dependencies = [ + "serde", +] + [[package]] name = "serde_urlencoded" version = "0.7.1" @@ -7969,6 +9095,16 @@ dependencies = [ "opaque-debug 0.3.0", ] +[[package]] +name = "sha3" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "881bf8156c87b6301fc5ca6b27f11eeb2761224c7081e69b409d5a1951a70c86" +dependencies = [ + "digest 0.10.3", + "keccak", +] + [[package]] name = "sharded-slab" version = "0.1.4" @@ -7984,16 +9120,6 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "43b2853a4d09f215c24cc5489c992ce46052d359b5109343cbafbf26bc62f8a3" -[[package]] -name = "signal-hook" -version = "0.3.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "647c97df271007dcea485bb74ffdb57f2e683f1306c854f468a0c244badabf2d" -dependencies = [ - "libc", - "signal-hook-registry", -] - [[package]] name = "signal-hook-registry" version = "1.4.0" @@ -8062,7 +9188,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6142f7c25e94f6fd25a32c3348ec230df9109b463f59c8c7acc4bd34936babb7" dependencies = [ "aes-gcm", - "blake2", + "blake2 0.9.2", "chacha20poly1305", "rand 0.8.5", "rand_core 0.6.3", @@ -8113,7 +9239,7 @@ dependencies = [ [[package]] name = "sp-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.17#22d40c761a985482f93bbbea5ba4199bdba74f8e" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" dependencies = [ "hash-db", "log 0.4.16", @@ -8130,9 +9256,9 @@ dependencies = [ [[package]] name = "sp-api-proc-macro" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.17#22d40c761a985482f93bbbea5ba4199bdba74f8e" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" dependencies = [ - "blake2-rfc", + "blake2 0.10.4", "proc-macro-crate 1.1.3", "proc-macro2", "quote", @@ -8141,8 +9267,8 @@ dependencies = [ [[package]] name = "sp-application-crypto" -version = "5.0.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.17#22d40c761a985482f93bbbea5ba4199bdba74f8e" +version = "6.0.0" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" dependencies = [ "parity-scale-codec", "scale-info", @@ -8154,8 +9280,8 @@ dependencies = [ [[package]] name = "sp-arithmetic" -version = "4.0.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.17#22d40c761a985482f93bbbea5ba4199bdba74f8e" +version = "5.0.0" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" dependencies = [ "integer-sqrt", "num-traits", @@ -8167,10 +9293,23 @@ dependencies = [ "static_assertions", ] +[[package]] +name = "sp-authority-discovery" +version = "4.0.0-dev" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" +dependencies = [ + "parity-scale-codec", + "scale-info", + "sp-api", + "sp-application-crypto", + "sp-runtime", + "sp-std", +] + [[package]] name = "sp-authorship" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.17#22d40c761a985482f93bbbea5ba4199bdba74f8e" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" dependencies = [ "async-trait", "parity-scale-codec", @@ -8182,7 +9321,7 @@ dependencies = [ [[package]] name = "sp-block-builder" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.17#22d40c761a985482f93bbbea5ba4199bdba74f8e" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" dependencies = [ "parity-scale-codec", "sp-api", @@ -8194,13 +9333,13 @@ dependencies = [ [[package]] name = "sp-blockchain" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.17#22d40c761a985482f93bbbea5ba4199bdba74f8e" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" dependencies = [ "futures 0.3.21", "log 0.4.16", "lru 0.7.3", "parity-scale-codec", - "parking_lot 0.11.2", + "parking_lot 0.12.0", "sp-api", "sp-consensus", "sp-database", @@ -8212,7 +9351,7 @@ dependencies = [ [[package]] name = "sp-consensus" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.17#22d40c761a985482f93bbbea5ba4199bdba74f8e" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" dependencies = [ "async-trait", "futures 0.3.21", @@ -8231,16 +9370,39 @@ dependencies = [ [[package]] name = "sp-consensus-aura" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.17#22d40c761a985482f93bbbea5ba4199bdba74f8e" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" +dependencies = [ + "async-trait", + "parity-scale-codec", + "scale-info", + "sp-api", + "sp-application-crypto", + "sp-consensus", + "sp-consensus-slots", + "sp-inherents", + "sp-runtime", + "sp-std", + "sp-timestamp", +] + +[[package]] +name = "sp-consensus-babe" +version = "0.10.0-dev" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" dependencies = [ "async-trait", + "merlin", "parity-scale-codec", "scale-info", + "serde", "sp-api", "sp-application-crypto", "sp-consensus", "sp-consensus-slots", + "sp-consensus-vrf", + "sp-core", "sp-inherents", + "sp-keystore", "sp-runtime", "sp-std", "sp-timestamp", @@ -8249,19 +9411,33 @@ dependencies = [ [[package]] name = "sp-consensus-slots" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.17#22d40c761a985482f93bbbea5ba4199bdba74f8e" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" dependencies = [ "parity-scale-codec", "scale-info", "serde", "sp-arithmetic", "sp-runtime", + "sp-std", + "sp-timestamp", +] + +[[package]] +name = "sp-consensus-vrf" +version = "0.10.0-dev" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" +dependencies = [ + "parity-scale-codec", + "schnorrkel", + "sp-core", + "sp-runtime", + "sp-std", ] [[package]] name = "sp-core" -version = "5.0.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.17#22d40c761a985482f93bbbea5ba4199bdba74f8e" +version = "6.0.0" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" dependencies = [ "base58", "bitflags", @@ -8281,15 +9457,15 @@ dependencies = [ "num-traits", "parity-scale-codec", "parity-util-mem", - "parking_lot 0.11.2", + "parking_lot 0.12.0", "primitive-types", "rand 0.7.3", "regex", "scale-info", "schnorrkel", + "secp256k1 0.21.3", "secrecy", "serde", - "sha2 0.10.2", "sp-core-hashing", "sp-debug-derive", "sp-externalities", @@ -8300,8 +9476,6 @@ dependencies = [ "substrate-bip39", "thiserror", "tiny-bip39", - "tiny-keccak", - "twox-hash", "wasmi", "zeroize", ] @@ -8309,20 +9483,21 @@ dependencies = [ [[package]] name = "sp-core-hashing" version = "4.0.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.17#22d40c761a985482f93bbbea5ba4199bdba74f8e" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" dependencies = [ - "blake2-rfc", + "blake2 0.10.4", "byteorder", + "digest 0.10.3", "sha2 0.10.2", + "sha3 0.10.1", "sp-std", - "tiny-keccak", "twox-hash", ] [[package]] name = "sp-core-hashing-proc-macro" -version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.17#22d40c761a985482f93bbbea5ba4199bdba74f8e" +version = "5.0.0" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" dependencies = [ "proc-macro2", "quote", @@ -8333,16 +9508,16 @@ dependencies = [ [[package]] name = "sp-database" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.17#22d40c761a985482f93bbbea5ba4199bdba74f8e" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" dependencies = [ "kvdb", - "parking_lot 0.11.2", + "parking_lot 0.12.0", ] [[package]] name = "sp-debug-derive" version = "4.0.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.17#22d40c761a985482f93bbbea5ba4199bdba74f8e" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" dependencies = [ "proc-macro2", "quote", @@ -8351,8 +9526,8 @@ dependencies = [ [[package]] name = "sp-externalities" -version = "0.11.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.17#22d40c761a985482f93bbbea5ba4199bdba74f8e" +version = "0.12.0" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" dependencies = [ "environmental", "parity-scale-codec", @@ -8363,7 +9538,7 @@ dependencies = [ [[package]] name = "sp-finality-grandpa" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.17#22d40c761a985482f93bbbea5ba4199bdba74f8e" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" dependencies = [ "finality-grandpa", "log 0.4.16", @@ -8381,7 +9556,7 @@ dependencies = [ [[package]] name = "sp-inherents" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.17#22d40c761a985482f93bbbea5ba4199bdba74f8e" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" dependencies = [ "async-trait", "impl-trait-for-tuples", @@ -8394,15 +9569,16 @@ dependencies = [ [[package]] name = "sp-io" -version = "5.0.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.17#22d40c761a985482f93bbbea5ba4199bdba74f8e" +version = "6.0.0" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" dependencies = [ "futures 0.3.21", "hash-db", "libsecp256k1", "log 0.4.16", "parity-scale-codec", - "parking_lot 0.11.2", + "parking_lot 0.12.0", + "secp256k1 0.21.3", "sp-core", "sp-externalities", "sp-keystore", @@ -8418,8 +9594,8 @@ dependencies = [ [[package]] name = "sp-keyring" -version = "5.0.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.17#22d40c761a985482f93bbbea5ba4199bdba74f8e" +version = "6.0.0" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" dependencies = [ "lazy_static", "sp-core", @@ -8429,14 +9605,14 @@ dependencies = [ [[package]] name = "sp-keystore" -version = "0.11.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.17#22d40c761a985482f93bbbea5ba4199bdba74f8e" +version = "0.12.0" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" dependencies = [ "async-trait", "futures 0.3.21", "merlin", "parity-scale-codec", - "parking_lot 0.11.2", + "parking_lot 0.12.0", "schnorrkel", "serde", "sp-core", @@ -8447,16 +9623,42 @@ dependencies = [ [[package]] name = "sp-maybe-compressed-blob" version = "4.1.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.17#22d40c761a985482f93bbbea5ba4199bdba74f8e" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" dependencies = [ "thiserror", "zstd", ] +[[package]] +name = "sp-npos-elections" +version = "4.0.0-dev" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" +dependencies = [ + "parity-scale-codec", + "scale-info", + "serde", + "sp-arithmetic", + "sp-core", + "sp-npos-elections-solution-type", + "sp-runtime", + "sp-std", +] + +[[package]] +name = "sp-npos-elections-solution-type" +version = "4.0.0-dev" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" +dependencies = [ + "proc-macro-crate 1.1.3", + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "sp-offchain" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.17#22d40c761a985482f93bbbea5ba4199bdba74f8e" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" dependencies = [ "sp-api", "sp-core", @@ -8466,7 +9668,7 @@ dependencies = [ [[package]] name = "sp-panic-handler" version = "4.0.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.17#22d40c761a985482f93bbbea5ba4199bdba74f8e" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" dependencies = [ "backtrace", "lazy_static", @@ -8475,8 +9677,8 @@ dependencies = [ [[package]] name = "sp-rpc" -version = "5.0.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.17#22d40c761a985482f93bbbea5ba4199bdba74f8e" +version = "6.0.0" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" dependencies = [ "rustc-hash", "serde", @@ -8485,8 +9687,8 @@ dependencies = [ [[package]] name = "sp-runtime" -version = "5.0.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.17#22d40c761a985482f93bbbea5ba4199bdba74f8e" +version = "6.0.0" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" dependencies = [ "either", "hash256-std-hasher", @@ -8507,8 +9709,8 @@ dependencies = [ [[package]] name = "sp-runtime-interface" -version = "5.0.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.17#22d40c761a985482f93bbbea5ba4199bdba74f8e" +version = "6.0.0" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" dependencies = [ "impl-trait-for-tuples", "parity-scale-codec", @@ -8524,8 +9726,8 @@ dependencies = [ [[package]] name = "sp-runtime-interface-proc-macro" -version = "4.0.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.17#22d40c761a985482f93bbbea5ba4199bdba74f8e" +version = "5.0.0" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" dependencies = [ "Inflector", "proc-macro-crate 1.1.3", @@ -8534,10 +9736,24 @@ dependencies = [ "syn", ] +[[package]] +name = "sp-sandbox" +version = "0.10.0-dev" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" +dependencies = [ + "log 0.4.16", + "parity-scale-codec", + "sp-core", + "sp-io", + "sp-std", + "sp-wasm-interface", + "wasmi", +] + [[package]] name = "sp-serializer" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.17#22d40c761a985482f93bbbea5ba4199bdba74f8e" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" dependencies = [ "serde", "serde_json", @@ -8546,7 +9762,7 @@ dependencies = [ [[package]] name = "sp-session" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.17#22d40c761a985482f93bbbea5ba4199bdba74f8e" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" dependencies = [ "parity-scale-codec", "scale-info", @@ -8560,7 +9776,7 @@ dependencies = [ [[package]] name = "sp-staking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.17#22d40c761a985482f93bbbea5ba4199bdba74f8e" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" dependencies = [ "parity-scale-codec", "scale-info", @@ -8570,14 +9786,14 @@ dependencies = [ [[package]] name = "sp-state-machine" -version = "0.11.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.17#22d40c761a985482f93bbbea5ba4199bdba74f8e" +version = "0.12.0" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" dependencies = [ "hash-db", "log 0.4.16", "num-traits", "parity-scale-codec", - "parking_lot 0.11.2", + "parking_lot 0.12.0", "rand 0.7.3", "smallvec", "sp-core", @@ -8594,12 +9810,12 @@ dependencies = [ [[package]] name = "sp-std" version = "4.0.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.17#22d40c761a985482f93bbbea5ba4199bdba74f8e" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" [[package]] name = "sp-storage" -version = "5.0.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.17#22d40c761a985482f93bbbea5ba4199bdba74f8e" +version = "6.0.0" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" dependencies = [ "impl-serde", "parity-scale-codec", @@ -8612,7 +9828,7 @@ dependencies = [ [[package]] name = "sp-tasks" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.17#22d40c761a985482f93bbbea5ba4199bdba74f8e" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" dependencies = [ "log 0.4.16", "sp-core", @@ -8625,7 +9841,7 @@ dependencies = [ [[package]] name = "sp-timestamp" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.17#22d40c761a985482f93bbbea5ba4199bdba74f8e" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" dependencies = [ "async-trait", "futures-timer", @@ -8640,8 +9856,8 @@ dependencies = [ [[package]] name = "sp-tracing" -version = "4.0.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.17#22d40c761a985482f93bbbea5ba4199bdba74f8e" +version = "5.0.0" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" dependencies = [ "parity-scale-codec", "sp-std", @@ -8653,7 +9869,7 @@ dependencies = [ [[package]] name = "sp-transaction-pool" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.17#22d40c761a985482f93bbbea5ba4199bdba74f8e" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" dependencies = [ "sp-api", "sp-runtime", @@ -8662,7 +9878,7 @@ dependencies = [ [[package]] name = "sp-transaction-storage-proof" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.17#22d40c761a985482f93bbbea5ba4199bdba74f8e" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" dependencies = [ "async-trait", "log 0.4.16", @@ -8677,8 +9893,8 @@ dependencies = [ [[package]] name = "sp-trie" -version = "5.0.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.17#22d40c761a985482f93bbbea5ba4199bdba74f8e" +version = "6.0.0" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" dependencies = [ "hash-db", "memory-db", @@ -8686,14 +9902,15 @@ dependencies = [ "scale-info", "sp-core", "sp-std", + "thiserror", "trie-db", "trie-root", ] [[package]] name = "sp-version" -version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.17#22d40c761a985482f93bbbea5ba4199bdba74f8e" +version = "5.0.0" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" dependencies = [ "impl-serde", "parity-scale-codec", @@ -8710,7 +9927,7 @@ dependencies = [ [[package]] name = "sp-version-proc-macro" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.17#22d40c761a985482f93bbbea5ba4199bdba74f8e" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" dependencies = [ "parity-scale-codec", "proc-macro2", @@ -8720,8 +9937,8 @@ dependencies = [ [[package]] name = "sp-wasm-interface" -version = "5.0.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.17#22d40c761a985482f93bbbea5ba4199bdba74f8e" +version = "6.0.0" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" dependencies = [ "impl-trait-for-tuples", "log 0.4.16", @@ -8767,7 +9984,7 @@ checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" [[package]] name = "staking" version = "1.2.0" -source = "git+https://github.com/interlay/interbtc?rev=e7a6b41abe69de294abf32a5d350c0c5b719cce3#e7a6b41abe69de294abf32a5d350c0c5b719cce3" +source = "git+https://github.com/gregdhill/interbtc?rev=278d379087bc39932b328bce9f497a20c2403c5b#278d379087bc39932b328bce9f497a20c2403c5b" dependencies = [ "frame-benchmarking", "frame-support", @@ -8846,7 +10063,7 @@ dependencies = [ [[package]] name = "substrate-build-script-utils" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.17#22d40c761a985482f93bbbea5ba4199bdba74f8e" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" dependencies = [ "platforms", ] @@ -8854,7 +10071,7 @@ dependencies = [ [[package]] name = "substrate-frame-rpc-system" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.17#22d40c761a985482f93bbbea5ba4199bdba74f8e" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" dependencies = [ "frame-system-rpc-runtime-api", "futures 0.3.21", @@ -8876,9 +10093,8 @@ dependencies = [ [[package]] name = "substrate-prometheus-endpoint" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.17#22d40c761a985482f93bbbea5ba4199bdba74f8e" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" dependencies = [ - "async-std", "futures-util", "hyper 0.14.17", "log 0.4.16", @@ -8890,7 +10106,7 @@ dependencies = [ [[package]] name = "substrate-wasm-builder" version = "5.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.17#22d40c761a985482f93bbbea5ba4199bdba74f8e" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" dependencies = [ "ansi_term", "build-helper", @@ -8911,8 +10127,7 @@ checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601" [[package]] name = "subxt" -version = "0.16.0" -source = "git+https://github.com/interlay/subxt?rev=1193d94206a669c59cc5dd89486fecfa82ca584a#1193d94206a669c59cc5dd89486fecfa82ca584a" +version = "0.19.0" dependencies = [ "async-trait", "bitvec", @@ -8923,49 +10138,47 @@ dependencies = [ "hex", "jsonrpsee", "log 0.4.16", - "num-traits", "parity-scale-codec", "scale-info", "serde", "serde_json", "sp-core", "sp-runtime", - "sp-version", - "subxt-client", "subxt-macro", "thiserror", - "url 2.2.2", ] [[package]] name = "subxt-client" version = "0.1.0" -source = "git+https://github.com/interlay/subxt?rev=1193d94206a669c59cc5dd89486fecfa82ca584a#1193d94206a669c59cc5dd89486fecfa82ca584a" dependencies = [ "async-std", + "env_logger 0.8.4", "futures 0.1.31", "futures 0.3.21", + "jsonrpsee", "jsonrpsee-core", "jsonrpsee-types", "log 0.4.16", + "node-cli", "sc-client-db", "sc-network", "sc-service", "serde_json", "sp-keyring", + "tempdir", "thiserror", "tokio", ] [[package]] name = "subxt-codegen" -version = "0.16.0" -source = "git+https://github.com/interlay/subxt?rev=1193d94206a669c59cc5dd89486fecfa82ca584a#1193d94206a669c59cc5dd89486fecfa82ca584a" +version = "0.19.0" dependencies = [ "async-trait", "darling", "frame-metadata", - "heck 0.3.3", + "heck 0.4.0", "parity-scale-codec", "proc-macro-crate 0.1.5", "proc-macro-error", @@ -8977,13 +10190,12 @@ dependencies = [ [[package]] name = "subxt-macro" -version = "0.16.0" -source = "git+https://github.com/interlay/subxt?rev=1193d94206a669c59cc5dd89486fecfa82ca584a#1193d94206a669c59cc5dd89486fecfa82ca584a" +version = "0.19.0" dependencies = [ "async-trait", "darling", "frame-metadata", - "heck 0.3.3", + "heck 0.4.0", "parity-scale-codec", "proc-macro-crate 0.1.5", "proc-macro-error", @@ -8997,7 +10209,7 @@ dependencies = [ [[package]] name = "supply" version = "1.2.0" -source = "git+https://github.com/interlay/interbtc?rev=e7a6b41abe69de294abf32a5d350c0c5b719cce3#e7a6b41abe69de294abf32a5d350c0c5b719cce3" +source = "git+https://github.com/gregdhill/interbtc?rev=278d379087bc39932b328bce9f497a20c2403c5b#278d379087bc39932b328bce9f497a20c2403c5b" dependencies = [ "frame-benchmarking", "frame-support", @@ -9131,6 +10343,17 @@ dependencies = [ "num_cpus", ] +[[package]] +name = "tikv-jemalloc-sys" +version = "0.4.3+5.2.1-patched.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1792ccb507d955b46af42c123ea8863668fae24d03721e40cad6a41773dbb49" +dependencies = [ + "cc", + "fs_extra", + "libc", +] + [[package]] name = "time" version = "0.1.44" @@ -9161,15 +10384,6 @@ dependencies = [ "zeroize", ] -[[package]] -name = "tiny-keccak" -version = "2.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c9d3793400a45f954c52e73d068316d76b6f4e36977e3fcebb13a2721e80237" -dependencies = [ - "crunchy", -] - [[package]] name = "tinyvec" version = "1.5.1" @@ -9518,7 +10732,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4ee73e6e4924fe940354b8d4d98cad5231175d615cd855b758adc658c0aac6a0" dependencies = [ "cfg-if 1.0.0", - "rand 0.8.5", + "digest 0.10.3", + "rand 0.4.6", "static_assertions", ] @@ -9722,7 +10937,7 @@ dependencies = [ [[package]] name = "vault-registry" version = "1.2.0" -source = "git+https://github.com/interlay/interbtc?rev=e7a6b41abe69de294abf32a5d350c0c5b719cce3#e7a6b41abe69de294abf32a5d350c0c5b719cce3" +source = "git+https://github.com/gregdhill/interbtc?rev=278d379087bc39932b328bce9f497a20c2403c5b#278d379087bc39932b328bce9f497a20c2403c5b" dependencies = [ "bitcoin 1.2.0", "currency", @@ -9958,6 +11173,7 @@ checksum = "ca00c5147c319a8ec91ec1a0edbec31e566ce2c9cc93b3f9bb86a9efd0eb795d" dependencies = [ "downcast-rs", "libc", + "libm", "memory_units", "num-rational 0.2.4", "num-traits", @@ -10323,9 +11539,12 @@ dependencies = [ [[package]] name = "wyz" -version = "0.2.0" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85e60b0d1b5f99db2556934e21937020776a5d31520bf169e851ac44e6420214" +checksum = "30b31594f29d27036c383b53b59ed3476874d518f0efb151b27a4c275141390e" +dependencies = [ + "tap", +] [[package]] name = "x25519-dalek" @@ -10340,8 +11559,8 @@ dependencies = [ [[package]] name = "xcm" -version = "0.9.17" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.17#de0ecd4760b146ecf33f5e867d707d789e21e060" +version = "0.9.18" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.18#9ed0c98204d25eaad8a6b40248daee8e6a40d111" dependencies = [ "derivative", "impl-trait-for-tuples", @@ -10354,7 +11573,7 @@ dependencies = [ [[package]] name = "xcm-procedural" version = "0.1.0" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.17#de0ecd4760b146ecf33f5e867d707d789e21e060" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.18#9ed0c98204d25eaad8a6b40248daee8e6a40d111" dependencies = [ "Inflector", "proc-macro2", diff --git a/Cargo.toml b/Cargo.toml index f1f60a58e..b7c48ad73 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -2,6 +2,7 @@ members = [ "oracle", "runtime", + "runtime/client", "vault", "bitcoin", "faucet", diff --git a/bitcoin/Cargo.toml b/bitcoin/Cargo.toml index e9cc9746c..66b16b00b 100644 --- a/bitcoin/Cargo.toml +++ b/bitcoin/Cargo.toml @@ -30,11 +30,11 @@ hyper = "0.10" esplora-btc-api = "1.0.3" # Substrate dependencies -sp-core = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.17" } +sp-core = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.18" } [dependencies.interbtc-bitcoin] -git = "https://github.com/interlay/interbtc" -rev = "e7a6b41abe69de294abf32a5d350c0c5b719cce3" +git = "https://github.com/gregdhill/interbtc" +rev = "278d379087bc39932b328bce9f497a20c2403c5b" package = "bitcoin" optional = true diff --git a/bitcoin/src/lib.rs b/bitcoin/src/lib.rs index 1a0d625a3..2dc12102b 100644 --- a/bitcoin/src/lib.rs +++ b/bitcoin/src/lib.rs @@ -912,7 +912,7 @@ impl TransactionExt for Transaction { } } -// https://github.com/interlay/interbtc/blob/cc5c16b28ef705e0774654dd94b813d9d35e12ec/crates/bitcoin/src/parser.rs#L277 +// https://github.com/gregdhill/interbtc/blob/cc5c16b28ef705e0774654dd94b813d9d35e12ec/crates/bitcoin/src/parser.rs#L277 fn parse_compact_uint(varint: &[u8]) -> Result<(u64, usize), Error> { match varint.get(0).ok_or(Error::ParsingError)? { 0xfd => { diff --git a/faucet/Cargo.toml b/faucet/Cargo.toml index 846515b4f..2e332566a 100644 --- a/faucet/Cargo.toml +++ b/faucet/Cargo.toml @@ -18,7 +18,7 @@ chrono = "0.4.19" tokio = { version = "1.0", features = ["full"] } thiserror = "1.0" jsonrpc-http-server = "18.0.0" -parity-scale-codec = "2.0.0" +parity-scale-codec = "3.0.0" serde_json = "1.0.71" serde = "1.0.136" hex = "0.4.2" @@ -37,4 +37,4 @@ service = { path = "../service" } runtime = { path = "../runtime", features = ["testing-utils"] } # Substrate dependencies -sp-keyring = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.17" } +sp-keyring = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.18" } diff --git a/runtime/Cargo.toml b/runtime/Cargo.toml index d92edd832..6c0edc633 100644 --- a/runtime/Cargo.toml +++ b/runtime/Cargo.toml @@ -7,8 +7,6 @@ edition = "2018" [features] default = [] testing-utils = [ - # "substrate-subxt/client", - # "substrate-subxt-client", "tempdir", "interbtc", "rand", @@ -19,7 +17,7 @@ parachain-metadata-testnet = [] [dependencies] serde = { version = "1.0.136", features = ["derive"] } -codec = { package = "parity-scale-codec", version = "2.0.0", default-features = false, features = ["derive", "full"] } +codec = { package = "parity-scale-codec", version = "3.0.0", default-features = false, features = ["derive", "full"] } async-trait = "0.1.40" thiserror = "1.0" serde_json = "1.0.71" @@ -33,49 +31,49 @@ cfg-if = "1.0" prometheus = { version = "0.12.0", features = ["process"] } # Substrate dependencies -sp-arithmetic = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.17" } -sp-keyring = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.17" } -sp-std = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.17" } -sp-runtime = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.17" } -sp-version = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.17" } -frame-support = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.17" } +sp-arithmetic = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.18" } +sp-keyring = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.18" } +sp-std = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.18" } +sp-runtime = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.18" } +sp-version = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.18" } +frame-support = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.18" } # Subxt dependencies -# https://github.com/interlay/subxt/tree/polkadot-v0.9.17 -subxt = { package = "subxt", git = "https://github.com/interlay/subxt", rev = "1193d94206a669c59cc5dd89486fecfa82ca584a" } -subxt-client = { package = "subxt-client", git = "https://github.com/interlay/subxt", rev = "1193d94206a669c59cc5dd89486fecfa82ca584a" } +# https://github.com/interlay/subxt/tree/polkadot-v0.9.18 +subxt = { package = "subxt", path = "../../../parity/subxt/subxt" } +subxt-client = { package = "subxt-client", path = "./client" } -jsonrpsee = { version = "0.8.0", features = ["macros", "jsonrpsee-types", "client", "jsonrpsee-ws-client", "jsonrpsee-client-transport"] } +jsonrpsee = { version = "0.9.0", features = ["macros", "jsonrpsee-types", "client", "jsonrpsee-ws-client", "jsonrpsee-client-transport"] } # Polkadot dependencies -xcm = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.17" } -polkadot-parachain = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.17" } +xcm = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.18" } +polkadot-parachain = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.18" } bitcoin = { path = "../bitcoin"} # Dependencies for the testing utils for integration tests tempdir = { version = "0.3.7", optional = true } -interbtc = { package = "interbtc-standalone", git = "https://github.com/interlay/interbtc", rev = "e7a6b41abe69de294abf32a5d350c0c5b719cce3", optional = true } +interbtc = { package = "interbtc-standalone", git = "https://github.com/gregdhill/interbtc", rev = "278d379087bc39932b328bce9f497a20c2403c5b", optional = true } rand = { version = "0.7", optional = true } [dependencies.primitives] -git = "https://github.com/interlay/interbtc" -rev = "e7a6b41abe69de294abf32a5d350c0c5b719cce3" +git = "https://github.com/gregdhill/interbtc" +rev = "278d379087bc39932b328bce9f497a20c2403c5b" package = "interbtc-primitives" [dependencies.module-bitcoin] -git = "https://github.com/interlay/interbtc" -rev = "e7a6b41abe69de294abf32a5d350c0c5b719cce3" +git = "https://github.com/gregdhill/interbtc" +rev = "278d379087bc39932b328bce9f497a20c2403c5b" package = "bitcoin" [dependencies.module-btc-relay] -git = "https://github.com/interlay/interbtc" -rev = "e7a6b41abe69de294abf32a5d350c0c5b719cce3" +git = "https://github.com/gregdhill/interbtc" +rev = "278d379087bc39932b328bce9f497a20c2403c5b" package = "btc-relay" [dependencies.module-oracle-rpc-runtime-api] -git = "https://github.com/interlay/interbtc" -rev = "e7a6b41abe69de294abf32a5d350c0c5b719cce3" +git = "https://github.com/gregdhill/interbtc" +rev = "278d379087bc39932b328bce9f497a20c2403c5b" package = "module-oracle-rpc-runtime-api" [dev-dependencies] diff --git a/runtime/client/Cargo.toml b/runtime/client/Cargo.toml new file mode 100644 index 000000000..1f966e751 --- /dev/null +++ b/runtime/client/Cargo.toml @@ -0,0 +1,42 @@ +[package] +name = "subxt-client" +version = "0.1.0" +authors = [] +edition = "2018" + +license = "GPL-3.0" +repository = "https://github.com/paritytech/substrate-subxt" +documentation = "https://docs.rs/substrate-subxt-client" +homepage = "https://www.parity.io/" +description = "Embed a substrate node into your subxt application." +keywords = ["parity", "substrate", "blockchain"] + +[dependencies] +async-std = "1.8.0" +futures = { version = "0.3.9", features = ["compat"], package = "futures" } +futures01 = { package = "futures", version = "0.1.29" } +jsonrpsee = "0.9.0" +jsonrpsee-types = "0.9.0" +jsonrpsee-core = { version = "0.9.0", features = ["async-client"] } + +log = "0.4.13" +serde_json = "1.0.61" +thiserror = "1.0.23" + +sc-client-db = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.18" } +sp-keyring = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.18" } +sc-network = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.18", default-features = false } +sc-service = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.18", default-features = false } + +tokio = { version = "1.10", features = ["time", "rt-multi-thread"] } + +[target.'cfg(target_arch="x86_64")'.dependencies] +sc-service = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.18", default-features = false, features = [ + "wasmtime", +] } + +[dev-dependencies] +async-std = { version = "1.8.0", features = ["attributes"] } +env_logger = "0.8.2" +node-cli = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.18", default-features = false } +tempdir = "0.3.7" \ No newline at end of file diff --git a/runtime/client/src/lib.rs b/runtime/client/src/lib.rs new file mode 100644 index 000000000..de85a2057 --- /dev/null +++ b/runtime/client/src/lib.rs @@ -0,0 +1,245 @@ +use async_std::task; +use futures::{ + channel::mpsc, + future::{select, FutureExt}, + sink::SinkExt, + stream::StreamExt, +}; +use jsonrpsee_core::{ + async_trait, + client::{Client as JsonRpcClient, TransportReceiverT, TransportSenderT}, +}; +use sc_network::config::TransportConfig; +pub use sc_service::{ + config::{DatabaseSource, KeystoreConfig, WasmExecutionMethod}, + Error as ServiceError, +}; +use sc_service::{ + config::{NetworkConfiguration, TelemetryEndpoints}, + ChainSpec, Configuration, KeepBlocks, RpcHandlers, RpcSession, TaskManager, +}; +pub use sp_keyring::AccountKeyring; +use thiserror::Error; + +/// Error thrown by the client. +#[derive(Debug, Error)] +pub enum SubxtClientError { + /// Failed to parse json rpc message. + #[error("{0}")] + Json(#[from] serde_json::Error), + /// Channel closed. + #[error("{0}")] + Mpsc(#[from] mpsc::SendError), +} + +/// Sending end. +pub struct Sender(mpsc::UnboundedSender); + +/// Receiving end +pub struct Receiver(mpsc::UnboundedReceiver); + +#[async_trait] +impl TransportSenderT for Sender { + type Error = SubxtClientError; + + async fn send(&mut self, msg: String) -> Result<(), Self::Error> { + self.0.send(msg).await?; + Ok(()) + } +} + +#[async_trait] +impl TransportReceiverT for Receiver { + type Error = SubxtClientError; + + async fn receive(&mut self) -> Result { + let msg = self.0.next().await.expect("channel should be open"); + Ok(msg) + } +} + +/// Client for an embedded substrate node. +pub struct SubxtClient { + sender: Sender, + receiver: Receiver, +} + +impl SubxtClient { + /// Create a new client. + pub fn new(mut task_manager: TaskManager, rpc: RpcHandlers) -> Self { + let (to_back, from_front) = mpsc::unbounded(); + let (to_front, from_back) = mpsc::unbounded(); + + let session = RpcSession::new(to_front.clone()); + task::spawn( + select( + Box::pin(from_front.for_each(move |message: String| { + let rpc = rpc.clone(); + let session = session.clone(); + let mut to_front = to_front.clone(); + async move { + let response = rpc.rpc_query(&session, &message).await; + if let Some(response) = response { + to_front.send(response).await.ok(); + } + } + })), + Box::pin(async move { + task_manager.future().await.ok(); + }), + ) + .map(drop), + ); + + Self { + sender: Sender(to_back), + receiver: Receiver(from_back), + } + } + + /// Creates a new client from a config. + pub fn from_config( + config: SubxtClientConfig, + builder: impl Fn(Configuration) -> Result<(TaskManager, RpcHandlers), ServiceError>, + ) -> Result { + let config = config.into_service_config(); + let (task_manager, rpc_handlers) = (builder)(config)?; + Ok(Self::new(task_manager, rpc_handlers)) + } +} + +impl From for JsonRpcClient { + fn from(client: SubxtClient) -> Self { + (client.sender, client.receiver).into() + } +} + +/// Role of the node. +#[derive(Clone, Copy, Debug)] +pub enum Role { + /// Light client. + Light, + /// A full node (mainly used for testing purposes). + Authority(AccountKeyring), +} + +impl From for sc_service::Role { + fn from(role: Role) -> Self { + match role { + Role::Light => Self::Light, + Role::Authority(_) => Self::Authority, + } + } +} + +impl From for Option { + fn from(role: Role) -> Self { + match role { + Role::Light => None, + Role::Authority(key) => Some(key.to_seed()), + } + } +} + +/// Client configuration. +#[derive(Clone)] +pub struct SubxtClientConfig { + /// Name of the implementation. + pub impl_name: &'static str, + /// Version of the implementation. + pub impl_version: &'static str, + /// Author of the implementation. + pub author: &'static str, + /// Copyright start year. + pub copyright_start_year: i32, + /// Database configuration. + pub db: DatabaseSource, + /// Keystore configuration. + pub keystore: KeystoreConfig, + /// Chain specification. + pub chain_spec: C, + /// Role of the node. + pub role: Role, + /// Enable telemetry on the given port. + pub telemetry: Option, + /// Wasm execution method + pub wasm_method: WasmExecutionMethod, + /// Handle to the tokio runtime. Will be used to spawn futures by the task manager. + pub tokio_handle: tokio::runtime::Handle, +} + +impl SubxtClientConfig { + /// Creates a service configuration. + pub fn into_service_config(self) -> Configuration { + let mut network = NetworkConfiguration::new( + format!("{} (subxt client)", self.chain_spec.name()), + "unknown", + Default::default(), + None, + ); + network.boot_nodes = self.chain_spec.boot_nodes().to_vec(); + network.transport = TransportConfig::Normal { + enable_mdns: true, + allow_private_ipv4: true, + // wasm_external_transport: None, + }; + let telemetry_endpoints = if let Some(port) = self.telemetry { + let endpoints = TelemetryEndpoints::new(vec![(format!("/ip4/127.0.0.1/tcp/{}/ws", port), 0)]) + .expect("valid config; qed"); + Some(endpoints) + } else { + None + }; + let service_config = Configuration { + network, + impl_name: self.impl_name.to_string(), + impl_version: self.impl_version.to_string(), + chain_spec: Box::new(self.chain_spec), + role: self.role.into(), + database: self.db, + keystore: self.keystore, + max_runtime_instances: 8, + announce_block: true, + dev_key_seed: self.role.into(), + telemetry_endpoints, + tokio_handle: self.tokio_handle, + default_heap_pages: Default::default(), + disable_grandpa: Default::default(), + execution_strategies: Default::default(), + force_authoring: Default::default(), + keep_blocks: KeepBlocks::All, + keystore_remote: Default::default(), + offchain_worker: Default::default(), + prometheus_config: Default::default(), + rpc_cors: Default::default(), + rpc_http: Default::default(), + rpc_ipc: Default::default(), + rpc_ws: Default::default(), + rpc_ws_max_connections: Default::default(), + rpc_methods: Default::default(), + state_cache_child_ratio: Default::default(), + state_cache_size: Default::default(), + tracing_receiver: Default::default(), + tracing_targets: Default::default(), + transaction_pool: Default::default(), + wasm_method: self.wasm_method, + base_path: Default::default(), + informant_output_format: Default::default(), + state_pruning: Default::default(), + // transaction_storage: sc_client_db::TransactionStorageMode::BlockBody, + wasm_runtime_overrides: Default::default(), + rpc_max_payload: Default::default(), + ws_max_out_buffer_capacity: Default::default(), + runtime_cache_size: Default::default(), + }; + + log::info!("{}", service_config.impl_name); + log::info!("✌️ version {}", service_config.impl_version); + log::info!("❤️ by {}, {}", self.author, self.copyright_start_year); + log::info!("📋 Chain specification: {}", service_config.chain_spec.name()); + log::info!("🏷 Node name: {}", service_config.network.node_name); + log::info!("👤 Role: {:?}", self.role); + + service_config + } +} diff --git a/runtime/src/error.rs b/runtime/src/error.rs index e1d47108e..8f079f170 100644 --- a/runtime/src/error.rs +++ b/runtime/src/error.rs @@ -1,10 +1,6 @@ pub use jsonrpsee::core::Error as JsonRpseeError; -use crate::{ - metadata::{DispatchError, ErrorDetails}, - types::*, - BTC_RELAY_MODULE, ISSUE_MODULE, RELAY_MODULE, SYSTEM_MODULE, -}; +use crate::{metadata::DispatchError, types::*, BTC_RELAY_MODULE, ISSUE_MODULE, RELAY_MODULE, SYSTEM_MODULE}; use codec::Error as CodecError; use jsonrpsee::{ client_transport::ws::WsHandshakeError, @@ -118,11 +114,11 @@ impl Display for OuterSubxtError { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { match &self.0 { subxt::Error::Runtime(err) => { - if let Some(ErrorDetails { error, pallet, .. }) = err.clone().inner().details() { - write!(f, "{} from {}", error, pallet) - } else { - Debug::fmt(&err, f) - } + // if let Some(ErrorDetails { error, pallet, .. }) = err.clone().inner().details() { + // write!(f, "{} from {}", error, pallet) + // } else { + Debug::fmt(&err, f) + // } } err => Display::fmt(&err, f), } @@ -131,19 +127,20 @@ impl Display for OuterSubxtError { impl Error { fn is_runtime_err(&self, pallet_name: &str, error_name: &str) -> bool { - matches!( - self, - Error::SubxtRuntimeError(OuterSubxtError(SubxtError::Runtime(runtime_error))) - if matches!( - runtime_error.clone().inner().details(), - Some(ErrorDetails { - pallet, - error, - .. - }) - if pallet == pallet_name && error == error_name - ) - ) + // matches!( + // self, + // Error::SubxtRuntimeError(OuterSubxtError(SubxtError::Runtime(runtime_error))) + // if matches!( + // runtime_error.clone().inner().details(), + // Some(ErrorDetails { + // pallet, + // error, + // .. + // }) + // if pallet == pallet_name && error == error_name + // ) + // ) + true } pub fn is_duplicate_block(&self) -> bool { diff --git a/runtime/src/lib.rs b/runtime/src/lib.rs index 87fb5278b..b4b942eb5 100644 --- a/runtime/src/lib.rs +++ b/runtime/src/lib.rs @@ -10,8 +10,8 @@ pub mod types; #[cfg(test)] mod tests; -#[cfg(all(feature = "testing-utils", feature = "standalone-metadata"))] -pub mod integration; +// #[cfg(all(feature = "testing-utils", feature = "standalone-metadata"))] +// pub mod integration; use codec::{Decode, Encode}; use sp_std::marker::PhantomData; @@ -36,8 +36,8 @@ pub use rpc::{ pub use sp_arithmetic::{traits as FixedPointTraits, FixedI128, FixedPointNumber, FixedU128}; use std::time::Duration; pub use subxt::{ + extrinsic::Signer, sp_core::{crypto::Ss58Codec, sr25519::Pair}, - Signer, }; pub use types::*; @@ -126,11 +126,11 @@ impl Config for InterBtcRuntime { type Signature = MultiSignature; } -impl From<::AccountId> for metadata::system::storage::Account { - fn from(account_id: ::AccountId) -> Self { - Self(account_id) - } -} +// impl<'a> From<::AccountId> for metadata::system::storage::Account<'a> { +// fn from(account_id: ::AccountId) -> Self { +// Self(&account_id) +// } +// } pub fn parse_collateral_currency(src: &str) -> Result { match src.to_uppercase().as_str() { diff --git a/runtime/src/rpc.rs b/runtime/src/rpc.rs index 7e9e64c1b..0ff210c19 100644 --- a/runtime/src/rpc.rs +++ b/runtime/src/rpc.rs @@ -2,7 +2,7 @@ use crate::{ conn::{new_websocket_client, new_websocket_client_with_retry}, error::OuterSubxtError, metadata, - metadata::DispatchError, + metadata::{DispatchError, Event as InterBtcEvent}, notify_retry, types::*, AccountId, CurrencyId, Error, InterBtcRuntime, InterBtcSigner, RetryPolicy, RichH256Le, SubxtError, @@ -12,14 +12,16 @@ use crate::{BTC_RELAY_MODULE, STABLE_BITCOIN_CONFIRMATIONS, STABLE_PARACHAIN_CON use async_trait::async_trait; use codec::Encode; use futures::{future::join_all, stream::StreamExt, FutureExt, SinkExt}; -use jsonrpsee::core::to_json_value; use module_oracle_rpc_runtime_api::BalanceWrapper; use primitives::UnsignedFixedPoint; use sp_runtime::FixedPointNumber; use std::{collections::BTreeSet, future::Future, sync::Arc, time::Duration}; use subxt::{ - BasicError, Client as SubxtClient, ClientBuilder as SubxtClientBuilder, DefaultExtra, Event, EventSubscription, - EventsDecoder, Metadata, RpcClient, Signer, TransactionEvents, TransactionProgress, + events::EventSubscription, + extrinsic::Signer, + rpc::{rpc_params, ClientT}, + BasicError, Client as SubxtClient, ClientBuilder as SubxtClientBuilder, Event, Metadata, RpcClient, + SubstrateExtrinsicParams, TransactionEvents, TransactionProgress, }; use tokio::{ sync::RwLock, @@ -38,12 +40,11 @@ cfg_if::cfg_if! { } } -type RuntimeApi = metadata::RuntimeApi>; +type RuntimeApi = metadata::RuntimeApi>; pub(crate) type ShutdownSender = tokio::sync::broadcast::Sender>; #[derive(Clone)] pub struct InterBtcParachain { - rpc_client: RpcClient, ext_client: SubxtClient, signer: Arc>, account_id: AccountId, @@ -62,8 +63,7 @@ impl InterBtcParachain { shutdown_tx: ShutdownSender, ) -> Result { let account_id = signer.account_id().clone(); - let rpc_client = rpc_client.into(); - let ext_client = SubxtClientBuilder::new().set_client(rpc_client.clone()).build().await?; + let ext_client = SubxtClientBuilder::new().set_client(rpc_client).build().await?; let api: RuntimeApi = ext_client.clone().to_runtime_api(); let metadata = Arc::new(ext_client.rpc().metadata().await?); @@ -84,7 +84,6 @@ impl InterBtcParachain { let wrapped_currency_id = currency_constants.get_wrapped_currency_id()?; let parachain_rpc = Self { - rpc_client, ext_client, api: Arc::new(api), metadata, @@ -99,6 +98,10 @@ impl InterBtcParachain { Ok(parachain_rpc) } + fn rpc(&self) -> Arc { + self.ext_client.rpc().client.clone() + } + pub async fn from_url(url: &str, signer: InterBtcSigner, shutdown_tx: ShutdownSender) -> Result { let ws_client = new_websocket_client(url, None, None).await?; Self::new(ws_client, signer, shutdown_tx).await @@ -140,7 +143,7 @@ impl InterBtcParachain { .api .storage() .system() - .account(self.account_id.clone(), None) + .account(&self.account_id, None) .await .map(|x| x.nonce) .unwrap_or(0); @@ -150,10 +153,15 @@ impl InterBtcParachain { } /// Gets a copy of the signer with a unique nonce - async fn with_unique_signer<'client, F, R>(&self, call: F) -> Result, Error> + async fn with_unique_signer<'client, F, R>( + &self, + call: F, + ) -> Result, Error> where F: Fn(InterBtcSigner) -> R, - R: Future, BasicError>>, + R: Future< + Output = Result, BasicError>, + >, { notify_retry::( || async { @@ -224,17 +232,18 @@ impl InterBtcParachain { /// # Arguments /// * `on_error` - callback for decoding errors, is not allowed to take too long pub async fn on_event_error(&self, on_error: E) -> Result<(), Error> { - let sub = self.ext_client.rpc().subscribe_finalized_events().await?; - let decoder = EventsDecoder::::new((*self.metadata).clone()); - - let mut sub = EventSubscription::::new(sub, &decoder); - loop { - match sub.next().await { - Some(Err(err)) => on_error(err), // report error - Some(Ok(_)) => {} // do nothing - None => break Ok(()), // end of stream - } - } + // let sub = self.ext_client.rpc().subscribe_finalized_events().await?; + // // let decoder = EventsDecoder::::new((*self.metadata).clone()); + + // let mut sub = EventSubscription::<_, InterBtcRuntime, _>::new(self.ext_client.rpc(), sub); + // loop { + // match sub.next().await { + // Some(Err(err)) => on_error(err), // report error + // Some(Ok(_)) => {} // do nothing + // None => break Ok(()), // end of stream + // } + // } + Ok(()) } /// Subscription service that should listen forever, only returns if the initial subscription @@ -255,53 +264,50 @@ impl InterBtcParachain { R: Future, E: Fn(SubxtError), { - let sub = self.ext_client.rpc().subscribe_finalized_events().await?; - let decoder = EventsDecoder::::new((*self.metadata).clone()); - - let mut sub = EventSubscription::::new(sub, &decoder); - sub.filter_event::(); - - let (tx, mut rx) = futures::channel::mpsc::channel::(32); - - // two tasks: one for event listening and one for callback calling - futures::future::try_join( - async move { - let tx = &tx; - while let Some(result) = sub.next().fuse().await { - if let Ok(raw_event) = result { - log::trace!("raw event: {:?}", raw_event); - let decoded = T::decode(&mut &raw_event.data[..]); - match decoded { - Ok(event) => { - log::trace!("decoded event: {:?}", event); - // send the event to the other task - if tx.clone().send(event).await.is_err() { - break; - } - } - Err(err) => { - on_error(err.into()); - } - }; - } - } - Result::<(), _>::Err(Error::ChannelClosed) - }, - async move { - loop { - // block until we receive an event from the other task - match rx.next().fuse().await { - Some(event) => { - on_event(event).await; - } - None => { - return Result::<(), _>::Err(Error::ChannelClosed); - } - } - } - }, - ) - .await?; + // let sub = self.ext_client.rpc().subscribe_finalized_events().await?; + // sub.filter_event::(); + + // let (tx, mut rx) = futures::channel::mpsc::channel::(32); + + // // two tasks: one for event listening and one for callback calling + // futures::future::try_join( + // async move { + // let tx = &tx; + // while let Some(result) = sub.next().fuse().await { + // if let Ok(raw_event) = result { + // log::trace!("raw event: {:?}", raw_event); + // let decoded = T::decode(&mut &raw_event.data[..]); + // match decoded { + // Ok(event) => { + // log::trace!("decoded event: {:?}", event); + // // send the event to the other task + // if tx.clone().send(event).await.is_err() { + // break; + // } + // } + // Err(err) => { + // on_error(err.into()); + // } + // }; + // } + // } + // Result::<(), _>::Err(Error::ChannelClosed) + // }, + // async move { + // loop { + // // block until we receive an event from the other task + // match rx.next().fuse().await { + // Some(event) => { + // on_event(event).await; + // } + // None => { + // return Result::<(), _>::Err(Error::ChannelClosed); + // } + // } + // } + // }, + // ) + // .await?; Ok(()) } @@ -313,7 +319,7 @@ impl InterBtcParachain { .tx() .utility() .batch(encoded_calls.clone()) - .sign_and_submit_then_watch(&signer) + .sign_and_submit_then_watch_default(&signer) .await }) .await?; @@ -329,7 +335,7 @@ impl InterBtcParachain { .tx() .tokens() .transfer(recipient.clone(), Token(DOT), 100) - .sign_and_submit_then_watch(&signer.clone()) + .sign_and_submit_then_watch_default(&signer.clone()) .await .unwrap(); @@ -340,7 +346,7 @@ impl InterBtcParachain { .tx() .tokens() .transfer(recipient.clone(), Token(DOT), 100) - .sign_and_submit_then_watch(&signer.clone()) + .sign_and_submit_then_watch_default(&signer.clone()) .await .unwrap_err() .into() @@ -365,7 +371,7 @@ impl InterBtcParachain { .tx() .tokens() .transfer(recipient, Token(DOT), 100) - .sign_and_submit_then_watch(&signer.clone()) + .sign_and_submit_then_watch_default(&signer.clone()) .await .unwrap_err() .into() @@ -431,7 +437,7 @@ impl CollateralBalancesPallet for InterBtcParachain { .api .storage() .tokens() - .accounts(id.clone(), currency_id, head) + .accounts(&id, ¤cy_id, head) .await? .free) } @@ -446,7 +452,7 @@ impl CollateralBalancesPallet for InterBtcParachain { .api .storage() .tokens() - .accounts(id.clone(), currency_id, head) + .accounts(&id, ¤cy_id, head) .await? .reserved) } @@ -457,7 +463,7 @@ impl CollateralBalancesPallet for InterBtcParachain { .tx() .tokens() .transfer(recipient.clone(), currency_id, amount) - .sign_and_submit_then_watch(&signer) + .sign_and_submit_then_watch_default(&signer) .await }) .await?; @@ -551,7 +557,7 @@ impl ReplacePallet for InterBtcParachain { .tx() .replace() .request_replace(vault_id.currencies.clone(), amount, griefing_collateral) - .sign_and_submit_then_watch(&signer) + .sign_and_submit_then_watch_default(&signer) .await }) .await?; @@ -564,7 +570,7 @@ impl ReplacePallet for InterBtcParachain { .tx() .replace() .withdraw_replace(vault_id.currencies.clone(), amount) - .sign_and_submit_then_watch(&signer) + .sign_and_submit_then_watch_default(&signer) .await }) .await?; @@ -590,7 +596,7 @@ impl ReplacePallet for InterBtcParachain { collateral, btc_address, ) - .sign_and_submit_then_watch(&signer) + .sign_and_submit_then_watch_default(&signer) .await }) .await?; @@ -603,7 +609,7 @@ impl ReplacePallet for InterBtcParachain { .tx() .replace() .execute_replace(replace_id, merkle_proof.into(), raw_tx.into()) - .sign_and_submit_then_watch(&signer) + .sign_and_submit_then_watch_default(&signer) .await }) .await?; @@ -616,7 +622,7 @@ impl ReplacePallet for InterBtcParachain { .tx() .replace() .cancel_replace(replace_id) - .sign_and_submit_then_watch(&signer) + .sign_and_submit_then_watch_default(&signer) .await }) .await?; @@ -630,11 +636,8 @@ impl ReplacePallet for InterBtcParachain { ) -> Result, Error> { let head = self.get_latest_block_hash().await?; let result: Vec = self - .rpc_client - .request( - "replace_getNewVaultReplaceRequests", - &[to_json_value(account_id)?, to_json_value(head)?], - ) + .rpc() + .request("replace_getNewVaultReplaceRequests", rpc_params![account_id, head]) .await?; join_all( result @@ -653,11 +656,8 @@ impl ReplacePallet for InterBtcParachain { ) -> Result, Error> { let head = self.get_latest_block_hash().await?; let result: Vec = self - .rpc_client - .request( - "replace_getOldVaultReplaceRequests", - &[to_json_value(account_id)?, to_json_value(head)?], - ) + .rpc() + .request("replace_getOldVaultReplaceRequests", rpc_params![account_id, head]) .await?; join_all( result @@ -680,7 +680,7 @@ impl ReplacePallet for InterBtcParachain { .api .storage() .replace() - .replace_requests(replace_id, head) + .replace_requests(&replace_id, head) .await? .ok_or(Error::StorageItemNotFound)?) } @@ -732,7 +732,7 @@ impl OraclePallet for InterBtcParachain { .api .storage() .oracle() - .aggregate(OracleKey::ExchangeRate(currency_id), head) + .aggregate(&OracleKey::ExchangeRate(currency_id), head) .await? .ok_or(Error::StorageItemNotFound)?) } @@ -748,7 +748,7 @@ impl OraclePallet for InterBtcParachain { .tx() .oracle() .feed_values(values.clone()) - .sign_and_submit_then_watch(&signer) + .sign_and_submit_then_watch_default(&signer) .await }) .await?; @@ -766,7 +766,7 @@ impl OraclePallet for InterBtcParachain { .tx() .oracle() .feed_values(vec![(OracleKey::FeeEstimation, value)]) - .sign_and_submit_then_watch(&signer) + .sign_and_submit_then_watch_default(&signer) .await }) .await?; @@ -781,7 +781,7 @@ impl OraclePallet for InterBtcParachain { .api .storage() .oracle() - .aggregate(OracleKey::FeeEstimation, head) + .aggregate(&OracleKey::FeeEstimation, head) .await? .ok_or(Error::StorageItemNotFound)?) } @@ -790,14 +790,10 @@ impl OraclePallet for InterBtcParachain { async fn wrapped_to_collateral(&self, amount: u128, currency_id: CurrencyId) -> Result { let head = self.get_latest_block_hash().await?; let result: BalanceWrapper<_> = self - .rpc_client + .rpc() .request( "oracle_wrappedToCollateral", - &[ - to_json_value(BalanceWrapper { amount })?, - to_json_value(currency_id)?, - to_json_value(head)?, - ], + rpc_params![BalanceWrapper { amount }, currency_id, head], ) .await?; @@ -808,14 +804,10 @@ impl OraclePallet for InterBtcParachain { async fn collateral_to_wrapped(&self, amount: u128, currency_id: CurrencyId) -> Result { let head = self.get_latest_block_hash().await?; let result: BalanceWrapper<_> = self - .rpc_client + .rpc() .request( "oracle_collateralToWrapped", - &[ - to_json_value(BalanceWrapper { amount })?, - to_json_value(currency_id)?, - to_json_value(head)?, - ], + rpc_params![BalanceWrapper { amount }, currency_id, head], ) .await?; @@ -828,7 +820,7 @@ impl OraclePallet for InterBtcParachain { .api .storage() .oracle() - .raw_values_updated(key.clone(), head) + .raw_values_updated(key, head) .await? .unwrap_or(false)) } @@ -870,7 +862,7 @@ impl RelayPallet for InterBtcParachain { .tx() .relay() .report_vault_theft(vault_id.clone(), merkle_proof.into(), raw_tx.into()) - .sign_and_submit_then_watch(&signer) + .sign_and_submit_then_watch_default(&signer) .await }) .await?; @@ -896,7 +888,7 @@ impl RelayPallet for InterBtcParachain { .tx() .relay() .report_vault_double_payment(vault_id.clone(), merkle_proofs.clone(), raw_txs.clone()) - .sign_and_submit_then_watch(&signer) + .sign_and_submit_then_watch_default(&signer) .await }) .await?; @@ -916,11 +908,8 @@ impl RelayPallet for InterBtcParachain { async fn is_transaction_invalid(&self, vault_id: &VaultId, raw_tx: &[u8]) -> Result { let head = self.get_latest_block_hash().await?; Ok(matches!( - self.rpc_client - .request( - "relay_isTransactionInvalid", - &[to_json_value(vault_id)?, to_json_value(raw_tx)?, to_json_value(head)?], - ) + self.rpc() + .request("relay_isTransactionInvalid", rpc_params![vault_id, raw_tx, head],) .await, Ok(()), )) @@ -942,7 +931,7 @@ impl RelayPallet for InterBtcParachain { .tx() .relay() .initialize(header.clone(), height) - .sign_and_submit_then_watch(&signer) + .sign_and_submit_then_watch_default(&signer) .await }) .await?; @@ -960,7 +949,7 @@ impl RelayPallet for InterBtcParachain { .tx() .relay() .store_block_header(header.clone()) - .sign_and_submit_then_watch(&signer) + .sign_and_submit_then_watch_default(&signer) .await }) .await?; @@ -1056,11 +1045,11 @@ impl IssuePallet for InterBtcParachain { .tx() .issue() .request_issue(amount, vault_id.clone(), griefing_collateral) - .sign_and_submit_then_watch(&signer) + .sign_and_submit_then_watch_default(&signer) .await }) .await? - .find_first_event::()? + .find_first::()? .ok_or(Error::RequestIssueIDNotFound) } @@ -1070,7 +1059,7 @@ impl IssuePallet for InterBtcParachain { .tx() .issue() .execute_issue(issue_id, merkle_proof.into(), raw_tx.into()) - .sign_and_submit_then_watch(&signer) + .sign_and_submit_then_watch_default(&signer) .await }) .await?; @@ -1083,7 +1072,7 @@ impl IssuePallet for InterBtcParachain { .tx() .issue() .cancel_issue(issue_id) - .sign_and_submit_then_watch(&signer) + .sign_and_submit_then_watch_default(&signer) .await }) .await?; @@ -1096,7 +1085,7 @@ impl IssuePallet for InterBtcParachain { .api .storage() .issue() - .issue_requests(issue_id, head) + .issue_requests(&issue_id, head) .await? .ok_or(Error::StorageItemNotFound)?) } @@ -1107,11 +1096,8 @@ impl IssuePallet for InterBtcParachain { ) -> Result, Error> { let head = self.get_latest_block_hash().await?; let result: Vec = self - .rpc_client - .request( - "issue_getVaultIssueRequests", - &[to_json_value(account_id)?, to_json_value(head)?], - ) + .rpc() + .request("issue_getVaultIssueRequests", rpc_params![account_id, head]) .await?; join_all( result @@ -1180,11 +1166,11 @@ impl RedeemPallet for InterBtcParachain { .tx() .redeem() .request_redeem(amount, btc_address, vault_id.clone()) - .sign_and_submit_then_watch(&signer) + .sign_and_submit_then_watch_default(&signer) .await }) .await? - .find_first_event::()? + .find_first::()? .ok_or(Error::RequestRedeemIDNotFound)?; Ok(redeem_event.redeem_id) } @@ -1195,7 +1181,7 @@ impl RedeemPallet for InterBtcParachain { .tx() .redeem() .execute_redeem(redeem_id, merkle_proof.into(), raw_tx.into()) - .sign_and_submit_then_watch(&signer) + .sign_and_submit_then_watch_default(&signer) .await }) .await?; @@ -1208,7 +1194,7 @@ impl RedeemPallet for InterBtcParachain { .tx() .redeem() .cancel_redeem(redeem_id, reimburse) - .sign_and_submit_then_watch(&signer) + .sign_and_submit_then_watch_default(&signer) .await }) .await?; @@ -1221,7 +1207,7 @@ impl RedeemPallet for InterBtcParachain { .api .storage() .redeem() - .redeem_requests(redeem_id, head) + .redeem_requests(&redeem_id, head) .await? .ok_or(Error::StorageItemNotFound)?) } @@ -1232,11 +1218,8 @@ impl RedeemPallet for InterBtcParachain { ) -> Result, Error> { let head = self.get_latest_block_hash().await?; let result: Vec = self - .rpc_client - .request( - "redeem_getVaultRedeemRequests", - &[to_json_value(account_id)?, to_json_value(head)?], - ) + .rpc() + .request("redeem_getVaultRedeemRequests", rpc_params![account_id, head]) .await?; join_all( result @@ -1277,7 +1260,7 @@ impl RefundPallet for InterBtcParachain { .tx() .refund() .execute_refund(refund_id, merkle_proof.into(), raw_tx.into()) - .sign_and_submit_then_watch(&signer) + .sign_and_submit_then_watch_default(&signer) .await }) .await?; @@ -1290,7 +1273,7 @@ impl RefundPallet for InterBtcParachain { .api .storage() .refund() - .refund_requests(refund_id, head) + .refund_requests(&refund_id, head) .await? .ok_or(Error::StorageItemNotFound)?) } @@ -1301,11 +1284,8 @@ impl RefundPallet for InterBtcParachain { ) -> Result, Error> { let head = self.get_latest_block_hash().await?; let result: Vec = self - .rpc_client - .request( - "refund_getVaultRefundRequests", - &[to_json_value(account_id)?, to_json_value(head)?], - ) + .rpc() + .request("refund_getVaultRefundRequests", rpc_params![account_id, head]) .await?; join_all( result @@ -1363,7 +1343,7 @@ impl BtcRelayPallet for InterBtcParachain { /// * `height` - chain height async fn get_block_hash(&self, height: u32) -> Result { let head = self.get_latest_block_hash().await?; - Ok(self.api.storage().btc_relay().chains_hashes(0, height, head).await?) + Ok(self.api.storage().btc_relay().chains_hashes(&0, &height, head).await?) } /// Get the corresponding block header for the given hash. @@ -1372,7 +1352,7 @@ impl BtcRelayPallet for InterBtcParachain { /// * `hash` - little endian block hash async fn get_block_header(&self, hash: H256Le) -> Result { let head = self.get_latest_block_hash().await?; - Ok(self.api.storage().btc_relay().block_headers(hash, head).await?) + Ok(self.api.storage().btc_relay().block_headers(&hash, head).await?) } /// Get the global security parameter k for stable Bitcoin transactions @@ -1424,13 +1404,10 @@ impl BtcRelayPallet for InterBtcParachain { async fn verify_block_header_inclusion(&self, block_hash: H256Le) -> Result<(), Error> { let head = self.get_latest_block_hash().await?; let result: Result<(), DispatchError> = self - .rpc_client + .rpc() .request( "btcRelay_verifyBlockHeaderInclusion", - &[ - to_json_value(Into::::into(block_hash))?, - to_json_value(head)?, - ], + rpc_params![Into::::into(block_hash), head], ) .await?; @@ -1483,13 +1460,7 @@ impl VaultRegistryPallet for InterBtcParachain { /// * `VaultCommittedTheft` - if the vault is stole BTC async fn get_vault(&self, vault_id: &VaultId) -> Result { let head = self.get_latest_block_hash().await?; - match self - .api - .storage() - .vault_registry() - .vaults(vault_id.clone(), head) - .await? - { + match self.api.storage().vault_registry().vaults(vault_id, head).await? { Some(InterBtcVault { status: VaultStatus::Liquidated, .. @@ -1506,11 +1477,8 @@ impl VaultRegistryPallet for InterBtcParachain { async fn get_vaults_by_account_id(&self, account_id: &AccountId) -> Result, Error> { let head = self.get_latest_block_hash().await?; let result = self - .rpc_client - .request( - "vaultRegistry_getVaultsByAccountId", - &[to_json_value(account_id)?, to_json_value(head)?], - ) + .rpc() + .request("vaultRegistry_getVaultsByAccountId", rpc_params![account_id, head]) .await?; Ok(result) @@ -1551,7 +1519,7 @@ impl VaultRegistryPallet for InterBtcParachain { .tx() .vault_registry() .register_vault(vault_id.currencies.clone(), collateral, public_key.clone()) - .sign_and_submit_then_watch(&signer) + .sign_and_submit_then_watch_default(&signer) .await }) .await?; @@ -1569,7 +1537,7 @@ impl VaultRegistryPallet for InterBtcParachain { .tx() .vault_registry() .deposit_collateral(vault_id.currencies.clone(), amount) - .sign_and_submit_then_watch(&signer) + .sign_and_submit_then_watch_default(&signer) .await }) .await?; @@ -1591,7 +1559,7 @@ impl VaultRegistryPallet for InterBtcParachain { .tx() .vault_registry() .withdraw_collateral(vault_id.currencies.clone(), amount) - .sign_and_submit_then_watch(&signer) + .sign_and_submit_then_watch_default(&signer) .await }) .await?; @@ -1609,7 +1577,7 @@ impl VaultRegistryPallet for InterBtcParachain { .tx() .vault_registry() .update_public_key(vault_id.currencies.clone(), public_key.clone()) - .sign_and_submit_then_watch(&signer) + .sign_and_submit_then_watch_default(&signer) .await }) .await?; @@ -1626,7 +1594,7 @@ impl VaultRegistryPallet for InterBtcParachain { .tx() .vault_registry() .register_address(vault_id.currencies.clone(), btc_address) - .sign_and_submit_then_watch(&signer) + .sign_and_submit_then_watch_default(&signer) .await }) .await?; @@ -1644,14 +1612,10 @@ impl VaultRegistryPallet for InterBtcParachain { ) -> Result { let head = self.get_latest_block_hash().await?; let result: BalanceWrapper<_> = self - .rpc_client + .rpc() .request( "vaultRegistry_getRequiredCollateralForWrapped", - &[ - to_json_value(BalanceWrapper { amount: amount_btc })?, - to_json_value(collateral_currency)?, - to_json_value(head)?, - ], + rpc_params![BalanceWrapper { amount: amount_btc }, collateral_currency, head], ) .await?; @@ -1663,10 +1627,10 @@ impl VaultRegistryPallet for InterBtcParachain { async fn get_required_collateral_for_vault(&self, vault_id: VaultId) -> Result { let head = self.get_latest_block_hash().await?; let result: BalanceWrapper<_> = self - .rpc_client + .rpc() .request( "vaultRegistry_getRequiredCollateralForVault", - &[to_json_value(vault_id)?, to_json_value(head)?], + rpc_params![vault_id, head], ) .await?; @@ -1676,11 +1640,8 @@ impl VaultRegistryPallet for InterBtcParachain { async fn get_vault_total_collateral(&self, vault_id: VaultId) -> Result { let head = self.get_latest_block_hash().await?; let result: BalanceWrapper<_> = self - .rpc_client - .request( - "vaultRegistry_getVaultTotalCollateral", - &[to_json_value(vault_id)?, to_json_value(head)?], - ) + .rpc() + .request("vaultRegistry_getVaultTotalCollateral", rpc_params![vault_id, head]) .await?; Ok(result.amount) @@ -1689,14 +1650,10 @@ impl VaultRegistryPallet for InterBtcParachain { async fn get_collateralization_from_vault(&self, vault_id: VaultId, only_issued: bool) -> Result { let head = self.get_latest_block_hash().await?; let result: UnsignedFixedPoint = self - .rpc_client + .rpc() .request( "vaultRegistry_getCollateralizationFromVault", - &[ - to_json_value(vault_id)?, - to_json_value(only_issued)?, - to_json_value(head)?, - ], + rpc_params![vault_id, only_issued, head], ) .await?; @@ -1751,7 +1708,7 @@ impl SudoPallet for InterBtcParachain { .tx() .sudo() .sudo(call.clone()) - .sign_and_submit_then_watch(&signer) + .sign_and_submit_then_watch_default(&signer) .await }) .await?; diff --git a/runtime/src/types.rs b/runtime/src/types.rs index 9fe614e67..bb5063dd0 100644 --- a/runtime/src/types.rs +++ b/runtime/src/types.rs @@ -20,7 +20,7 @@ pub type H160 = subxt::sp_core::H160; pub type H256 = subxt::sp_core::H256; pub type U256 = subxt::sp_core::U256; -pub type InterBtcSigner = subxt::PairSigner, KeyPair>; +pub type InterBtcSigner = subxt::PairSigner; pub type BtcAddress = module_btc_relay::BtcAddress; diff --git a/vault/Cargo.toml b/vault/Cargo.toml index b8c4d2b60..dc03f9fb3 100644 --- a/vault/Cargo.toml +++ b/vault/Cargo.toml @@ -17,7 +17,7 @@ clap = "3.1" tokio = { version = "1.0", features = ["full"] } tokio-metrics = { version = "0.1.0", default-features = false } serde = "1.0.136" -parity-scale-codec = "2.0.0" +parity-scale-codec = "3.0.0" hex = "0.4.2" futures = "0.3.5" async-trait = "0.1.40" @@ -39,9 +39,9 @@ runtime = { path = "../runtime" } service = { path = "../service" } # Substrate dependencies -sp-core = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.17" } -sp-keyring = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.17" } -sp-arithmetic = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.17" } +sp-core = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.18" } +sp-keyring = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.18" } +sp-arithmetic = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.18" } [dev-dependencies] mockall = "0.8.1" @@ -50,4 +50,4 @@ mockall = "0.8.1" runtime = { path = "../runtime", features = ["testing-utils"] } # Substrate dependencies -frame-support = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.17" } \ No newline at end of file +frame-support = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.18" } \ No newline at end of file From 29f05d89aa5cb15d176d25c970f0ffefb4f077eb Mon Sep 17 00:00:00 2001 From: Gregory Hill Date: Wed, 6 Apr 2022 13:34:53 +0100 Subject: [PATCH 02/12] chore: match ModuleError Signed-off-by: Gregory Hill --- runtime/src/error.rs | 83 +++++++++++--------------------------------- runtime/src/rpc.rs | 3 +- 2 files changed, 21 insertions(+), 65 deletions(-) diff --git a/runtime/src/error.rs b/runtime/src/error.rs index 8f079f170..87083a0ef 100644 --- a/runtime/src/error.rs +++ b/runtime/src/error.rs @@ -15,7 +15,7 @@ use std::{ io::Error as IoError, num::TryFromIntError, }; -use subxt::{sp_core::crypto::SecretStringError, BasicError, TransactionError}; +use subxt::{sp_core::crypto::SecretStringError, BasicError, ModuleError, TransactionError}; use thiserror::Error; use tokio::time::error::Elapsed; use url::ParseError as UrlParseError; @@ -71,7 +71,7 @@ pub enum Error { #[error("Error converting: {0}")] Convert(#[from] TryFromIntError), #[error("Subxt runtime error: {0}")] - SubxtRuntimeError(#[from] OuterSubxtError), + SubxtRuntimeError(#[from] SubxtError), #[error("Error decoding: {0}")] CodecError(#[from] CodecError), #[error("Error encoding json data: {0}")] @@ -88,75 +88,34 @@ pub enum Error { impl From for Error { fn from(err: BasicError) -> Self { - Self::SubxtRuntimeError(OuterSubxtError(err.into())) - } -} - -impl From for Error { - fn from(err: SubxtError) -> Self { - Self::SubxtRuntimeError(OuterSubxtError(err)) - } -} - -// hacky workaround to pretty print runtime errors -#[derive(Debug)] -pub struct OuterSubxtError(pub SubxtError); - -impl From for OuterSubxtError { - fn from(err: SubxtError) -> Self { - Self(err) - } -} - -impl std::error::Error for OuterSubxtError {} - -impl Display for OuterSubxtError { - fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - match &self.0 { - subxt::Error::Runtime(err) => { - // if let Some(ErrorDetails { error, pallet, .. }) = err.clone().inner().details() { - // write!(f, "{} from {}", error, pallet) - // } else { - Debug::fmt(&err, f) - // } - } - err => Display::fmt(&err, f), - } + Self::SubxtRuntimeError(err.into()) } } impl Error { - fn is_runtime_err(&self, pallet_name: &str, error_name: &str) -> bool { - // matches!( - // self, - // Error::SubxtRuntimeError(OuterSubxtError(SubxtError::Runtime(runtime_error))) - // if matches!( - // runtime_error.clone().inner().details(), - // Some(ErrorDetails { - // pallet, - // error, - // .. - // }) - // if pallet == pallet_name && error == error_name - // ) - // ) - true + fn is_module_err(&self, pallet_name: &str, error_name: &str) -> bool { + matches!( + self, + Error::SubxtRuntimeError(SubxtError::Module(ModuleError { + pallet, error, .. + })) if pallet == pallet_name && error == error_name, + ) } pub fn is_duplicate_block(&self) -> bool { - self.is_runtime_err(BTC_RELAY_MODULE, &format!("{:?}", BtcRelayPalletError::DuplicateBlock)) + self.is_module_err(BTC_RELAY_MODULE, &format!("{:?}", BtcRelayPalletError::DuplicateBlock)) } pub fn is_invalid_chain_id(&self) -> bool { - self.is_runtime_err(BTC_RELAY_MODULE, &format!("{:?}", BtcRelayPalletError::InvalidChainID)) + self.is_module_err(BTC_RELAY_MODULE, &format!("{:?}", BtcRelayPalletError::InvalidChainID)) } pub fn is_issue_completed(&self) -> bool { - self.is_runtime_err(ISSUE_MODULE, &format!("{:?}", IssuePalletError::IssueCompleted)) + self.is_module_err(ISSUE_MODULE, &format!("{:?}", IssuePalletError::IssueCompleted)) } pub fn is_valid_refund(&self) -> bool { - self.is_runtime_err(RELAY_MODULE, &format!("{:?}", RelayPalletError::ValidRefundTransaction)) + self.is_module_err(RELAY_MODULE, &format!("{:?}", RelayPalletError::ValidRefundTransaction)) } fn map_call_error( @@ -165,8 +124,8 @@ impl Error { other: impl Fn(&String) -> Option, ) -> Option { match self { - Error::SubxtRuntimeError(OuterSubxtError(SubxtError::Rpc(RequestError::Call(err)))) => call(err), - Error::SubxtRuntimeError(OuterSubxtError(SubxtError::Rpc(RequestError::Request(message)))) => { + Error::SubxtRuntimeError(SubxtError::Rpc(RequestError::Call(err))) => call(err), + Error::SubxtRuntimeError(SubxtError::Rpc(RequestError::Request(message))) => { if let Ok(error_response) = serde_json::from_str::(message) { call(&CallError::Custom { code: error_response.error.code.code(), @@ -231,20 +190,18 @@ impl Error { pub fn is_rpc_disconnect_error(&self) -> bool { matches!( self, - Error::SubxtRuntimeError(OuterSubxtError(SubxtError::Rpc(JsonRpseeError::RestartNeeded(_)))) + Error::SubxtRuntimeError(SubxtError::Rpc(JsonRpseeError::RestartNeeded(_))) ) } pub fn is_rpc_error(&self) -> bool { - matches!(self, Error::SubxtRuntimeError(OuterSubxtError(SubxtError::Rpc(_)))) + matches!(self, Error::SubxtRuntimeError(SubxtError::Rpc(_))) } pub fn is_block_hash_not_found_error(&self) -> bool { matches!( self, - Error::SubxtRuntimeError(OuterSubxtError(SubxtError::Transaction( - TransactionError::BlockHashNotFound - ))) + Error::SubxtRuntimeError(SubxtError::Transaction(TransactionError::BlockHashNotFound)) ) } @@ -257,7 +214,7 @@ impl Error { } pub fn is_parachain_shutdown_error(&self) -> bool { - self.is_runtime_err(SYSTEM_MODULE, &format!("{:?}", SystemPalletError::CallFiltered)) + self.is_module_err(SYSTEM_MODULE, &format!("{:?}", SystemPalletError::CallFiltered)) } } diff --git a/runtime/src/rpc.rs b/runtime/src/rpc.rs index 0ff210c19..c021d94c8 100644 --- a/runtime/src/rpc.rs +++ b/runtime/src/rpc.rs @@ -1,6 +1,5 @@ use crate::{ conn::{new_websocket_client, new_websocket_client_with_retry}, - error::OuterSubxtError, metadata, metadata::{DispatchError, Event as InterBtcEvent}, notify_retry, @@ -1411,7 +1410,7 @@ impl BtcRelayPallet for InterBtcParachain { ) .await?; - result.map_err(|err| Error::SubxtRuntimeError(OuterSubxtError(SubxtError::Runtime(subxt::RuntimeError(err))))) + result.map_err(|err| Error::SubxtRuntimeError(SubxtError::Runtime(subxt::RuntimeError(err)))) } } From 993ec155f802d7b47f48473ab9cff87f8b2e8bf3 Mon Sep 17 00:00:00 2001 From: Gregory Hill Date: Wed, 6 Apr 2022 15:59:48 +0100 Subject: [PATCH 03/12] fix: event filtering Signed-off-by: Gregory Hill --- runtime/src/error.rs | 7 +-- runtime/src/rpc.rs | 111 ++++++++++++++++++------------------------- 2 files changed, 48 insertions(+), 70 deletions(-) diff --git a/runtime/src/error.rs b/runtime/src/error.rs index 87083a0ef..b7dbfda43 100644 --- a/runtime/src/error.rs +++ b/runtime/src/error.rs @@ -9,12 +9,7 @@ use jsonrpsee::{ }; use prometheus::Error as PrometheusError; use serde_json::Error as SerdeJsonError; -use std::{ - array::TryFromSliceError, - fmt::{Debug, Display}, - io::Error as IoError, - num::TryFromIntError, -}; +use std::{array::TryFromSliceError, fmt::Debug, io::Error as IoError, num::TryFromIntError}; use subxt::{sp_core::crypto::SecretStringError, BasicError, ModuleError, TransactionError}; use thiserror::Error; use tokio::time::error::Elapsed; diff --git a/runtime/src/rpc.rs b/runtime/src/rpc.rs index c021d94c8..f3eb4a954 100644 --- a/runtime/src/rpc.rs +++ b/runtime/src/rpc.rs @@ -16,11 +16,9 @@ use primitives::UnsignedFixedPoint; use sp_runtime::FixedPointNumber; use std::{collections::BTreeSet, future::Future, sync::Arc, time::Duration}; use subxt::{ - events::EventSubscription, - extrinsic::Signer, rpc::{rpc_params, ClientT}, - BasicError, Client as SubxtClient, ClientBuilder as SubxtClientBuilder, Event, Metadata, RpcClient, - SubstrateExtrinsicParams, TransactionEvents, TransactionProgress, + BasicError, Client as SubxtClient, ClientBuilder as SubxtClientBuilder, Event, RpcClient, SubstrateExtrinsicParams, + TransactionEvents, TransactionProgress, }; use tokio::{ sync::RwLock, @@ -42,13 +40,11 @@ cfg_if::cfg_if! { type RuntimeApi = metadata::RuntimeApi>; pub(crate) type ShutdownSender = tokio::sync::broadcast::Sender>; -#[derive(Clone)] pub struct InterBtcParachain { ext_client: SubxtClient, signer: Arc>, account_id: AccountId, api: Arc, - metadata: Arc, shutdown_tx: ShutdownSender, pub native_currency_id: CurrencyId, pub relay_chain_currency_id: CurrencyId, @@ -64,7 +60,6 @@ impl InterBtcParachain { let account_id = signer.account_id().clone(); let ext_client = SubxtClientBuilder::new().set_client(rpc_client).build().await?; let api: RuntimeApi = ext_client.clone().to_runtime_api(); - let metadata = Arc::new(ext_client.rpc().metadata().await?); let runtime_version = ext_client.rpc().runtime_version(None).await?; if runtime_version.spec_version == DEFAULT_SPEC_VERSION { @@ -85,7 +80,6 @@ impl InterBtcParachain { let parachain_rpc = Self { ext_client, api: Arc::new(api), - metadata, signer: Arc::new(RwLock::new(signer)), account_id, shutdown_tx, @@ -231,18 +225,15 @@ impl InterBtcParachain { /// # Arguments /// * `on_error` - callback for decoding errors, is not allowed to take too long pub async fn on_event_error(&self, on_error: E) -> Result<(), Error> { - // let sub = self.ext_client.rpc().subscribe_finalized_events().await?; - // // let decoder = EventsDecoder::::new((*self.metadata).clone()); - - // let mut sub = EventSubscription::<_, InterBtcRuntime, _>::new(self.ext_client.rpc(), sub); - // loop { - // match sub.next().await { - // Some(Err(err)) => on_error(err), // report error - // Some(Ok(_)) => {} // do nothing - // None => break Ok(()), // end of stream - // } - // } - Ok(()) + let mut sub = self.api.events().subscribe_finalized().await?; + + loop { + match sub.next().await { + Some(Err(err)) => on_error(err), // report error + Some(Ok(_)) => {} // do nothing + None => break Ok(()), // end of stream + } + } } /// Subscription service that should listen forever, only returns if the initial subscription @@ -263,50 +254,42 @@ impl InterBtcParachain { R: Future, E: Fn(SubxtError), { - // let sub = self.ext_client.rpc().subscribe_finalized_events().await?; - // sub.filter_event::(); - - // let (tx, mut rx) = futures::channel::mpsc::channel::(32); - - // // two tasks: one for event listening and one for callback calling - // futures::future::try_join( - // async move { - // let tx = &tx; - // while let Some(result) = sub.next().fuse().await { - // if let Ok(raw_event) = result { - // log::trace!("raw event: {:?}", raw_event); - // let decoded = T::decode(&mut &raw_event.data[..]); - // match decoded { - // Ok(event) => { - // log::trace!("decoded event: {:?}", event); - // // send the event to the other task - // if tx.clone().send(event).await.is_err() { - // break; - // } - // } - // Err(err) => { - // on_error(err.into()); - // } - // }; - // } - // } - // Result::<(), _>::Err(Error::ChannelClosed) - // }, - // async move { - // loop { - // // block until we receive an event from the other task - // match rx.next().fuse().await { - // Some(event) => { - // on_event(event).await; - // } - // None => { - // return Result::<(), _>::Err(Error::ChannelClosed); - // } - // } - // } - // }, - // ) - // .await?; + let mut sub = self.api.events().subscribe_finalized().await?.filter_events::<(T,)>(); + let (tx, mut rx) = futures::channel::mpsc::channel::(32); + + // two tasks: one for event listening and one for callback calling + futures::future::try_join( + async move { + let tx = &tx; + while let Some(result) = sub.next().fuse().await { + match result { + Ok(event_details) => { + let event = event_details.event; + log::trace!("event: {:?}", event); + if tx.clone().send(event).await.is_err() { + break; + } + } + Err(err) => on_error(err.into()), + } + } + Result::<(), _>::Err(Error::ChannelClosed) + }, + async move { + loop { + // block until we receive an event from the other task + match rx.next().fuse().await { + Some(event) => { + on_event(event).await; + } + None => { + return Result::<(), _>::Err(Error::ChannelClosed); + } + } + } + }, + ) + .await?; Ok(()) } From 6664c02027fa66d6575b1dec739395313815c206 Mon Sep 17 00:00:00 2001 From: Gregory Hill Date: Wed, 6 Apr 2022 16:24:18 +0100 Subject: [PATCH 04/12] fix: compile integration tests Signed-off-by: Gregory Hill --- runtime/client/src/lib.rs | 20 +++++++++++++------- runtime/src/integration/bitcoin_simulator.rs | 6 +++--- runtime/src/integration/mod.rs | 14 ++++++++------ runtime/src/lib.rs | 4 ++-- runtime/src/rpc.rs | 2 +- 5 files changed, 27 insertions(+), 19 deletions(-) diff --git a/runtime/client/src/lib.rs b/runtime/client/src/lib.rs index de85a2057..0ac98548a 100644 --- a/runtime/client/src/lib.rs +++ b/runtime/client/src/lib.rs @@ -1,4 +1,4 @@ -use async_std::task; +use async_std::{sync::Mutex, task}; use futures::{ channel::mpsc, future::{select, FutureExt}, @@ -19,6 +19,7 @@ use sc_service::{ ChainSpec, Configuration, KeepBlocks, RpcHandlers, RpcSession, TaskManager, }; pub use sp_keyring::AccountKeyring; +use std::sync::Arc; use thiserror::Error; /// Error thrown by the client. @@ -33,17 +34,20 @@ pub enum SubxtClientError { } /// Sending end. -pub struct Sender(mpsc::UnboundedSender); +#[derive(Clone)] +pub struct Sender(Arc>>); /// Receiving end -pub struct Receiver(mpsc::UnboundedReceiver); +#[derive(Clone)] +pub struct Receiver(Arc>>); #[async_trait] impl TransportSenderT for Sender { type Error = SubxtClientError; async fn send(&mut self, msg: String) -> Result<(), Self::Error> { - self.0.send(msg).await?; + let mut lock = self.0.lock().await; + lock.send(msg).await?; Ok(()) } } @@ -53,12 +57,14 @@ impl TransportReceiverT for Receiver { type Error = SubxtClientError; async fn receive(&mut self) -> Result { - let msg = self.0.next().await.expect("channel should be open"); + let mut lock = self.0.lock().await; + let msg = lock.next().await.expect("channel should be open"); Ok(msg) } } /// Client for an embedded substrate node. +#[derive(Clone)] pub struct SubxtClient { sender: Sender, receiver: Receiver, @@ -92,8 +98,8 @@ impl SubxtClient { ); Self { - sender: Sender(to_back), - receiver: Receiver(from_back), + sender: Sender(Arc::new(Mutex::new(to_back))), + receiver: Receiver(Arc::new(Mutex::new(from_back))), } } diff --git a/runtime/src/integration/bitcoin_simulator.rs b/runtime/src/integration/bitcoin_simulator.rs index 07c22eede..b3e03183f 100644 --- a/runtime/src/integration/bitcoin_simulator.rs +++ b/runtime/src/integration/bitcoin_simulator.rs @@ -26,7 +26,7 @@ use tokio::{ /// input uxto. #[derive(Clone)] pub struct MockBitcoinCore { - parachain_rpc: InterBtcParachain, + parachain_rpc: Arc, blocks: Arc>>, mempool: Arc>>, transaction_creation_lock: Arc>, @@ -42,7 +42,7 @@ impl MockBitcoinCore { /// Creates a new instance, and initializes parachain's btc-relay pub async fn new(parachain_rpc: InterBtcParachain) -> Self { let ret = Self { - parachain_rpc, + parachain_rpc: Arc::new(parachain_rpc), blocks: Arc::new(RwLock::new(vec![])), mempool: Arc::new(RwLock::new(vec![])), transaction_creation_lock: Arc::new(Mutex::new(())), @@ -81,7 +81,7 @@ impl MockBitcoinCore { /// Creates a new instance, but does not initializes parachain's btc-relay pub async fn new_uninitialized(parachain_rpc: InterBtcParachain) -> Self { Self { - parachain_rpc, + parachain_rpc: Arc::new(parachain_rpc), blocks: Arc::new(RwLock::new(vec![])), mempool: Arc::new(RwLock::new(vec![])), transaction_creation_lock: Arc::new(Mutex::new(())), diff --git a/runtime/src/integration/mod.rs b/runtime/src/integration/mod.rs index f7af953d0..38a4f29cd 100644 --- a/runtime/src/integration/mod.rs +++ b/runtime/src/integration/mod.rs @@ -12,7 +12,7 @@ use futures::{ future::{try_join, Either}, pin_mut, Future, FutureExt, SinkExt, StreamExt, }; -use std::time::Duration; +use std::{sync::Arc, time::Duration}; use subxt::Event; use subxt_client::{AccountKeyring, DatabaseSource, KeystoreConfig, Role, SubxtClientConfig, WasmExecutionMethod}; use tempdir::TempDir; @@ -87,13 +87,15 @@ pub async fn default_provider_client(key: AccountKeyring) -> (SubxtClient, TempD } /// Create a new parachain_rpc with the given keyring -pub async fn setup_provider(client: SubxtClient, key: AccountKeyring) -> InterBtcParachain { +pub async fn setup_provider(client: SubxtClient, key: AccountKeyring) -> Arc { let signer = InterBtcSigner::new(key.pair()); let (shutdown_tx, _) = tokio::sync::broadcast::channel(16); - InterBtcParachain::new(client, signer, shutdown_tx) - .await - .expect("Error creating parachain_rpc") + Arc::new( + InterBtcParachain::new(client, signer, shutdown_tx) + .await + .expect("Error creating parachain_rpc"), + ) } /// request, pay and execute an issue @@ -156,7 +158,7 @@ pub async fn get_required_vault_collateral_for_issue( } /// wait for an event to occur. After the specified error, this will panic. This returns the event. -pub async fn assert_event(duration: Duration, parachain_rpc: InterBtcParachain, f: F) -> T +pub async fn assert_event(duration: Duration, parachain_rpc: Arc, f: F) -> T where T: Event + Clone + std::fmt::Debug, F: Fn(T) -> bool, diff --git a/runtime/src/lib.rs b/runtime/src/lib.rs index b4b942eb5..86dda7ae6 100644 --- a/runtime/src/lib.rs +++ b/runtime/src/lib.rs @@ -10,8 +10,8 @@ pub mod types; #[cfg(test)] mod tests; -// #[cfg(all(feature = "testing-utils", feature = "standalone-metadata"))] -// pub mod integration; +#[cfg(all(feature = "testing-utils", feature = "standalone-metadata"))] +pub mod integration; use codec::{Decode, Encode}; use sp_std::marker::PhantomData; diff --git a/runtime/src/rpc.rs b/runtime/src/rpc.rs index f3eb4a954..dc9389213 100644 --- a/runtime/src/rpc.rs +++ b/runtime/src/rpc.rs @@ -344,7 +344,7 @@ impl InterBtcParachain { .tx() .tokens() .transfer(recipient.clone(), Token(DOT), 100) - .sign_and_submit(&signer.clone()) + .sign_and_submit_default(&signer.clone()) .await .unwrap(); From 6a017d0cc04c2df80ad3efc5458fc63e7e5fc48c Mon Sep 17 00:00:00 2001 From: Gregory Hill Date: Wed, 6 Apr 2022 19:59:44 +0100 Subject: [PATCH 05/12] chore: use interlay fork of subxt Signed-off-by: Gregory Hill --- Cargo.lock | 9 ++++++--- bitcoin/src/lib.rs | 2 +- runtime/Cargo.toml | 2 +- 3 files changed, 8 insertions(+), 5 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 3173cf04d..5edce39d7 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -10127,7 +10127,8 @@ checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601" [[package]] name = "subxt" -version = "0.19.0" +version = "0.20.0" +source = "git+https://github.com/interlay/subxt?rev=44373cbb8777e002eb2cc1e733afcdcd8b07008a#44373cbb8777e002eb2cc1e733afcdcd8b07008a" dependencies = [ "async-trait", "bitvec", @@ -10173,7 +10174,8 @@ dependencies = [ [[package]] name = "subxt-codegen" -version = "0.19.0" +version = "0.20.0" +source = "git+https://github.com/interlay/subxt?rev=44373cbb8777e002eb2cc1e733afcdcd8b07008a#44373cbb8777e002eb2cc1e733afcdcd8b07008a" dependencies = [ "async-trait", "darling", @@ -10190,7 +10192,8 @@ dependencies = [ [[package]] name = "subxt-macro" -version = "0.19.0" +version = "0.20.0" +source = "git+https://github.com/interlay/subxt?rev=44373cbb8777e002eb2cc1e733afcdcd8b07008a#44373cbb8777e002eb2cc1e733afcdcd8b07008a" dependencies = [ "async-trait", "darling", diff --git a/bitcoin/src/lib.rs b/bitcoin/src/lib.rs index 2dc12102b..1a0d625a3 100644 --- a/bitcoin/src/lib.rs +++ b/bitcoin/src/lib.rs @@ -912,7 +912,7 @@ impl TransactionExt for Transaction { } } -// https://github.com/gregdhill/interbtc/blob/cc5c16b28ef705e0774654dd94b813d9d35e12ec/crates/bitcoin/src/parser.rs#L277 +// https://github.com/interlay/interbtc/blob/cc5c16b28ef705e0774654dd94b813d9d35e12ec/crates/bitcoin/src/parser.rs#L277 fn parse_compact_uint(varint: &[u8]) -> Result<(u64, usize), Error> { match varint.get(0).ok_or(Error::ParsingError)? { 0xfd => { diff --git a/runtime/Cargo.toml b/runtime/Cargo.toml index 6c0edc633..4dcc3a662 100644 --- a/runtime/Cargo.toml +++ b/runtime/Cargo.toml @@ -40,7 +40,7 @@ frame-support = { git = "https://github.com/paritytech/substrate", branch = "pol # Subxt dependencies # https://github.com/interlay/subxt/tree/polkadot-v0.9.18 -subxt = { package = "subxt", path = "../../../parity/subxt/subxt" } +subxt = { package = "subxt", git = "https://github.com/interlay/subxt", rev = "44373cbb8777e002eb2cc1e733afcdcd8b07008a" } subxt-client = { package = "subxt-client", path = "./client" } jsonrpsee = { version = "0.9.0", features = ["macros", "jsonrpsee-types", "client", "jsonrpsee-ws-client", "jsonrpsee-client-transport"] } From ae9fc5dd56e6646c59c2397ac00b06c1bc1fa929 Mon Sep 17 00:00:00 2001 From: Gregory Hill Date: Thu, 7 Apr 2022 11:28:51 +0100 Subject: [PATCH 06/12] refactor: derive Clone for InterBtcParachain Signed-off-by: Gregory Hill --- runtime/src/integration/mod.rs | 14 ++++++-------- runtime/src/rpc.rs | 5 +++-- service/src/lib.rs | 2 +- 3 files changed, 10 insertions(+), 11 deletions(-) diff --git a/runtime/src/integration/mod.rs b/runtime/src/integration/mod.rs index 38a4f29cd..f7af953d0 100644 --- a/runtime/src/integration/mod.rs +++ b/runtime/src/integration/mod.rs @@ -12,7 +12,7 @@ use futures::{ future::{try_join, Either}, pin_mut, Future, FutureExt, SinkExt, StreamExt, }; -use std::{sync::Arc, time::Duration}; +use std::time::Duration; use subxt::Event; use subxt_client::{AccountKeyring, DatabaseSource, KeystoreConfig, Role, SubxtClientConfig, WasmExecutionMethod}; use tempdir::TempDir; @@ -87,15 +87,13 @@ pub async fn default_provider_client(key: AccountKeyring) -> (SubxtClient, TempD } /// Create a new parachain_rpc with the given keyring -pub async fn setup_provider(client: SubxtClient, key: AccountKeyring) -> Arc { +pub async fn setup_provider(client: SubxtClient, key: AccountKeyring) -> InterBtcParachain { let signer = InterBtcSigner::new(key.pair()); let (shutdown_tx, _) = tokio::sync::broadcast::channel(16); - Arc::new( - InterBtcParachain::new(client, signer, shutdown_tx) - .await - .expect("Error creating parachain_rpc"), - ) + InterBtcParachain::new(client, signer, shutdown_tx) + .await + .expect("Error creating parachain_rpc") } /// request, pay and execute an issue @@ -158,7 +156,7 @@ pub async fn get_required_vault_collateral_for_issue( } /// wait for an event to occur. After the specified error, this will panic. This returns the event. -pub async fn assert_event(duration: Duration, parachain_rpc: Arc, f: F) -> T +pub async fn assert_event(duration: Duration, parachain_rpc: InterBtcParachain, f: F) -> T where T: Event + Clone + std::fmt::Debug, F: Fn(T) -> bool, diff --git a/runtime/src/rpc.rs b/runtime/src/rpc.rs index dc9389213..a3733485d 100644 --- a/runtime/src/rpc.rs +++ b/runtime/src/rpc.rs @@ -40,8 +40,9 @@ cfg_if::cfg_if! { type RuntimeApi = metadata::RuntimeApi>; pub(crate) type ShutdownSender = tokio::sync::broadcast::Sender>; +#[derive(Clone)] pub struct InterBtcParachain { - ext_client: SubxtClient, + ext_client: Arc>, signer: Arc>, account_id: AccountId, api: Arc, @@ -78,7 +79,7 @@ impl InterBtcParachain { let wrapped_currency_id = currency_constants.get_wrapped_currency_id()?; let parachain_rpc = Self { - ext_client, + ext_client: Arc::new(ext_client), api: Arc::new(api), signer: Arc::new(RwLock::new(signer)), account_id, diff --git a/service/src/lib.rs b/service/src/lib.rs index 4c5e53bc6..7d39a05c3 100644 --- a/service/src/lib.rs +++ b/service/src/lib.rs @@ -3,7 +3,7 @@ use bitcoin::{cli::BitcoinOpts as BitcoinConfig, BitcoinCore, BitcoinCoreApi, Er use futures::{future::Either, Future, FutureExt}; use runtime::{ cli::ConnectionOpts as ParachainConfig, CurrencyId, CurrencyIdExt, CurrencyInfo, Error as RuntimeError, - InterBtcParachain as BtcParachain, InterBtcSigner, Signer, Ss58Codec, VaultId, + InterBtcParachain as BtcParachain, InterBtcSigner, Ss58Codec, VaultId, }; use std::marker::PhantomData; From 621983c661d7564abfa527e8e682cc0da55e7a20 Mon Sep 17 00:00:00 2001 From: Gregory Hill Date: Thu, 7 Apr 2022 13:30:51 +0100 Subject: [PATCH 07/12] chore: regenerate metadata, set runtime_cache_size to 2 and use PolkadotExtrinsicParams Signed-off-by: Gregory Hill --- runtime/client/src/lib.rs | 2 +- runtime/metadata-parachain-interlay.scale | Bin 0 -> 198723 bytes runtime/metadata-parachain-kintsugi.scale | Bin 189796 -> 190279 bytes runtime/metadata-parachain-testnet.scale | Bin 198233 -> 198716 bytes runtime/metadata-standalone.scale | Bin 140211 -> 140402 bytes runtime/src/rpc.rs | 4 ++-- runtime/src/tests.rs | 1 + 7 files changed, 4 insertions(+), 3 deletions(-) create mode 100644 runtime/metadata-parachain-interlay.scale diff --git a/runtime/client/src/lib.rs b/runtime/client/src/lib.rs index 0ac98548a..43cfad89a 100644 --- a/runtime/client/src/lib.rs +++ b/runtime/client/src/lib.rs @@ -236,7 +236,7 @@ impl SubxtClientConfig { wasm_runtime_overrides: Default::default(), rpc_max_payload: Default::default(), ws_max_out_buffer_capacity: Default::default(), - runtime_cache_size: Default::default(), + runtime_cache_size: 2, }; log::info!("{}", service_config.impl_name); diff --git a/runtime/metadata-parachain-interlay.scale b/runtime/metadata-parachain-interlay.scale new file mode 100644 index 0000000000000000000000000000000000000000..418bc4be6bb45494b4625d5cd33dd078a30d3bc4 GIT binary patch literal 198723 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 z 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 B`yT)R literal 0 HcmV?d00001 diff --git a/runtime/metadata-parachain-kintsugi.scale b/runtime/metadata-parachain-kintsugi.scale index c6f618c3ef5804369a036b6095bc1118c60dd2b4..ad578fc43ea0454a7c1969505630beea9d84c498 100644 GIT binary patch delta 5728 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 diff --git a/runtime/metadata-parachain-testnet.scale b/runtime/metadata-parachain-testnet.scale index f6b5d32dd3c5762fec187c8980177800df96cd49..d099f4dfb413f644c319a9a5fc816c581cb55021 100644 GIT binary patch delta 5822 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 delta 5450 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 Q)j??+FU}YdS%Q!EF|Vq98iUQkL+{n z=V7MtiA|gx`OG0!h8>?`EwS#((>-nOw}}Qr^YDjX<{v{}I8>D-=XQ%CoShNPq*%<$ zqCBL+%X*$q9W-RVu3!g-%~leyR-% L5Dm(0*u4G*@4KH0 delta 276 zcmXBK%}N4M7zW_;mV)G8+88D-h9HUp*DZt$DVjwRlbFyV20hl$I7iN$5ex!RgIWiD zZAvd8D44AqsoUrd!Ye3f@$8=YSLFRO(*M9+b~S%w^0w%5-O@W!bcAO)1vaHr65C-@ z2z3!WXOZTp)BXc;!R!`4i>cj;sETXudWPruyvbs8GeBLBGp8bImhY%DTV0*{t(M)e zxvTy!OVE6PEiK84hTF9qyIJ<7mA6DfKeVs9xOdMk6=vE5609b$tpg0`^2 zX!?YVrm>; +type RuntimeApi = metadata::RuntimeApi>; pub(crate) type ShutdownSender = tokio::sync::broadcast::Sender>; #[derive(Clone)] diff --git a/runtime/src/tests.rs b/runtime/src/tests.rs index 02429a7e8..99f455219 100644 --- a/runtime/src/tests.rs +++ b/runtime/src/tests.rs @@ -40,6 +40,7 @@ async fn set_exchange_rate(client: SubxtClient) { #[tokio::test(flavor = "multi_thread")] async fn test_getters() { let (client, _tmp_dir) = default_provider_client(AccountKeyring::Alice).await; + println!("got client"); let parachain_rpc = setup_provider(client.clone(), AccountKeyring::Alice).await; tokio::join!( From db4321789a6040990afb08a709bae4fbd9fdded6 Mon Sep 17 00:00:00 2001 From: Gregory Hill Date: Fri, 8 Apr 2022 10:43:19 +0100 Subject: [PATCH 08/12] chore: use parachain master, upgrade jsonrpsee to 0.10.1 Signed-off-by: Gregory Hill --- Cargo.lock | 135 ++++++++++++---------- bitcoin/Cargo.toml | 4 +- faucet/src/http.rs | 4 +- runtime/Cargo.toml | 22 ++-- runtime/client/Cargo.toml | 6 +- runtime/metadata-parachain-interlay.scale | Bin 198723 -> 198715 bytes runtime/metadata-parachain-kintsugi.scale | Bin 190279 -> 190271 bytes runtime/metadata-parachain-testnet.scale | Bin 198716 -> 198708 bytes runtime/metadata-standalone.scale | Bin 140402 -> 140394 bytes runtime/src/error.rs | 90 ++++----------- runtime/src/lib.rs | 2 +- runtime/src/tests.rs | 6 +- runtime/src/types.rs | 2 +- vault/src/cancellation.rs | 4 +- vault/src/collateral.rs | 4 +- vault/src/execution.rs | 4 +- vault/src/replace.rs | 4 +- vault/src/vaults.rs | 4 +- vault/tests/vault_integration_tests.rs | 2 +- 19 files changed, 133 insertions(+), 160 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 5edce39d7..fbb006a3d 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -85,7 +85,7 @@ dependencies = [ [[package]] name = "annuity" version = "1.0.0" -source = "git+https://github.com/gregdhill/interbtc?rev=278d379087bc39932b328bce9f497a20c2403c5b#278d379087bc39932b328bce9f497a20c2403c5b" +source = "git+https://github.com/interlay/interbtc?rev=78a0fd9a610733e6b1a96ad5d03d509bc66764b6#78a0fd9a610733e6b1a96ad5d03d509bc66764b6" dependencies = [ "frame-benchmarking", "frame-support", @@ -525,7 +525,7 @@ dependencies = [ [[package]] name = "bitcoin" version = "1.2.0" -source = "git+https://github.com/gregdhill/interbtc?rev=278d379087bc39932b328bce9f497a20c2403c5b#278d379087bc39932b328bce9f497a20c2403c5b" +source = "git+https://github.com/interlay/interbtc?rev=78a0fd9a610733e6b1a96ad5d03d509bc66764b6#78a0fd9a610733e6b1a96ad5d03d509bc66764b6" dependencies = [ "bitcoin_hashes 0.7.6", "frame-support", @@ -747,7 +747,7 @@ checksum = "bd769563b4ea2953e2825c9e6b7470a5f55f67e0be00030bf3e390a2a6071f64" [[package]] name = "btc-relay" version = "1.2.0" -source = "git+https://github.com/gregdhill/interbtc?rev=278d379087bc39932b328bce9f497a20c2403c5b#278d379087bc39932b328bce9f497a20c2403c5b" +source = "git+https://github.com/interlay/interbtc?rev=78a0fd9a610733e6b1a96ad5d03d509bc66764b6#78a0fd9a610733e6b1a96ad5d03d509bc66764b6" dependencies = [ "bitcoin 1.2.0", "frame-benchmarking", @@ -1300,7 +1300,7 @@ dependencies = [ [[package]] name = "currency" version = "1.2.0" -source = "git+https://github.com/gregdhill/interbtc?rev=278d379087bc39932b328bce9f497a20c2403c5b#278d379087bc39932b328bce9f497a20c2403c5b" +source = "git+https://github.com/interlay/interbtc?rev=78a0fd9a610733e6b1a96ad5d03d509bc66764b6#78a0fd9a610733e6b1a96ad5d03d509bc66764b6" dependencies = [ "frame-support", "frame-system", @@ -1406,7 +1406,7 @@ dependencies = [ [[package]] name = "democracy" version = "1.2.0" -source = "git+https://github.com/gregdhill/interbtc?rev=278d379087bc39932b328bce9f497a20c2403c5b#278d379087bc39932b328bce9f497a20c2403c5b" +source = "git+https://github.com/interlay/interbtc?rev=78a0fd9a610733e6b1a96ad5d03d509bc66764b6#78a0fd9a610733e6b1a96ad5d03d509bc66764b6" dependencies = [ "frame-benchmarking", "frame-support", @@ -1727,7 +1727,7 @@ dependencies = [ [[package]] name = "escrow" version = "1.0.0" -source = "git+https://github.com/gregdhill/interbtc?rev=278d379087bc39932b328bce9f497a20c2403c5b#278d379087bc39932b328bce9f497a20c2403c5b" +source = "git+https://github.com/interlay/interbtc?rev=78a0fd9a610733e6b1a96ad5d03d509bc66764b6#78a0fd9a610733e6b1a96ad5d03d509bc66764b6" dependencies = [ "frame-benchmarking", "frame-support", @@ -1829,7 +1829,7 @@ dependencies = [ [[package]] name = "fee" version = "1.2.0" -source = "git+https://github.com/gregdhill/interbtc?rev=278d379087bc39932b328bce9f497a20c2403c5b#278d379087bc39932b328bce9f497a20c2403c5b" +source = "git+https://github.com/interlay/interbtc?rev=78a0fd9a610733e6b1a96ad5d03d509bc66764b6#78a0fd9a610733e6b1a96ad5d03d509bc66764b6" dependencies = [ "currency", "frame-benchmarking", @@ -2491,7 +2491,7 @@ dependencies = [ "indexmap", "slab", "tokio", - "tokio-util", + "tokio-util 0.6.9", "tracing", ] @@ -2934,7 +2934,7 @@ dependencies = [ [[package]] name = "interbtc-primitives" version = "1.2.0" -source = "git+https://github.com/gregdhill/interbtc?rev=278d379087bc39932b328bce9f497a20c2403c5b#278d379087bc39932b328bce9f497a20c2403c5b" +source = "git+https://github.com/interlay/interbtc?rev=78a0fd9a610733e6b1a96ad5d03d509bc66764b6#78a0fd9a610733e6b1a96ad5d03d509bc66764b6" dependencies = [ "bitcoin 1.2.0", "bstringify", @@ -2949,7 +2949,7 @@ dependencies = [ [[package]] name = "interbtc-rpc" version = "1.2.0" -source = "git+https://github.com/gregdhill/interbtc?rev=278d379087bc39932b328bce9f497a20c2403c5b#278d379087bc39932b328bce9f497a20c2403c5b" +source = "git+https://github.com/interlay/interbtc?rev=78a0fd9a610733e6b1a96ad5d03d509bc66764b6#78a0fd9a610733e6b1a96ad5d03d509bc66764b6" dependencies = [ "interbtc-primitives", "jsonrpc-core", @@ -2977,7 +2977,7 @@ dependencies = [ [[package]] name = "interbtc-runtime-standalone" version = "1.2.0" -source = "git+https://github.com/gregdhill/interbtc?rev=278d379087bc39932b328bce9f497a20c2403c5b#278d379087bc39932b328bce9f497a20c2403c5b" +source = "git+https://github.com/interlay/interbtc?rev=78a0fd9a610733e6b1a96ad5d03d509bc66764b6#78a0fd9a610733e6b1a96ad5d03d509bc66764b6" dependencies = [ "annuity", "btc-relay", @@ -3052,7 +3052,7 @@ dependencies = [ [[package]] name = "interbtc-standalone" version = "1.2.0" -source = "git+https://github.com/gregdhill/interbtc?rev=278d379087bc39932b328bce9f497a20c2403c5b#278d379087bc39932b328bce9f497a20c2403c5b" +source = "git+https://github.com/interlay/interbtc?rev=78a0fd9a610733e6b1a96ad5d03d509bc66764b6#78a0fd9a610733e6b1a96ad5d03d509bc66764b6" dependencies = [ "bitcoin 1.2.0", "clap", @@ -3139,7 +3139,7 @@ checksum = "35e70ee094dc02fd9c13fdad4940090f22dbd6ac7c9e7094a46cf0232a50bc7c" [[package]] name = "issue" version = "1.2.0" -source = "git+https://github.com/gregdhill/interbtc?rev=278d379087bc39932b328bce9f497a20c2403c5b#278d379087bc39932b328bce9f497a20c2403c5b" +source = "git+https://github.com/interlay/interbtc?rev=78a0fd9a610733e6b1a96ad5d03d509bc66764b6#78a0fd9a610733e6b1a96ad5d03d509bc66764b6" dependencies = [ "bitcoin 1.2.0", "btc-relay", @@ -3333,7 +3333,7 @@ dependencies = [ "log 0.4.16", "tokio", "tokio-stream", - "tokio-util", + "tokio-util 0.6.9", "unicase 2.6.0", ] @@ -3354,9 +3354,9 @@ dependencies = [ [[package]] name = "jsonrpsee" -version = "0.9.0" +version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0d0b8cc1959f8c05256ace093b2317482da9127f1d9227564f47e7e6bf9bda8" +checksum = "91dc760c341fa81173f9a434931aaf32baad5552b0230cc6c93e8fb7eaad4c19" dependencies = [ "jsonrpsee-client-transport", "jsonrpsee-core", @@ -3368,9 +3368,9 @@ dependencies = [ [[package]] name = "jsonrpsee-client-transport" -version = "0.9.0" +version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa370c2c717d798c3c0a315ae3f0a707a388c6963c11f9da7dbbe1d3f7392f5f" +checksum = "765f7a36d5087f74e3b3b47805c2188fef8eb54afcb587b078d9f8ebfe9c7220" dependencies = [ "futures 0.3.21", "http", @@ -3382,16 +3382,16 @@ dependencies = [ "thiserror", "tokio", "tokio-rustls 0.23.3", - "tokio-util", + "tokio-util 0.7.1", "tracing", "webpki-roots 0.22.2", ] [[package]] name = "jsonrpsee-core" -version = "0.9.0" +version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22abc3274b265dcefe2e26c4beecf9fda4fffa48cf94930443a6c73678f020d5" +checksum = "82ef77ecd20c2254d54f5da8c0738eacca61e6b6511268a8f2753e3148c6c706" dependencies = [ "anyhow", "arrayvec 0.7.2", @@ -3412,9 +3412,9 @@ dependencies = [ [[package]] name = "jsonrpsee-http-client" -version = "0.9.0" +version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d31b837273d09dd80051eefa57d337769dff6c3266108c43a3544ac7ffed9d68" +checksum = "92709e0b8255691f4df954a0176b1cbc3312f151e7ed2e643812e8bd121f1d1c" dependencies = [ "async-trait", "hyper 0.14.17", @@ -3431,9 +3431,9 @@ dependencies = [ [[package]] name = "jsonrpsee-proc-macros" -version = "0.9.0" +version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "63e171d8071079c8ccdce1b4ab34411c5afa6158d57db7963311ad3c6d073cb1" +checksum = "b7291c72805bc7d413b457e50d8ef3e87aa554da65ecbbc278abb7dfc283e7f0" dependencies = [ "proc-macro-crate 1.1.3", "proc-macro2", @@ -3443,9 +3443,9 @@ dependencies = [ [[package]] name = "jsonrpsee-types" -version = "0.9.0" +version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f4c45d2e2aa1db4c7d7d7dbaabc10a5b5258d99cd9d42fbfd5260b76f80c324" +checksum = "38b6aa52f322cbf20c762407629b8300f39bcc0cf0619840d9252a2f65fd2dd9" dependencies = [ "anyhow", "beef", @@ -3457,9 +3457,9 @@ dependencies = [ [[package]] name = "jsonrpsee-ws-client" -version = "0.9.0" +version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "31b58983485b2b626c276f1eb367d62dae82132451b281072a7bfa536a33ddf3" +checksum = "dd66d18bab78d956df24dd0d2e41e4c00afbb818fda94a98264bdd12ce8506ac" dependencies = [ "jsonrpsee-client-transport", "jsonrpsee-core", @@ -4510,7 +4510,7 @@ dependencies = [ [[package]] name = "module-btc-relay-rpc" version = "1.2.0" -source = "git+https://github.com/gregdhill/interbtc?rev=278d379087bc39932b328bce9f497a20c2403c5b#278d379087bc39932b328bce9f497a20c2403c5b" +source = "git+https://github.com/interlay/interbtc?rev=78a0fd9a610733e6b1a96ad5d03d509bc66764b6#78a0fd9a610733e6b1a96ad5d03d509bc66764b6" dependencies = [ "jsonrpc-core", "jsonrpc-core-client", @@ -4525,7 +4525,7 @@ dependencies = [ [[package]] name = "module-btc-relay-rpc-runtime-api" version = "1.2.0" -source = "git+https://github.com/gregdhill/interbtc?rev=278d379087bc39932b328bce9f497a20c2403c5b#278d379087bc39932b328bce9f497a20c2403c5b" +source = "git+https://github.com/interlay/interbtc?rev=78a0fd9a610733e6b1a96ad5d03d509bc66764b6#78a0fd9a610733e6b1a96ad5d03d509bc66764b6" dependencies = [ "frame-support", "parity-scale-codec", @@ -4536,7 +4536,7 @@ dependencies = [ [[package]] name = "module-issue-rpc" version = "1.2.0" -source = "git+https://github.com/gregdhill/interbtc?rev=278d379087bc39932b328bce9f497a20c2403c5b#278d379087bc39932b328bce9f497a20c2403c5b" +source = "git+https://github.com/interlay/interbtc?rev=78a0fd9a610733e6b1a96ad5d03d509bc66764b6#78a0fd9a610733e6b1a96ad5d03d509bc66764b6" dependencies = [ "jsonrpc-core", "jsonrpc-core-client", @@ -4551,7 +4551,7 @@ dependencies = [ [[package]] name = "module-issue-rpc-runtime-api" version = "1.2.0" -source = "git+https://github.com/gregdhill/interbtc?rev=278d379087bc39932b328bce9f497a20c2403c5b#278d379087bc39932b328bce9f497a20c2403c5b" +source = "git+https://github.com/interlay/interbtc?rev=78a0fd9a610733e6b1a96ad5d03d509bc66764b6#78a0fd9a610733e6b1a96ad5d03d509bc66764b6" dependencies = [ "frame-support", "parity-scale-codec", @@ -4562,7 +4562,7 @@ dependencies = [ [[package]] name = "module-oracle-rpc" version = "1.2.0" -source = "git+https://github.com/gregdhill/interbtc?rev=278d379087bc39932b328bce9f497a20c2403c5b#278d379087bc39932b328bce9f497a20c2403c5b" +source = "git+https://github.com/interlay/interbtc?rev=78a0fd9a610733e6b1a96ad5d03d509bc66764b6#78a0fd9a610733e6b1a96ad5d03d509bc66764b6" dependencies = [ "jsonrpc-core", "jsonrpc-core-client", @@ -4577,7 +4577,7 @@ dependencies = [ [[package]] name = "module-oracle-rpc-runtime-api" version = "1.2.0" -source = "git+https://github.com/gregdhill/interbtc?rev=278d379087bc39932b328bce9f497a20c2403c5b#278d379087bc39932b328bce9f497a20c2403c5b" +source = "git+https://github.com/interlay/interbtc?rev=78a0fd9a610733e6b1a96ad5d03d509bc66764b6#78a0fd9a610733e6b1a96ad5d03d509bc66764b6" dependencies = [ "frame-support", "parity-scale-codec", @@ -4589,7 +4589,7 @@ dependencies = [ [[package]] name = "module-redeem-rpc" version = "1.2.0" -source = "git+https://github.com/gregdhill/interbtc?rev=278d379087bc39932b328bce9f497a20c2403c5b#278d379087bc39932b328bce9f497a20c2403c5b" +source = "git+https://github.com/interlay/interbtc?rev=78a0fd9a610733e6b1a96ad5d03d509bc66764b6#78a0fd9a610733e6b1a96ad5d03d509bc66764b6" dependencies = [ "jsonrpc-core", "jsonrpc-core-client", @@ -4604,7 +4604,7 @@ dependencies = [ [[package]] name = "module-redeem-rpc-runtime-api" version = "1.2.0" -source = "git+https://github.com/gregdhill/interbtc?rev=278d379087bc39932b328bce9f497a20c2403c5b#278d379087bc39932b328bce9f497a20c2403c5b" +source = "git+https://github.com/interlay/interbtc?rev=78a0fd9a610733e6b1a96ad5d03d509bc66764b6#78a0fd9a610733e6b1a96ad5d03d509bc66764b6" dependencies = [ "frame-support", "parity-scale-codec", @@ -4615,7 +4615,7 @@ dependencies = [ [[package]] name = "module-refund-rpc" version = "1.2.0" -source = "git+https://github.com/gregdhill/interbtc?rev=278d379087bc39932b328bce9f497a20c2403c5b#278d379087bc39932b328bce9f497a20c2403c5b" +source = "git+https://github.com/interlay/interbtc?rev=78a0fd9a610733e6b1a96ad5d03d509bc66764b6#78a0fd9a610733e6b1a96ad5d03d509bc66764b6" dependencies = [ "jsonrpc-core", "jsonrpc-core-client", @@ -4630,7 +4630,7 @@ dependencies = [ [[package]] name = "module-refund-rpc-runtime-api" version = "1.2.0" -source = "git+https://github.com/gregdhill/interbtc?rev=278d379087bc39932b328bce9f497a20c2403c5b#278d379087bc39932b328bce9f497a20c2403c5b" +source = "git+https://github.com/interlay/interbtc?rev=78a0fd9a610733e6b1a96ad5d03d509bc66764b6#78a0fd9a610733e6b1a96ad5d03d509bc66764b6" dependencies = [ "frame-support", "parity-scale-codec", @@ -4641,7 +4641,7 @@ dependencies = [ [[package]] name = "module-relay-rpc" version = "1.2.0" -source = "git+https://github.com/gregdhill/interbtc?rev=278d379087bc39932b328bce9f497a20c2403c5b#278d379087bc39932b328bce9f497a20c2403c5b" +source = "git+https://github.com/interlay/interbtc?rev=78a0fd9a610733e6b1a96ad5d03d509bc66764b6#78a0fd9a610733e6b1a96ad5d03d509bc66764b6" dependencies = [ "jsonrpc-core", "jsonrpc-core-client", @@ -4656,7 +4656,7 @@ dependencies = [ [[package]] name = "module-relay-rpc-runtime-api" version = "1.2.0" -source = "git+https://github.com/gregdhill/interbtc?rev=278d379087bc39932b328bce9f497a20c2403c5b#278d379087bc39932b328bce9f497a20c2403c5b" +source = "git+https://github.com/interlay/interbtc?rev=78a0fd9a610733e6b1a96ad5d03d509bc66764b6#78a0fd9a610733e6b1a96ad5d03d509bc66764b6" dependencies = [ "frame-support", "parity-scale-codec", @@ -4667,7 +4667,7 @@ dependencies = [ [[package]] name = "module-replace-rpc" version = "1.2.0" -source = "git+https://github.com/gregdhill/interbtc?rev=278d379087bc39932b328bce9f497a20c2403c5b#278d379087bc39932b328bce9f497a20c2403c5b" +source = "git+https://github.com/interlay/interbtc?rev=78a0fd9a610733e6b1a96ad5d03d509bc66764b6#78a0fd9a610733e6b1a96ad5d03d509bc66764b6" dependencies = [ "jsonrpc-core", "jsonrpc-core-client", @@ -4682,7 +4682,7 @@ dependencies = [ [[package]] name = "module-replace-rpc-runtime-api" version = "1.2.0" -source = "git+https://github.com/gregdhill/interbtc?rev=278d379087bc39932b328bce9f497a20c2403c5b#278d379087bc39932b328bce9f497a20c2403c5b" +source = "git+https://github.com/interlay/interbtc?rev=78a0fd9a610733e6b1a96ad5d03d509bc66764b6#78a0fd9a610733e6b1a96ad5d03d509bc66764b6" dependencies = [ "frame-support", "parity-scale-codec", @@ -4693,7 +4693,7 @@ dependencies = [ [[package]] name = "module-vault-registry-rpc" version = "0.3.0" -source = "git+https://github.com/gregdhill/interbtc?rev=278d379087bc39932b328bce9f497a20c2403c5b#278d379087bc39932b328bce9f497a20c2403c5b" +source = "git+https://github.com/interlay/interbtc?rev=78a0fd9a610733e6b1a96ad5d03d509bc66764b6#78a0fd9a610733e6b1a96ad5d03d509bc66764b6" dependencies = [ "jsonrpc-core", "jsonrpc-core-client", @@ -4709,7 +4709,7 @@ dependencies = [ [[package]] name = "module-vault-registry-rpc-runtime-api" version = "0.3.0" -source = "git+https://github.com/gregdhill/interbtc?rev=278d379087bc39932b328bce9f497a20c2403c5b#278d379087bc39932b328bce9f497a20c2403c5b" +source = "git+https://github.com/interlay/interbtc?rev=78a0fd9a610733e6b1a96ad5d03d509bc66764b6#78a0fd9a610733e6b1a96ad5d03d509bc66764b6" dependencies = [ "frame-support", "module-oracle-rpc-runtime-api", @@ -5129,7 +5129,7 @@ dependencies = [ [[package]] name = "nomination" version = "0.5.0" -source = "git+https://github.com/gregdhill/interbtc?rev=278d379087bc39932b328bce9f497a20c2403c5b#278d379087bc39932b328bce9f497a20c2403c5b" +source = "git+https://github.com/interlay/interbtc?rev=78a0fd9a610733e6b1a96ad5d03d509bc66764b6#78a0fd9a610733e6b1a96ad5d03d509bc66764b6" dependencies = [ "currency", "fee", @@ -5404,7 +5404,7 @@ dependencies = [ [[package]] name = "oracle" version = "1.2.0" -source = "git+https://github.com/gregdhill/interbtc?rev=278d379087bc39932b328bce9f497a20c2403c5b#278d379087bc39932b328bce9f497a20c2403c5b" +source = "git+https://github.com/interlay/interbtc?rev=78a0fd9a610733e6b1a96ad5d03d509bc66764b6#78a0fd9a610733e6b1a96ad5d03d509bc66764b6" dependencies = [ "currency", "frame-benchmarking", @@ -7234,7 +7234,7 @@ dependencies = [ [[package]] name = "redeem" version = "1.2.0" -source = "git+https://github.com/gregdhill/interbtc?rev=278d379087bc39932b328bce9f497a20c2403c5b#278d379087bc39932b328bce9f497a20c2403c5b" +source = "git+https://github.com/interlay/interbtc?rev=78a0fd9a610733e6b1a96ad5d03d509bc66764b6#78a0fd9a610733e6b1a96ad5d03d509bc66764b6" dependencies = [ "bitcoin 1.2.0", "btc-relay", @@ -7303,7 +7303,7 @@ dependencies = [ [[package]] name = "refund" version = "1.2.0" -source = "git+https://github.com/gregdhill/interbtc?rev=278d379087bc39932b328bce9f497a20c2403c5b#278d379087bc39932b328bce9f497a20c2403c5b" +source = "git+https://github.com/interlay/interbtc?rev=78a0fd9a610733e6b1a96ad5d03d509bc66764b6#78a0fd9a610733e6b1a96ad5d03d509bc66764b6" dependencies = [ "bitcoin 1.2.0", "btc-relay", @@ -7381,7 +7381,7 @@ dependencies = [ [[package]] name = "relay" version = "1.2.0" -source = "git+https://github.com/gregdhill/interbtc?rev=278d379087bc39932b328bce9f497a20c2403c5b#278d379087bc39932b328bce9f497a20c2403c5b" +source = "git+https://github.com/interlay/interbtc?rev=78a0fd9a610733e6b1a96ad5d03d509bc66764b6#78a0fd9a610733e6b1a96ad5d03d509bc66764b6" dependencies = [ "bitcoin 1.2.0", "btc-relay", @@ -7422,7 +7422,7 @@ dependencies = [ [[package]] name = "replace" version = "1.2.0" -source = "git+https://github.com/gregdhill/interbtc?rev=278d379087bc39932b328bce9f497a20c2403c5b#278d379087bc39932b328bce9f497a20c2403c5b" +source = "git+https://github.com/interlay/interbtc?rev=78a0fd9a610733e6b1a96ad5d03d509bc66764b6#78a0fd9a610733e6b1a96ad5d03d509bc66764b6" dependencies = [ "bitcoin 1.2.0", "btc-relay", @@ -7505,7 +7505,7 @@ checksum = "8c31b5c4033f8fdde8700e4657be2c497e7288f01515be52168c631e2e4d4086" [[package]] name = "reward" version = "1.2.0" -source = "git+https://github.com/gregdhill/interbtc?rev=278d379087bc39932b328bce9f497a20c2403c5b#278d379087bc39932b328bce9f497a20c2403c5b" +source = "git+https://github.com/interlay/interbtc?rev=78a0fd9a610733e6b1a96ad5d03d509bc66764b6#78a0fd9a610733e6b1a96ad5d03d509bc66764b6" dependencies = [ "frame-benchmarking", "frame-support", @@ -8851,7 +8851,7 @@ dependencies = [ [[package]] name = "security" version = "1.2.0" -source = "git+https://github.com/gregdhill/interbtc?rev=278d379087bc39932b328bce9f497a20c2403c5b#278d379087bc39932b328bce9f497a20c2403c5b" +source = "git+https://github.com/interlay/interbtc?rev=78a0fd9a610733e6b1a96ad5d03d509bc66764b6#78a0fd9a610733e6b1a96ad5d03d509bc66764b6" dependencies = [ "frame-support", "frame-system", @@ -9984,7 +9984,7 @@ checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" [[package]] name = "staking" version = "1.2.0" -source = "git+https://github.com/gregdhill/interbtc?rev=278d379087bc39932b328bce9f497a20c2403c5b#278d379087bc39932b328bce9f497a20c2403c5b" +source = "git+https://github.com/interlay/interbtc?rev=78a0fd9a610733e6b1a96ad5d03d509bc66764b6#78a0fd9a610733e6b1a96ad5d03d509bc66764b6" dependencies = [ "frame-benchmarking", "frame-support", @@ -10128,7 +10128,7 @@ checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601" [[package]] name = "subxt" version = "0.20.0" -source = "git+https://github.com/interlay/subxt?rev=44373cbb8777e002eb2cc1e733afcdcd8b07008a#44373cbb8777e002eb2cc1e733afcdcd8b07008a" +source = "git+https://github.com/interlay/subxt?rev=344e44c3729adcb945b937d6703212e7ae41da50#344e44c3729adcb945b937d6703212e7ae41da50" dependencies = [ "async-trait", "bitvec", @@ -10175,7 +10175,7 @@ dependencies = [ [[package]] name = "subxt-codegen" version = "0.20.0" -source = "git+https://github.com/interlay/subxt?rev=44373cbb8777e002eb2cc1e733afcdcd8b07008a#44373cbb8777e002eb2cc1e733afcdcd8b07008a" +source = "git+https://github.com/interlay/subxt?rev=344e44c3729adcb945b937d6703212e7ae41da50#344e44c3729adcb945b937d6703212e7ae41da50" dependencies = [ "async-trait", "darling", @@ -10193,7 +10193,7 @@ dependencies = [ [[package]] name = "subxt-macro" version = "0.20.0" -source = "git+https://github.com/interlay/subxt?rev=44373cbb8777e002eb2cc1e733afcdcd8b07008a#44373cbb8777e002eb2cc1e733afcdcd8b07008a" +source = "git+https://github.com/interlay/subxt?rev=344e44c3729adcb945b937d6703212e7ae41da50#344e44c3729adcb945b937d6703212e7ae41da50" dependencies = [ "async-trait", "darling", @@ -10212,7 +10212,7 @@ dependencies = [ [[package]] name = "supply" version = "1.2.0" -source = "git+https://github.com/gregdhill/interbtc?rev=278d379087bc39932b328bce9f497a20c2403c5b#278d379087bc39932b328bce9f497a20c2403c5b" +source = "git+https://github.com/interlay/interbtc?rev=78a0fd9a610733e6b1a96ad5d03d509bc66764b6#78a0fd9a610733e6b1a96ad5d03d509bc66764b6" dependencies = [ "frame-benchmarking", "frame-support", @@ -10507,13 +10507,26 @@ checksum = "9e99e1983e5d376cd8eb4b66604d2e99e79f5bd988c3055891dcd8c9e2604cc0" dependencies = [ "bytes 1.1.0", "futures-core", - "futures-io", "futures-sink", "log 0.4.16", "pin-project-lite 0.2.8", "tokio", ] +[[package]] +name = "tokio-util" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0edfdeb067411dba2044da6d1cb2df793dd35add7888d73c16e3381ded401764" +dependencies = [ + "bytes 1.1.0", + "futures-core", + "futures-io", + "futures-sink", + "pin-project-lite 0.2.8", + "tokio", +] + [[package]] name = "toml" version = "0.5.8" @@ -10940,7 +10953,7 @@ dependencies = [ [[package]] name = "vault-registry" version = "1.2.0" -source = "git+https://github.com/gregdhill/interbtc?rev=278d379087bc39932b328bce9f497a20c2403c5b#278d379087bc39932b328bce9f497a20c2403c5b" +source = "git+https://github.com/interlay/interbtc?rev=78a0fd9a610733e6b1a96ad5d03d509bc66764b6#78a0fd9a610733e6b1a96ad5d03d509bc66764b6" dependencies = [ "bitcoin 1.2.0", "currency", @@ -11044,7 +11057,7 @@ dependencies = [ "tokio", "tokio-stream", "tokio-tungstenite", - "tokio-util", + "tokio-util 0.6.9", "tower-service", "tracing", ] diff --git a/bitcoin/Cargo.toml b/bitcoin/Cargo.toml index 66b16b00b..b09da5946 100644 --- a/bitcoin/Cargo.toml +++ b/bitcoin/Cargo.toml @@ -33,8 +33,8 @@ esplora-btc-api = "1.0.3" sp-core = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.18" } [dependencies.interbtc-bitcoin] -git = "https://github.com/gregdhill/interbtc" -rev = "278d379087bc39932b328bce9f497a20c2403c5b" +git = "https://github.com/interlay/interbtc" +rev = "78a0fd9a610733e6b1a96ad5d03d509bc66764b6" package = "bitcoin" optional = true diff --git a/faucet/src/http.rs b/faucet/src/http.rs index 6d9398b2a..de6c9fc00 100644 --- a/faucet/src/http.rs +++ b/faucet/src/http.rs @@ -313,11 +313,11 @@ pub async fn start_http( #[cfg(all(test, feature = "standalone-metadata"))] mod tests { use crate::error::Error; - use runtime::{CurrencyId, CurrencyIdExt, OracleKey, Token, VaultId, DOT, INTERBTC, KBTC, KSM}; + use runtime::{CurrencyId, CurrencyIdExt, OracleKey, Token, VaultId, DOT, IBTC, KBTC, KSM}; use std::{collections::HashMap, sync::Arc}; const DEFAULT_TESTING_CURRENCY: CurrencyId = Token(DOT); - const DEFAULT_WRAPPED_CURRENCY: CurrencyId = Token(INTERBTC); + const DEFAULT_WRAPPED_CURRENCY: CurrencyId = Token(IBTC); use super::{ fund_account, open_kv_store, CollateralBalancesPallet, FundAccountJsonRpcRequest, FundingRequestAccountType, diff --git a/runtime/Cargo.toml b/runtime/Cargo.toml index 4dcc3a662..f28169c01 100644 --- a/runtime/Cargo.toml +++ b/runtime/Cargo.toml @@ -40,10 +40,10 @@ frame-support = { git = "https://github.com/paritytech/substrate", branch = "pol # Subxt dependencies # https://github.com/interlay/subxt/tree/polkadot-v0.9.18 -subxt = { package = "subxt", git = "https://github.com/interlay/subxt", rev = "44373cbb8777e002eb2cc1e733afcdcd8b07008a" } +subxt = { package = "subxt", git = "https://github.com/interlay/subxt", rev = "344e44c3729adcb945b937d6703212e7ae41da50" } subxt-client = { package = "subxt-client", path = "./client" } -jsonrpsee = { version = "0.9.0", features = ["macros", "jsonrpsee-types", "client", "jsonrpsee-ws-client", "jsonrpsee-client-transport"] } +jsonrpsee = { version = "0.10.1", features = ["macros", "jsonrpsee-types", "client", "jsonrpsee-ws-client", "jsonrpsee-client-transport"] } # Polkadot dependencies xcm = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.18" } @@ -53,27 +53,27 @@ bitcoin = { path = "../bitcoin"} # Dependencies for the testing utils for integration tests tempdir = { version = "0.3.7", optional = true } -interbtc = { package = "interbtc-standalone", git = "https://github.com/gregdhill/interbtc", rev = "278d379087bc39932b328bce9f497a20c2403c5b", optional = true } +interbtc = { package = "interbtc-standalone", git = "https://github.com/interlay/interbtc", rev = "78a0fd9a610733e6b1a96ad5d03d509bc66764b6", optional = true } rand = { version = "0.7", optional = true } [dependencies.primitives] -git = "https://github.com/gregdhill/interbtc" -rev = "278d379087bc39932b328bce9f497a20c2403c5b" +git = "https://github.com/interlay/interbtc" +rev = "78a0fd9a610733e6b1a96ad5d03d509bc66764b6" package = "interbtc-primitives" [dependencies.module-bitcoin] -git = "https://github.com/gregdhill/interbtc" -rev = "278d379087bc39932b328bce9f497a20c2403c5b" +git = "https://github.com/interlay/interbtc" +rev = "78a0fd9a610733e6b1a96ad5d03d509bc66764b6" package = "bitcoin" [dependencies.module-btc-relay] -git = "https://github.com/gregdhill/interbtc" -rev = "278d379087bc39932b328bce9f497a20c2403c5b" +git = "https://github.com/interlay/interbtc" +rev = "78a0fd9a610733e6b1a96ad5d03d509bc66764b6" package = "btc-relay" [dependencies.module-oracle-rpc-runtime-api] -git = "https://github.com/gregdhill/interbtc" -rev = "278d379087bc39932b328bce9f497a20c2403c5b" +git = "https://github.com/interlay/interbtc" +rev = "78a0fd9a610733e6b1a96ad5d03d509bc66764b6" package = "module-oracle-rpc-runtime-api" [dev-dependencies] diff --git a/runtime/client/Cargo.toml b/runtime/client/Cargo.toml index 1f966e751..b727b1a68 100644 --- a/runtime/client/Cargo.toml +++ b/runtime/client/Cargo.toml @@ -15,9 +15,9 @@ keywords = ["parity", "substrate", "blockchain"] async-std = "1.8.0" futures = { version = "0.3.9", features = ["compat"], package = "futures" } futures01 = { package = "futures", version = "0.1.29" } -jsonrpsee = "0.9.0" -jsonrpsee-types = "0.9.0" -jsonrpsee-core = { version = "0.9.0", features = ["async-client"] } +jsonrpsee = "0.10.1" +jsonrpsee-types = "0.10.1" +jsonrpsee-core = { version = "0.10.1", features = ["async-client"] } log = "0.4.13" serde_json = "1.0.61" diff --git a/runtime/metadata-parachain-interlay.scale b/runtime/metadata-parachain-interlay.scale index 418bc4be6bb45494b4625d5cd33dd078a30d3bc4..5493b5fe7331f80390b10d938e82ee323abf0834 100644 GIT binary patch delta 57 zcmX>+foJywo(;wdOah+GmJ02b3XIz=6`1&IB^wmNixLY8Qd1O?ON)w9^O7qSQuWgH N6g;=5&Skon1ppWj6FUF^ delta 65 zcmdlzf#>i9o(;wdYzm%!A+ABqrV8z*3XI!L6`1&IWhW?v7bO-Hq^2k&mlhSJ<|S7u Rr0S*XL6mNfoy&AD3jnuU6~O=i diff --git a/runtime/metadata-parachain-kintsugi.scale b/runtime/metadata-parachain-kintsugi.scale index ad578fc43ea0454a7c1969505630beea9d84c498..caba0a7e6f8e371deda0836faffdc8333e652465 100644 GIT binary patch delta 38 wcmV+>0NMY?&I`ZJ3$WE40uV`q+Z~779Rau79Rk&30f3jWfdUw}&4B`XWlZ!CWB>pF delta 47 zcmdmgj{EpI?hRLE*%UneLR^EIugkVymu1|3U6$!;GUJ5lYa5v)SU?ink2W$@r2+uk C2NLE0 diff --git a/runtime/metadata-parachain-testnet.scale b/runtime/metadata-parachain-testnet.scale index d099f4dfb413f644c319a9a5fc816c581cb55021..87d00a1fc09159b23ffb8c104cde30541a1a016f 100644 GIT binary patch delta 57 zcmdlpfoIDEo()C{Oah+G77Fba3XIz=6qq<`B^wmNixLY8Qd1O?ON)w9^O7qSQuWgH N6g;=b&1Jfm1ppIl6C3~l delta 47 zcmdlofoIPIo()C{Yzm%!A+ABqCJOB)3XI!L6qq<`87EA)o697@0+QGsHkavM764-M B4(9*> diff --git a/runtime/metadata-standalone.scale b/runtime/metadata-standalone.scale index 29767227d31b552663695d74e1c9d429995bf361..d3526652fcae3d77377925237e1bb6aff5fc391f 100644 GIT binary patch delta 53 zcmex#g5%W*jt%*8Oah+GrE=R#u^q( - &self, - call: impl Fn(&CallError) -> Option, - other: impl Fn(&String) -> Option, - ) -> Option { + fn map_call_error(&self, call: impl Fn(&CallError) -> Option) -> Option { match self { Error::SubxtRuntimeError(SubxtError::Rpc(RequestError::Call(err))) => call(err), - Error::SubxtRuntimeError(SubxtError::Rpc(RequestError::Request(message))) => { - if let Ok(error_response) = serde_json::from_str::(message) { - call(&CallError::Custom { - code: error_response.error.code.code(), - message: error_response.error.message.to_string(), - data: error_response.error.data.map(ToOwned::to_owned), - }) - } else { - other(message) - } - } _ => None, } } pub fn is_invalid_transaction(&self) -> Option { - self.map_call_error( - |call_error| { - if let CallError::Custom { - code: POOL_INVALID_TX, - data, - .. - } = call_error - { - Some(data.clone().map(|raw| raw.to_string()).unwrap_or_default()) - } else { - None - } - }, - |message| { - if message.contains(INVALID_TX_MESSAGE) { - Some(message.to_string()) - } else { - None - } - }, - ) + self.map_call_error(|call_error| { + if let CallError::Custom { + code: POOL_INVALID_TX, + data, + .. + } = call_error + { + Some(data.clone().map(|raw| raw.to_string()).unwrap_or_default()) + } else { + None + } + }) } pub fn is_pool_too_low_priority(&self) -> Option<()> { - self.map_call_error( - |call_error| { - if let CallError::Custom { - code: POOL_TOO_LOW_PRIORITY, - .. - } = call_error - { - Some(()) - } else { - None - } - }, - |message| { - if message.contains(TOO_LOW_PRIORITY_MESSAGE) { - Some(()) - } else { - None - } - }, - ) + self.map_call_error(|call_error| { + if let CallError::Custom { + code: POOL_TOO_LOW_PRIORITY, + .. + } = call_error + { + Some(()) + } else { + None + } + }) } pub fn is_rpc_disconnect_error(&self) -> bool { @@ -229,6 +192,3 @@ pub enum KeyLoadingError { const BASE_ERROR: i32 = 1000; const POOL_INVALID_TX: i32 = BASE_ERROR + 10; const POOL_TOO_LOW_PRIORITY: i32 = POOL_INVALID_TX + 4; - -const INVALID_TX_MESSAGE: &str = "Invalid Transaction"; -const TOO_LOW_PRIORITY_MESSAGE: &str = "Priority is too low"; diff --git a/runtime/src/lib.rs b/runtime/src/lib.rs index 86dda7ae6..ed7c6180a 100644 --- a/runtime/src/lib.rs +++ b/runtime/src/lib.rs @@ -151,7 +151,7 @@ pub fn parse_native_currency(src: &str) -> Result { pub fn parse_wrapped_currency(src: &str) -> Result { match src.to_uppercase().as_str() { id if id == KBTC.symbol() => Ok(Token(KBTC)), - id if id == INTERBTC.symbol() => Ok(Token(INTERBTC)), + id if id == IBTC.symbol() => Ok(Token(IBTC)), _ => Err(Error::InvalidCurrency), } } diff --git a/runtime/src/tests.rs b/runtime/src/tests.rs index 99f455219..46d4b0df0 100644 --- a/runtime/src/tests.rs +++ b/runtime/src/tests.rs @@ -5,7 +5,7 @@ const DEFAULT_TESTING_CURRENCY: CurrencyId = Token(DOT); use super::{ BtcAddress, BtcPublicKey, BtcRelayPallet, CollateralBalancesPallet, CurrencyId, FixedPointNumber, FixedU128, OraclePallet, RawBlockHeader, RelayPallet, ReplacePallet, SecurityPallet, StatusCode, Token, VaultRegistryPallet, - DOT, INTERBTC, + DOT, IBTC, }; use crate::{integration::*, FeedValuesEvent, OracleKey, VaultId, H160, U256}; use module_bitcoin::{formatter::TryFormattable, types::BlockBuilder}; @@ -63,7 +63,7 @@ async fn test_getters() { async fn test_is_transaction_invalid() { let (client, _tmp_dir) = default_provider_client(AccountKeyring::Alice).await; let parachain_rpc = setup_provider(client.clone(), AccountKeyring::Alice).await; - let vault_id = VaultId::new(AccountKeyring::Alice.into(), Token(DOT), Token(INTERBTC)); + let vault_id = VaultId::new(AccountKeyring::Alice.into(), Token(DOT), Token(IBTC)); let err = parachain_rpc.is_transaction_invalid(&vault_id, &[]).await; parachain_rpc @@ -132,7 +132,7 @@ async fn test_register_vault() { let parachain_rpc = setup_provider(client.clone(), AccountKeyring::Alice).await; set_exchange_rate(client.clone()).await; - let vault_id = VaultId::new(AccountKeyring::Alice.into(), Token(DOT), Token(INTERBTC)); + let vault_id = VaultId::new(AccountKeyring::Alice.into(), Token(DOT), Token(IBTC)); parachain_rpc .register_vault(&vault_id, 100, dummy_public_key()) diff --git a/runtime/src/types.rs b/runtime/src/types.rs index bb5063dd0..1c3e5a0e9 100644 --- a/runtime/src/types.rs +++ b/runtime/src/types.rs @@ -5,7 +5,7 @@ use subxt::sp_core::{crypto::Ss58Codec, sr25519::Pair as KeyPair}; pub use primitives::{ CurrencyId, CurrencyId::Token, - TokenSymbol::{DOT, INTERBTC, INTR, KBTC, KINT, KSM}, + TokenSymbol::{DOT, IBTC, INTR, KBTC, KINT, KSM}, }; pub use currency_id::CurrencyIdExt; diff --git a/vault/src/cancellation.rs b/vault/src/cancellation.rs index 3fcfd9f32..3b3e93792 100644 --- a/vault/src/cancellation.rs +++ b/vault/src/cancellation.rs @@ -320,7 +320,7 @@ mod tests { use futures::channel::mpsc; use runtime::{ AccountId, BtcAddress, BtcPublicKey, CurrencyId, ErrorCode, InterBtcIssueRequest, InterBtcReplaceRequest, - IssueRequestStatus, RequestIssueEvent, StatusCode, Token, VaultId, DOT, INTERBTC, + IssueRequestStatus, RequestIssueEvent, StatusCode, Token, VaultId, DOT, IBTC, }; use std::collections::BTreeSet; @@ -398,7 +398,7 @@ mod tests { requester: AccountId::new([1u8; 32]), btc_public_key: BtcPublicKey { 0: [0; 33] }, status: IssueRequestStatus::Pending, - vault: VaultId::new(AccountId::new([1u8; 32]), Token(DOT), runtime::Token(INTERBTC)), + vault: VaultId::new(AccountId::new([1u8; 32]), Token(DOT), runtime::Token(IBTC)), } } diff --git a/vault/src/collateral.rs b/vault/src/collateral.rs index c6e7ad971..f0c9c20f2 100644 --- a/vault/src/collateral.rs +++ b/vault/src/collateral.rs @@ -133,7 +133,7 @@ mod tests { use async_trait::async_trait; use runtime::{ AccountId, Balance, BtcAddress, BtcPublicKey, CurrencyId, Error as RuntimeError, InterBtcVault, Token, Wallet, - DOT, INTERBTC, + DOT, IBTC, }; macro_rules! assert_ok { @@ -232,7 +232,7 @@ mod tests { } fn dummy_vault_id() -> VaultId { - VaultId::new(AccountId::new([1u8; 32]), Token(DOT), Token(INTERBTC)) + VaultId::new(AccountId::new([1u8; 32]), Token(DOT), Token(IBTC)) } #[tokio::test] diff --git a/vault/src/execution.rs b/vault/src/execution.rs index f3034c962..e89129d44 100644 --- a/vault/src/execution.rs +++ b/vault/src/execution.rs @@ -547,7 +547,7 @@ mod tests { }; use runtime::{ AccountId, BlockNumber, BtcPublicKey, CurrencyId, Error as RuntimeError, ErrorCode, InterBtcRichBlockHeader, - InterBtcVault, StatusCode, Token, DOT, INTERBTC, + InterBtcVault, StatusCode, Token, DOT, IBTC, }; use sp_core::H160; use std::collections::BTreeSet; @@ -705,7 +705,7 @@ mod tests { } fn dummy_vault_id() -> VaultId { - VaultId::new(AccountId::new([1u8; 32]), Token(DOT), Token(INTERBTC)) + VaultId::new(AccountId::new([1u8; 32]), Token(DOT), Token(IBTC)) } #[test] diff --git a/vault/src/replace.rs b/vault/src/replace.rs index 171212025..4b3b67523 100644 --- a/vault/src/replace.rs +++ b/vault/src/replace.rs @@ -213,7 +213,7 @@ mod tests { }; use runtime::{ AccountId, Balance, BtcAddress, BtcPublicKey, CurrencyId, Error as RuntimeError, InterBtcReplaceRequest, - InterBtcVault, Token, DOT, H256, INTERBTC, + InterBtcVault, Token, DOT, H256, IBTC, }; macro_rules! assert_err { @@ -349,7 +349,7 @@ mod tests { } fn dummy_vault_id() -> VaultId { - VaultId::new(AccountId::new([1u8; 32]), Token(DOT), Token(INTERBTC)) + VaultId::new(AccountId::new([1u8; 32]), Token(DOT), Token(IBTC)) } #[tokio::test] diff --git a/vault/src/vaults.rs b/vault/src/vaults.rs index 2af4a490e..69263a3ee 100644 --- a/vault/src/vaults.rs +++ b/vault/src/vaults.rs @@ -265,7 +265,7 @@ mod tests { }; use runtime::{ AccountId, BitcoinBlockHeight, BlockNumber, Error as RuntimeError, H256Le, InterBtcRichBlockHeader, - RawBlockHeader, Token, DOT, INTERBTC, + RawBlockHeader, Token, DOT, IBTC, }; use sp_core::{H160, H256}; @@ -389,7 +389,7 @@ mod tests { } fn dummy_vault_id() -> VaultId { - VaultId::new(AccountId::new([1u8; 32]), Token(DOT), Token(INTERBTC)) + VaultId::new(AccountId::new([1u8; 32]), Token(DOT), Token(IBTC)) } #[tokio::test] diff --git a/vault/tests/vault_integration_tests.rs b/vault/tests/vault_integration_tests.rs index 5603fbceb..57ca56be5 100644 --- a/vault/tests/vault_integration_tests.rs +++ b/vault/tests/vault_integration_tests.rs @@ -21,7 +21,7 @@ const TIMEOUT: Duration = Duration::from_secs(90); const DEFAULT_NATIVE_CURRENCY: CurrencyId = Token(INTR); const DEFAULT_TESTING_CURRENCY: CurrencyId = Token(DOT); -const DEFAULT_WRAPPED_CURRENCY: CurrencyId = Token(INTERBTC); +const DEFAULT_WRAPPED_CURRENCY: CurrencyId = Token(IBTC); async fn test_with(execute: impl FnOnce(SubxtClient) -> F) -> R where From f0e75d6194628e86325c20c6ae19dea260bf6772 Mon Sep 17 00:00:00 2001 From: Gregory Hill Date: Tue, 12 Apr 2022 12:59:54 +0100 Subject: [PATCH 09/12] chore: use 1.11.0 rev, regenerate metadata Signed-off-by: Gregory Hill --- Cargo.lock | 78 +++++++++++----------- bitcoin/Cargo.toml | 2 +- runtime/Cargo.toml | 10 +-- runtime/metadata-parachain-interlay.scale | Bin 198715 -> 0 bytes runtime/metadata-parachain-kintsugi.scale | Bin 190271 -> 190271 bytes runtime/metadata-parachain-testnet.scale | Bin 198708 -> 198708 bytes runtime/metadata-standalone.scale | Bin 140394 -> 140394 bytes runtime/src/lib.rs | 6 -- runtime/src/rpc.rs | 4 +- 9 files changed, 47 insertions(+), 53 deletions(-) delete mode 100644 runtime/metadata-parachain-interlay.scale diff --git a/Cargo.lock b/Cargo.lock index fbb006a3d..39c86a63d 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -85,7 +85,7 @@ dependencies = [ [[package]] name = "annuity" version = "1.0.0" -source = "git+https://github.com/interlay/interbtc?rev=78a0fd9a610733e6b1a96ad5d03d509bc66764b6#78a0fd9a610733e6b1a96ad5d03d509bc66764b6" +source = "git+https://github.com/interlay/interbtc?rev=92278904c8f35b5f3ef3b3393065831df7dd05b7#92278904c8f35b5f3ef3b3393065831df7dd05b7" dependencies = [ "frame-benchmarking", "frame-support", @@ -525,7 +525,7 @@ dependencies = [ [[package]] name = "bitcoin" version = "1.2.0" -source = "git+https://github.com/interlay/interbtc?rev=78a0fd9a610733e6b1a96ad5d03d509bc66764b6#78a0fd9a610733e6b1a96ad5d03d509bc66764b6" +source = "git+https://github.com/interlay/interbtc?rev=92278904c8f35b5f3ef3b3393065831df7dd05b7#92278904c8f35b5f3ef3b3393065831df7dd05b7" dependencies = [ "bitcoin_hashes 0.7.6", "frame-support", @@ -747,7 +747,7 @@ checksum = "bd769563b4ea2953e2825c9e6b7470a5f55f67e0be00030bf3e390a2a6071f64" [[package]] name = "btc-relay" version = "1.2.0" -source = "git+https://github.com/interlay/interbtc?rev=78a0fd9a610733e6b1a96ad5d03d509bc66764b6#78a0fd9a610733e6b1a96ad5d03d509bc66764b6" +source = "git+https://github.com/interlay/interbtc?rev=92278904c8f35b5f3ef3b3393065831df7dd05b7#92278904c8f35b5f3ef3b3393065831df7dd05b7" dependencies = [ "bitcoin 1.2.0", "frame-benchmarking", @@ -1300,7 +1300,7 @@ dependencies = [ [[package]] name = "currency" version = "1.2.0" -source = "git+https://github.com/interlay/interbtc?rev=78a0fd9a610733e6b1a96ad5d03d509bc66764b6#78a0fd9a610733e6b1a96ad5d03d509bc66764b6" +source = "git+https://github.com/interlay/interbtc?rev=92278904c8f35b5f3ef3b3393065831df7dd05b7#92278904c8f35b5f3ef3b3393065831df7dd05b7" dependencies = [ "frame-support", "frame-system", @@ -1406,7 +1406,7 @@ dependencies = [ [[package]] name = "democracy" version = "1.2.0" -source = "git+https://github.com/interlay/interbtc?rev=78a0fd9a610733e6b1a96ad5d03d509bc66764b6#78a0fd9a610733e6b1a96ad5d03d509bc66764b6" +source = "git+https://github.com/interlay/interbtc?rev=92278904c8f35b5f3ef3b3393065831df7dd05b7#92278904c8f35b5f3ef3b3393065831df7dd05b7" dependencies = [ "frame-benchmarking", "frame-support", @@ -1727,7 +1727,7 @@ dependencies = [ [[package]] name = "escrow" version = "1.0.0" -source = "git+https://github.com/interlay/interbtc?rev=78a0fd9a610733e6b1a96ad5d03d509bc66764b6#78a0fd9a610733e6b1a96ad5d03d509bc66764b6" +source = "git+https://github.com/interlay/interbtc?rev=92278904c8f35b5f3ef3b3393065831df7dd05b7#92278904c8f35b5f3ef3b3393065831df7dd05b7" dependencies = [ "frame-benchmarking", "frame-support", @@ -1829,7 +1829,7 @@ dependencies = [ [[package]] name = "fee" version = "1.2.0" -source = "git+https://github.com/interlay/interbtc?rev=78a0fd9a610733e6b1a96ad5d03d509bc66764b6#78a0fd9a610733e6b1a96ad5d03d509bc66764b6" +source = "git+https://github.com/interlay/interbtc?rev=92278904c8f35b5f3ef3b3393065831df7dd05b7#92278904c8f35b5f3ef3b3393065831df7dd05b7" dependencies = [ "currency", "frame-benchmarking", @@ -2934,7 +2934,7 @@ dependencies = [ [[package]] name = "interbtc-primitives" version = "1.2.0" -source = "git+https://github.com/interlay/interbtc?rev=78a0fd9a610733e6b1a96ad5d03d509bc66764b6#78a0fd9a610733e6b1a96ad5d03d509bc66764b6" +source = "git+https://github.com/interlay/interbtc?rev=92278904c8f35b5f3ef3b3393065831df7dd05b7#92278904c8f35b5f3ef3b3393065831df7dd05b7" dependencies = [ "bitcoin 1.2.0", "bstringify", @@ -2949,7 +2949,7 @@ dependencies = [ [[package]] name = "interbtc-rpc" version = "1.2.0" -source = "git+https://github.com/interlay/interbtc?rev=78a0fd9a610733e6b1a96ad5d03d509bc66764b6#78a0fd9a610733e6b1a96ad5d03d509bc66764b6" +source = "git+https://github.com/interlay/interbtc?rev=92278904c8f35b5f3ef3b3393065831df7dd05b7#92278904c8f35b5f3ef3b3393065831df7dd05b7" dependencies = [ "interbtc-primitives", "jsonrpc-core", @@ -2977,7 +2977,7 @@ dependencies = [ [[package]] name = "interbtc-runtime-standalone" version = "1.2.0" -source = "git+https://github.com/interlay/interbtc?rev=78a0fd9a610733e6b1a96ad5d03d509bc66764b6#78a0fd9a610733e6b1a96ad5d03d509bc66764b6" +source = "git+https://github.com/interlay/interbtc?rev=92278904c8f35b5f3ef3b3393065831df7dd05b7#92278904c8f35b5f3ef3b3393065831df7dd05b7" dependencies = [ "annuity", "btc-relay", @@ -3052,7 +3052,7 @@ dependencies = [ [[package]] name = "interbtc-standalone" version = "1.2.0" -source = "git+https://github.com/interlay/interbtc?rev=78a0fd9a610733e6b1a96ad5d03d509bc66764b6#78a0fd9a610733e6b1a96ad5d03d509bc66764b6" +source = "git+https://github.com/interlay/interbtc?rev=92278904c8f35b5f3ef3b3393065831df7dd05b7#92278904c8f35b5f3ef3b3393065831df7dd05b7" dependencies = [ "bitcoin 1.2.0", "clap", @@ -3139,7 +3139,7 @@ checksum = "35e70ee094dc02fd9c13fdad4940090f22dbd6ac7c9e7094a46cf0232a50bc7c" [[package]] name = "issue" version = "1.2.0" -source = "git+https://github.com/interlay/interbtc?rev=78a0fd9a610733e6b1a96ad5d03d509bc66764b6#78a0fd9a610733e6b1a96ad5d03d509bc66764b6" +source = "git+https://github.com/interlay/interbtc?rev=92278904c8f35b5f3ef3b3393065831df7dd05b7#92278904c8f35b5f3ef3b3393065831df7dd05b7" dependencies = [ "bitcoin 1.2.0", "btc-relay", @@ -4510,7 +4510,7 @@ dependencies = [ [[package]] name = "module-btc-relay-rpc" version = "1.2.0" -source = "git+https://github.com/interlay/interbtc?rev=78a0fd9a610733e6b1a96ad5d03d509bc66764b6#78a0fd9a610733e6b1a96ad5d03d509bc66764b6" +source = "git+https://github.com/interlay/interbtc?rev=92278904c8f35b5f3ef3b3393065831df7dd05b7#92278904c8f35b5f3ef3b3393065831df7dd05b7" dependencies = [ "jsonrpc-core", "jsonrpc-core-client", @@ -4525,7 +4525,7 @@ dependencies = [ [[package]] name = "module-btc-relay-rpc-runtime-api" version = "1.2.0" -source = "git+https://github.com/interlay/interbtc?rev=78a0fd9a610733e6b1a96ad5d03d509bc66764b6#78a0fd9a610733e6b1a96ad5d03d509bc66764b6" +source = "git+https://github.com/interlay/interbtc?rev=92278904c8f35b5f3ef3b3393065831df7dd05b7#92278904c8f35b5f3ef3b3393065831df7dd05b7" dependencies = [ "frame-support", "parity-scale-codec", @@ -4536,7 +4536,7 @@ dependencies = [ [[package]] name = "module-issue-rpc" version = "1.2.0" -source = "git+https://github.com/interlay/interbtc?rev=78a0fd9a610733e6b1a96ad5d03d509bc66764b6#78a0fd9a610733e6b1a96ad5d03d509bc66764b6" +source = "git+https://github.com/interlay/interbtc?rev=92278904c8f35b5f3ef3b3393065831df7dd05b7#92278904c8f35b5f3ef3b3393065831df7dd05b7" dependencies = [ "jsonrpc-core", "jsonrpc-core-client", @@ -4551,7 +4551,7 @@ dependencies = [ [[package]] name = "module-issue-rpc-runtime-api" version = "1.2.0" -source = "git+https://github.com/interlay/interbtc?rev=78a0fd9a610733e6b1a96ad5d03d509bc66764b6#78a0fd9a610733e6b1a96ad5d03d509bc66764b6" +source = "git+https://github.com/interlay/interbtc?rev=92278904c8f35b5f3ef3b3393065831df7dd05b7#92278904c8f35b5f3ef3b3393065831df7dd05b7" dependencies = [ "frame-support", "parity-scale-codec", @@ -4562,7 +4562,7 @@ dependencies = [ [[package]] name = "module-oracle-rpc" version = "1.2.0" -source = "git+https://github.com/interlay/interbtc?rev=78a0fd9a610733e6b1a96ad5d03d509bc66764b6#78a0fd9a610733e6b1a96ad5d03d509bc66764b6" +source = "git+https://github.com/interlay/interbtc?rev=92278904c8f35b5f3ef3b3393065831df7dd05b7#92278904c8f35b5f3ef3b3393065831df7dd05b7" dependencies = [ "jsonrpc-core", "jsonrpc-core-client", @@ -4577,7 +4577,7 @@ dependencies = [ [[package]] name = "module-oracle-rpc-runtime-api" version = "1.2.0" -source = "git+https://github.com/interlay/interbtc?rev=78a0fd9a610733e6b1a96ad5d03d509bc66764b6#78a0fd9a610733e6b1a96ad5d03d509bc66764b6" +source = "git+https://github.com/interlay/interbtc?rev=92278904c8f35b5f3ef3b3393065831df7dd05b7#92278904c8f35b5f3ef3b3393065831df7dd05b7" dependencies = [ "frame-support", "parity-scale-codec", @@ -4589,7 +4589,7 @@ dependencies = [ [[package]] name = "module-redeem-rpc" version = "1.2.0" -source = "git+https://github.com/interlay/interbtc?rev=78a0fd9a610733e6b1a96ad5d03d509bc66764b6#78a0fd9a610733e6b1a96ad5d03d509bc66764b6" +source = "git+https://github.com/interlay/interbtc?rev=92278904c8f35b5f3ef3b3393065831df7dd05b7#92278904c8f35b5f3ef3b3393065831df7dd05b7" dependencies = [ "jsonrpc-core", "jsonrpc-core-client", @@ -4604,7 +4604,7 @@ dependencies = [ [[package]] name = "module-redeem-rpc-runtime-api" version = "1.2.0" -source = "git+https://github.com/interlay/interbtc?rev=78a0fd9a610733e6b1a96ad5d03d509bc66764b6#78a0fd9a610733e6b1a96ad5d03d509bc66764b6" +source = "git+https://github.com/interlay/interbtc?rev=92278904c8f35b5f3ef3b3393065831df7dd05b7#92278904c8f35b5f3ef3b3393065831df7dd05b7" dependencies = [ "frame-support", "parity-scale-codec", @@ -4615,7 +4615,7 @@ dependencies = [ [[package]] name = "module-refund-rpc" version = "1.2.0" -source = "git+https://github.com/interlay/interbtc?rev=78a0fd9a610733e6b1a96ad5d03d509bc66764b6#78a0fd9a610733e6b1a96ad5d03d509bc66764b6" +source = "git+https://github.com/interlay/interbtc?rev=92278904c8f35b5f3ef3b3393065831df7dd05b7#92278904c8f35b5f3ef3b3393065831df7dd05b7" dependencies = [ "jsonrpc-core", "jsonrpc-core-client", @@ -4630,7 +4630,7 @@ dependencies = [ [[package]] name = "module-refund-rpc-runtime-api" version = "1.2.0" -source = "git+https://github.com/interlay/interbtc?rev=78a0fd9a610733e6b1a96ad5d03d509bc66764b6#78a0fd9a610733e6b1a96ad5d03d509bc66764b6" +source = "git+https://github.com/interlay/interbtc?rev=92278904c8f35b5f3ef3b3393065831df7dd05b7#92278904c8f35b5f3ef3b3393065831df7dd05b7" dependencies = [ "frame-support", "parity-scale-codec", @@ -4641,7 +4641,7 @@ dependencies = [ [[package]] name = "module-relay-rpc" version = "1.2.0" -source = "git+https://github.com/interlay/interbtc?rev=78a0fd9a610733e6b1a96ad5d03d509bc66764b6#78a0fd9a610733e6b1a96ad5d03d509bc66764b6" +source = "git+https://github.com/interlay/interbtc?rev=92278904c8f35b5f3ef3b3393065831df7dd05b7#92278904c8f35b5f3ef3b3393065831df7dd05b7" dependencies = [ "jsonrpc-core", "jsonrpc-core-client", @@ -4656,7 +4656,7 @@ dependencies = [ [[package]] name = "module-relay-rpc-runtime-api" version = "1.2.0" -source = "git+https://github.com/interlay/interbtc?rev=78a0fd9a610733e6b1a96ad5d03d509bc66764b6#78a0fd9a610733e6b1a96ad5d03d509bc66764b6" +source = "git+https://github.com/interlay/interbtc?rev=92278904c8f35b5f3ef3b3393065831df7dd05b7#92278904c8f35b5f3ef3b3393065831df7dd05b7" dependencies = [ "frame-support", "parity-scale-codec", @@ -4667,7 +4667,7 @@ dependencies = [ [[package]] name = "module-replace-rpc" version = "1.2.0" -source = "git+https://github.com/interlay/interbtc?rev=78a0fd9a610733e6b1a96ad5d03d509bc66764b6#78a0fd9a610733e6b1a96ad5d03d509bc66764b6" +source = "git+https://github.com/interlay/interbtc?rev=92278904c8f35b5f3ef3b3393065831df7dd05b7#92278904c8f35b5f3ef3b3393065831df7dd05b7" dependencies = [ "jsonrpc-core", "jsonrpc-core-client", @@ -4682,7 +4682,7 @@ dependencies = [ [[package]] name = "module-replace-rpc-runtime-api" version = "1.2.0" -source = "git+https://github.com/interlay/interbtc?rev=78a0fd9a610733e6b1a96ad5d03d509bc66764b6#78a0fd9a610733e6b1a96ad5d03d509bc66764b6" +source = "git+https://github.com/interlay/interbtc?rev=92278904c8f35b5f3ef3b3393065831df7dd05b7#92278904c8f35b5f3ef3b3393065831df7dd05b7" dependencies = [ "frame-support", "parity-scale-codec", @@ -4693,7 +4693,7 @@ dependencies = [ [[package]] name = "module-vault-registry-rpc" version = "0.3.0" -source = "git+https://github.com/interlay/interbtc?rev=78a0fd9a610733e6b1a96ad5d03d509bc66764b6#78a0fd9a610733e6b1a96ad5d03d509bc66764b6" +source = "git+https://github.com/interlay/interbtc?rev=92278904c8f35b5f3ef3b3393065831df7dd05b7#92278904c8f35b5f3ef3b3393065831df7dd05b7" dependencies = [ "jsonrpc-core", "jsonrpc-core-client", @@ -4709,7 +4709,7 @@ dependencies = [ [[package]] name = "module-vault-registry-rpc-runtime-api" version = "0.3.0" -source = "git+https://github.com/interlay/interbtc?rev=78a0fd9a610733e6b1a96ad5d03d509bc66764b6#78a0fd9a610733e6b1a96ad5d03d509bc66764b6" +source = "git+https://github.com/interlay/interbtc?rev=92278904c8f35b5f3ef3b3393065831df7dd05b7#92278904c8f35b5f3ef3b3393065831df7dd05b7" dependencies = [ "frame-support", "module-oracle-rpc-runtime-api", @@ -5129,7 +5129,7 @@ dependencies = [ [[package]] name = "nomination" version = "0.5.0" -source = "git+https://github.com/interlay/interbtc?rev=78a0fd9a610733e6b1a96ad5d03d509bc66764b6#78a0fd9a610733e6b1a96ad5d03d509bc66764b6" +source = "git+https://github.com/interlay/interbtc?rev=92278904c8f35b5f3ef3b3393065831df7dd05b7#92278904c8f35b5f3ef3b3393065831df7dd05b7" dependencies = [ "currency", "fee", @@ -5404,7 +5404,7 @@ dependencies = [ [[package]] name = "oracle" version = "1.2.0" -source = "git+https://github.com/interlay/interbtc?rev=78a0fd9a610733e6b1a96ad5d03d509bc66764b6#78a0fd9a610733e6b1a96ad5d03d509bc66764b6" +source = "git+https://github.com/interlay/interbtc?rev=92278904c8f35b5f3ef3b3393065831df7dd05b7#92278904c8f35b5f3ef3b3393065831df7dd05b7" dependencies = [ "currency", "frame-benchmarking", @@ -7234,7 +7234,7 @@ dependencies = [ [[package]] name = "redeem" version = "1.2.0" -source = "git+https://github.com/interlay/interbtc?rev=78a0fd9a610733e6b1a96ad5d03d509bc66764b6#78a0fd9a610733e6b1a96ad5d03d509bc66764b6" +source = "git+https://github.com/interlay/interbtc?rev=92278904c8f35b5f3ef3b3393065831df7dd05b7#92278904c8f35b5f3ef3b3393065831df7dd05b7" dependencies = [ "bitcoin 1.2.0", "btc-relay", @@ -7303,7 +7303,7 @@ dependencies = [ [[package]] name = "refund" version = "1.2.0" -source = "git+https://github.com/interlay/interbtc?rev=78a0fd9a610733e6b1a96ad5d03d509bc66764b6#78a0fd9a610733e6b1a96ad5d03d509bc66764b6" +source = "git+https://github.com/interlay/interbtc?rev=92278904c8f35b5f3ef3b3393065831df7dd05b7#92278904c8f35b5f3ef3b3393065831df7dd05b7" dependencies = [ "bitcoin 1.2.0", "btc-relay", @@ -7381,7 +7381,7 @@ dependencies = [ [[package]] name = "relay" version = "1.2.0" -source = "git+https://github.com/interlay/interbtc?rev=78a0fd9a610733e6b1a96ad5d03d509bc66764b6#78a0fd9a610733e6b1a96ad5d03d509bc66764b6" +source = "git+https://github.com/interlay/interbtc?rev=92278904c8f35b5f3ef3b3393065831df7dd05b7#92278904c8f35b5f3ef3b3393065831df7dd05b7" dependencies = [ "bitcoin 1.2.0", "btc-relay", @@ -7422,7 +7422,7 @@ dependencies = [ [[package]] name = "replace" version = "1.2.0" -source = "git+https://github.com/interlay/interbtc?rev=78a0fd9a610733e6b1a96ad5d03d509bc66764b6#78a0fd9a610733e6b1a96ad5d03d509bc66764b6" +source = "git+https://github.com/interlay/interbtc?rev=92278904c8f35b5f3ef3b3393065831df7dd05b7#92278904c8f35b5f3ef3b3393065831df7dd05b7" dependencies = [ "bitcoin 1.2.0", "btc-relay", @@ -7505,7 +7505,7 @@ checksum = "8c31b5c4033f8fdde8700e4657be2c497e7288f01515be52168c631e2e4d4086" [[package]] name = "reward" version = "1.2.0" -source = "git+https://github.com/interlay/interbtc?rev=78a0fd9a610733e6b1a96ad5d03d509bc66764b6#78a0fd9a610733e6b1a96ad5d03d509bc66764b6" +source = "git+https://github.com/interlay/interbtc?rev=92278904c8f35b5f3ef3b3393065831df7dd05b7#92278904c8f35b5f3ef3b3393065831df7dd05b7" dependencies = [ "frame-benchmarking", "frame-support", @@ -8851,7 +8851,7 @@ dependencies = [ [[package]] name = "security" version = "1.2.0" -source = "git+https://github.com/interlay/interbtc?rev=78a0fd9a610733e6b1a96ad5d03d509bc66764b6#78a0fd9a610733e6b1a96ad5d03d509bc66764b6" +source = "git+https://github.com/interlay/interbtc?rev=92278904c8f35b5f3ef3b3393065831df7dd05b7#92278904c8f35b5f3ef3b3393065831df7dd05b7" dependencies = [ "frame-support", "frame-system", @@ -9984,7 +9984,7 @@ checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" [[package]] name = "staking" version = "1.2.0" -source = "git+https://github.com/interlay/interbtc?rev=78a0fd9a610733e6b1a96ad5d03d509bc66764b6#78a0fd9a610733e6b1a96ad5d03d509bc66764b6" +source = "git+https://github.com/interlay/interbtc?rev=92278904c8f35b5f3ef3b3393065831df7dd05b7#92278904c8f35b5f3ef3b3393065831df7dd05b7" dependencies = [ "frame-benchmarking", "frame-support", @@ -10212,7 +10212,7 @@ dependencies = [ [[package]] name = "supply" version = "1.2.0" -source = "git+https://github.com/interlay/interbtc?rev=78a0fd9a610733e6b1a96ad5d03d509bc66764b6#78a0fd9a610733e6b1a96ad5d03d509bc66764b6" +source = "git+https://github.com/interlay/interbtc?rev=92278904c8f35b5f3ef3b3393065831df7dd05b7#92278904c8f35b5f3ef3b3393065831df7dd05b7" dependencies = [ "frame-benchmarking", "frame-support", @@ -10953,7 +10953,7 @@ dependencies = [ [[package]] name = "vault-registry" version = "1.2.0" -source = "git+https://github.com/interlay/interbtc?rev=78a0fd9a610733e6b1a96ad5d03d509bc66764b6#78a0fd9a610733e6b1a96ad5d03d509bc66764b6" +source = "git+https://github.com/interlay/interbtc?rev=92278904c8f35b5f3ef3b3393065831df7dd05b7#92278904c8f35b5f3ef3b3393065831df7dd05b7" dependencies = [ "bitcoin 1.2.0", "currency", diff --git a/bitcoin/Cargo.toml b/bitcoin/Cargo.toml index b09da5946..182affa95 100644 --- a/bitcoin/Cargo.toml +++ b/bitcoin/Cargo.toml @@ -34,7 +34,7 @@ sp-core = { git = "https://github.com/paritytech/substrate", branch = "polkadot- [dependencies.interbtc-bitcoin] git = "https://github.com/interlay/interbtc" -rev = "78a0fd9a610733e6b1a96ad5d03d509bc66764b6" +rev = "92278904c8f35b5f3ef3b3393065831df7dd05b7" package = "bitcoin" optional = true diff --git a/runtime/Cargo.toml b/runtime/Cargo.toml index f28169c01..4574eac47 100644 --- a/runtime/Cargo.toml +++ b/runtime/Cargo.toml @@ -53,27 +53,27 @@ bitcoin = { path = "../bitcoin"} # Dependencies for the testing utils for integration tests tempdir = { version = "0.3.7", optional = true } -interbtc = { package = "interbtc-standalone", git = "https://github.com/interlay/interbtc", rev = "78a0fd9a610733e6b1a96ad5d03d509bc66764b6", optional = true } +interbtc = { package = "interbtc-standalone", git = "https://github.com/interlay/interbtc", rev = "92278904c8f35b5f3ef3b3393065831df7dd05b7", optional = true } rand = { version = "0.7", optional = true } [dependencies.primitives] git = "https://github.com/interlay/interbtc" -rev = "78a0fd9a610733e6b1a96ad5d03d509bc66764b6" +rev = "92278904c8f35b5f3ef3b3393065831df7dd05b7" package = "interbtc-primitives" [dependencies.module-bitcoin] git = "https://github.com/interlay/interbtc" -rev = "78a0fd9a610733e6b1a96ad5d03d509bc66764b6" +rev = "92278904c8f35b5f3ef3b3393065831df7dd05b7" package = "bitcoin" [dependencies.module-btc-relay] git = "https://github.com/interlay/interbtc" -rev = "78a0fd9a610733e6b1a96ad5d03d509bc66764b6" +rev = "92278904c8f35b5f3ef3b3393065831df7dd05b7" package = "btc-relay" [dependencies.module-oracle-rpc-runtime-api] git = "https://github.com/interlay/interbtc" -rev = "78a0fd9a610733e6b1a96ad5d03d509bc66764b6" +rev = "92278904c8f35b5f3ef3b3393065831df7dd05b7" package = "module-oracle-rpc-runtime-api" [dev-dependencies] diff --git a/runtime/metadata-parachain-interlay.scale b/runtime/metadata-parachain-interlay.scale deleted file mode 100644 index 5493b5fe7331f80390b10d938e82ee323abf0834..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 198715 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 yxYjqf{%vS%+@3)4EO!2LXq|qo&astf@3v+2_ R0U%9vY;}V1b89x93 delta 59 zcmV-B0L1^l&I`ZJ3$S}dZB7@hzC diff --git a/runtime/metadata-parachain-testnet.scale b/runtime/metadata-parachain-testnet.scale index 87d00a1fc09159b23ffb8c104cde30541a1a016f..568ce197f894d490b37f739fa74051746123e888 100644 GIT binary patch delta 59 zcmV-B0L1^akPNht46vUB0dupU1gNe7bCXH4X#sPCv$MCevjG;`0R^|pjRFr03v+2_ R0U%9vY;hSAVks_RE6z-3VGx`=zb2l|w=}0Dv$(mTa(hE1 From<::AccountId> for metadata::system::storage::Account<'a> { -// fn from(account_id: ::AccountId) -> Self { -// Self(&account_id) -// } -// } - pub fn parse_collateral_currency(src: &str) -> Result { match src.to_uppercase().as_str() { id if id == KSM.symbol() => Ok(Token(KSM)), diff --git a/runtime/src/rpc.rs b/runtime/src/rpc.rs index 4540a9e14..8de4e4241 100644 --- a/runtime/src/rpc.rs +++ b/runtime/src/rpc.rs @@ -31,9 +31,9 @@ cfg_if::cfg_if! { if #[cfg(feature = "standalone-metadata")] { const DEFAULT_SPEC_VERSION: u32 = 1; } else if #[cfg(feature = "parachain-metadata-kintsugi")] { - const DEFAULT_SPEC_VERSION: u32 = 13; + const DEFAULT_SPEC_VERSION: u32 = 14; } else if #[cfg(feature = "parachain-metadata-testnet")] { - const DEFAULT_SPEC_VERSION: u32 = 4; + const DEFAULT_SPEC_VERSION: u32 = 5; } } From 4fbf7c13eea2dbd2fe71fdf80d54b13df1e0d839 Mon Sep 17 00:00:00 2001 From: Gregory Hill Date: Tue, 12 Apr 2022 13:17:41 +0100 Subject: [PATCH 10/12] chore: compile client conditionally Signed-off-by: Gregory Hill --- runtime/Cargo.toml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/runtime/Cargo.toml b/runtime/Cargo.toml index 4574eac47..a7631752d 100644 --- a/runtime/Cargo.toml +++ b/runtime/Cargo.toml @@ -10,6 +10,7 @@ testing-utils = [ "tempdir", "interbtc", "rand", + "subxt-client", ] standalone-metadata = [] parachain-metadata-kintsugi = [] @@ -41,7 +42,7 @@ frame-support = { git = "https://github.com/paritytech/substrate", branch = "pol # Subxt dependencies # https://github.com/interlay/subxt/tree/polkadot-v0.9.18 subxt = { package = "subxt", git = "https://github.com/interlay/subxt", rev = "344e44c3729adcb945b937d6703212e7ae41da50" } -subxt-client = { package = "subxt-client", path = "./client" } +subxt-client = { package = "subxt-client", path = "./client", optional = true } jsonrpsee = { version = "0.10.1", features = ["macros", "jsonrpsee-types", "client", "jsonrpsee-ws-client", "jsonrpsee-client-transport"] } From 92f76a9ed1a22b1fb9207e16ee5ef373bbe0a4dd Mon Sep 17 00:00:00 2001 From: Gregory Hill Date: Tue, 12 Apr 2022 19:30:34 +0100 Subject: [PATCH 11/12] fix: metrics test interbtc import Signed-off-by: Gregory Hill --- Cargo.lock | 273 ++++++++++++++++++++++--------------------- vault/src/metrics.rs | 7 +- 2 files changed, 145 insertions(+), 135 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 39c86a63d..477e1bd6e 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -68,7 +68,7 @@ version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fcb51a0695d8f838b1ee009b3fbf66bda078cd64590202a864a8f3e8c4315c47" dependencies = [ - "getrandom 0.2.5", + "getrandom 0.2.6", "once_cell", "version_check 0.9.4", ] @@ -201,9 +201,9 @@ dependencies = [ [[package]] name = "async-global-executor" -version = "2.0.3" +version = "2.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c026b7e44f1316b567ee750fea85103f87fcb80792b860e979f221259796ca0a" +checksum = "c290043c9a95b05d45e952fb6383c67bcb61471f60cfa21e890dba6654234f43" dependencies = [ "async-channel", "async-executor", @@ -254,9 +254,9 @@ dependencies = [ [[package]] name = "async-std" -version = "1.10.0" +version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8056f1455169ab86dd47b47391e4ab0cbd25410a70e9fe675544f49bafaf952" +checksum = "52580991739c5cdb36cde8b2a516371c0a3b70dda36d916cc08b82372916808c" dependencies = [ "async-attributes", "async-channel", @@ -302,9 +302,9 @@ checksum = "30696a84d817107fc028e049980e09d5e140e8da8f1caeb17e8e950658a3cea9" [[package]] name = "async-trait" -version = "0.1.52" +version = "0.1.53" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "061a7acccaa286c011ddc30970520b98fa40e00c9d644633fb26b5fc63a265e3" +checksum = "ed6aa3524a2dfcf9fe180c51eae2b58738348d819517ceadf95789c51fff7600" dependencies = [ "proc-macro2", "quote", @@ -376,7 +376,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9fe17f59a06fe8b87a6fc8bf53bb70b3aba76d7685f432487a68cd5552853625" dependencies = [ "futures-core", - "getrandom 0.2.5", + "getrandom 0.2.6", "instant", "pin-project 1.0.10", "rand 0.8.5", @@ -393,7 +393,7 @@ dependencies = [ "cc", "cfg-if 1.0.0", "libc", - "miniz_oxide", + "miniz_oxide 0.4.4", "object", "rustc-demangle", ] @@ -866,7 +866,7 @@ checksum = "4acbb09d9ee8e23699b9634375c72795d095bf268439da88562cf9b501f181fa" dependencies = [ "camino", "cargo-platform", - "semver 1.0.6", + "semver 1.0.7", "serde", "serde_json", ] @@ -987,9 +987,9 @@ dependencies = [ [[package]] name = "clap" -version = "3.1.6" +version = "3.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8c93436c21e4698bacadf42917db28b23017027a4deccb35dbe47a7e7840123" +checksum = "71c47df61d9e16dc010b55dba1952a57d8c215dbb533fd13cdd13369aac73b1c" dependencies = [ "atty", "bitflags", @@ -1004,9 +1004,9 @@ dependencies = [ [[package]] name = "clap_derive" -version = "3.1.4" +version = "3.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da95d038ede1a964ce99f49cbe27a7fb538d1da595e4b4f70b8c8f338d17bf16" +checksum = "a3aab4734e083b809aaf5794e14e756d1c798d2c69c7f7de7a09a2f5214993c1" dependencies = [ "heck 0.4.0", "proc-macro-error", @@ -1344,9 +1344,9 @@ dependencies = [ [[package]] name = "darling" -version = "0.13.1" +version = "0.13.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0d720b8683f8dd83c65155f0530560cba68cd2bf395f6513a483caee57ff7f4" +checksum = "a01d95850c592940db9b8194bc39f4bc0e89dee5c4265e4b1807c34a9aba453c" dependencies = [ "darling_core", "darling_macro", @@ -1354,9 +1354,9 @@ dependencies = [ [[package]] name = "darling_core" -version = "0.13.1" +version = "0.13.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a340f241d2ceed1deb47ae36c4144b2707ec7dd0b649f894cb39bb595986324" +checksum = "859d65a907b6852c9361e3185c862aae7fafd2887876799fa55f5f99dc40d610" dependencies = [ "fnv", "ident_case", @@ -1368,9 +1368,9 @@ dependencies = [ [[package]] name = "darling_macro" -version = "0.13.1" +version = "0.13.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72c41b3b7352feb3211a0d743dc5700a4e3b60f51bd2b368892d1e0f9a95f44b" +checksum = "9c972679f83bdf9c42bd905396b6c3588a843a17f0f16dfcfa3e2c5d57441835" dependencies = [ "darling_core", "quote", @@ -1606,9 +1606,9 @@ checksum = "e78d4f1cc4ae33bbfc157ed5d5a5ef3bc29227303d595861deb238fcec4e9457" [[package]] name = "encoding_rs" -version = "0.8.30" +version = "0.8.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7896dc8abb250ffdda33912550faa54c88ec8b998dec0b2c55ab224921ce11df" +checksum = "9852635589dc9f9ea1b6fe9f05b50ef208c85c834a562f0c6abb1c475736ec2b" dependencies = [ "cfg-if 1.0.0", ] @@ -1895,15 +1895,15 @@ checksum = "279fb028e20b3c4c320317955b77c5e0c9701f05a1d309905d6fc702cdc5053e" [[package]] name = "flate2" -version = "1.0.22" +version = "1.0.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e6988e897c1c9c485f43b47a529cef42fde0547f9d8d41a7062518f1d8fc53f" +checksum = "b39522e96686d38f4bc984b9198e3a0613264abaebaff2c5c918bfa6b6da09af" dependencies = [ "cfg-if 1.0.0", "crc32fast", "libc", "libz-sys", - "miniz_oxide", + "miniz_oxide 0.5.1", ] [[package]] @@ -1956,9 +1956,9 @@ dependencies = [ [[package]] name = "fragile" -version = "1.1.0" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8da1b8f89c5b5a5b7e59405cfcf0bb9588e5ed19f0b57a4cd542bbba3f164a6d" +checksum = "e9d758e60b45e8d749c89c1b389ad8aee550f86aa12e2b9298b546dda7a82ab1" [[package]] name = "frame-benchmarking" @@ -2393,9 +2393,9 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.2.5" +version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d39cd93900197114fa1fcb7ae84ca742095eed9442088988ae74fa744e930e77" +checksum = "9be70c98951c83b8d2f8f60d7065fa6d5146873094452a1008da8c2f1e4205ad" dependencies = [ "cfg-if 1.0.0", "libc", @@ -2478,9 +2478,9 @@ dependencies = [ [[package]] name = "h2" -version = "0.3.12" +version = "0.3.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62eeb471aa3e3c9197aa4bfeabfe02982f6dc96f750486c0bb0009ac58b26d2b" +checksum = "37a82c6d637fc9515a4694bbf1cb2457b79d81ce52b3108bdeea58b07dd34a57" dependencies = [ "bytes 1.1.0", "fnv", @@ -2491,7 +2491,7 @@ dependencies = [ "indexmap", "slab", "tokio", - "tokio-util 0.6.9", + "tokio-util 0.7.1", "tracing", ] @@ -2694,9 +2694,9 @@ dependencies = [ [[package]] name = "httparse" -version = "1.6.0" +version = "1.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9100414882e15fb7feccb4897e5f0ff0ff1ca7d1a86a23208ada4d7a18e6c6c4" +checksum = "6330e8a36bd8c859f3fa6d9382911fbb7147ec39807f63b923933a247240b9ba" [[package]] name = "httpdate" @@ -2740,9 +2740,9 @@ dependencies = [ [[package]] name = "hyper" -version = "0.14.17" +version = "0.14.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "043f0e083e9901b6cc658a77d1eb86f4fc650bbb977a4337dd63192826aa85dd" +checksum = "b26ae0a80afebe130861d90abf98e3814a4f28a4c6ffeb5ab8ebb2be311e0ef2" dependencies = [ "bytes 1.1.0", "futures-channel", @@ -2770,7 +2770,7 @@ checksum = "5f9f7a97316d44c0af9b0301e65010573a853a9fc97046d7331d7f6bc0fd5a64" dependencies = [ "ct-logs", "futures-util", - "hyper 0.14.17", + "hyper 0.14.18", "log 0.4.16", "rustls 0.19.1", "rustls-native-certs 0.5.0", @@ -2786,13 +2786,13 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d87c48c02e0dc5e3b849a2041db3029fd066650f8f717c07bf8ed78ccb895cac" dependencies = [ "http", - "hyper 0.14.17", + "hyper 0.14.18", "log 0.4.16", "rustls 0.20.4", "rustls-native-certs 0.6.1", "tokio", "tokio-rustls 0.23.3", - "webpki-roots 0.22.2", + "webpki-roots 0.22.3", ] [[package]] @@ -2802,7 +2802,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d6183ddfa99b85da61a140bea0efc93fdf56ceaa041b37d553518030827f9905" dependencies = [ "bytes 1.1.0", - "hyper 0.14.17", + "hyper 0.14.18", "native-tls", "tokio", "tokio-native-tls", @@ -2904,9 +2904,9 @@ dependencies = [ [[package]] name = "indexmap" -version = "1.8.0" +version = "1.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "282a6247722caba404c065016bbfa522806e51714c34f5dfc3e4a3a46fcb4223" +checksum = "0f647032dfaa1f8b6dc29bd3edb7bbef4861b8b8007ebb118d6db284fd59f6ee" dependencies = [ "autocfg", "hashbrown 0.11.2", @@ -3198,9 +3198,9 @@ dependencies = [ [[package]] name = "js-sys" -version = "0.3.56" +version = "0.3.57" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a38fc24e30fd564ce974c02bf1d337caddff65be6cc4735a1f7eab22a7440f04" +checksum = "671a26f820db17c2a2750743f1dd03bafd15b98c9f30c7c2628c024c05d73397" dependencies = [ "wasm-bindgen", ] @@ -3225,7 +3225,7 @@ checksum = "d2b99d4207e2a04fb4581746903c2bb7eb376f88de9c699d0f3e10feeac0cd3a" dependencies = [ "derive_more", "futures 0.3.21", - "hyper 0.14.17", + "hyper 0.14.18", "hyper-tls", "jsonrpc-core", "jsonrpc-pubsub", @@ -3280,7 +3280,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e1dea6e07251d9ce6a552abfb5d7ad6bc290a4596c8dcc3d795fae2bbdc1f3ff" dependencies = [ "futures 0.3.21", - "hyper 0.14.17", + "hyper 0.14.18", "jsonrpc-core", "jsonrpc-server-utils", "log 0.4.16", @@ -3384,7 +3384,7 @@ dependencies = [ "tokio-rustls 0.23.3", "tokio-util 0.7.1", "tracing", - "webpki-roots 0.22.2", + "webpki-roots 0.22.3", ] [[package]] @@ -3399,7 +3399,7 @@ dependencies = [ "beef", "futures-channel", "futures-util", - "hyper 0.14.17", + "hyper 0.14.18", "jsonrpsee-types", "rustc-hash", "serde", @@ -3417,7 +3417,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "92709e0b8255691f4df954a0176b1cbc3312f151e7ed2e643812e8bd121f1d1c" dependencies = [ "async-trait", - "hyper 0.14.17", + "hyper 0.14.18", "hyper-rustls 0.23.0", "jsonrpsee-core", "jsonrpsee-types", @@ -3563,9 +3563,9 @@ checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55" [[package]] name = "libc" -version = "0.2.121" +version = "0.2.123" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "efaa7b300f3b5fe8eb6bf21ce3895e1751d9665086af2d64b42f19701015ff4f" +checksum = "cb691a747a7ab48abc15c5b42066eaafde10dc427e3b6ee2a1cf43db04c763bd" [[package]] name = "libloading" @@ -3959,7 +3959,7 @@ dependencies = [ "libp2p-core", "libp2p-swarm", "log 0.4.16", - "lru 0.7.3", + "lru 0.7.5", "rand 0.7.3", "smallvec", "unsigned-varint 0.7.1", @@ -4173,10 +4173,11 @@ checksum = "a261afc61b7a5e323933b402ca6a1765183687c614789b1e4db7762ed4230bca" [[package]] name = "lock_api" -version = "0.4.6" +version = "0.4.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88943dd7ef4a2e5a4bfa2753aaab3013e34ce2533d1996fb18ef591e315e2b3b" +checksum = "327fa5b6a6940e4699ec49a9beae1ea4845c6bab9314e4f84ac68742139d8c53" dependencies = [ + "autocfg", "scopeguard", ] @@ -4210,9 +4211,9 @@ dependencies = [ [[package]] name = "lru" -version = "0.7.3" +version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fcb87f3080f6d1d69e8c564c0fcfde1d7aa8cc451ce40cae89479111f03bc0eb" +checksum = "32613e41de4c47ab04970c348ca7ae7382cf116625755af070b008a15516a889" dependencies = [ "hashbrown 0.11.2", ] @@ -4394,6 +4395,15 @@ dependencies = [ "autocfg", ] +[[package]] +name = "miniz_oxide" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2b29bd4bc3f33391105ebee3589c19197c4271e3e5a9ec9bfe8127eeff8f082" +dependencies = [ + "adler", +] + [[package]] name = "mio" version = "0.6.23" @@ -4875,9 +4885,9 @@ dependencies = [ [[package]] name = "native-tls" -version = "0.2.8" +version = "0.2.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48ba9f7719b5a0f42f338907614285fb5fd70e53858141f69898a1fb7203b24d" +checksum = "fd7e2f3618557f980e0b17e8856252eee3c97fa12c54dff0ca290fb6266ca4a9" dependencies = [ "lazy_static", "libc", @@ -6407,9 +6417,9 @@ dependencies = [ [[package]] name = "parity-db" -version = "0.3.9" +version = "0.3.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d121a9af17a43efd0a38c6afa508b927ba07785bd4709efb2ac03bf77efef8d" +checksum = "b3e7f385d61562f5834282b90aa50b41f38a35cf64d5209b8b05487b50553dbe" dependencies = [ "blake2-rfc", "crc32fast", @@ -6554,7 +6564,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "87f5ec2493a61ac0506c0f4199f99070cbe83857b0337006a30f3e6719b8ef58" dependencies = [ "lock_api", - "parking_lot_core 0.9.1", + "parking_lot_core 0.9.2", ] [[package]] @@ -6573,9 +6583,9 @@ dependencies = [ [[package]] name = "parking_lot_core" -version = "0.9.1" +version = "0.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28141e0cc4143da2443301914478dc976a61ffdb3f043058310c70df2fed8954" +checksum = "995f667a6c822200b0433ac218e05582f0e2efa1b922a3fd2fbaadc5f87bab37" dependencies = [ "cfg-if 1.0.0", "libc", @@ -6586,9 +6596,9 @@ dependencies = [ [[package]] name = "paste" -version = "1.0.6" +version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0744126afe1a6dd7f394cb50a716dbe086cb06e255e53d8d0185d82828358fb5" +checksum = "0c520e05135d6e763148b6426a837e239041653ba7becd2e538c076c738025fc" [[package]] name = "pbkdf2" @@ -6739,9 +6749,9 @@ checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" [[package]] name = "pkg-config" -version = "0.3.24" +version = "0.3.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "58893f751c9b0412871a09abd62ecd2a00298c6c83befa223ef98c52aef40cbe" +checksum = "1df8c4ec4b0627e53bdf214615ad287367e482558cf84b109250b37464dc03ae" [[package]] name = "platforms" @@ -6914,9 +6924,9 @@ checksum = "dbf0c48bc1d91375ae5c3cd81e3722dff1abcf81a30960240640d223f59fe0e5" [[package]] name = "proc-macro2" -version = "1.0.36" +version = "1.0.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7342d5883fbccae1cc37a2353b09c87c9b0f3afd73f5fb9bba687a1f733b029" +checksum = "ec757218438d5fda206afc041538b2f6d889286160d649a86a24d37e1235afd1" dependencies = [ "unicode-xid", ] @@ -7027,9 +7037,9 @@ checksum = "cf7e6d18738ecd0902d30d1ad232c9125985a3422929b16c65517b38adc14f96" [[package]] name = "psm" -version = "0.1.17" +version = "0.1.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6eca0fa5dd7c4c96e184cec588f0b1db1ee3165e678db21c09793105acb17e6f" +checksum = "871372391786ccec00d3c5d3d6608905b3d4db263639cfe075d3b60a736d115a" dependencies = [ "cc", ] @@ -7059,9 +7069,9 @@ dependencies = [ [[package]] name = "quote" -version = "1.0.16" +version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4af2ec4714533fcdf07e886f17025ace8b997b9ce51204ee69b6da831c3da57" +checksum = "a1feb54ed693b93a84e14094943b84b7c4eae204c512b7ccb95ab0c66d278ad1" dependencies = [ "proc-macro2", ] @@ -7160,7 +7170,7 @@ version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d34f1408f55294453790c48b2f1ebbb1c5b4b7563eb1f418bcfcfdbb06ebb4e7" dependencies = [ - "getrandom 0.2.5", + "getrandom 0.2.6", ] [[package]] @@ -7262,20 +7272,20 @@ dependencies = [ [[package]] name = "redox_syscall" -version = "0.2.11" +version = "0.2.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8380fe0152551244f0747b1bf41737e0f8a74f97a14ccefd1148187271634f3c" +checksum = "62f25bc4c7e55e0b0b7a1d43fb893f4fa1361d0abe38b9ce4f323c2adfe6ef42" dependencies = [ "bitflags", ] [[package]] name = "redox_users" -version = "0.4.2" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7776223e2696f1aa4c6b0170e83212f47296a00424305117d013dfe86fb0fe55" +checksum = "b033d837a7cf162d7993aded9304e30a83213c648b6e389db233191f891e5c2b" dependencies = [ - "getrandom 0.2.5", + "getrandom 0.2.6", "redox_syscall", "thiserror", ] @@ -7463,7 +7473,7 @@ dependencies = [ "h2", "http", "http-body", - "hyper 0.14.17", + "hyper 0.14.18", "hyper-tls", "ipnet", "js-sys", @@ -7638,7 +7648,7 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" dependencies = [ - "semver 1.0.6", + "semver 1.0.7", ] [[package]] @@ -8329,7 +8339,7 @@ dependencies = [ "linked-hash-map", "linked_hash_set", "log 0.4.16", - "lru 0.7.3", + "lru 0.7.5", "parity-scale-codec", "parking_lot 0.12.0", "pin-project 1.0.10", @@ -8367,7 +8377,7 @@ dependencies = [ "futures-timer", "libp2p", "log 0.4.16", - "lru 0.7.3", + "lru 0.7.5", "sc-network", "sp-runtime", "substrate-prometheus-endpoint", @@ -8384,7 +8394,7 @@ dependencies = [ "futures 0.3.21", "futures-timer", "hex", - "hyper 0.14.17", + "hyper 0.14.18", "hyper-rustls 0.22.1", "num_cpus", "once_cell", @@ -8711,9 +8721,9 @@ dependencies = [ [[package]] name = "scale-info" -version = "2.0.1" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0563970d79bcbf3c537ce3ad36d859b30d36fc5b190efd227f1f7a84d7cf0d42" +checksum = "21fe4ca2b2295d5519b364579162b8e18f4902f6c9e8a975e7d05e7ef63622f5" dependencies = [ "bitvec", "cfg-if 1.0.0", @@ -8725,9 +8735,9 @@ dependencies = [ [[package]] name = "scale-info-derive" -version = "2.0.0" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7805950c36512db9e3251c970bb7ac425f326716941862205d612ab3b5e46e2" +checksum = "e767e52f2d5b2e71e86b1c82976bf4c3acdef88d72af7fa3498cef31cd9708cb" dependencies = [ "proc-macro-crate 1.1.3", "proc-macro2", @@ -8916,9 +8926,9 @@ dependencies = [ [[package]] name = "semver" -version = "1.0.6" +version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4a3381e03edd24287172047536f20cabde766e2cd3e65e6b00fb3af51c4f38d" +checksum = "d65bd28f48be7196d222d95b9243287f48d27aca604e08497513019ff0502cc4" dependencies = [ "serde", ] @@ -8998,7 +9008,7 @@ dependencies = [ "bitcoin 1.1.0", "clap", "futures 0.3.21", - "hyper 0.14.17", + "hyper 0.14.18", "hyper-tls", "runtime", "serde", @@ -9149,9 +9159,9 @@ dependencies = [ [[package]] name = "slab" -version = "0.4.5" +version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9def91fd1e018fe007022791f865d0ccc9b3a0d5001e01aabb8b40e46000afb5" +checksum = "eb703cfe953bccee95685111adeedb76fabe4e97549a58d16f03ea7b9367bb32" [[package]] name = "sled" @@ -9337,7 +9347,7 @@ source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc dependencies = [ "futures 0.3.21", "log 0.4.16", - "lru 0.7.3", + "lru 0.7.5", "parity-scale-codec", "parking_lot 0.12.0", "sp-api", @@ -10096,7 +10106,7 @@ version = "0.10.0-dev" source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" dependencies = [ "futures-util", - "hyper 0.14.17", + "hyper 0.14.18", "log 0.4.16", "prometheus 0.13.0", "thiserror", @@ -10230,9 +10240,9 @@ dependencies = [ [[package]] name = "syn" -version = "1.0.89" +version = "1.0.91" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea297be220d52398dcc07ce15a209fce436d361735ac1db700cab3b6cdfb9f54" +checksum = "b683b2b825c8eef438b77c36a06dc262294da3d5a5813fac20da149241dcd44d" dependencies = [ "proc-macro2", "quote", @@ -10525,6 +10535,7 @@ dependencies = [ "futures-sink", "pin-project-lite 0.2.8", "tokio", + "tracing", ] [[package]] @@ -10544,9 +10555,9 @@ checksum = "360dfd1d6d30e05fda32ace2c8c70e9c0a9da713275777f5a4dbb8a1893930c6" [[package]] name = "tracing" -version = "0.1.32" +version = "0.1.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a1bdf54a7c28a2bbf701e1d2233f6c77f473486b94bee4f9678da5a148dca7f" +checksum = "80b9fa4360528139bc96100c160b7ae879f5567f49f1782b0b02035b0358ebf3" dependencies = [ "cfg-if 1.0.0", "log 0.4.16", @@ -10568,9 +10579,9 @@ dependencies = [ [[package]] name = "tracing-core" -version = "0.1.23" +version = "0.1.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa31669fa42c09c34d94d8165dd2012e8ff3c66aca50f3bb226b68f216f2706c" +checksum = "90442985ee2f57c9e1b548ee72ae842f4a9a20e3f417cc38dbc5dc684d9bb4ee" dependencies = [ "lazy_static", "valuable", @@ -10749,7 +10760,7 @@ checksum = "4ee73e6e4924fe940354b8d4d98cad5231175d615cd855b758adc658c0aac6a0" dependencies = [ "cfg-if 1.0.0", "digest 0.10.3", - "rand 0.4.6", + "rand 0.8.5", "static_assertions", ] @@ -11043,7 +11054,7 @@ dependencies = [ "futures-util", "headers", "http", - "hyper 0.14.17", + "hyper 0.14.18", "log 0.4.16", "mime 0.3.16", "mime_guess", @@ -11082,9 +11093,9 @@ checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" [[package]] name = "wasm-bindgen" -version = "0.2.79" +version = "0.2.80" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25f1af7423d8588a3d840681122e72e6a24ddbcb3f0ec385cac0d12d24256c06" +checksum = "27370197c907c55e3f1a9fbe26f44e937fe6451368324e009cba39e139dc08ad" dependencies = [ "cfg-if 1.0.0", "wasm-bindgen-macro", @@ -11092,9 +11103,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-backend" -version = "0.2.79" +version = "0.2.80" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b21c0df030f5a177f3cba22e9bc4322695ec43e7257d865302900290bcdedca" +checksum = "53e04185bfa3a779273da532f5025e33398409573f348985af9a1cbf3774d3f4" dependencies = [ "bumpalo", "lazy_static", @@ -11107,9 +11118,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-futures" -version = "0.4.29" +version = "0.4.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2eb6ec270a31b1d3c7e266b999739109abce8b6c87e4b31fcfcd788b65267395" +checksum = "6f741de44b75e14c35df886aff5f1eb73aa114fa5d4d00dcd37b5e01259bf3b2" dependencies = [ "cfg-if 1.0.0", "js-sys", @@ -11119,9 +11130,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.79" +version = "0.2.80" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f4203d69e40a52ee523b2529a773d5ffc1dc0071801c87b3d270b471b80ed01" +checksum = "17cae7ff784d7e83a2fe7611cfe766ecf034111b49deb850a3dc7699c08251f5" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -11129,9 +11140,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.79" +version = "0.2.80" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfa8a30d46208db204854cadbb5d4baf5fcf8071ba5bf48190c3e59937962ebc" +checksum = "99ec0dc7a4756fffc231aab1b9f2f578d23cd391390ab27f952ae0c9b3ece20b" dependencies = [ "proc-macro2", "quote", @@ -11142,9 +11153,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-shared" -version = "0.2.79" +version = "0.2.80" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d958d035c4438e28c70e4321a2911302f10135ce78a9c7834c0cab4123d06a2" +checksum = "d554b7f530dee5964d9a9468d95c1f8b8acae4f282807e7d27d4b03099a46744" [[package]] name = "wasm-gc-api" @@ -11367,9 +11378,9 @@ dependencies = [ [[package]] name = "web-sys" -version = "0.3.56" +version = "0.3.57" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c060b319f29dd25724f09a2ba1418f142f539b2be99fbf4d2d5a8f7330afb8eb" +checksum = "7b17e741662c70c8bd24ac5c5b18de314a2c26c32bf8346ee1e6f53de919c283" dependencies = [ "js-sys", "wasm-bindgen", @@ -11406,9 +11417,9 @@ dependencies = [ [[package]] name = "webpki-roots" -version = "0.22.2" +version = "0.22.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "552ceb903e957524388c4d3475725ff2c8b7960922063af6ce53c9a43da07449" +checksum = "44d8de8415c823c8abd270ad483c6feeac771fad964890779f9a8cb24fbbc1bf" dependencies = [ "webpki 0.22.0", ] @@ -11484,9 +11495,9 @@ checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" [[package]] name = "windows-sys" -version = "0.32.0" +version = "0.34.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3df6e476185f92a12c072be4a189a0210dcdcf512a1891d6dff9edb874deadc6" +checksum = "5acdd78cb4ba54c0045ac14f62d8f94a03d10047904ae2a40afa1e99d8f70825" dependencies = [ "windows_aarch64_msvc", "windows_i686_gnu", @@ -11497,33 +11508,33 @@ dependencies = [ [[package]] name = "windows_aarch64_msvc" -version = "0.32.0" +version = "0.34.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8e92753b1c443191654ec532f14c199742964a061be25d77d7a96f09db20bf5" +checksum = "17cffbe740121affb56fad0fc0e421804adf0ae00891205213b5cecd30db881d" [[package]] name = "windows_i686_gnu" -version = "0.32.0" +version = "0.34.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a711c68811799e017b6038e0922cb27a5e2f43a2ddb609fe0b6f3eeda9de615" +checksum = "2564fde759adb79129d9b4f54be42b32c89970c18ebf93124ca8870a498688ed" [[package]] name = "windows_i686_msvc" -version = "0.32.0" +version = "0.34.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "146c11bb1a02615db74680b32a68e2d61f553cc24c4eb5b4ca10311740e44172" +checksum = "9cd9d32ba70453522332c14d38814bceeb747d80b3958676007acadd7e166956" [[package]] name = "windows_x86_64_gnu" -version = "0.32.0" +version = "0.34.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c912b12f7454c6620635bbff3450962753834be2a594819bd5e945af18ec64bc" +checksum = "cfce6deae227ee8d356d19effc141a509cc503dfd1f850622ec4b0f84428e1f4" [[package]] name = "windows_x86_64_msvc" -version = "0.32.0" +version = "0.34.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "504a2476202769977a040c6364301a3f65d0cc9e3fb08600b2bda150a0488316" +checksum = "d19538ccc21819d01deaf88d6a17eae6596a12e9aafdbb97916fb49896d89de9" [[package]] name = "winreg" diff --git a/vault/src/metrics.rs b/vault/src/metrics.rs index b44379cae..957b0f7b6 100644 --- a/vault/src/metrics.rs +++ b/vault/src/metrics.rs @@ -676,8 +676,6 @@ pub async fn publish_tokio_metrics( #[cfg(all(test, feature = "standalone-metadata"))] mod tests { - use std::collections::BTreeSet; - use super::*; use async_trait::async_trait; use bitcoin::{ @@ -687,8 +685,9 @@ mod tests { use runtime::{ AccountId, Balance, BlockNumber, BtcAddress, BtcPublicKey, CurrencyId, Error as RuntimeError, ErrorCode, InterBtcIssueRequest, InterBtcRedeemRequest, InterBtcRefundRequest, InterBtcReplaceRequest, InterBtcVault, - RequestIssueEvent, StatusCode, Token, VaultId, VaultStatus, Wallet, DOT, H256, INTERBTC, INTR, + RequestIssueEvent, StatusCode, Token, VaultId, VaultStatus, Wallet, DOT, H256, IBTC, INTR, }; + use std::collections::BTreeSet; mockall::mock! { Provider {} @@ -840,7 +839,7 @@ mod tests { } fn dummy_vault_id() -> VaultId { - VaultId::new(AccountId::new([1u8; 32]), Token(DOT), Token(INTERBTC)) + VaultId::new(AccountId::new([1u8; 32]), Token(DOT), Token(IBTC)) } struct MockProviderBuilder { From 1a60e74f85ffcdb5ccd6fb8159b15344b4730814 Mon Sep 17 00:00:00 2001 From: Gregory Hill Date: Wed, 13 Apr 2022 15:34:30 +0100 Subject: [PATCH 12/12] fix: embedded client deadlock, remove async-std Signed-off-by: Gregory Hill --- Cargo.lock | 1247 ++----------------------------------- runtime/client/Cargo.toml | 10 +- runtime/client/src/lib.rs | 50 +- runtime/src/tests.rs | 1 - 4 files changed, 75 insertions(+), 1233 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 477e1bd6e..922d7fc5c 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -158,22 +158,6 @@ version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e22d1f4b888c298a027c99dc9048015fac177587de20fc30232a057dfbe24a21" -[[package]] -name = "assert_matches" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b34d609dfbaf33d6889b2b7106d3ca345eacad44200913df5ba02bfd31d2ba9" - -[[package]] -name = "async-attributes" -version = "1.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3203e79f4dd9bdda415ed03cf14dae5a2bf775c683a00f94e9cd1faf0f596e5" -dependencies = [ - "quote", - "syn", -] - [[package]] name = "async-channel" version = "1.6.1" @@ -258,7 +242,6 @@ version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "52580991739c5cdb36cde8b2a516371c0a3b70dda36d916cc08b82372916808c" dependencies = [ - "async-attributes", "async-channel", "async-global-executor", "async-io", @@ -965,15 +948,6 @@ dependencies = [ "generic-array 0.14.5", ] -[[package]] -name = "ckb-merkle-mountain-range" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f061f97d64fd1822664bdfb722f7ae5469a97b77567390f7442be5b5dc82a5b" -dependencies = [ - "cfg-if 0.1.10", -] - [[package]] name = "clang-sys" version = "1.3.1" @@ -1625,26 +1599,6 @@ dependencies = [ "syn", ] -[[package]] -name = "enumflags2" -version = "0.6.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83c8d82922337cd23a15f88b70d8e4ef5f11da38dd7cdb55e84dd5de99695da0" -dependencies = [ - "enumflags2_derive", -] - -[[package]] -name = "enumflags2_derive" -version = "0.6.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "946ee94e3dbf58fdd324f9ce245c7b238d46a66f00e86a020b71996349e46cce" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - [[package]] name = "env_logger" version = "0.6.2" @@ -2023,20 +1977,6 @@ dependencies = [ "sp-trie", ] -[[package]] -name = "frame-election-provider-support" -version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" -dependencies = [ - "frame-support", - "frame-system", - "parity-scale-codec", - "scale-info", - "sp-arithmetic", - "sp-npos-elections", - "sp-std", -] - [[package]] name = "frame-executive" version = "4.0.0-dev" @@ -2154,17 +2094,6 @@ dependencies = [ "sp-api", ] -[[package]] -name = "frame-try-runtime" -version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" -dependencies = [ - "frame-support", - "sp-api", - "sp-runtime", - "sp-std", -] - [[package]] name = "fs-swap" version = "0.2.6" @@ -2607,12 +2536,6 @@ dependencies = [ "proc-macro-hack", ] -[[package]] -name = "hex-literal" -version = "0.3.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ebdb29d2ea9ed0083cd8cece49bbd968021bd99b0849edb4a9a7ee0fdf6a4e0" - [[package]] name = "hex-literal-impl" version = "0.2.3" @@ -3059,7 +2982,7 @@ dependencies = [ "frame-benchmarking", "frame-benchmarking-cli", "frame-support", - "hex-literal 0.2.2", + "hex-literal", "interbtc-primitives", "interbtc-rpc", "interbtc-runtime-standalone", @@ -4912,208 +4835,6 @@ dependencies = [ "winapi 0.3.9", ] -[[package]] -name = "node-cli" -version = "3.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" -dependencies = [ - "frame-system", - "frame-system-rpc-runtime-api", - "futures 0.3.21", - "hex-literal 0.3.4", - "log 0.4.16", - "node-executor", - "node-primitives", - "node-rpc", - "node-runtime", - "pallet-asset-tx-payment", - "pallet-balances", - "pallet-im-online", - "pallet-transaction-payment", - "parity-scale-codec", - "rand 0.8.5", - "sc-authority-discovery", - "sc-basic-authorship", - "sc-chain-spec", - "sc-client-api", - "sc-consensus", - "sc-consensus-babe", - "sc-consensus-slots", - "sc-consensus-uncles", - "sc-executor", - "sc-finality-grandpa", - "sc-network", - "sc-rpc", - "sc-service", - "sc-sync-state-rpc", - "sc-telemetry", - "sc-transaction-pool", - "sc-transaction-pool-api", - "serde", - "sp-api", - "sp-authority-discovery", - "sp-authorship", - "sp-consensus", - "sp-consensus-babe", - "sp-core", - "sp-finality-grandpa", - "sp-inherents", - "sp-keyring", - "sp-keystore", - "sp-runtime", - "sp-timestamp", - "sp-transaction-pool", - "sp-transaction-storage-proof", - "sp-trie", -] - -[[package]] -name = "node-executor" -version = "3.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" -dependencies = [ - "frame-benchmarking", - "node-primitives", - "node-runtime", - "parity-scale-codec", - "sc-executor", - "scale-info", - "sp-core", - "sp-keystore", - "sp-state-machine", - "sp-tracing", - "sp-trie", -] - -[[package]] -name = "node-primitives" -version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" -dependencies = [ - "frame-system", - "parity-scale-codec", - "scale-info", - "sp-application-crypto", - "sp-core", - "sp-runtime", -] - -[[package]] -name = "node-rpc" -version = "3.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" -dependencies = [ - "jsonrpc-core", - "node-primitives", - "pallet-contracts-rpc", - "pallet-mmr-rpc", - "pallet-transaction-payment-rpc", - "sc-chain-spec", - "sc-client-api", - "sc-consensus-babe", - "sc-consensus-babe-rpc", - "sc-consensus-epochs", - "sc-finality-grandpa", - "sc-finality-grandpa-rpc", - "sc-rpc", - "sc-rpc-api", - "sc-sync-state-rpc", - "sc-transaction-pool-api", - "sp-api", - "sp-block-builder", - "sp-blockchain", - "sp-consensus", - "sp-consensus-babe", - "sp-keystore", - "sp-runtime", - "substrate-frame-rpc-system", -] - -[[package]] -name = "node-runtime" -version = "3.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" -dependencies = [ - "frame-benchmarking", - "frame-election-provider-support", - "frame-executive", - "frame-support", - "frame-system", - "frame-system-rpc-runtime-api", - "frame-try-runtime", - "log 0.4.16", - "node-primitives", - "pallet-asset-tx-payment", - "pallet-assets", - "pallet-authority-discovery", - "pallet-authorship", - "pallet-babe", - "pallet-bags-list", - "pallet-balances", - "pallet-bounties", - "pallet-child-bounties", - "pallet-collective", - "pallet-contracts", - "pallet-contracts-primitives", - "pallet-contracts-rpc-runtime-api", - "pallet-conviction-voting", - "pallet-democracy", - "pallet-election-provider-multi-phase", - "pallet-elections-phragmen", - "pallet-gilt", - "pallet-grandpa", - "pallet-identity", - "pallet-im-online", - "pallet-indices", - "pallet-lottery", - "pallet-membership", - "pallet-mmr", - "pallet-multisig", - "pallet-offences", - "pallet-preimage", - "pallet-proxy", - "pallet-randomness-collective-flip", - "pallet-recovery", - "pallet-referenda", - "pallet-scheduler", - "pallet-session", - "pallet-society", - "pallet-staking", - "pallet-staking-reward-curve", - "pallet-state-trie-migration", - "pallet-sudo", - "pallet-timestamp", - "pallet-tips", - "pallet-transaction-payment", - "pallet-transaction-payment-rpc-runtime-api", - "pallet-transaction-storage", - "pallet-treasury", - "pallet-uniques", - "pallet-utility", - "pallet-vesting", - "pallet-whitelist", - "parity-scale-codec", - "scale-info", - "sp-api", - "sp-authority-discovery", - "sp-block-builder", - "sp-consensus-babe", - "sp-core", - "sp-inherents", - "sp-io", - "sp-npos-elections", - "sp-offchain", - "sp-runtime", - "sp-sandbox", - "sp-session", - "sp-staking", - "sp-std", - "sp-transaction-pool", - "sp-version", - "static_assertions", - "substrate-wasm-builder", -] - [[package]] name = "nodrop" version = "0.1.14" @@ -5514,85 +5235,70 @@ dependencies = [ ] [[package]] -name = "pallet-asset-tx-payment" -version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" -dependencies = [ - "frame-support", - "frame-system", - "pallet-transaction-payment", - "parity-scale-codec", - "scale-info", - "serde", - "sp-core", - "sp-io", - "sp-runtime", - "sp-std", -] - -[[package]] -name = "pallet-assets" +name = "pallet-aura" version = "4.0.0-dev" source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" dependencies = [ - "frame-benchmarking", "frame-support", "frame-system", + "pallet-timestamp", "parity-scale-codec", "scale-info", + "sp-application-crypto", + "sp-consensus-aura", "sp-runtime", "sp-std", ] [[package]] -name = "pallet-aura" +name = "pallet-authorship" version = "4.0.0-dev" source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" dependencies = [ "frame-support", "frame-system", - "pallet-timestamp", + "impl-trait-for-tuples", "parity-scale-codec", "scale-info", - "sp-application-crypto", - "sp-consensus-aura", + "sp-authorship", "sp-runtime", "sp-std", ] [[package]] -name = "pallet-authority-discovery" +name = "pallet-balances" version = "4.0.0-dev" source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" dependencies = [ + "frame-benchmarking", "frame-support", "frame-system", - "pallet-session", + "log 0.4.16", "parity-scale-codec", "scale-info", - "sp-application-crypto", - "sp-authority-discovery", "sp-runtime", "sp-std", ] [[package]] -name = "pallet-authorship" +name = "pallet-collective" version = "4.0.0-dev" source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" dependencies = [ + "frame-benchmarking", "frame-support", "frame-system", - "impl-trait-for-tuples", + "log 0.4.16", "parity-scale-codec", "scale-info", - "sp-authorship", + "sp-core", + "sp-io", "sp-runtime", "sp-std", ] [[package]] -name = "pallet-babe" +name = "pallet-grandpa" version = "4.0.0-dev" source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" dependencies = [ @@ -5602,12 +5308,11 @@ dependencies = [ "log 0.4.16", "pallet-authorship", "pallet-session", - "pallet-timestamp", "parity-scale-codec", "scale-info", "sp-application-crypto", - "sp-consensus-babe", - "sp-consensus-vrf", + "sp-core", + "sp-finality-grandpa", "sp-io", "sp-runtime", "sp-session", @@ -5616,44 +5321,44 @@ dependencies = [ ] [[package]] -name = "pallet-bags-list" +name = "pallet-membership" version = "4.0.0-dev" source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" dependencies = [ - "frame-election-provider-support", + "frame-benchmarking", "frame-support", "frame-system", "log 0.4.16", "parity-scale-codec", "scale-info", + "sp-core", + "sp-io", "sp-runtime", "sp-std", ] [[package]] -name = "pallet-balances" +name = "pallet-multisig" version = "4.0.0-dev" source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" dependencies = [ - "frame-benchmarking", "frame-support", "frame-system", - "log 0.4.16", "parity-scale-codec", "scale-info", + "sp-io", "sp-runtime", "sp-std", ] [[package]] -name = "pallet-bounties" +name = "pallet-preimage" version = "4.0.0-dev" source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" dependencies = [ + "frame-benchmarking", "frame-support", "frame-system", - "log 0.4.16", - "pallet-treasury", "parity-scale-codec", "scale-info", "sp-core", @@ -5663,504 +5368,38 @@ dependencies = [ ] [[package]] -name = "pallet-child-bounties" +name = "pallet-scheduler" version = "4.0.0-dev" source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" dependencies = [ + "frame-benchmarking", "frame-support", "frame-system", "log 0.4.16", - "pallet-bounties", - "pallet-treasury", "parity-scale-codec", "scale-info", - "sp-core", "sp-io", "sp-runtime", "sp-std", ] [[package]] -name = "pallet-collective" +name = "pallet-session" version = "4.0.0-dev" source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" dependencies = [ - "frame-benchmarking", "frame-support", "frame-system", + "impl-trait-for-tuples", "log 0.4.16", + "pallet-timestamp", "parity-scale-codec", "scale-info", "sp-core", "sp-io", "sp-runtime", - "sp-std", -] - -[[package]] -name = "pallet-contracts" -version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" -dependencies = [ - "bitflags", - "frame-benchmarking", - "frame-support", - "frame-system", - "log 0.4.16", - "pallet-contracts-primitives", - "pallet-contracts-proc-macro", - "parity-scale-codec", - "rand 0.8.5", - "scale-info", - "serde", - "smallvec", - "sp-core", - "sp-io", - "sp-runtime", - "sp-sandbox", - "sp-std", - "wasm-instrument", - "wasmi-validation", -] - -[[package]] -name = "pallet-contracts-primitives" -version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" -dependencies = [ - "bitflags", - "parity-scale-codec", - "scale-info", - "serde", - "sp-core", - "sp-rpc", - "sp-runtime", - "sp-std", -] - -[[package]] -name = "pallet-contracts-proc-macro" -version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "pallet-contracts-rpc" -version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" -dependencies = [ - "jsonrpc-core", - "jsonrpc-core-client", - "jsonrpc-derive", - "pallet-contracts-primitives", - "pallet-contracts-rpc-runtime-api", - "parity-scale-codec", - "serde", - "sp-api", - "sp-blockchain", - "sp-core", - "sp-rpc", - "sp-runtime", -] - -[[package]] -name = "pallet-contracts-rpc-runtime-api" -version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" -dependencies = [ - "pallet-contracts-primitives", - "parity-scale-codec", - "scale-info", - "sp-api", - "sp-runtime", - "sp-std", -] - -[[package]] -name = "pallet-conviction-voting" -version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" -dependencies = [ - "assert_matches", - "frame-benchmarking", - "frame-support", - "frame-system", - "parity-scale-codec", - "scale-info", - "serde", - "sp-io", - "sp-runtime", - "sp-std", -] - -[[package]] -name = "pallet-democracy" -version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" -dependencies = [ - "frame-benchmarking", - "frame-support", - "frame-system", - "parity-scale-codec", - "scale-info", - "serde", - "sp-io", - "sp-runtime", - "sp-std", -] - -[[package]] -name = "pallet-election-provider-multi-phase" -version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" -dependencies = [ - "frame-benchmarking", - "frame-election-provider-support", - "frame-support", - "frame-system", - "log 0.4.16", - "parity-scale-codec", - "rand 0.7.3", - "scale-info", - "sp-arithmetic", - "sp-core", - "sp-io", - "sp-npos-elections", - "sp-runtime", - "sp-std", - "static_assertions", - "strum", -] - -[[package]] -name = "pallet-elections-phragmen" -version = "5.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" -dependencies = [ - "frame-support", - "frame-system", - "log 0.4.16", - "parity-scale-codec", - "scale-info", - "sp-core", - "sp-io", - "sp-npos-elections", - "sp-runtime", - "sp-std", -] - -[[package]] -name = "pallet-gilt" -version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" -dependencies = [ - "frame-benchmarking", - "frame-support", - "frame-system", - "parity-scale-codec", - "scale-info", - "sp-arithmetic", - "sp-runtime", - "sp-std", -] - -[[package]] -name = "pallet-grandpa" -version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" -dependencies = [ - "frame-benchmarking", - "frame-support", - "frame-system", - "log 0.4.16", - "pallet-authorship", - "pallet-session", - "parity-scale-codec", - "scale-info", - "sp-application-crypto", - "sp-core", - "sp-finality-grandpa", - "sp-io", - "sp-runtime", - "sp-session", - "sp-staking", - "sp-std", -] - -[[package]] -name = "pallet-identity" -version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" -dependencies = [ - "enumflags2", - "frame-benchmarking", - "frame-support", - "frame-system", - "parity-scale-codec", - "scale-info", - "sp-io", - "sp-runtime", - "sp-std", -] - -[[package]] -name = "pallet-im-online" -version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" -dependencies = [ - "frame-support", - "frame-system", - "log 0.4.16", - "pallet-authorship", - "parity-scale-codec", - "scale-info", - "sp-application-crypto", - "sp-core", - "sp-io", - "sp-runtime", - "sp-staking", - "sp-std", -] - -[[package]] -name = "pallet-indices" -version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" -dependencies = [ - "frame-support", - "frame-system", - "parity-scale-codec", - "scale-info", - "sp-core", - "sp-io", - "sp-keyring", - "sp-runtime", - "sp-std", -] - -[[package]] -name = "pallet-lottery" -version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" -dependencies = [ - "frame-support", - "frame-system", - "parity-scale-codec", - "scale-info", - "sp-runtime", - "sp-std", -] - -[[package]] -name = "pallet-membership" -version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" -dependencies = [ - "frame-benchmarking", - "frame-support", - "frame-system", - "log 0.4.16", - "parity-scale-codec", - "scale-info", - "sp-core", - "sp-io", - "sp-runtime", - "sp-std", -] - -[[package]] -name = "pallet-mmr" -version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" -dependencies = [ - "ckb-merkle-mountain-range", - "frame-benchmarking", - "frame-support", - "frame-system", - "pallet-mmr-primitives", - "parity-scale-codec", - "scale-info", - "sp-core", - "sp-io", - "sp-runtime", - "sp-std", -] - -[[package]] -name = "pallet-mmr-primitives" -version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" -dependencies = [ - "frame-support", - "frame-system", - "log 0.4.16", - "parity-scale-codec", - "serde", - "sp-api", - "sp-core", - "sp-runtime", - "sp-std", -] - -[[package]] -name = "pallet-mmr-rpc" -version = "3.0.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" -dependencies = [ - "jsonrpc-core", - "jsonrpc-core-client", - "jsonrpc-derive", - "pallet-mmr-primitives", - "parity-scale-codec", - "serde", - "sp-api", - "sp-blockchain", - "sp-core", - "sp-runtime", -] - -[[package]] -name = "pallet-multisig" -version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" -dependencies = [ - "frame-support", - "frame-system", - "parity-scale-codec", - "scale-info", - "sp-io", - "sp-runtime", - "sp-std", -] - -[[package]] -name = "pallet-offences" -version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" -dependencies = [ - "frame-support", - "frame-system", - "log 0.4.16", - "pallet-balances", - "parity-scale-codec", - "scale-info", - "serde", - "sp-runtime", - "sp-staking", - "sp-std", -] - -[[package]] -name = "pallet-preimage" -version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" -dependencies = [ - "frame-benchmarking", - "frame-support", - "frame-system", - "parity-scale-codec", - "scale-info", - "sp-core", - "sp-io", - "sp-runtime", - "sp-std", -] - -[[package]] -name = "pallet-proxy" -version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" -dependencies = [ - "frame-support", - "frame-system", - "parity-scale-codec", - "scale-info", - "sp-io", - "sp-runtime", - "sp-std", -] - -[[package]] -name = "pallet-randomness-collective-flip" -version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" -dependencies = [ - "frame-support", - "frame-system", - "parity-scale-codec", - "safe-mix", - "scale-info", - "sp-runtime", - "sp-std", -] - -[[package]] -name = "pallet-recovery" -version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" -dependencies = [ - "frame-support", - "frame-system", - "parity-scale-codec", - "scale-info", - "sp-io", - "sp-runtime", - "sp-std", -] - -[[package]] -name = "pallet-referenda" -version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" -dependencies = [ - "frame-benchmarking", - "frame-support", - "frame-system", - "parity-scale-codec", - "scale-info", - "serde", - "sp-io", - "sp-runtime", - "sp-std", -] - -[[package]] -name = "pallet-scheduler" -version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" -dependencies = [ - "frame-benchmarking", - "frame-support", - "frame-system", - "log 0.4.16", - "parity-scale-codec", - "scale-info", - "sp-io", - "sp-runtime", - "sp-std", -] - -[[package]] -name = "pallet-session" -version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" -dependencies = [ - "frame-support", - "frame-system", - "impl-trait-for-tuples", - "log 0.4.16", - "pallet-timestamp", - "parity-scale-codec", - "scale-info", - "sp-core", - "sp-io", - "sp-runtime", - "sp-session", - "sp-staking", + "sp-session", + "sp-staking", "sp-std", "sp-trie", ] @@ -6179,55 +5418,6 @@ dependencies = [ "sp-std", ] -[[package]] -name = "pallet-staking" -version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" -dependencies = [ - "frame-election-provider-support", - "frame-support", - "frame-system", - "log 0.4.16", - "pallet-authorship", - "pallet-session", - "parity-scale-codec", - "scale-info", - "serde", - "sp-application-crypto", - "sp-io", - "sp-runtime", - "sp-staking", - "sp-std", -] - -[[package]] -name = "pallet-staking-reward-curve" -version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" -dependencies = [ - "proc-macro-crate 1.1.3", - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "pallet-state-trie-migration" -version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" -dependencies = [ - "frame-benchmarking", - "frame-support", - "frame-system", - "log 0.4.16", - "parity-scale-codec", - "scale-info", - "sp-core", - "sp-io", - "sp-runtime", - "sp-std", -] - [[package]] name = "pallet-sudo" version = "4.0.0-dev" @@ -6259,24 +5449,6 @@ dependencies = [ "sp-timestamp", ] -[[package]] -name = "pallet-tips" -version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" -dependencies = [ - "frame-support", - "frame-system", - "log 0.4.16", - "pallet-treasury", - "parity-scale-codec", - "scale-info", - "serde", - "sp-core", - "sp-io", - "sp-runtime", - "sp-std", -] - [[package]] name = "pallet-transaction-payment" version = "4.0.0-dev" @@ -6322,24 +5494,6 @@ dependencies = [ "sp-runtime", ] -[[package]] -name = "pallet-transaction-storage" -version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" -dependencies = [ - "frame-support", - "frame-system", - "pallet-balances", - "parity-scale-codec", - "scale-info", - "serde", - "sp-inherents", - "sp-io", - "sp-runtime", - "sp-std", - "sp-transaction-storage-proof", -] - [[package]] name = "pallet-treasury" version = "4.0.0-dev" @@ -6351,57 +5505,13 @@ dependencies = [ "pallet-balances", "parity-scale-codec", "scale-info", - "serde", - "sp-runtime", - "sp-std", -] - -[[package]] -name = "pallet-uniques" -version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" -dependencies = [ - "frame-benchmarking", - "frame-support", - "frame-system", - "log 0.4.16", - "parity-scale-codec", - "scale-info", - "sp-runtime", - "sp-std", -] - -[[package]] -name = "pallet-utility" -version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" -dependencies = [ - "frame-support", - "frame-system", - "parity-scale-codec", - "scale-info", - "sp-core", - "sp-io", - "sp-runtime", - "sp-std", -] - -[[package]] -name = "pallet-vesting" -version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" -dependencies = [ - "frame-support", - "frame-system", - "log 0.4.16", - "parity-scale-codec", - "scale-info", + "serde", "sp-runtime", "sp-std", ] [[package]] -name = "pallet-whitelist" +name = "pallet-utility" version = "4.0.0-dev" source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" dependencies = [ @@ -6409,7 +5519,7 @@ dependencies = [ "frame-system", "parity-scale-codec", "scale-info", - "sp-api", + "sp-core", "sp-io", "sp-runtime", "sp-std", @@ -7624,15 +6734,6 @@ version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3e75f6a532d0fd9f7f13144f392b6ad56a32696bfcd9c78f797f16bbb6f072d6" -[[package]] -name = "rustc_version" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a" -dependencies = [ - "semver 0.9.0", -] - [[package]] name = "rustc_version" version = "0.3.3" @@ -7746,15 +6847,6 @@ version = "1.0.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "73b4b750c782965c211b42f022f59af1fbceabdd026623714f104152f1ec149f" -[[package]] -name = "safe-mix" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d3d055a2582e6b00ed7a31c1524040aa391092bf636328350813f3a0605215c" -dependencies = [ - "rustc_version 0.2.3", -] - [[package]] name = "safemem" version = "0.3.3" @@ -7790,33 +6882,6 @@ dependencies = [ "thiserror", ] -[[package]] -name = "sc-authority-discovery" -version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" -dependencies = [ - "async-trait", - "futures 0.3.21", - "futures-timer", - "ip_network", - "libp2p", - "log 0.4.16", - "parity-scale-codec", - "prost", - "prost-build", - "rand 0.7.3", - "sc-client-api", - "sc-network", - "sp-api", - "sp-authority-discovery", - "sp-blockchain", - "sp-core", - "sp-keystore", - "sp-runtime", - "substrate-prometheus-endpoint", - "thiserror", -] - [[package]] name = "sc-basic-authorship" version = "0.10.0-dev" @@ -8028,86 +7093,6 @@ dependencies = [ "thiserror", ] -[[package]] -name = "sc-consensus-babe" -version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" -dependencies = [ - "async-trait", - "fork-tree", - "futures 0.3.21", - "log 0.4.16", - "merlin", - "num-bigint", - "num-rational 0.2.4", - "num-traits", - "parity-scale-codec", - "parking_lot 0.12.0", - "rand 0.7.3", - "retain_mut", - "sc-client-api", - "sc-consensus", - "sc-consensus-epochs", - "sc-consensus-slots", - "sc-keystore", - "sc-telemetry", - "schnorrkel", - "serde", - "sp-api", - "sp-application-crypto", - "sp-block-builder", - "sp-blockchain", - "sp-consensus", - "sp-consensus-babe", - "sp-consensus-slots", - "sp-consensus-vrf", - "sp-core", - "sp-inherents", - "sp-io", - "sp-keystore", - "sp-runtime", - "sp-version", - "substrate-prometheus-endpoint", - "thiserror", -] - -[[package]] -name = "sc-consensus-babe-rpc" -version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" -dependencies = [ - "futures 0.3.21", - "jsonrpc-core", - "jsonrpc-core-client", - "jsonrpc-derive", - "sc-consensus-babe", - "sc-consensus-epochs", - "sc-rpc-api", - "serde", - "sp-api", - "sp-application-crypto", - "sp-blockchain", - "sp-consensus", - "sp-consensus-babe", - "sp-core", - "sp-keystore", - "sp-runtime", - "thiserror", -] - -[[package]] -name = "sc-consensus-epochs" -version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" -dependencies = [ - "fork-tree", - "parity-scale-codec", - "sc-client-api", - "sc-consensus", - "sp-blockchain", - "sp-runtime", -] - [[package]] name = "sc-consensus-slots" version = "0.10.0-dev" @@ -8133,17 +7118,6 @@ dependencies = [ "thiserror", ] -[[package]] -name = "sc-consensus-uncles" -version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" -dependencies = [ - "sc-client-api", - "sp-authorship", - "sp-runtime", - "thiserror", -] - [[package]] name = "sc-executor" version = "0.10.0-dev" @@ -8262,30 +7236,6 @@ dependencies = [ "thiserror", ] -[[package]] -name = "sc-finality-grandpa-rpc" -version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" -dependencies = [ - "finality-grandpa", - "futures 0.3.21", - "jsonrpc-core", - "jsonrpc-core-client", - "jsonrpc-derive", - "jsonrpc-pubsub", - "log 0.4.16", - "parity-scale-codec", - "sc-client-api", - "sc-finality-grandpa", - "sc-rpc", - "serde", - "serde_json", - "sp-blockchain", - "sp-core", - "sp-runtime", - "thiserror", -] - [[package]] name = "sc-informant" version = "0.10.0-dev" @@ -8585,27 +7535,6 @@ dependencies = [ "sp-core", ] -[[package]] -name = "sc-sync-state-rpc" -version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" -dependencies = [ - "jsonrpc-core", - "jsonrpc-core-client", - "jsonrpc-derive", - "parity-scale-codec", - "sc-chain-spec", - "sc-client-api", - "sc-consensus-babe", - "sc-consensus-epochs", - "sc-finality-grandpa", - "serde", - "serde_json", - "sp-blockchain", - "sp-runtime", - "thiserror", -] - [[package]] name = "sc-telemetry" version = "4.0.0-dev" @@ -8906,15 +7835,6 @@ dependencies = [ "semver-parser 0.7.0", ] -[[package]] -name = "semver" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403" -dependencies = [ - "semver-parser 0.7.0", -] - [[package]] name = "semver" version = "0.11.0" @@ -9303,19 +8223,6 @@ dependencies = [ "static_assertions", ] -[[package]] -name = "sp-authority-discovery" -version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" -dependencies = [ - "parity-scale-codec", - "scale-info", - "sp-api", - "sp-application-crypto", - "sp-runtime", - "sp-std", -] - [[package]] name = "sp-authorship" version = "4.0.0-dev" @@ -9395,29 +8302,6 @@ dependencies = [ "sp-timestamp", ] -[[package]] -name = "sp-consensus-babe" -version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" -dependencies = [ - "async-trait", - "merlin", - "parity-scale-codec", - "scale-info", - "serde", - "sp-api", - "sp-application-crypto", - "sp-consensus", - "sp-consensus-slots", - "sp-consensus-vrf", - "sp-core", - "sp-inherents", - "sp-keystore", - "sp-runtime", - "sp-std", - "sp-timestamp", -] - [[package]] name = "sp-consensus-slots" version = "0.10.0-dev" @@ -9432,18 +8316,6 @@ dependencies = [ "sp-timestamp", ] -[[package]] -name = "sp-consensus-vrf" -version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" -dependencies = [ - "parity-scale-codec", - "schnorrkel", - "sp-core", - "sp-runtime", - "sp-std", -] - [[package]] name = "sp-core" version = "6.0.0" @@ -9639,32 +8511,6 @@ dependencies = [ "zstd", ] -[[package]] -name = "sp-npos-elections" -version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" -dependencies = [ - "parity-scale-codec", - "scale-info", - "serde", - "sp-arithmetic", - "sp-core", - "sp-npos-elections-solution-type", - "sp-runtime", - "sp-std", -] - -[[package]] -name = "sp-npos-elections-solution-type" -version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" -dependencies = [ - "proc-macro-crate 1.1.3", - "proc-macro2", - "quote", - "syn", -] - [[package]] name = "sp-offchain" version = "4.0.0-dev" @@ -9746,20 +8592,6 @@ dependencies = [ "syn", ] -[[package]] -name = "sp-sandbox" -version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.18#fc3fd073d3a0acf9933c3994b660ebd7b5833f65" -dependencies = [ - "log 0.4.16", - "parity-scale-codec", - "sp-core", - "sp-io", - "sp-std", - "sp-wasm-interface", - "wasmi", -] - [[package]] name = "sp-serializer" version = "4.0.0-dev" @@ -10163,21 +8995,17 @@ dependencies = [ name = "subxt-client" version = "0.1.0" dependencies = [ - "async-std", - "env_logger 0.8.4", "futures 0.1.31", "futures 0.3.21", "jsonrpsee", "jsonrpsee-core", "jsonrpsee-types", "log 0.4.16", - "node-cli", "sc-client-db", "sc-network", "sc-service", "serde_json", "sp-keyring", - "tempdir", "thiserror", "tokio", ] @@ -11200,7 +10028,6 @@ checksum = "ca00c5147c319a8ec91ec1a0edbec31e566ce2c9cc93b3f9bb86a9efd0eb795d" dependencies = [ "downcast-rs", "libc", - "libm", "memory_units", "num-rational 0.2.4", "num-traits", diff --git a/runtime/client/Cargo.toml b/runtime/client/Cargo.toml index b727b1a68..c281fe81d 100644 --- a/runtime/client/Cargo.toml +++ b/runtime/client/Cargo.toml @@ -12,7 +12,7 @@ description = "Embed a substrate node into your subxt application." keywords = ["parity", "substrate", "blockchain"] [dependencies] -async-std = "1.8.0" +tokio = { version = "1.10", features = ["time", "rt-multi-thread"] } futures = { version = "0.3.9", features = ["compat"], package = "futures" } futures01 = { package = "futures", version = "0.1.29" } jsonrpsee = "0.10.1" @@ -28,15 +28,7 @@ sp-keyring = { git = "https://github.com/paritytech/substrate", branch = "polkad sc-network = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.18", default-features = false } sc-service = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.18", default-features = false } -tokio = { version = "1.10", features = ["time", "rt-multi-thread"] } - [target.'cfg(target_arch="x86_64")'.dependencies] sc-service = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.18", default-features = false, features = [ "wasmtime", ] } - -[dev-dependencies] -async-std = { version = "1.8.0", features = ["attributes"] } -env_logger = "0.8.2" -node-cli = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.18", default-features = false } -tempdir = "0.3.7" \ No newline at end of file diff --git a/runtime/client/src/lib.rs b/runtime/client/src/lib.rs index 43cfad89a..261519fcb 100644 --- a/runtime/client/src/lib.rs +++ b/runtime/client/src/lib.rs @@ -1,4 +1,3 @@ -use async_std::{sync::Mutex, task}; use futures::{ channel::mpsc, future::{select, FutureExt}, @@ -19,8 +18,8 @@ use sc_service::{ ChainSpec, Configuration, KeepBlocks, RpcHandlers, RpcSession, TaskManager, }; pub use sp_keyring::AccountKeyring; -use std::sync::Arc; use thiserror::Error; +use tokio::task; /// Error thrown by the client. #[derive(Debug, Error)] @@ -34,20 +33,17 @@ pub enum SubxtClientError { } /// Sending end. -#[derive(Clone)] -pub struct Sender(Arc>>); +pub struct Sender(mpsc::UnboundedSender); /// Receiving end -#[derive(Clone)] -pub struct Receiver(Arc>>); +pub struct Receiver(mpsc::UnboundedReceiver); #[async_trait] impl TransportSenderT for Sender { type Error = SubxtClientError; async fn send(&mut self, msg: String) -> Result<(), Self::Error> { - let mut lock = self.0.lock().await; - lock.send(msg).await?; + self.0.send(msg).await?; Ok(()) } } @@ -57,15 +53,14 @@ impl TransportReceiverT for Receiver { type Error = SubxtClientError; async fn receive(&mut self) -> Result { - let mut lock = self.0.lock().await; - let msg = lock.next().await.expect("channel should be open"); + let msg = self.0.next().await.expect("channel should be open"); Ok(msg) } } /// Client for an embedded substrate node. -#[derive(Clone)] pub struct SubxtClient { + rpc: RpcHandlers, sender: Sender, receiver: Receiver, } @@ -76,6 +71,7 @@ impl SubxtClient { let (to_back, from_front) = mpsc::unbounded(); let (to_front, from_back) = mpsc::unbounded(); + let rpc_copy = rpc.clone(); let session = RpcSession::new(to_front.clone()); task::spawn( select( @@ -98,8 +94,9 @@ impl SubxtClient { ); Self { - sender: Sender(Arc::new(Mutex::new(to_back))), - receiver: Receiver(Arc::new(Mutex::new(from_back))), + rpc: rpc_copy, + sender: Sender(to_back), + receiver: Receiver(from_back), } } @@ -114,6 +111,33 @@ impl SubxtClient { } } +impl Clone for SubxtClient { + fn clone(&self) -> Self { + let (to_back, from_front) = mpsc::unbounded(); + let (to_front, from_back) = mpsc::unbounded(); + + let rpc = self.rpc.clone(); + let session = RpcSession::new(to_front.clone()); + task::spawn(Box::pin(from_front.for_each(move |message: String| { + let rpc = rpc.clone(); + let session = session.clone(); + let mut to_front = to_front.clone(); + async move { + let response = rpc.rpc_query(&session, &message).await; + if let Some(response) = response { + to_front.send(response).await.ok(); + } + } + }))); + + Self { + rpc: self.rpc.clone(), + sender: Sender(to_back), + receiver: Receiver(from_back), + } + } +} + impl From for JsonRpcClient { fn from(client: SubxtClient) -> Self { (client.sender, client.receiver).into() diff --git a/runtime/src/tests.rs b/runtime/src/tests.rs index 46d4b0df0..09b227c16 100644 --- a/runtime/src/tests.rs +++ b/runtime/src/tests.rs @@ -40,7 +40,6 @@ async fn set_exchange_rate(client: SubxtClient) { #[tokio::test(flavor = "multi_thread")] async fn test_getters() { let (client, _tmp_dir) = default_provider_client(AccountKeyring::Alice).await; - println!("got client"); let parachain_rpc = setup_provider(client.clone(), AccountKeyring::Alice).await; tokio::join!(