From 0f274c77c0aef92e1ccfb400185532832f19e2ce Mon Sep 17 00:00:00 2001 From: Niklas Adolfsson Date: Thu, 23 Nov 2023 13:40:33 +0100 Subject: [PATCH] chore: update deps to publish on crates.io (#715) * update subxt * update deps to crates.io * cleanup * revert runtime api usage * add missing files * strip metadata * downgrade metadata work with polkadot * remove unused staking miner tests --- Cargo.lock | 1968 ++++++++++++++++++++-------- Cargo.toml | 19 +- artifacts/metadata.scale | Bin 81025 -> 386413 bytes src/client.rs | 67 + src/commands/dry_run.rs | 25 +- src/commands/emergency_solution.rs | 12 +- src/commands/monitor.rs | 146 ++- src/epm.rs | 23 +- src/helpers.rs | 11 +- src/lib.rs | 1 + src/main.rs | 52 +- src/opt.rs | 9 +- src/prelude.rs | 12 +- tests/common.rs | 8 +- tests/staking_miner_node.rs | 77 -- 15 files changed, 1626 insertions(+), 804 deletions(-) create mode 100644 src/client.rs delete mode 100644 tests/staking_miner_node.rs diff --git a/Cargo.lock b/Cargo.lock index 0c5c52957..30421d130 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -27,6 +27,41 @@ version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" +[[package]] +name = "aead" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d122413f284cf2d62fb1b7db97e02edb8cda96d769b16e443a4f6195e35662b0" +dependencies = [ + "crypto-common", + "generic-array 0.14.7", +] + +[[package]] +name = "aes" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac1f845298e95f983ff1944b728ae08b8cebab80d684f0a832ed0fc74dfa27e2" +dependencies = [ + "cfg-if", + "cipher", + "cpufeatures", +] + +[[package]] +name = "aes-gcm" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "831010a0f742e1209b3bcea8fab6a8e149051ba6099432c8cb2cc117dec3ead1" +dependencies = [ + "aead", + "aes", + "cipher", + "ctr", + "ghash", + "subtle", +] + [[package]] name = "ahash" version = "0.7.6" @@ -160,6 +195,17 @@ dependencies = [ "syn 1.0.109", ] +[[package]] +name = "ark-bls12-377" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fb00293ba84f51ce3bd026bd0de55899c4e68f0a39a5728cebae3a73ffdc0a4f" +dependencies = [ + "ark-ec", + "ark-ff", + "ark-std", +] + [[package]] name = "ark-bls12-381" version = "0.4.0" @@ -189,18 +235,6 @@ dependencies = [ "zeroize", ] -[[package]] -name = "ark-ed-on-bls12-381-bandersnatch" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f9cde0f2aa063a2a5c28d39b47761aa102bda7c13c84fc118a61b87c7b2f785c" -dependencies = [ - "ark-bls12-381", - "ark-ec", - "ark-ff", - "ark-std", -] - [[package]] name = "ark-ff" version = "0.4.2" @@ -257,34 +291,6 @@ dependencies = [ "hashbrown 0.13.2", ] -[[package]] -name = "ark-scale" -version = "0.0.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49b08346a3e38e2be792ef53ee168623c9244d968ff00cd70fb9932f6fe36393" -dependencies = [ - "ark-ec", - "ark-ff", - "ark-serialize", - "ark-std", - "parity-scale-codec", -] - -[[package]] -name = "ark-secret-scalar" -version = "0.0.2" -source = "git+https://github.com/w3f/ring-vrf?rev=f4fe253#f4fe2534ccc6d916cd10d9c16891e673728ec8b4" -dependencies = [ - "ark-ec", - "ark-ff", - "ark-serialize", - "ark-std", - "ark-transcript", - "digest 0.10.7", - "rand_core 0.6.4", - "zeroize", -] - [[package]] name = "ark-serialize" version = "0.4.2" @@ -318,19 +324,6 @@ dependencies = [ "rand 0.8.5", ] -[[package]] -name = "ark-transcript" -version = "0.0.2" -source = "git+https://github.com/w3f/ring-vrf?rev=f4fe253#f4fe2534ccc6d916cd10d9c16891e673728ec8b4" -dependencies = [ - "ark-ff", - "ark-serialize", - "ark-std", - "digest 0.10.7", - "rand_core 0.6.4", - "sha3", -] - [[package]] name = "array-bytes" version = "4.2.0" @@ -349,6 +342,15 @@ version = "0.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a4c527152e37cf757a3f78aae5a06fbeefdb07ccc535c980a3208ee3060dd544" +[[package]] +name = "arrayvec" +version = "0.4.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd9fd44efafa8690358b7408d253adf110036b88f55672a933f01d616ad9b1b9" +dependencies = [ + "nodrop", +] + [[package]] name = "arrayvec" version = "0.5.2" @@ -376,27 +378,191 @@ dependencies = [ "wait-timeout", ] +[[package]] +name = "async-channel" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81953c529336010edd6d8e358f886d9581267795c61b19475b71314bffa46d35" +dependencies = [ + "concurrent-queue", + "event-listener 2.5.3", + "futures-core", +] + +[[package]] +name = "async-channel" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d37875bd9915b7d67c2f117ea2c30a0989874d0b2cb694fe25403c85763c0c9e" +dependencies = [ + "concurrent-queue", + "event-listener 3.1.0", + "event-listener-strategy", + "futures-core", + "pin-project-lite", +] + +[[package]] +name = "async-executor" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4b0c4a4f319e45986f347ee47fef8bf5e81c9abc3f6f58dc2391439f30df65f0" +dependencies = [ + "async-lock 2.8.0", + "async-task", + "concurrent-queue", + "fastrand 2.0.1", + "futures-lite 1.12.0", + "slab", +] + +[[package]] +name = "async-fs" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "279cf904654eeebfa37ac9bb1598880884924aab82e290aa65c9e77a0e142e06" +dependencies = [ + "async-lock 2.8.0", + "autocfg", + "blocking", + "futures-lite 1.12.0", +] + +[[package]] +name = "async-io" +version = "1.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fc5b45d93ef0529756f812ca52e44c221b35341892d3dcc34132ac02f3dd2af" +dependencies = [ + "async-lock 2.8.0", + "autocfg", + "cfg-if", + "concurrent-queue", + "futures-lite 1.12.0", + "log", + "parking", + "polling 2.8.0", + "rustix 0.37.27", + "slab", + "socket2 0.4.9", + "waker-fn", +] + +[[package]] +name = "async-io" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41ed9d5715c2d329bf1b4da8d60455b99b187f27ba726df2883799af9af60997" +dependencies = [ + "async-lock 3.1.0", + "cfg-if", + "concurrent-queue", + "futures-io", + "futures-lite 2.0.1", + "parking", + "polling 3.3.0", + "rustix 0.38.21", + "slab", + "tracing", + "waker-fn", + "windows-sys 0.48.0", +] + [[package]] name = "async-lock" -version = "2.6.0" +version = "2.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "287272293e9d8c41773cec55e365490fe034813a2f172f502d6ddcf75b2f582b" +dependencies = [ + "event-listener 2.5.3", +] + +[[package]] +name = "async-lock" +version = "3.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "deb2ab2aa8a746e221ab826c73f48bc6ba41be6763f0855cb249eb6d154cf1d7" +dependencies = [ + "event-listener 3.1.0", + "event-listener-strategy", + "pin-project-lite", +] + +[[package]] +name = "async-net" +version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8101efe8695a6c17e02911402145357e718ac92d3ff88ae8419e84b1707b685" +checksum = "0434b1ed18ce1cf5769b8ac540e33f01fa9471058b5e89da9e06f3c882a8c12f" dependencies = [ - "event-listener", - "futures-lite", + "async-io 1.13.0", + "blocking", + "futures-lite 1.12.0", +] + +[[package]] +name = "async-process" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ea6438ba0a08d81529c69b36700fa2f95837bfe3e776ab39cde9c14d9149da88" +dependencies = [ + "async-io 1.13.0", + "async-lock 2.8.0", + "async-signal", + "blocking", + "cfg-if", + "event-listener 3.1.0", + "futures-lite 1.12.0", + "rustix 0.38.21", + "windows-sys 0.48.0", ] +[[package]] +name = "async-signal" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e47d90f65a225c4527103a8d747001fc56e375203592b25ad103e1ca13124c5" +dependencies = [ + "async-io 2.2.0", + "async-lock 2.8.0", + "atomic-waker", + "cfg-if", + "futures-core", + "futures-io", + "rustix 0.38.21", + "signal-hook-registry", + "slab", + "windows-sys 0.48.0", +] + +[[package]] +name = "async-task" +version = "4.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4eb2cdb97421e01129ccb49169d8279ed21e829929144f4a22a6e54ac549ca1" + [[package]] name = "async-trait" -version = "0.1.64" +version = "0.1.74" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1cd7fce9ba8c3c042128ce72d8b2ddbf3a05747efb67ea0313c635e10bda47a2" +checksum = "a66537f1bb974b254c98ed142ff995236e81b9d0fe4db0575f46612cb15eb0f9" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.39", ] +[[package]] +name = "atomic" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c59bdb34bc650a32731b31bd8f0829cc15d24a708ee31559e0bb34f2bc320cba" + +[[package]] +name = "atomic-waker" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" + [[package]] name = "autocfg" version = "1.1.0" @@ -418,27 +584,6 @@ dependencies = [ "rustc-demangle", ] -[[package]] -name = "bandersnatch_vrfs" -version = "0.0.1" -source = "git+https://github.com/w3f/ring-vrf?rev=f4fe253#f4fe2534ccc6d916cd10d9c16891e673728ec8b4" -dependencies = [ - "ark-bls12-381", - "ark-ec", - "ark-ed-on-bls12-381-bandersnatch", - "ark-ff", - "ark-serialize", - "ark-std", - "dleq_vrf", - "fflonk", - "merlin 3.0.0", - "rand_chacha 0.3.1", - "rand_core 0.6.4", - "ring 0.1.0", - "sha2 0.10.7", - "zeroize", -] - [[package]] name = "base16ct" version = "0.2.0" @@ -459,9 +604,9 @@ checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" [[package]] name = "base64" -version = "0.21.0" +version = "0.21.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4a4ddaa51a5bc52a6948f74c06d20aaaddb71924eab79b8c97a8c556e942d6a" +checksum = "35636a1494ede3b646cc98f74f8e62c773a38a659ebc777a2cf26b9b74171df9" [[package]] name = "base64ct" @@ -487,12 +632,37 @@ dependencies = [ "serde", ] +[[package]] +name = "bip39" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93f2635620bf0b9d4576eb7bb9a38a55df78bd1205d26fa994b25911a69f212f" +dependencies = [ + "bitcoin_hashes", + "rand 0.8.5", + "rand_core 0.6.4", + "serde", + "unicode-normalization", +] + +[[package]] +name = "bitcoin_hashes" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90064b8dee6815a6470d60bad07bbbaee885c0e12d04177138fa3291a01b7bc4" + [[package]] name = "bitflags" version = "1.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" +[[package]] +name = "bitflags" +version = "2.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "327762f6e5a765692301e5bb513e0d9fef63be86bbc14528052b1cd3e6f03e07" + [[package]] name = "bitvec" version = "1.0.1" @@ -514,6 +684,16 @@ dependencies = [ "digest 0.10.7", ] +[[package]] +name = "blake2-rfc" +version = "0.2.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d6d530bdd2d52966a6d03b7a964add7ae1a288d25214066fd4b600f0f796400" +dependencies = [ + "arrayvec 0.4.12", + "constant_time_eq 0.1.5", +] + [[package]] name = "blake2b_simd" version = "1.0.1" @@ -522,7 +702,7 @@ checksum = "3c2f0dc9a68c6317d884f97cc36cf5a3d20ba14ce404227df55e1af708ab04bc" dependencies = [ "arrayref", "arrayvec 0.7.2", - "constant_time_eq", + "constant_time_eq 0.2.5", ] [[package]] @@ -564,6 +744,22 @@ dependencies = [ "byte-tools", ] +[[package]] +name = "blocking" +version = "1.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a37913e8dc4ddcc604f0c6d3bf2887c995153af3611de9e23c352b44c1b9118" +dependencies = [ + "async-channel 2.1.0", + "async-lock 3.1.0", + "async-task", + "fastrand 2.0.1", + "futures-io", + "futures-lite 2.0.1", + "piper", + "tracing", +] + [[package]] name = "bounded-collections" version = "0.1.8" @@ -660,6 +856,30 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" +[[package]] +name = "chacha20" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3613f74bd2eac03dad61bd53dbe620703d4371614fe0bc3b9f04dd36fe4e818" +dependencies = [ + "cfg-if", + "cipher", + "cpufeatures", +] + +[[package]] +name = "chacha20poly1305" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "10cd79432192d1c0f4e1a0fef9527696cc039165d729fb41b3f4f4f354c2dc35" +dependencies = [ + "aead", + "chacha20", + "cipher", + "poly1305", + "zeroize", +] + [[package]] name = "chrono" version = "0.4.23" @@ -672,6 +892,17 @@ dependencies = [ "winapi", ] +[[package]] +name = "cipher" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad" +dependencies = [ + "crypto-common", + "inout", + "zeroize", +] + [[package]] name = "clap" version = "4.4.8" @@ -703,7 +934,7 @@ dependencies = [ "heck", "proc-macro2", "quote", - "syn 2.0.37", + "syn 2.0.39", ] [[package]] @@ -728,27 +959,21 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "acbf1af155f9b9ef647e42cdc158db4b64a1b61f743629225fde6f3e0be2a7c7" -[[package]] -name = "common" -version = "0.1.0" -source = "git+https://github.com/w3f/ring-proof?rev=8657210#86572101f4210647984ab4efedba6b3fcc890895" -dependencies = [ - "ark-ec", - "ark-ff", - "ark-poly", - "ark-serialize", - "ark-std", - "fflonk", - "merlin 3.0.0", - "rand_chacha 0.3.1", -] - [[package]] name = "common-path" version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2382f75942f4b3be3690fe4f86365e9c853c1587d6ee58212cebf6e2a9ccd101" +[[package]] +name = "concurrent-queue" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f057a694a54f12365049b0958a1685bb52d567f5593b355fbf685838e873d400" +dependencies = [ + "crossbeam-utils", +] + [[package]] name = "const-oid" version = "0.9.2" @@ -777,12 +1002,30 @@ dependencies = [ "tiny-keccak", ] +[[package]] +name = "constant_time_eq" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "245097e9a4535ee1e3e3931fcfcd55a796a44c643e8596ff6566d68f09b87bbc" + [[package]] name = "constant_time_eq" version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "13418e745008f7349ec7e449155f419a61b92b58a99cc3616942b926825ec76b" +[[package]] +name = "constcat" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd7e35aee659887cbfb97aaf227ac12cad1a9d7c71e55ff3376839ed4e282d08" + +[[package]] +name = "convert_case" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e" + [[package]] name = "core-foundation" version = "0.9.3" @@ -835,6 +1078,25 @@ dependencies = [ "cfg-if", ] +[[package]] +name = "crossbeam-queue" +version = "0.3.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d1cfb3ea8a53f37c40dea2c7bedcbd88bdfae54f5e2175d6ecaff1c988353add" +dependencies = [ + "cfg-if", + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-utils" +version = "0.8.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a22b2d63d4d1dc0b7f1b6b2747dd0088008a9be28b6ddf0b1e7d335e3037294" +dependencies = [ + "cfg-if", +] + [[package]] name = "crunchy" version = "0.2.2" @@ -860,6 +1122,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" dependencies = [ "generic-array 0.14.7", + "rand_core 0.6.4", "typenum", ] @@ -883,6 +1146,15 @@ dependencies = [ "subtle", ] +[[package]] +name = "ctr" +version = "0.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0369ee1ad671834580515889b80f2ea915f23b8be8d0daa4bbaf2ac5c7590835" +dependencies = [ + "cipher", +] + [[package]] name = "curve25519-dalek" version = "2.1.3" @@ -923,6 +1195,7 @@ dependencies = [ "platforms", "rustc_version", "subtle", + "zeroize", ] [[package]] @@ -933,7 +1206,20 @@ checksum = "83fdaf97f4804dcebfa5862639bc9ce4121e82140bec2a987ac5140294865b5b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.37", + "syn 2.0.39", +] + +[[package]] +name = "curve25519-dalek-ng" +version = "4.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c359b7249347e46fb28804470d071c921156ad62b3eef5d34e2ba867533dec8" +dependencies = [ + "byteorder", + "digest 0.9.0", + "rand_core 0.6.4", + "subtle-ng", + "zeroize", ] [[package]] @@ -992,12 +1278,12 @@ dependencies = [ [[package]] name = "darling" -version = "0.20.1" +version = "0.20.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0558d22a7b463ed0241e993f76f09f30b126687447751a8638587b864e4b3944" +checksum = "0209d94da627ab5605dcccf08bb18afa5009cfbef48d8a8b7d7bdbc79be25c5e" dependencies = [ - "darling_core 0.20.1", - "darling_macro 0.20.1", + "darling_core 0.20.3", + "darling_macro 0.20.3", ] [[package]] @@ -1016,16 +1302,16 @@ dependencies = [ [[package]] name = "darling_core" -version = "0.20.1" +version = "0.20.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab8bfa2e259f8ee1ce5e97824a3c55ec4404a0d772ca7fa96bf19f0752a046eb" +checksum = "177e3443818124b357d8e76f53be906d60937f0d3a90773a664fa63fa253e621" dependencies = [ "fnv", "ident_case", "proc-macro2", "quote", "strsim", - "syn 2.0.37", + "syn 2.0.39", ] [[package]] @@ -1041,13 +1327,13 @@ dependencies = [ [[package]] name = "darling_macro" -version = "0.20.1" +version = "0.20.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29a358ff9f12ec09c3e61fef9b5a9902623a695a46a917b07f269bff1445611a" +checksum = "836a9bbc7ad63342d6d6e7b815ccab164bc77a2d95d84bc3117a8c0d5c98e2d5" dependencies = [ - "darling_core 0.20.1", + "darling_core 0.20.3", "quote", - "syn 2.0.37", + "syn 2.0.39", ] [[package]] @@ -1088,8 +1374,10 @@ version = "0.99.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4fb810d30a7c1953f91334de7244731fc3f3c10d7fe163338a35b9f640960321" dependencies = [ + "convert_case", "proc-macro2", "quote", + "rustc_version", "syn 1.0.109", ] @@ -1129,23 +1417,6 @@ dependencies = [ "subtle", ] -[[package]] -name = "dleq_vrf" -version = "0.0.2" -source = "git+https://github.com/w3f/ring-vrf?rev=f4fe253#f4fe2534ccc6d916cd10d9c16891e673728ec8b4" -dependencies = [ - "ark-ec", - "ark-ff", - "ark-scale", - "ark-secret-scalar", - "ark-serialize", - "ark-std", - "ark-transcript", - "arrayvec 0.7.2", - "rand_core 0.6.4", - "zeroize", -] - [[package]] name = "doc-comment" version = "0.3.3" @@ -1154,18 +1425,18 @@ checksum = "fea41bba32d969b513997752735605054bc0dfa92b4c56bf1189f2e174be7a10" [[package]] name = "docify" -version = "0.2.4" +version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76ee528c501ddd15d5181997e9518e59024844eac44fd1e40cb20ddb2a8562fa" +checksum = "4235e9b248e2ba4b92007fe9c646f3adf0ffde16dc74713eacc92b8bc58d8d2f" dependencies = [ "docify_macros", ] [[package]] name = "docify_macros" -version = "0.2.4" +version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ca01728ab2679c464242eca99f94e2ce0514b52ac9ad950e2ed03fca991231c" +checksum = "47020e12d7c7505670d1363dd53d6c23724f71a90a3ae32ff8eba40de8404626" dependencies = [ "common-path", "derive-syn-parse", @@ -1173,12 +1444,18 @@ dependencies = [ "proc-macro2", "quote", "regex", - "syn 2.0.37", + "syn 2.0.39", "termcolor", "toml", "walkdir", ] +[[package]] +name = "downcast-rs" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ea835d29036a4087793836fa931b08837ad5e957da9e23886b29586fb9b6650" + [[package]] name = "dyn-clonable" version = "0.9.0" @@ -1235,6 +1512,7 @@ version = "2.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "60f6d271ca33075c88028be6f04d502853d63a5ece419d269c15315d4fc1cf1d" dependencies = [ + "pkcs8", "signature 2.1.0", ] @@ -1258,7 +1536,9 @@ checksum = "7277392b266383ef8396db7fdeb1e77b6c52fed775f5df15bb24f35b72156980" dependencies = [ "curve25519-dalek 4.0.0", "ed25519 2.2.2", + "serde", "sha2 0.10.7", + "zeroize", ] [[package]] @@ -1277,9 +1557,9 @@ dependencies = [ [[package]] name = "either" -version = "1.8.1" +version = "1.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fcaabb2fef8c910e7f4c7ce9f67a1283a1715879a7c230ca9d6d1ae31f16d91" +checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07" [[package]] name = "elliptic-curve" @@ -1328,6 +1608,27 @@ version = "2.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0" +[[package]] +name = "event-listener" +version = "3.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d93877bcde0eb80ca09131a08d23f0a5c18a620b01db137dba666d18cd9b30c2" +dependencies = [ + "concurrent-queue", + "parking", + "pin-project-lite", +] + +[[package]] +name = "event-listener-strategy" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d96b852f1345da36d551b9473fa1e2b1eb5c5195585c6c018118bc92a8d91160" +dependencies = [ + "event-listener 3.1.0", + "pin-project-lite", +] + [[package]] name = "expander" version = "2.0.0" @@ -1338,7 +1639,7 @@ dependencies = [ "fs-err", "proc-macro2", "quote", - "syn 2.0.37", + "syn 2.0.39", ] [[package]] @@ -1362,6 +1663,12 @@ dependencies = [ "instant", ] +[[package]] +name = "fastrand" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "25cbce373ec4653f1a01a31e8a5e5ec0c622dc27ff9c4e6606eefef5cbbed4a5" + [[package]] name = "ff" version = "0.13.0" @@ -1372,19 +1679,6 @@ dependencies = [ "subtle", ] -[[package]] -name = "fflonk" -version = "0.1.0" -source = "git+https://github.com/w3f/fflonk#26a5045b24e169cffc1f9328ca83d71061145c40" -dependencies = [ - "ark-ec", - "ark-ff", - "ark-poly", - "ark-serialize", - "ark-std", - "merlin 3.0.0", -] - [[package]] name = "fiat-crypto" version = "0.1.20" @@ -1411,17 +1705,18 @@ checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" [[package]] name = "form_urlencoded" -version = "1.1.0" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9c384f161156f5260c24a097c56119f9be8c798586aecc13afbcbe7b7e26bf8" +checksum = "a62bc1cf6f830c2ec14a513a9fb124d0a213a629668a4186f329db21fe045652" dependencies = [ "percent-encoding", ] [[package]] name = "frame-benchmarking" -version = "4.0.0-dev" -source = "git+https://github.com/paritytech/polkadot-sdk#e67a879ca07e0efb5aae6b158e2469cba6cf09b3" +version = "26.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bffc0f167650e08c1c8eb3f564569e9e96d12a7cffebb9e3527041a36ffb7cce" dependencies = [ "frame-support", "frame-support-procedural", @@ -1433,42 +1728,44 @@ dependencies = [ "scale-info", "serde", "sp-api", - "sp-application-crypto 23.0.0 (git+https://github.com/paritytech/polkadot-sdk)", - "sp-core 21.0.0 (git+https://github.com/paritytech/polkadot-sdk)", - "sp-io 23.0.0 (git+https://github.com/paritytech/polkadot-sdk)", - "sp-runtime 24.0.0 (git+https://github.com/paritytech/polkadot-sdk)", - "sp-runtime-interface 17.0.0 (git+https://github.com/paritytech/polkadot-sdk)", - "sp-std 8.0.0 (git+https://github.com/paritytech/polkadot-sdk)", - "sp-storage 13.0.0 (git+https://github.com/paritytech/polkadot-sdk)", + "sp-application-crypto 28.0.0", + "sp-core 26.0.0", + "sp-io 28.0.0", + "sp-runtime 29.0.0", + "sp-runtime-interface 22.0.0", + "sp-std 12.0.0", + "sp-storage 17.0.0", "static_assertions", ] [[package]] name = "frame-election-provider-solution-type" -version = "4.0.0-dev" -source = "git+https://github.com/paritytech/polkadot-sdk#e67a879ca07e0efb5aae6b158e2469cba6cf09b3" +version = "12.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "03911cf3675af64252a6de7b4f383eafa80d5ea5830184e7a0739aeb0b95272d" dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn 2.0.37", + "syn 2.0.39", ] [[package]] name = "frame-election-provider-support" -version = "4.0.0-dev" -source = "git+https://github.com/paritytech/polkadot-sdk#e67a879ca07e0efb5aae6b158e2469cba6cf09b3" +version = "26.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d24bb28c8c04cd8e6aba0ecabd01a94266f0271b4e0e9d1fc65cef17fa4f479" dependencies = [ "frame-election-provider-solution-type", "frame-support", "frame-system", "parity-scale-codec", "scale-info", - "sp-arithmetic 16.0.0 (git+https://github.com/paritytech/polkadot-sdk)", - "sp-core 21.0.0 (git+https://github.com/paritytech/polkadot-sdk)", + "sp-arithmetic 21.0.0", + "sp-core 26.0.0", "sp-npos-elections", - "sp-runtime 24.0.0 (git+https://github.com/paritytech/polkadot-sdk)", - "sp-std 8.0.0 (git+https://github.com/paritytech/polkadot-sdk)", + "sp-runtime 29.0.0", + "sp-std 12.0.0", ] [[package]] @@ -1480,7 +1777,6 @@ dependencies = [ "cfg-if", "parity-scale-codec", "scale-info", - "serde", ] [[package]] @@ -1497,11 +1793,13 @@ dependencies = [ [[package]] name = "frame-support" -version = "4.0.0-dev" -source = "git+https://github.com/paritytech/polkadot-sdk#e67a879ca07e0efb5aae6b158e2469cba6cf09b3" +version = "26.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4a3c63ec85b8907268d6af6182d29d9a9752daa6979c9928566d56471f5ec731" dependencies = [ "aquamarine", - "bitflags", + "array-bytes 6.1.0", + "bitflags 1.3.2", "docify", "environmental", "frame-metadata 16.0.0", @@ -1517,28 +1815,29 @@ dependencies = [ "serde_json", "smallvec", "sp-api", - "sp-arithmetic 16.0.0 (git+https://github.com/paritytech/polkadot-sdk)", - "sp-core 21.0.0 (git+https://github.com/paritytech/polkadot-sdk)", + "sp-arithmetic 21.0.0", + "sp-core 26.0.0", "sp-core-hashing-proc-macro", - "sp-debug-derive 8.0.0 (git+https://github.com/paritytech/polkadot-sdk)", + "sp-debug-derive 12.0.0", "sp-genesis-builder", "sp-inherents", - "sp-io 23.0.0 (git+https://github.com/paritytech/polkadot-sdk)", + "sp-io 28.0.0", "sp-metadata-ir", - "sp-runtime 24.0.0 (git+https://github.com/paritytech/polkadot-sdk)", + "sp-runtime 29.0.0", "sp-staking", - "sp-state-machine 0.28.0 (git+https://github.com/paritytech/polkadot-sdk)", - "sp-std 8.0.0 (git+https://github.com/paritytech/polkadot-sdk)", - "sp-tracing 10.0.0 (git+https://github.com/paritytech/polkadot-sdk)", - "sp-weights 20.0.0 (git+https://github.com/paritytech/polkadot-sdk)", + "sp-state-machine 0.33.0", + "sp-std 12.0.0", + "sp-tracing 14.0.0", + "sp-weights 25.0.0", "static_assertions", "tt-call", ] [[package]] name = "frame-support-procedural" -version = "4.0.0-dev" -source = "git+https://github.com/paritytech/polkadot-sdk#e67a879ca07e0efb5aae6b158e2469cba6cf09b3" +version = "21.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "545ed122b36d06c416a6fbe2e66ab57a455200bfd20ece87cdd604d18f674f23" dependencies = [ "Inflector", "cfg-expr", @@ -1550,35 +1849,39 @@ dependencies = [ "proc-macro-warning", "proc-macro2", "quote", - "syn 2.0.37", + "sp-core-hashing 13.0.0", + "syn 2.0.39", ] [[package]] name = "frame-support-procedural-tools" -version = "4.0.0-dev" -source = "git+https://github.com/paritytech/polkadot-sdk#e67a879ca07e0efb5aae6b158e2469cba6cf09b3" +version = "9.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b3ac1266522a8c9a2d2d26d205ec3028b88582d5f3cd5cbc75d0ec8271d197b7" dependencies = [ "frame-support-procedural-tools-derive", "proc-macro-crate", "proc-macro2", "quote", - "syn 2.0.37", + "syn 2.0.39", ] [[package]] name = "frame-support-procedural-tools-derive" -version = "3.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk#e67a879ca07e0efb5aae6b158e2469cba6cf09b3" +version = "10.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9c078db2242ea7265faa486004e7fd8daaf1a577cfcac0070ce55d926922883" dependencies = [ "proc-macro2", "quote", - "syn 2.0.37", + "syn 2.0.39", ] [[package]] name = "frame-system" -version = "4.0.0-dev" -source = "git+https://github.com/paritytech/polkadot-sdk#e67a879ca07e0efb5aae6b158e2469cba6cf09b3" +version = "26.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed5d6c8e319cea3160ec8f6c831edc77ceca442c7488d0a6d2e6a6be54fcb142" dependencies = [ "cfg-if", "frame-support", @@ -1586,12 +1889,12 @@ dependencies = [ "parity-scale-codec", "scale-info", "serde", - "sp-core 21.0.0 (git+https://github.com/paritytech/polkadot-sdk)", - "sp-io 23.0.0 (git+https://github.com/paritytech/polkadot-sdk)", - "sp-runtime 24.0.0 (git+https://github.com/paritytech/polkadot-sdk)", - "sp-std 8.0.0 (git+https://github.com/paritytech/polkadot-sdk)", + "sp-core 26.0.0", + "sp-io 28.0.0", + "sp-runtime 29.0.0", + "sp-std 12.0.0", "sp-version", - "sp-weights 20.0.0 (git+https://github.com/paritytech/polkadot-sdk)", + "sp-weights 25.0.0", ] [[package]] @@ -1661,7 +1964,7 @@ version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7694489acd39452c77daa48516b894c153f192c3578d5a839b62c58099fcbf48" dependencies = [ - "fastrand", + "fastrand 1.9.0", "futures-core", "futures-io", "memchr", @@ -1670,6 +1973,16 @@ dependencies = [ "waker-fn", ] +[[package]] +name = "futures-lite" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3831c2651acb5177cbd83943f3d9c8912c5ad03c76afcc0e9511ba568ec5ebb" +dependencies = [ + "futures-core", + "pin-project-lite", +] + [[package]] name = "futures-macro" version = "0.3.29" @@ -1678,7 +1991,7 @@ checksum = "53b153fd91e4b0147f4aced87be237c98248656bb01050b96bf3ee89220a8ddb" dependencies = [ "proc-macro2", "quote", - "syn 2.0.37", + "syn 2.0.39", ] [[package]] @@ -1755,10 +2068,18 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c85e1d9ab2eadba7e5040d4e09cbd6d072b76a557ad64e797c2cb9d4da21d7e4" dependencies = [ "cfg-if", - "js-sys", "libc", "wasi 0.11.0+wasi-snapshot-preview1", - "wasm-bindgen", +] + +[[package]] +name = "ghash" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d930750de5717d2dd0b8c0d42c076c0e884c81a73e6cab859bbd2339c71e3e40" +dependencies = [ + "opaque-debug 0.3.0", + "polyval", ] [[package]] @@ -1840,6 +2161,9 @@ name = "hashbrown" version = "0.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2c6201b9ff9fd90a5a3bac2e56a830d0caa509576f0e503818ee82c181b3437a" +dependencies = [ + "serde", +] [[package]] name = "heck" @@ -1968,10 +2292,11 @@ dependencies = [ [[package]] name = "hyper-rustls" -version = "0.23.2" +version = "0.24.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1788965e61b367cd03a62950836d5cd41560c3577d90e40e0819373194d1661c" +checksum = "ec3efd23720e2049821a693cbc7e65ea87c72f1c58ff2f9522ff332b1491e590" dependencies = [ + "futures-util", "http", "hyper", "log", @@ -1979,7 +2304,6 @@ dependencies = [ "rustls-native-certs", "tokio", "tokio-rustls", - "webpki-roots", ] [[package]] @@ -2014,9 +2338,9 @@ checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" [[package]] name = "idna" -version = "0.3.0" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e14ddfc70884202db2244c223200c204c2bda1bc6e0998d11b5e024d657209e6" +checksum = "7d20d6b07bfbc108882d88ed8e37d39636dcc260e15e30c45e6ba089610b917c" dependencies = [ "unicode-bidi", "unicode-normalization", @@ -2091,6 +2415,21 @@ dependencies = [ "hashbrown 0.14.0", ] +[[package]] +name = "indexmap-nostd" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e04e2fd2b8188ea827b32ef11de88377086d690286ab35747ef7f9bf3ccb590" + +[[package]] +name = "inout" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a0c10553d664a4d0bcff9f4215d0aac67a639cc68ef660840afe309b807bc9f5" +dependencies = [ + "generic-array 0.14.7", +] + [[package]] name = "instant" version = "0.1.12" @@ -2109,6 +2448,12 @@ dependencies = [ "num-traits", ] +[[package]] +name = "intx" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6f38a50a899dc47a6d0ed5508e7f601a2e34c3a85303514b5d137f3c10a0c75" + [[package]] name = "io-lifetimes" version = "1.0.11" @@ -2146,9 +2491,9 @@ dependencies = [ [[package]] name = "jsonrpsee" -version = "0.16.2" +version = "0.20.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d291e3a5818a2384645fd9756362e6d89cf0541b0b916fa7702ea4a9833608e" +checksum = "affdc52f7596ccb2d7645231fc6163bb314630c989b64998f3699a28b4d5d4dc" dependencies = [ "jsonrpsee-client-transport", "jsonrpsee-core", @@ -2159,14 +2504,13 @@ dependencies = [ [[package]] name = "jsonrpsee-client-transport" -version = "0.16.2" +version = "0.20.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "965de52763f2004bc91ac5bcec504192440f0b568a5d621c59d9dbd6f886c3fb" +checksum = "b5b005c793122d03217da09af68ba9383363caa950b90d3436106df8cabce935" dependencies = [ "futures-util", "http", "jsonrpsee-core", - "jsonrpsee-types", "pin-project", "rustls-native-certs", "soketto", @@ -2175,20 +2519,19 @@ dependencies = [ "tokio-rustls", "tokio-util", "tracing", - "webpki-roots", + "url", ] [[package]] name = "jsonrpsee-core" -version = "0.16.2" +version = "0.20.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4e70b4439a751a5de7dd5ed55eacff78ebf4ffe0fc009cb1ebb11417f5b536b" +checksum = "da2327ba8df2fdbd5e897e2b5ed25ce7f299d345b9736b6828814c3dbd1fd47b" dependencies = [ "anyhow", - "async-lock", + "async-lock 2.8.0", "async-trait", "beef", - "futures-channel", "futures-timer", "futures-util", "hyper", @@ -2203,28 +2546,29 @@ dependencies = [ [[package]] name = "jsonrpsee-http-client" -version = "0.16.2" +version = "0.20.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc345b0a43c6bc49b947ebeb936e886a419ee3d894421790c969cc56040542ad" +checksum = "5f80c17f62c7653ce767e3d7288b793dfec920f97067ceb189ebdd3570f2bc20" dependencies = [ "async-trait", "hyper", "hyper-rustls", "jsonrpsee-core", "jsonrpsee-types", - "rustc-hash", "serde", "serde_json", "thiserror", "tokio", + "tower", "tracing", + "url", ] [[package]] name = "jsonrpsee-types" -version = "0.16.2" +version = "0.20.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5bd522fe1ce3702fd94812965d7bb7a3364b1c9aba743944c5a00529aae80f8c" +checksum = "5be0be325642e850ed0bdff426674d2e66b2b7117c9be23a7caef68a2902b7d9" dependencies = [ "anyhow", "beef", @@ -2236,14 +2580,15 @@ dependencies = [ [[package]] name = "jsonrpsee-ws-client" -version = "0.16.2" +version = "0.20.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b83daeecfc6517cfe210df24e570fb06213533dfb990318fae781f4c7119dd9" +checksum = "bca9cb3933ccae417eb6b08c3448eb1cb46e39834e5b503e395e5e5bd08546c0" dependencies = [ "http", "jsonrpsee-client-transport", "jsonrpsee-core", "jsonrpsee-types", + "url", ] [[package]] @@ -2280,6 +2625,12 @@ version = "0.2.150" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "89d92a4743f9a61002fae18374ed11e7973f530cb3a3255fb354818118b2203c" +[[package]] +name = "libm" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ec2a862134d2a7d32d7983ddcdd1c4923530833c9f2ea1a44fc5fa473989058" + [[package]] name = "libsecp256k1" version = "0.7.1" @@ -2352,6 +2703,18 @@ version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f051f77a7c8e6957c0696eac88f26b0117e54f52d3fc682ab19397a8812846a4" +[[package]] +name = "linux-raw-sys" +version = "0.3.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef53942eb7bf7ff43a617b3e2c1c4a5ecf5944a7c1bc12d7ee39bbb15e5c1519" + +[[package]] +name = "linux-raw-sys" +version = "0.4.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "969488b55f8ac402214f3f5fd243ebb7206cf82de60d3172994707a4bcc2b829" + [[package]] name = "lock_api" version = "0.4.9" @@ -2368,6 +2731,12 @@ version = "0.4.20" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f" +[[package]] +name = "lru" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "718e8fae447df0c7e1ba7f5189829e63fd536945c8988d61444c19039f16b670" + [[package]] name = "mach" version = "0.3.2" @@ -2379,50 +2748,50 @@ dependencies = [ [[package]] name = "macro_magic" -version = "0.4.2" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aee866bfee30d2d7e83835a4574aad5b45adba4cc807f2a3bbba974e5d4383c9" +checksum = "e03844fc635e92f3a0067e25fa4bf3e3dbf3f2927bf3aa01bb7bc8f1c428949d" dependencies = [ "macro_magic_core", "macro_magic_macros", "quote", - "syn 2.0.37", + "syn 2.0.39", ] [[package]] name = "macro_magic_core" -version = "0.4.2" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e766a20fd9c72bab3e1e64ed63f36bd08410e75803813df210d1ce297d7ad00" +checksum = "468155613a44cfd825f1fb0ffa532b018253920d404e6fca1e8d43155198a46d" dependencies = [ "const-random", "derive-syn-parse", "macro_magic_core_macros", "proc-macro2", "quote", - "syn 2.0.37", + "syn 2.0.39", ] [[package]] name = "macro_magic_core_macros" -version = "0.4.2" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c12469fc165526520dff2807c2975310ab47cf7190a45b99b49a7dc8befab17b" +checksum = "9ea73aa640dc01d62a590d48c0c3521ed739d53b27f919b25c3551e233481654" dependencies = [ "proc-macro2", "quote", - "syn 2.0.37", + "syn 2.0.39", ] [[package]] name = "macro_magic_macros" -version = "0.4.2" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8fb85ec1620619edf2984a7693497d4ec88a9665d8b87e942856884c92dbf2a" +checksum = "ef9d79ae96aaba821963320eb2b6e34d17df1e5a83d8a1985c29cc5be59577b3" dependencies = [ "macro_magic_core", "quote", - "syn 2.0.37", + "syn 2.0.39", ] [[package]] @@ -2464,7 +2833,7 @@ version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b20a59d985586e4a5aef64564ac77299f8586d8be6cf9106a5a40207e8908efb" dependencies = [ - "rustix", + "rustix 0.36.16", ] [[package]] @@ -2509,6 +2878,12 @@ dependencies = [ "zeroize", ] +[[package]] +name = "minimal-lexical" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" + [[package]] name = "miniz_oxide" version = "0.6.2" @@ -2556,12 +2931,34 @@ dependencies = [ "syn 1.0.109", ] +[[package]] +name = "no-std-net" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43794a0ace135be66a25d3ae77d41b91615fb68ae937f904090203e81f755b65" + +[[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.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" +dependencies = [ + "memchr", + "minimal-lexical", +] + [[package]] name = "nu-ansi-term" version = "0.46.0" @@ -2619,6 +3016,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0638a1c9d0a3c0914158145bc76cff373a75a627e6ecbfb71cbe6f453a5a19b0" dependencies = [ "autocfg", + "num-bigint", "num-integer", "num-traits", ] @@ -2686,8 +3084,9 @@ checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" [[package]] name = "pallet-election-provider-multi-phase" -version = "4.0.0-dev" -source = "git+https://github.com/paritytech/polkadot-sdk#e67a879ca07e0efb5aae6b158e2469cba6cf09b3" +version = "25.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c367a8b93ec6f1c296a316ec122848f07b49f86e2e75f754283f5d231ad92efa" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -2698,27 +3097,28 @@ dependencies = [ "parity-scale-codec", "rand 0.8.5", "scale-info", - "sp-arithmetic 16.0.0 (git+https://github.com/paritytech/polkadot-sdk)", - "sp-core 21.0.0 (git+https://github.com/paritytech/polkadot-sdk)", - "sp-io 23.0.0 (git+https://github.com/paritytech/polkadot-sdk)", + "sp-arithmetic 21.0.0", + "sp-core 26.0.0", + "sp-io 28.0.0", "sp-npos-elections", - "sp-runtime 24.0.0 (git+https://github.com/paritytech/polkadot-sdk)", - "sp-std 8.0.0 (git+https://github.com/paritytech/polkadot-sdk)", + "sp-runtime 29.0.0", + "sp-std 12.0.0", "strum", ] [[package]] name = "pallet-election-provider-support-benchmarking" -version = "4.0.0-dev" -source = "git+https://github.com/paritytech/polkadot-sdk#e67a879ca07e0efb5aae6b158e2469cba6cf09b3" +version = "25.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "416855ba43d8483efa0cf47f1de2c6e47d17f3899ae777d3521bc37baf894792" dependencies = [ "frame-benchmarking", "frame-election-provider-support", "frame-system", "parity-scale-codec", "sp-npos-elections", - "sp-runtime 24.0.0 (git+https://github.com/paritytech/polkadot-sdk)", - "sp-std 8.0.0 (git+https://github.com/paritytech/polkadot-sdk)", + "sp-runtime 29.0.0", + "sp-std 12.0.0", ] [[package]] @@ -2807,30 +3207,39 @@ dependencies = [ "digest 0.10.7", ] +[[package]] +name = "pbkdf2" +version = "0.12.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8ed6a7761f76e3b9f92dfb0a60a6a6477c61024b775147ff0973a02653abaf2" +dependencies = [ + "digest 0.10.7", +] + [[package]] name = "percent-encoding" -version = "2.2.0" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "478c572c3d73181ff3c2539045f6eb99e5491218eae919370993b890cdbdd98e" +checksum = "9b2a4787296e9989611394c33f193f676704af1686e70b8f8033ab5ba9a35a94" [[package]] name = "pin-project" -version = "1.0.12" +version = "1.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad29a609b6bcd67fee905812e544992d216af9d755757c05ed2d0e15a74c6ecc" +checksum = "fda4ed1c6c173e3fc7a83629421152e01d7b1f9b7f65fb301e490e8cfc656422" dependencies = [ "pin-project-internal", ] [[package]] name = "pin-project-internal" -version = "1.0.12" +version = "1.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "069bdb1e05adc7a8990dce9cc75370895fbe4e3d58b9b73bf1aee56359344a55" +checksum = "4359fd9c9171ec6e8c62926d6faaf553a8dc3f64e1507e76da7911b4f6a04405" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.39", ] [[package]] @@ -2845,6 +3254,17 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" +[[package]] +name = "piper" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "668d31b1c4eba19242f2088b2bf3316b82ca31082a8335764db4e083db7485d4" +dependencies = [ + "atomic-waker", + "fastrand 2.0.1", + "futures-io", +] + [[package]] name = "pkcs8" version = "0.10.2" @@ -2861,6 +3281,59 @@ version = "3.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e3d7ddaed09e0eb771a79ab0fd64609ba0afb0a8366421957936ad14cbd13630" +[[package]] +name = "polling" +version = "2.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4b2d323e8ca7996b3e23126511a523f7e62924d93ecd5ae73b333815b0eb3dce" +dependencies = [ + "autocfg", + "bitflags 1.3.2", + "cfg-if", + "concurrent-queue", + "libc", + "log", + "pin-project-lite", + "windows-sys 0.48.0", +] + +[[package]] +name = "polling" +version = "3.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e53b6af1f60f36f8c2ac2aad5459d75a5a9b4be1e8cdd40264f315d78193e531" +dependencies = [ + "cfg-if", + "concurrent-queue", + "pin-project-lite", + "rustix 0.38.21", + "tracing", + "windows-sys 0.48.0", +] + +[[package]] +name = "poly1305" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8159bd90725d2df49889a078b54f4f79e87f1f8a8444194cdca81d38f5393abf" +dependencies = [ + "cpufeatures", + "opaque-debug 0.3.0", + "universal-hash", +] + +[[package]] +name = "polyval" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d52cff9d1d4dee5fe6d03729099f4a310a41179e0a10dbf542039873f2e826fb" +dependencies = [ + "cfg-if", + "cpufeatures", + "opaque-debug 0.3.0", + "universal-hash", +] + [[package]] name = "ppv-lite86" version = "0.2.17" @@ -2950,20 +3423,20 @@ checksum = "dc375e1527247fe1a97d8b7156678dfe7c1af2fc075c9a4db3690ecd2a148068" [[package]] name = "proc-macro-warning" -version = "0.4.2" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d1eaa7fa0aa1929ffdf7eeb6eac234dde6268914a14ad44d23521ab6a9b258e" +checksum = "9b698b0b09d40e9b7c1a47b132d66a8b54bcd20583d9b6d06e4535e383b4405c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.37", + "syn 2.0.39", ] [[package]] name = "proc-macro2" -version = "1.0.67" +version = "1.0.69" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d433d9f1a3e8c1263d9456598b16fec66f4acc9a74dacffd35c7bb09b3a1328" +checksum = "134c189feb4956b20f6f547d2cf727d4c0fe06722b20a0eec87ed445a97f92da" dependencies = [ "unicode-ident", ] @@ -3096,7 +3569,7 @@ version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a" dependencies = [ - "bitflags", + "bitflags 1.3.2", ] [[package]] @@ -3173,22 +3646,6 @@ dependencies = [ "subtle", ] -[[package]] -name = "ring" -version = "0.1.0" -source = "git+https://github.com/w3f/ring-proof?rev=8657210#86572101f4210647984ab4efedba6b3fcc890895" -dependencies = [ - "ark-ec", - "ark-ff", - "ark-poly", - "ark-serialize", - "ark-std", - "blake2", - "common", - "fflonk", - "merlin 3.0.0", -] - [[package]] name = "ring" version = "0.16.20" @@ -3198,12 +3655,26 @@ dependencies = [ "cc", "libc", "once_cell", - "spin", - "untrusted", + "spin 0.5.2", + "untrusted 0.7.1", "web-sys", "winapi", ] +[[package]] +name = "ring" +version = "0.17.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9babe80d5c16becf6594aa32ad2be8fe08498e7ae60b77de8df700e67f191d7e" +dependencies = [ + "cc", + "getrandom 0.2.9", + "libc", + "spin 0.9.8", + "untrusted 0.9.0", + "windows-sys 0.48.0", +] + [[package]] name = "rustc-demangle" version = "0.1.21" @@ -3237,24 +3708,51 @@ version = "0.36.16" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6da3636faa25820d8648e0e31c5d519bbb01f72fdf57131f0f5f7da5fed36eab" dependencies = [ - "bitflags", + "bitflags 1.3.2", "errno", "io-lifetimes", "libc", - "linux-raw-sys", + "linux-raw-sys 0.1.4", "windows-sys 0.45.0", ] +[[package]] +name = "rustix" +version = "0.37.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fea8ca367a3a01fe35e6943c400addf443c0f57670e6ec51196f71a4b8762dd2" +dependencies = [ + "bitflags 1.3.2", + "errno", + "io-lifetimes", + "libc", + "linux-raw-sys 0.3.8", + "windows-sys 0.48.0", +] + +[[package]] +name = "rustix" +version = "0.38.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b426b0506e5d50a7d8dafcf2e81471400deb602392c7dd110815afb4eaf02a3" +dependencies = [ + "bitflags 2.4.1", + "errno", + "libc", + "linux-raw-sys 0.4.11", + "windows-sys 0.48.0", +] + [[package]] name = "rustls" -version = "0.20.8" +version = "0.21.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fff78fc74d175294f4e83b28343315ffcfb114b156f0185e9741cb5570f50e2f" +checksum = "446e14c5cda4f3f30fe71863c34ec70f5ac79d6087097ad0bb433e1be5edf04c" dependencies = [ "log", - "ring 0.16.20", + "ring 0.17.3", + "rustls-webpki", "sct", - "webpki", ] [[package]] @@ -3275,7 +3773,17 @@ version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d194b56d58803a43635bdc398cd17e383d6f71f9182b9a192c127ca42494a59b" dependencies = [ - "base64 0.21.0", + "base64 0.21.5", +] + +[[package]] +name = "rustls-webpki" +version = "0.101.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b6275d1ee7a1cd780b64aca7726599a1dbc893b1e64144529e55c3c2f745765" +dependencies = [ + "ring 0.17.3", + "untrusted 0.9.0", ] [[package]] @@ -3284,6 +3792,17 @@ version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5583e89e108996506031660fe09baa5011b9dd0341b89029313006d1fb508d70" +[[package]] +name = "ruzstd" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac3ffab8f9715a0d455df4bbb9d21e91135aab3cd3ca187af0cd0c3c3f868fdc" +dependencies = [ + "byteorder", + "thiserror-core", + "twox-hash", +] + [[package]] name = "ryu" version = "1.0.12" @@ -3310,9 +3829,9 @@ dependencies = [ [[package]] name = "scale-bits" -version = "0.3.0" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8dd7aca73785181cc41f0bbe017263e682b585ca660540ba569133901d013ecf" +checksum = "036575c29af9b6e4866ffb7fa055dbf623fe7a9cc159b33786de6013a6969d89" dependencies = [ "parity-scale-codec", "scale-info", @@ -3321,24 +3840,24 @@ dependencies = [ [[package]] name = "scale-decode" -version = "0.7.0" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0459d00b0dbd2e765009924a78ef36b2ff7ba116292d732f00eb0ed8e465d15" +checksum = "7789f5728e4e954aaa20cadcc370b99096fb8645fca3c9333ace44bb18f30095" dependencies = [ + "derive_more", "parity-scale-codec", "primitive-types", "scale-bits", "scale-decode-derive", "scale-info", "smallvec", - "thiserror", ] [[package]] name = "scale-decode-derive" -version = "0.7.0" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4391f0dfbb6690f035f6d2a15d6a12f88cc5395c36bcc056db07ffa2a90870ec" +checksum = "27873eb6005868f8cc72dcfe109fae664cf51223d35387bc2f28be4c28d94c47" dependencies = [ "darling 0.14.4", "proc-macro-crate", @@ -3349,24 +3868,24 @@ dependencies = [ [[package]] name = "scale-encode" -version = "0.3.0" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0401b7cdae8b8aa33725f3611a051358d5b32887ecaa0fda5953a775b2d4d76" +checksum = "6d70cb4b29360105483fac1ed567ff95d65224a14dd275b6303ed0a654c78de5" dependencies = [ + "derive_more", "parity-scale-codec", "primitive-types", "scale-bits", "scale-encode-derive", "scale-info", "smallvec", - "thiserror", ] [[package]] name = "scale-encode-derive" -version = "0.3.0" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "316e0fb10ec0fee266822bd641bab5e332a4ab80ef8c5b5ff35e5401a394f5a6" +checksum = "995491f110efdc6bea96d6a746140e32bfceb4ea47510750a5467295a4707a25" dependencies = [ "darling 0.14.4", "proc-macro-crate", @@ -3403,12 +3922,13 @@ dependencies = [ [[package]] name = "scale-value" -version = "0.10.0" +version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2096d36e94ce9bf87d8addb752423b6b19730dc88edd7cc452bb2b90573f7a7" +checksum = "6538d1cc1af9c0baf401c57da8a6d4730ef582db0d330d2efa56ec946b5b0283" dependencies = [ "base58", "blake2", + "derive_more", "either", "frame-metadata 15.1.0", "parity-scale-codec", @@ -3417,7 +3937,6 @@ dependencies = [ "scale-encode", "scale-info", "serde", - "thiserror", "yap", ] @@ -3459,6 +3978,22 @@ dependencies = [ "zeroize", ] +[[package]] +name = "schnorrkel" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "844b7645371e6ecdf61ff246ba1958c29e802881a749ae3fb1993675d210d28d" +dependencies = [ + "arrayref", + "arrayvec 0.7.2", + "curve25519-dalek-ng", + "merlin 3.0.0", + "rand_core 0.6.4", + "sha2 0.9.9", + "subtle-ng", + "zeroize", +] + [[package]] name = "scopeguard" version = "1.1.0" @@ -3478,7 +4013,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d53dcdb7c9f8158937a7981b48accfd39a43af418591a5d008c7b22b5e1b7ca4" dependencies = [ "ring 0.16.20", - "untrusted", + "untrusted 0.7.1", ] [[package]] @@ -3528,7 +4063,7 @@ version = "2.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a332be01508d814fed64bf28f798a146d73792121129962fdf335bb3c49a4254" dependencies = [ - "bitflags", + "bitflags 1.3.2", "core-foundation", "core-foundation-sys", "libc", @@ -3568,7 +4103,7 @@ checksum = "43576ca501357b9b071ac53cdc7da8ef0cbd9493d8df094cd821777ea6e894d3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.37", + "syn 2.0.39", ] [[package]] @@ -3685,33 +4220,153 @@ dependencies = [ ] [[package]] -name = "simba" -version = "0.8.0" +name = "simba" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "50582927ed6f77e4ac020c057f37a268fc6aebc29225050365aacbb9deeeddc4" +dependencies = [ + "approx", + "num-complex", + "num-traits", + "paste", + "wide", +] + +[[package]] +name = "siphasher" +version = "0.3.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38b58827f4464d87d377d175e90bf58eb00fd8716ff0a62f80356b5e61555d0d" + +[[package]] +name = "slab" +version = "0.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" +dependencies = [ + "autocfg", +] + +[[package]] +name = "smallvec" +version = "1.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62bb4feee49fdd9f707ef802e22365a35de4b7b299de4763d44bfea899442ff9" + +[[package]] +name = "smol" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13f2b548cd8447f8de0fdf1c592929f70f4fc7039a05e47404b0d096ec6987a1" +dependencies = [ + "async-channel 1.9.0", + "async-executor", + "async-fs", + "async-io 1.13.0", + "async-lock 2.8.0", + "async-net", + "async-process", + "blocking", + "futures-lite 1.12.0", +] + +[[package]] +name = "smoldot" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1cce5e2881b30bad7ef89f383a816ad0b22c45915911f28499026de4a76d20ee" +dependencies = [ + "arrayvec 0.7.2", + "async-lock 2.8.0", + "atomic", + "base64 0.21.5", + "bip39", + "blake2-rfc", + "bs58 0.5.0", + "crossbeam-queue", + "derive_more", + "ed25519-zebra", + "either", + "event-listener 2.5.3", + "fnv", + "futures-channel", + "futures-util", + "hashbrown 0.14.0", + "hex", + "hmac 0.12.1", + "itertools", + "libsecp256k1", + "merlin 3.0.0", + "no-std-net", + "nom", + "num-bigint", + "num-rational", + "num-traits", + "pbkdf2 0.12.2", + "pin-project", + "rand 0.8.5", + "rand_chacha 0.3.1", + "ruzstd", + "schnorrkel 0.10.2", + "serde", + "serde_json", + "sha2 0.10.7", + "siphasher", + "slab", + "smallvec", + "smol", + "snow", + "soketto", + "tiny-keccak", + "twox-hash", + "wasmi", +] + +[[package]] +name = "smoldot-light" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50582927ed6f77e4ac020c057f37a268fc6aebc29225050365aacbb9deeeddc4" +checksum = "4b2f7b4687b83ff244ef6137735ed5716ad37dcdf3ee16c4eb1a32fb9808fa47" dependencies = [ - "approx", - "num-complex", - "num-traits", - "paste", - "wide", + "async-lock 2.8.0", + "blake2-rfc", + "derive_more", + "either", + "event-listener 2.5.3", + "fnv", + "futures-channel", + "futures-util", + "hashbrown 0.14.0", + "hex", + "itertools", + "log", + "lru", + "parking_lot", + "rand 0.8.5", + "serde", + "serde_json", + "siphasher", + "slab", + "smol", + "smoldot", ] [[package]] -name = "slab" -version = "0.4.7" +name = "snow" +version = "0.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4614a76b2a8be0058caa9dbbaf66d988527d86d003c11a94fbd335d7661edcef" +checksum = "58021967fd0a5eeeb23b08df6cc244a4d4a5b4aec1d27c9e02fad1a58b4cd74e" dependencies = [ - "autocfg", + "aes-gcm", + "blake2", + "chacha20poly1305", + "curve25519-dalek 4.0.0", + "rand_core 0.6.4", + "rustc_version", + "sha2 0.10.7", + "subtle", ] -[[package]] -name = "smallvec" -version = "1.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62bb4feee49fdd9f707ef802e22365a35de4b7b299de4763d44bfea899442ff9" - [[package]] name = "socket2" version = "0.4.9" @@ -3749,29 +4404,31 @@ dependencies = [ [[package]] name = "sp-api" -version = "4.0.0-dev" -source = "git+https://github.com/paritytech/polkadot-sdk#e67a879ca07e0efb5aae6b158e2469cba6cf09b3" +version = "24.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d4d3518f5454764fb2835b2a0f3b2ed23a432f5c0b7a81ff122ec68361c91de3" dependencies = [ "hash-db", "log", "parity-scale-codec", "scale-info", "sp-api-proc-macro", - "sp-core 21.0.0 (git+https://github.com/paritytech/polkadot-sdk)", - "sp-externalities 0.19.0 (git+https://github.com/paritytech/polkadot-sdk)", + "sp-core 26.0.0", + "sp-externalities 0.23.0", "sp-metadata-ir", - "sp-runtime 24.0.0 (git+https://github.com/paritytech/polkadot-sdk)", - "sp-state-machine 0.28.0 (git+https://github.com/paritytech/polkadot-sdk)", - "sp-std 8.0.0 (git+https://github.com/paritytech/polkadot-sdk)", - "sp-trie 22.0.0 (git+https://github.com/paritytech/polkadot-sdk)", + "sp-runtime 29.0.0", + "sp-state-machine 0.33.0", + "sp-std 12.0.0", + "sp-trie 27.0.0", "sp-version", "thiserror", ] [[package]] name = "sp-api-proc-macro" -version = "4.0.0-dev" -source = "git+https://github.com/paritytech/polkadot-sdk#e67a879ca07e0efb5aae6b158e2469cba6cf09b3" +version = "13.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "66f4030c3fe4a7dfb720d9007c32be4c18a4431b934ded41138056d627937894" dependencies = [ "Inflector", "blake2", @@ -3779,7 +4436,7 @@ dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn 2.0.37", + "syn 2.0.39", ] [[package]] @@ -3791,22 +4448,23 @@ dependencies = [ "parity-scale-codec", "scale-info", "serde", - "sp-core 21.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "sp-io 23.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "sp-std 8.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "sp-core 21.0.0", + "sp-io 23.0.0", + "sp-std 8.0.0", ] [[package]] name = "sp-application-crypto" -version = "23.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk#e67a879ca07e0efb5aae6b158e2469cba6cf09b3" +version = "28.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23030de8eae0272c705cf3e2ce0523a64708a6b53aa23f3cf9053ca63abd08d7" dependencies = [ "parity-scale-codec", "scale-info", "serde", - "sp-core 21.0.0 (git+https://github.com/paritytech/polkadot-sdk)", - "sp-io 23.0.0 (git+https://github.com/paritytech/polkadot-sdk)", - "sp-std 8.0.0 (git+https://github.com/paritytech/polkadot-sdk)", + "sp-core 26.0.0", + "sp-io 28.0.0", + "sp-std 12.0.0", ] [[package]] @@ -3820,21 +4478,22 @@ dependencies = [ "parity-scale-codec", "scale-info", "serde", - "sp-std 8.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "sp-std 8.0.0", "static_assertions", ] [[package]] name = "sp-arithmetic" -version = "16.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk#e67a879ca07e0efb5aae6b158e2469cba6cf09b3" +version = "21.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9cf6e5c0c7c2e7be3a4a10af5316d2d40182915509a70f632a66c238a05c37b" dependencies = [ "integer-sqrt", "num-traits", "parity-scale-codec", "scale-info", "serde", - "sp-std 8.0.0 (git+https://github.com/paritytech/polkadot-sdk)", + "sp-std 12.0.0", "static_assertions", ] @@ -3845,7 +4504,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f18d9e2f67d8661f9729f35347069ac29d92758b59135176799db966947a7336" dependencies = [ "array-bytes 4.2.0", - "bitflags", + "bitflags 1.3.2", "blake2", "bounded-collections", "bs58 0.4.0", @@ -3866,16 +4525,16 @@ dependencies = [ "rand 0.8.5", "regex", "scale-info", - "schnorrkel", + "schnorrkel 0.9.1", "secp256k1", "secrecy", "serde", - "sp-core-hashing 9.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "sp-debug-derive 8.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "sp-externalities 0.19.0 (registry+https://github.com/rust-lang/crates.io-index)", - "sp-runtime-interface 17.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "sp-std 8.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "sp-storage 13.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "sp-core-hashing 9.0.0", + "sp-debug-derive 8.0.0", + "sp-externalities 0.19.0", + "sp-runtime-interface 17.0.0", + "sp-std 8.0.0", + "sp-storage 13.0.0", "ss58-registry", "substrate-bip39", "thiserror", @@ -3885,12 +4544,13 @@ dependencies = [ [[package]] name = "sp-core" -version = "21.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk#e67a879ca07e0efb5aae6b158e2469cba6cf09b3" +version = "26.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d0db34a19be2efa0398a9506a365392d93a85220856d55e0eb78165ad2e1bedc" dependencies = [ "array-bytes 6.1.0", - "bandersnatch_vrfs", - "bitflags", + "bip39", + "bitflags 1.3.2", "blake2", "bounded-collections", "bs58 0.5.0", @@ -3900,6 +4560,7 @@ dependencies = [ "hash-db", "hash256-std-hasher", "impl-serde", + "itertools", "lazy_static", "libsecp256k1", "log", @@ -3911,21 +4572,21 @@ dependencies = [ "rand 0.8.5", "regex", "scale-info", - "schnorrkel", + "schnorrkel 0.9.1", "secp256k1", "secrecy", "serde", - "sp-core-hashing 9.0.0 (git+https://github.com/paritytech/polkadot-sdk)", - "sp-debug-derive 8.0.0 (git+https://github.com/paritytech/polkadot-sdk)", - "sp-externalities 0.19.0 (git+https://github.com/paritytech/polkadot-sdk)", - "sp-runtime-interface 17.0.0 (git+https://github.com/paritytech/polkadot-sdk)", - "sp-std 8.0.0 (git+https://github.com/paritytech/polkadot-sdk)", - "sp-storage 13.0.0 (git+https://github.com/paritytech/polkadot-sdk)", + "sp-core-hashing 13.0.0", + "sp-debug-derive 12.0.0", + "sp-externalities 0.23.0", + "sp-runtime-interface 22.0.0", + "sp-std 12.0.0", + "sp-storage 17.0.0", "ss58-registry", "substrate-bip39", "thiserror", - "tiny-bip39", "tracing", + "w3f-bls", "zeroize", ] @@ -3940,14 +4601,15 @@ dependencies = [ "digest 0.10.7", "sha2 0.10.7", "sha3", - "sp-std 8.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "sp-std 8.0.0", "twox-hash", ] [[package]] name = "sp-core-hashing" -version = "9.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk#e67a879ca07e0efb5aae6b158e2469cba6cf09b3" +version = "13.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb8524f01591ee58b46cd83c9dbc0fcffd2fd730dabec4f59326cd58a00f17e2" dependencies = [ "blake2b_simd", "byteorder", @@ -3959,12 +4621,13 @@ dependencies = [ [[package]] name = "sp-core-hashing-proc-macro" -version = "9.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk#e67a879ca07e0efb5aae6b158e2469cba6cf09b3" +version = "13.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42ce3e6931303769197da81facefa86159fa1085dcd96ecb7e7407b5b93582a0" dependencies = [ "quote", - "sp-core-hashing 9.0.0 (git+https://github.com/paritytech/polkadot-sdk)", - "syn 2.0.37", + "sp-core-hashing 13.0.0", + "syn 2.0.39", ] [[package]] @@ -3975,17 +4638,18 @@ checksum = "c7f531814d2f16995144c74428830ccf7d94ff4a7749632b83ad8199b181140c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.37", + "syn 2.0.39", ] [[package]] name = "sp-debug-derive" -version = "8.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk#e67a879ca07e0efb5aae6b158e2469cba6cf09b3" +version = "12.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "50535e1a5708d3ba5c1195b59ebefac61cc8679c2c24716b87a86e8b7ed2e4a1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.37", + "syn 2.0.39", ] [[package]] @@ -3996,43 +4660,46 @@ checksum = "a0f71c671e01a8ca60da925d43a1b351b69626e268b8837f8371e320cf1dd100" dependencies = [ "environmental", "parity-scale-codec", - "sp-std 8.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "sp-storage 13.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "sp-std 8.0.0", + "sp-storage 13.0.0", ] [[package]] name = "sp-externalities" -version = "0.19.0" -source = "git+https://github.com/paritytech/polkadot-sdk#e67a879ca07e0efb5aae6b158e2469cba6cf09b3" +version = "0.23.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "884d05160bc89d0943d1c9fb8006c3d44b80f37f8af607aeff8d4d9cc82e279a" dependencies = [ "environmental", "parity-scale-codec", - "sp-std 8.0.0 (git+https://github.com/paritytech/polkadot-sdk)", - "sp-storage 13.0.0 (git+https://github.com/paritytech/polkadot-sdk)", + "sp-std 12.0.0", + "sp-storage 17.0.0", ] [[package]] name = "sp-genesis-builder" -version = "0.1.0" -source = "git+https://github.com/paritytech/polkadot-sdk#e67a879ca07e0efb5aae6b158e2469cba6cf09b3" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "65de7e1d4de8ac2645913ed7202c71ba5783e39286f2be40f0c45a8e472ad9fd" dependencies = [ "serde_json", "sp-api", - "sp-runtime 24.0.0 (git+https://github.com/paritytech/polkadot-sdk)", - "sp-std 8.0.0 (git+https://github.com/paritytech/polkadot-sdk)", + "sp-runtime 29.0.0", + "sp-std 12.0.0", ] [[package]] name = "sp-inherents" -version = "4.0.0-dev" -source = "git+https://github.com/paritytech/polkadot-sdk#e67a879ca07e0efb5aae6b158e2469cba6cf09b3" +version = "24.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c681a65a707014d505bf675e452c28b02eb55d9499f2407b85feef651fce0c2e" dependencies = [ "async-trait", "impl-trait-for-tuples", "parity-scale-codec", "scale-info", - "sp-runtime 24.0.0 (git+https://github.com/paritytech/polkadot-sdk)", - "sp-std 8.0.0 (git+https://github.com/paritytech/polkadot-sdk)", + "sp-runtime 29.0.0", + "sp-std 12.0.0", "thiserror", ] @@ -4051,22 +4718,23 @@ dependencies = [ "parity-scale-codec", "rustversion", "secp256k1", - "sp-core 21.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "sp-externalities 0.19.0 (registry+https://github.com/rust-lang/crates.io-index)", - "sp-keystore 0.27.0 (registry+https://github.com/rust-lang/crates.io-index)", - "sp-runtime-interface 17.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "sp-state-machine 0.28.0 (registry+https://github.com/rust-lang/crates.io-index)", - "sp-std 8.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "sp-tracing 10.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "sp-trie 22.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "sp-core 21.0.0", + "sp-externalities 0.19.0", + "sp-keystore 0.27.0", + "sp-runtime-interface 17.0.0", + "sp-state-machine 0.28.0", + "sp-std 8.0.0", + "sp-tracing 10.0.0", + "sp-trie 22.0.0", "tracing", "tracing-core", ] [[package]] name = "sp-io" -version = "23.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk#e67a879ca07e0efb5aae6b158e2469cba6cf09b3" +version = "28.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "301c0ce94f80b324465a6f6173183aa07b26bd71d67f94a44de1fd11dea4a7cb" dependencies = [ "bytes", "ed25519-dalek 2.0.0", @@ -4075,14 +4743,14 @@ dependencies = [ "parity-scale-codec", "rustversion", "secp256k1", - "sp-core 21.0.0 (git+https://github.com/paritytech/polkadot-sdk)", - "sp-externalities 0.19.0 (git+https://github.com/paritytech/polkadot-sdk)", - "sp-keystore 0.27.0 (git+https://github.com/paritytech/polkadot-sdk)", - "sp-runtime-interface 17.0.0 (git+https://github.com/paritytech/polkadot-sdk)", - "sp-state-machine 0.28.0 (git+https://github.com/paritytech/polkadot-sdk)", - "sp-std 8.0.0 (git+https://github.com/paritytech/polkadot-sdk)", - "sp-tracing 10.0.0 (git+https://github.com/paritytech/polkadot-sdk)", - "sp-trie 22.0.0 (git+https://github.com/paritytech/polkadot-sdk)", + "sp-core 26.0.0", + "sp-externalities 0.23.0", + "sp-keystore 0.32.0", + "sp-runtime-interface 22.0.0", + "sp-state-machine 0.33.0", + "sp-std 12.0.0", + "sp-tracing 14.0.0", + "sp-trie 27.0.0", "tracing", "tracing-core", ] @@ -4096,46 +4764,49 @@ dependencies = [ "futures", "parity-scale-codec", "parking_lot", - "sp-core 21.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "sp-externalities 0.19.0 (registry+https://github.com/rust-lang/crates.io-index)", + "sp-core 21.0.0", + "sp-externalities 0.19.0", "thiserror", ] [[package]] name = "sp-keystore" -version = "0.27.0" -source = "git+https://github.com/paritytech/polkadot-sdk#e67a879ca07e0efb5aae6b158e2469cba6cf09b3" +version = "0.32.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1db18ab01b2684856904c973d2be7dbf9ab3607cf706a7bd6648812662e5e7c5" dependencies = [ "parity-scale-codec", "parking_lot", - "sp-core 21.0.0 (git+https://github.com/paritytech/polkadot-sdk)", - "sp-externalities 0.19.0 (git+https://github.com/paritytech/polkadot-sdk)", + "sp-core 26.0.0", + "sp-externalities 0.23.0", "thiserror", ] [[package]] name = "sp-metadata-ir" -version = "0.1.0" -source = "git+https://github.com/paritytech/polkadot-sdk#e67a879ca07e0efb5aae6b158e2469cba6cf09b3" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ca9ff0e522a74725ac92f009d38deeb12e880f5296afbd78a6c6b970b773278" dependencies = [ "frame-metadata 16.0.0", "parity-scale-codec", "scale-info", - "sp-std 8.0.0 (git+https://github.com/paritytech/polkadot-sdk)", + "sp-std 12.0.0", ] [[package]] name = "sp-npos-elections" -version = "4.0.0-dev" -source = "git+https://github.com/paritytech/polkadot-sdk#e67a879ca07e0efb5aae6b158e2469cba6cf09b3" +version = "24.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ccca7310c7b4144c6cf76e0d1ff75252fb9ffc0a03db50ac25092f981db9e3c" dependencies = [ "parity-scale-codec", "scale-info", "serde", - "sp-arithmetic 16.0.0 (git+https://github.com/paritytech/polkadot-sdk)", - "sp-core 21.0.0 (git+https://github.com/paritytech/polkadot-sdk)", - "sp-runtime 24.0.0 (git+https://github.com/paritytech/polkadot-sdk)", - "sp-std 8.0.0 (git+https://github.com/paritytech/polkadot-sdk)", + "sp-arithmetic 21.0.0", + "sp-core 26.0.0", + "sp-runtime 29.0.0", + "sp-std 12.0.0", ] [[package]] @@ -4151,8 +4822,9 @@ dependencies = [ [[package]] name = "sp-panic-handler" -version = "8.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk#e67a879ca07e0efb5aae6b158e2469cba6cf09b3" +version = "12.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b00e40857ed3e0187f145b037c733545c5633859f1bd1d1b09deb52805fa696a" dependencies = [ "backtrace", "lazy_static", @@ -4174,18 +4846,19 @@ dependencies = [ "rand 0.8.5", "scale-info", "serde", - "sp-application-crypto 23.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "sp-arithmetic 16.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "sp-core 21.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "sp-io 23.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "sp-std 8.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "sp-weights 20.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "sp-application-crypto 23.0.0", + "sp-arithmetic 16.0.0", + "sp-core 21.0.0", + "sp-io 23.0.0", + "sp-std 8.0.0", + "sp-weights 20.0.0", ] [[package]] name = "sp-runtime" -version = "24.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk#e67a879ca07e0efb5aae6b158e2469cba6cf09b3" +version = "29.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "082bae4a164b8b629ce9cee79ff3c6b20e66d11d8ef37398796567d616325da4" dependencies = [ "either", "hash256-std-hasher", @@ -4196,12 +4869,12 @@ dependencies = [ "rand 0.8.5", "scale-info", "serde", - "sp-application-crypto 23.0.0 (git+https://github.com/paritytech/polkadot-sdk)", - "sp-arithmetic 16.0.0 (git+https://github.com/paritytech/polkadot-sdk)", - "sp-core 21.0.0 (git+https://github.com/paritytech/polkadot-sdk)", - "sp-io 23.0.0 (git+https://github.com/paritytech/polkadot-sdk)", - "sp-std 8.0.0 (git+https://github.com/paritytech/polkadot-sdk)", - "sp-weights 20.0.0 (git+https://github.com/paritytech/polkadot-sdk)", + "sp-application-crypto 28.0.0", + "sp-arithmetic 21.0.0", + "sp-core 26.0.0", + "sp-io 28.0.0", + "sp-std 12.0.0", + "sp-weights 25.0.0", ] [[package]] @@ -4214,30 +4887,31 @@ dependencies = [ "impl-trait-for-tuples", "parity-scale-codec", "primitive-types", - "sp-externalities 0.19.0 (registry+https://github.com/rust-lang/crates.io-index)", - "sp-runtime-interface-proc-macro 11.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "sp-std 8.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "sp-storage 13.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "sp-tracing 10.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "sp-wasm-interface 14.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "sp-externalities 0.19.0", + "sp-runtime-interface-proc-macro 11.0.0", + "sp-std 8.0.0", + "sp-storage 13.0.0", + "sp-tracing 10.0.0", + "sp-wasm-interface 14.0.0", "static_assertions", ] [[package]] name = "sp-runtime-interface" -version = "17.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk#e67a879ca07e0efb5aae6b158e2469cba6cf09b3" +version = "22.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "695bba5d981a6fd3131b098d65f620601bd822501612bfb65897d4bb660762b1" dependencies = [ "bytes", "impl-trait-for-tuples", "parity-scale-codec", "primitive-types", - "sp-externalities 0.19.0 (git+https://github.com/paritytech/polkadot-sdk)", - "sp-runtime-interface-proc-macro 11.0.0 (git+https://github.com/paritytech/polkadot-sdk)", - "sp-std 8.0.0 (git+https://github.com/paritytech/polkadot-sdk)", - "sp-storage 13.0.0 (git+https://github.com/paritytech/polkadot-sdk)", - "sp-tracing 10.0.0 (git+https://github.com/paritytech/polkadot-sdk)", - "sp-wasm-interface 14.0.0 (git+https://github.com/paritytech/polkadot-sdk)", + "sp-externalities 0.23.0", + "sp-runtime-interface-proc-macro 15.0.0", + "sp-std 12.0.0", + "sp-storage 17.0.0", + "sp-tracing 14.0.0", + "sp-wasm-interface 18.0.0", "static_assertions", ] @@ -4251,33 +4925,35 @@ dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn 2.0.37", + "syn 2.0.39", ] [[package]] name = "sp-runtime-interface-proc-macro" -version = "11.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk#e67a879ca07e0efb5aae6b158e2469cba6cf09b3" +version = "15.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b2afcbd1bd18d323371111b66b7ac2870bdc1c86c3d7b0dae67b112ca52b4d8" dependencies = [ "Inflector", "proc-macro-crate", "proc-macro2", "quote", - "syn 2.0.37", + "syn 2.0.39", ] [[package]] name = "sp-staking" -version = "4.0.0-dev" -source = "git+https://github.com/paritytech/polkadot-sdk#e67a879ca07e0efb5aae6b158e2469cba6cf09b3" +version = "24.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae2d1164378d66b4b9f672d0c920104c59aeba02655522c0fd511c71c2daf614" dependencies = [ "impl-trait-for-tuples", "parity-scale-codec", "scale-info", "serde", - "sp-core 21.0.0 (git+https://github.com/paritytech/polkadot-sdk)", - "sp-runtime 24.0.0 (git+https://github.com/paritytech/polkadot-sdk)", - "sp-std 8.0.0 (git+https://github.com/paritytech/polkadot-sdk)", + "sp-core 26.0.0", + "sp-runtime 29.0.0", + "sp-std 12.0.0", ] [[package]] @@ -4292,19 +4968,20 @@ dependencies = [ "parking_lot", "rand 0.8.5", "smallvec", - "sp-core 21.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "sp-externalities 0.19.0 (registry+https://github.com/rust-lang/crates.io-index)", - "sp-panic-handler 8.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "sp-std 8.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "sp-trie 22.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "sp-core 21.0.0", + "sp-externalities 0.19.0", + "sp-panic-handler 8.0.0", + "sp-std 8.0.0", + "sp-trie 22.0.0", "thiserror", "tracing", ] [[package]] name = "sp-state-machine" -version = "0.28.0" -source = "git+https://github.com/paritytech/polkadot-sdk#e67a879ca07e0efb5aae6b158e2469cba6cf09b3" +version = "0.33.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df7c6680d9342c22c10d8272ebf9f0339b0e439b3e67b68f5627f9dfc6926a07" dependencies = [ "hash-db", "log", @@ -4312,11 +4989,11 @@ dependencies = [ "parking_lot", "rand 0.8.5", "smallvec", - "sp-core 21.0.0 (git+https://github.com/paritytech/polkadot-sdk)", - "sp-externalities 0.19.0 (git+https://github.com/paritytech/polkadot-sdk)", - "sp-panic-handler 8.0.0 (git+https://github.com/paritytech/polkadot-sdk)", - "sp-std 8.0.0 (git+https://github.com/paritytech/polkadot-sdk)", - "sp-trie 22.0.0 (git+https://github.com/paritytech/polkadot-sdk)", + "sp-core 26.0.0", + "sp-externalities 0.23.0", + "sp-panic-handler 12.0.0", + "sp-std 12.0.0", + "sp-trie 27.0.0", "thiserror", "tracing", "trie-db 0.28.0", @@ -4330,8 +5007,9 @@ checksum = "53458e3c57df53698b3401ec0934bea8e8cfce034816873c0b0abbd83d7bac0d" [[package]] name = "sp-std" -version = "8.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk#e67a879ca07e0efb5aae6b158e2469cba6cf09b3" +version = "12.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "54c78c5a66682568cc7b153603c5d01a2cc8f5c221c7b1e921517a0eef18ae05" [[package]] name = "sp-storage" @@ -4343,21 +5021,22 @@ dependencies = [ "parity-scale-codec", "ref-cast", "serde", - "sp-debug-derive 8.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "sp-std 8.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "sp-debug-derive 8.0.0", + "sp-std 8.0.0", ] [[package]] name = "sp-storage" -version = "13.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk#e67a879ca07e0efb5aae6b158e2469cba6cf09b3" +version = "17.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "016f20812cc51bd479cc88d048c35d44cd3adde4accdb159d49d6050f2953595" dependencies = [ "impl-serde", "parity-scale-codec", "ref-cast", "serde", - "sp-debug-derive 8.0.0 (git+https://github.com/paritytech/polkadot-sdk)", - "sp-std 8.0.0 (git+https://github.com/paritytech/polkadot-sdk)", + "sp-debug-derive 12.0.0", + "sp-std 12.0.0", ] [[package]] @@ -4367,7 +5046,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "357f7591980dd58305956d32f8f6646d0a8ea9ea0e7e868e46f53b68ddf00cec" dependencies = [ "parity-scale-codec", - "sp-std 8.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "sp-std 8.0.0", "tracing", "tracing-core", "tracing-subscriber 0.2.25", @@ -4375,11 +5054,12 @@ dependencies = [ [[package]] name = "sp-tracing" -version = "10.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk#e67a879ca07e0efb5aae6b158e2469cba6cf09b3" +version = "14.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d727cb5265641ffbb7d4e42c18b63e29f6cfdbd240aae3bcf093c3d6eb29a19" dependencies = [ "parity-scale-codec", - "sp-std 8.0.0 (git+https://github.com/paritytech/polkadot-sdk)", + "sp-std 12.0.0", "tracing", "tracing-core", "tracing-subscriber 0.2.25", @@ -4401,8 +5081,8 @@ dependencies = [ "parking_lot", "scale-info", "schnellru", - "sp-core 21.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "sp-std 8.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "sp-core 21.0.0", + "sp-std 8.0.0", "thiserror", "tracing", "trie-db 0.27.1", @@ -4411,8 +5091,9 @@ dependencies = [ [[package]] name = "sp-trie" -version = "22.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk#e67a879ca07e0efb5aae6b158e2469cba6cf09b3" +version = "27.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a9c4bf89a5bd74f696cd1f23d83bb6abe6bd0abad1f3c70d4b0d7ebec4098cfe" dependencies = [ "ahash 0.8.3", "hash-db", @@ -4422,10 +5103,11 @@ dependencies = [ "nohash-hasher", "parity-scale-codec", "parking_lot", + "rand 0.8.5", "scale-info", "schnellru", - "sp-core 21.0.0 (git+https://github.com/paritytech/polkadot-sdk)", - "sp-std 8.0.0 (git+https://github.com/paritytech/polkadot-sdk)", + "sp-core 26.0.0", + "sp-std 12.0.0", "thiserror", "tracing", "trie-db 0.28.0", @@ -4434,8 +5116,9 @@ dependencies = [ [[package]] name = "sp-version" -version = "22.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk#e67a879ca07e0efb5aae6b158e2469cba6cf09b3" +version = "27.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "603c3c40bf19dd3004b350e4fcc2a460f833e73dd514406c2361bfdd9795d019" dependencies = [ "impl-serde", "parity-scale-codec", @@ -4443,21 +5126,22 @@ dependencies = [ "scale-info", "serde", "sp-core-hashing-proc-macro", - "sp-runtime 24.0.0 (git+https://github.com/paritytech/polkadot-sdk)", - "sp-std 8.0.0 (git+https://github.com/paritytech/polkadot-sdk)", + "sp-runtime 29.0.0", + "sp-std 12.0.0", "sp-version-proc-macro", "thiserror", ] [[package]] name = "sp-version-proc-macro" -version = "8.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk#e67a879ca07e0efb5aae6b158e2469cba6cf09b3" +version = "12.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49535d8c7184dab46d15639c68374a30cbb1534e392fa09a1ebb059a993ad436" dependencies = [ "parity-scale-codec", "proc-macro2", "quote", - "syn 2.0.37", + "syn 2.0.39", ] [[package]] @@ -4470,20 +5154,21 @@ dependencies = [ "impl-trait-for-tuples", "log", "parity-scale-codec", - "sp-std 8.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "sp-std 8.0.0", "wasmtime", ] [[package]] name = "sp-wasm-interface" -version = "14.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk#e67a879ca07e0efb5aae6b158e2469cba6cf09b3" +version = "18.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d5d85813d46a22484cdf5e5afddbbe85442dd1b4d84d67a8c7792f92f9f93607" dependencies = [ "anyhow", "impl-trait-for-tuples", "log", "parity-scale-codec", - "sp-std 8.0.0 (git+https://github.com/paritytech/polkadot-sdk)", + "sp-std 12.0.0", "wasmtime", ] @@ -4497,25 +5182,26 @@ dependencies = [ "scale-info", "serde", "smallvec", - "sp-arithmetic 16.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "sp-core 21.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "sp-debug-derive 8.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "sp-std 8.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "sp-arithmetic 16.0.0", + "sp-core 21.0.0", + "sp-debug-derive 8.0.0", + "sp-std 8.0.0", ] [[package]] name = "sp-weights" -version = "20.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk#e67a879ca07e0efb5aae6b158e2469cba6cf09b3" +version = "25.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1689f9594c2c4d09ede3d8a991a9eb900654e424fb00b62f2b370170af347acd" dependencies = [ "parity-scale-codec", "scale-info", "serde", "smallvec", - "sp-arithmetic 16.0.0 (git+https://github.com/paritytech/polkadot-sdk)", - "sp-core 21.0.0 (git+https://github.com/paritytech/polkadot-sdk)", - "sp-debug-derive 8.0.0 (git+https://github.com/paritytech/polkadot-sdk)", - "sp-std 8.0.0 (git+https://github.com/paritytech/polkadot-sdk)", + "sp-arithmetic 21.0.0", + "sp-core 26.0.0", + "sp-debug-derive 12.0.0", + "sp-std 12.0.0", ] [[package]] @@ -4524,6 +5210,12 @@ version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d" +[[package]] +name = "spin" +version = "0.9.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" + [[package]] name = "spki" version = "0.7.2" @@ -4579,8 +5271,8 @@ dependencies = [ "serde", "serde_json", "sp-npos-elections", - "sp-runtime 24.0.0 (git+https://github.com/paritytech/polkadot-sdk)", - "sp-storage 13.0.0 (git+https://github.com/paritytech/polkadot-sdk)", + "sp-runtime 29.0.0", + "sp-storage 17.0.0", "subxt", "thiserror", "tokio", @@ -4629,7 +5321,7 @@ checksum = "49eee6965196b32f882dd2ee85a92b1dbead41b04e53907f269de3b0dc04733c" dependencies = [ "hmac 0.11.0", "pbkdf2 0.8.0", - "schnorrkel", + "schnorrkel 0.9.1", "sha2 0.9.9", "zeroize", ] @@ -4640,19 +5332,25 @@ version = "2.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601" +[[package]] +name = "subtle-ng" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "734676eb262c623cec13c3155096e08d1f8f29adce39ba17948b18dad1e54142" + [[package]] name = "subxt" -version = "0.29.0" +version = "0.32.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "31a734d66fa935fbda56ba6a71d7e969f424c8c5608d416ba8499d71d8cbfc1f" +checksum = "588b8ce92699eeb06290f4fb02dad4f7e426c4e6db4d53889c6bcbc808cf24ac" dependencies = [ + "async-trait", "base58", "blake2", "derivative", "either", - "frame-metadata 15.1.0", + "frame-metadata 16.0.0", "futures", - "getrandom 0.2.9", "hex", "impl-serde", "jsonrpsee", @@ -4665,9 +5363,10 @@ dependencies = [ "scale-value", "serde", "serde_json", - "sp-core 21.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "sp-core-hashing 9.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "sp-runtime 24.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "sp-core 21.0.0", + "sp-core-hashing 9.0.0", + "sp-runtime 24.0.0", + "subxt-lightclient", "subxt-macro", "subxt-metadata", "thiserror", @@ -4676,11 +5375,11 @@ dependencies = [ [[package]] name = "subxt-codegen" -version = "0.29.0" +version = "0.32.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e2f231d97c145c564bd544212c0cc0c29c09ff516af199f4ce00c8e055f8138" +checksum = "98f5a534c8d475919e9c845d51fc2316da4fcadd04fe17552d932d2106de930e" dependencies = [ - "frame-metadata 15.1.0", + "frame-metadata 16.0.0", "heck", "hex", "jsonrpsee", @@ -4689,33 +5388,50 @@ dependencies = [ "quote", "scale-info", "subxt-metadata", - "syn 2.0.37", + "syn 2.0.39", + "thiserror", + "tokio", +] + +[[package]] +name = "subxt-lightclient" +version = "0.32.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "10fd0ac9b091211f962b6ae19e26cd08e0b86efa064dfb7fac69c8f79f122329" +dependencies = [ + "futures", + "futures-util", + "serde", + "serde_json", + "smoldot-light", "thiserror", "tokio", + "tokio-stream", + "tracing", ] [[package]] name = "subxt-macro" -version = "0.29.0" +version = "0.32.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e544e41e1c84b616632cd2f86862342868f62e11e4cd9062a9e3dbf5fc871f64" +checksum = "12e8be9ab6fe88b8c13edbe15911e148482cfb905a8b8d5b8d766a64c54be0bd" dependencies = [ - "darling 0.20.1", + "darling 0.20.3", "proc-macro-error", "subxt-codegen", - "syn 2.0.37", + "syn 2.0.39", ] [[package]] name = "subxt-metadata" -version = "0.29.0" +version = "0.32.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a01ce5044c81db3404d38c56f1e69d72eff72c54e5913c9bba4c0b58d376031f" +checksum = "b6898275765d36a37e5ef564358e0341cf41b5f3a91683d7d8b859381b65ac8a" dependencies = [ - "frame-metadata 15.1.0", + "frame-metadata 16.0.0", "parity-scale-codec", "scale-info", - "sp-core-hashing 9.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "sp-core-hashing 9.0.0", "thiserror", ] @@ -4732,9 +5448,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.37" +version = "2.0.39" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7303ef2c05cd654186cb250d29049a24840ca25d2747c25c0381c8d9e2f582e8" +checksum = "23e78b90f2fcf45d3e842032ce32e3f2d1545ba6636271dcbf24fa306d87be7a" dependencies = [ "proc-macro2", "quote", @@ -4789,6 +5505,26 @@ dependencies = [ "thiserror-impl", ] +[[package]] +name = "thiserror-core" +version = "1.0.38" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d97345f6437bb2004cd58819d8a9ef8e36cdd7661c2abc4bbde0a7c40d9f497" +dependencies = [ + "thiserror-core-impl", +] + +[[package]] +name = "thiserror-core-impl" +version = "1.0.38" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "10ac1c5050e43014d16b2f94d0d2ce79e65ffdd8b38d8048f9c8f6a8a6da62ac" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + [[package]] name = "thiserror-impl" version = "1.0.50" @@ -4797,7 +5533,7 @@ checksum = "266b2e40bc00e5a6c09c3584011e08b06f123c00362c92b975ba9843aaaa14b8" dependencies = [ "proc-macro2", "quote", - "syn 2.0.37", + "syn 2.0.39", ] [[package]] @@ -4879,18 +5615,28 @@ checksum = "5b8a1e28f2deaa14e508979454cb3a223b10b938b45af148bc0986de36f1923b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.37", + "syn 2.0.39", ] [[package]] name = "tokio-rustls" -version = "0.23.4" +version = "0.24.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c43ee83903113e03984cb9e5cebe6c04a5116269e900e3ddba8f068a62adda59" +checksum = "c28327cf380ac148141087fbfb9de9d7bd4e84ab5d2c28fbc911d753de8a7081" dependencies = [ "rustls", "tokio", - "webpki", +] + +[[package]] +name = "tokio-stream" +version = "0.1.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "397c988d37662c7dda6d2208364a706264bf3d6138b11d436cbac0ad38832842" +dependencies = [ + "futures-core", + "pin-project-lite", + "tokio", ] [[package]] @@ -4942,6 +5688,27 @@ dependencies = [ "winnow", ] +[[package]] +name = "tower" +version = "0.4.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8fa9be0de6cf49e536ce1851f987bd21a43b771b09473c3549a6c853db37c1c" +dependencies = [ + "futures-core", + "futures-util", + "pin-project", + "pin-project-lite", + "tower-layer", + "tower-service", + "tracing", +] + +[[package]] +name = "tower-layer" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c20c8dbed6283a09604c3e69b4b7eeb54e298b8a600d4d5ecb5ad39de609f1d0" + [[package]] name = "tower-service" version = "0.3.2" @@ -4955,6 +5722,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8ce8c33a8d48bd45d624a6e523445fd21ec13d3653cd51f681abf67418f54eb8" dependencies = [ "cfg-if", + "log", "pin-project-lite", "tracing-attributes", "tracing-core", @@ -5163,17 +5931,33 @@ version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f962df74c8c05a667b5ee8bcf162993134c104e96440b663c8daa176dc772d8c" +[[package]] +name = "universal-hash" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc1de2c688dc15305988b563c3854064043356019f97a4b46276fe734c4f07ea" +dependencies = [ + "crypto-common", + "subtle", +] + [[package]] name = "untrusted" version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a" +[[package]] +name = "untrusted" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" + [[package]] name = "url" -version = "2.3.1" +version = "2.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d68c799ae75762b8c3fe375feb6600ef5602c883c5d21eb51c09f22b83c4643" +checksum = "143b538f18257fac9cad154828a57c6bf5157e1aa604d4816b5995bf6de87ae5" dependencies = [ "form_urlencoded", "idna", @@ -5198,6 +5982,30 @@ version = "0.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" +[[package]] +name = "w3f-bls" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7335e4c132c28cc43caef6adb339789e599e39adbe78da0c4d547fad48cbc331" +dependencies = [ + "ark-bls12-377", + "ark-bls12-381", + "ark-ec", + "ark-ff", + "ark-serialize", + "ark-serialize-derive", + "arrayref", + "constcat", + "digest 0.10.7", + "rand 0.8.5", + "rand_chacha 0.3.1", + "rand_core 0.6.4", + "sha2 0.10.7", + "sha3", + "thiserror", + "zeroize", +] + [[package]] name = "wait-timeout" version = "0.2.0" @@ -5266,7 +6074,7 @@ dependencies = [ "once_cell", "proc-macro2", "quote", - "syn 2.0.37", + "syn 2.0.39", "wasm-bindgen-shared", ] @@ -5288,7 +6096,7 @@ checksum = "4783ce29f09b9d93134d41297aded3a712b7b979e9c6f28c32cb88c973a94869" dependencies = [ "proc-macro2", "quote", - "syn 2.0.37", + "syn 2.0.39", "wasm-bindgen-backend", "wasm-bindgen-shared", ] @@ -5299,6 +6107,38 @@ version = "0.2.85" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a901d592cafaa4d711bc324edfaff879ac700b19c3dfd60058d2b445be2691eb" +[[package]] +name = "wasmi" +version = "0.30.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e51fb5c61993e71158abf5bb863df2674ca3ec39ed6471c64f07aeaf751d67b4" +dependencies = [ + "intx", + "smallvec", + "spin 0.9.8", + "wasmi_arena", + "wasmi_core", + "wasmparser-nostd", +] + +[[package]] +name = "wasmi_arena" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "401c1f35e413fac1846d4843745589d9ec678977ab35a384db8ae7830525d468" + +[[package]] +name = "wasmi_core" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "624e6333e861ef49095d2d678b76ebf30b06bf37effca845be7e5b87c90071b7" +dependencies = [ + "downcast-rs", + "libm", + "num-traits", + "paste", +] + [[package]] name = "wasmparser" version = "0.102.0" @@ -5309,6 +6149,15 @@ dependencies = [ "url", ] +[[package]] +name = "wasmparser-nostd" +version = "0.100.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9157cab83003221bfd385833ab587a039f5d6fa7304854042ba358a3b09e0724" +dependencies = [ + "indexmap-nostd", +] + [[package]] name = "wasmtime" version = "8.0.1" @@ -5422,7 +6271,7 @@ dependencies = [ "memoffset", "paste", "rand 0.8.5", - "rustix", + "rustix 0.36.16", "wasmtime-asm-macros", "wasmtime-environ", "wasmtime-jit-debug", @@ -5451,25 +6300,6 @@ dependencies = [ "wasm-bindgen", ] -[[package]] -name = "webpki" -version = "0.22.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07ecc0cd7cac091bf682ec5efa18b1cff79d617b84181f38b3951dbe135f607f" -dependencies = [ - "ring 0.16.20", - "untrusted", -] - -[[package]] -name = "webpki-roots" -version = "0.22.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6c71e40d7d2c34a5106301fb632274ca37242cd0c9d3e64dbece371a40a2d87" -dependencies = [ - "webpki", -] - [[package]] name = "wide" version = "0.7.6" @@ -5678,9 +6508,9 @@ dependencies = [ [[package]] name = "yap" -version = "0.10.0" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2a7eb6d82a11e4d0b8e6bda8347169aff4ccd8235d039bba7c47482d977dcf7" +checksum = "ff4524214bc4629eba08d78ceb1d6507070cc0bcbbed23af74e19e6e924a24cf" [[package]] name = "zeroize" diff --git a/Cargo.toml b/Cargo.toml index 4670050a8..c1210e13a 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -9,7 +9,7 @@ codec = { package = "parity-scale-codec", version = "3.0.0" } scale-info = { package = "scale-info", version = "2.10.0" } clap = { version = "4.4", features = ["derive", "env"] } tracing-subscriber = { version = "0.3.18", features = ["env-filter"] } -jsonrpsee = { version = "0.16", features = ["ws-client"] } +jsonrpsee = { version = "0.20", features = ["ws-client"] } log = "0.4" serde = "1.0" serde_json = "1.0" @@ -19,15 +19,15 @@ tokio = { version = "1.34", features = ["macros", "rt-multi-thread", "sync", "si pin-project-lite = "0.2" # subxt -subxt = "0.29" -scale-value = "0.10.0" +subxt = { version = "0.32.1", features = ["substrate-compat"] } +scale-value = "0.12.0" # polkadot-sdk -frame-election-provider-support = { git = "https://github.com/paritytech/polkadot-sdk" } -pallet-election-provider-multi-phase = { git = "https://github.com/paritytech/polkadot-sdk" } -sp-npos-elections = { git = "https://github.com/paritytech/polkadot-sdk/" } -frame-support = { git = "https://github.com/paritytech/polkadot-sdk" } -sp-runtime = { git = "https://github.com/paritytech/polkadot-sdk" } +frame-election-provider-support = "26.0.0" +pallet-election-provider-multi-phase = "25.0.0" +sp-npos-elections = "24.0.0" +frame-support = "26.0.0" +sp-runtime = "29.0.0" # prometheus prometheus = "0.13" @@ -37,10 +37,9 @@ once_cell = "1.18" [dev-dependencies] anyhow = "1" assert_cmd = "2.0" -sp-storage = { git = "https://github.com/paritytech/polkadot-sdk" } +sp-storage = "17.0.0" regex = "1" [features] default = [] slow-tests = [] -staking-miner-playground-tests = [] diff --git a/artifacts/metadata.scale b/artifacts/metadata.scale index 0b77715429dc5581053c6d35ef7a62d29d14cd99..802b6f2d22672a8ecc568e7a38b9033a684550d6 100644 GIT binary patch literal 386413 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

XnOTLuC7B4H6 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 z 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 mf@b(~XmsgVn-X&emFf-xaoe3gt&4*DOjz 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 aV*b?|HWQZe*hQ_=dac!uoPYIE^Z#GuNc^n; delta 22742 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 Result { + log::debug!(target: LOG_TARGET, "attempting to connect to {:?}", uri); + + let rpc = loop { + match WsClientBuilder::default() + .max_request_size(u32::MAX) + .max_response_size(u32::MAX) + .request_timeout(std::time::Duration::from_secs(600)) + .build(&uri) + .await + { + Ok(rpc) => break RawRpcClient::new(rpc), + Err(e) => { + log::warn!( + target: LOG_TARGET, + "failed to connect to client due to {:?}, retrying soon..", + e, + ); + }, + }; + tokio::time::sleep(std::time::Duration::from_millis(2_500)).await; + }; + + let chain_api = ChainClient::from_rpc_client(rpc.clone()).await?; + + Ok(Self { rpc: RpcClient::new(rpc.clone()), raw_rpc: rpc, chain_api }) + } + + /// Get a reference to the RPC interface exposed by subxt. + pub fn rpc(&self) -> &RpcClient { + &self.rpc + } + + /// Get a reference to the chain API. + pub fn chain_api(&self) -> &ChainClient { + &self.chain_api + } + + // This is exposed until a new version of subxt is released. + pub async fn rpc_system_account_next_index( + &self, + account_id: &T, + ) -> Result + where + T: serde::Serialize, + { + self.raw_rpc + .request("system_accountNextIndex", subxt::rpc_params![&account_id]) + .await + } +} diff --git a/src/commands/dry_run.rs b/src/commands/dry_run.rs index 771def5ae..a9de3b41e 100644 --- a/src/commands/dry_run.rs +++ b/src/commands/dry_run.rs @@ -19,7 +19,8 @@ use pallet_election_provider_multi_phase::RawSolution; use crate::{ - epm, error::Error, helpers::storage_at, opt::Solver, prelude::*, signer::Signer, static_types, + client::Client, epm, error::Error, helpers::storage_at, opt::Solver, prelude::*, + signer::Signer, static_types, }; use clap::Parser; use codec::Encode; @@ -56,7 +57,7 @@ pub struct DryRunConfig { pub seed_or_path: Option, } -pub async fn dry_run_cmd(api: SubxtClient, config: DryRunConfig) -> Result<(), Error> +pub async fn dry_run_cmd(client: Client, config: DryRunConfig) -> Result<(), Error> where T: MinerConfig + Send @@ -64,13 +65,13 @@ where + 'static, T::Solution: Send, { - let storage = storage_at(config.at, &api).await?; + let storage = storage_at(config.at, client.chain_api()).await?; let round = storage .fetch_or_default(&runtime::storage().election_provider_multi_phase().round()) .await?; let miner_solution = epm::fetch_snapshot_and_mine_solution::( - &api, + client.chain_api(), config.at, config.solver, round, @@ -106,14 +107,16 @@ where log::info!(target: LOG_TARGET, "Loaded account {}, {:?}", signer, account_info); - let nonce = api.rpc().system_account_next_index(signer.account_id()).await?; + let nonce = client.rpc_system_account_next_index(signer.account_id()).await?; let tx = epm::signed_solution(raw_solution)?; - let xt = - api.tx() - .create_signed_with_nonce(&tx, &*signer, nonce, ExtrinsicParams::default())?; - let dry_run_bytes = api.rpc().dry_run(xt.encoded(), config.at).await?; - - let dry_run_result = dry_run_bytes.into_dry_run_result(&api.metadata())?; + let xt = client.chain_api().tx().create_signed_with_nonce( + &tx, + &*signer, + nonce, + Default::default(), + )?; + let dry_run_bytes = client.rpc().dry_run(xt.encoded(), config.at).await?; + let dry_run_result = dry_run_bytes.into_dry_run_result(&client.chain_api().metadata())?; log::info!(target: LOG_TARGET, "dry-run outcome is {:?}", dry_run_result); } diff --git a/src/commands/emergency_solution.rs b/src/commands/emergency_solution.rs index db6af835d..dd8bf754d 100644 --- a/src/commands/emergency_solution.rs +++ b/src/commands/emergency_solution.rs @@ -16,7 +16,9 @@ //! The emergency-solution command. -use crate::{epm, error::Error, helpers::storage_at, opt::Solver, prelude::*, static_types}; +use crate::{ + client::Client, epm, error::Error, helpers::storage_at, opt::Solver, prelude::*, static_types, +}; use clap::Parser; use codec::Encode; use sp_core::hexdisplay::HexDisplay; @@ -39,7 +41,7 @@ pub struct EmergencySolutionConfig { } pub async fn emergency_solution_cmd( - api: SubxtClient, + client: Client, config: EmergencySolutionConfig, ) -> Result<(), Error> where @@ -53,14 +55,14 @@ where static_types::MaxWinners::set(max_winners); } - let storage = storage_at(config.at, &api).await?; + let storage = storage_at(config.at, client.chain_api()).await?; let round = storage .fetch_or_default(&runtime::storage().election_provider_multi_phase().round()) .await?; let miner_solution = epm::fetch_snapshot_and_mine_solution::( - &api, + client.chain_api(), config.at, config.solver, round, @@ -87,7 +89,7 @@ where } let call = epm::set_emergency_result(supports.clone())?; - let encoded_call = call.encode_call_data(&api.metadata())?; + let encoded_call = call.encode_call_data(&client.chain_api().metadata())?; let encoded_supports = supports.encode(); // write results to files. diff --git a/src/commands/monitor.rs b/src/commands/monitor.rs index e98a6a0d4..0a34f7579 100644 --- a/src/commands/monitor.rs +++ b/src/commands/monitor.rs @@ -15,6 +15,7 @@ // along with Polkadot. If not, see . use crate::{ + client::Client, epm, error::Error, helpers::{kill_main_task_if_critical_err, TimedFuture}, @@ -28,14 +29,14 @@ use clap::Parser; use codec::{Decode, Encode}; use frame_election_provider_support::NposSolution; use futures::future::TryFutureExt; -use jsonrpsee::{core::Error as JsonRpseeError, types::error::CallError}; +use jsonrpsee::core::Error as JsonRpseeError; use pallet_election_provider_multi_phase::{RawSolution, SolutionOf}; use sp_runtime::Perbill; use std::{str::FromStr, sync::Arc}; use subxt::{ + backend::{legacy::rpc_methods::DryRunResult, rpc::RpcSubscription}, config::Header as _, error::RpcError, - rpc::{types::DryRunResult, Subscription}, Error as SubxtError, }; use tokio::sync::Mutex; @@ -161,7 +162,7 @@ impl FromStr for SubmissionStrategy { } } -pub async fn monitor_cmd(api: SubxtClient, config: MonitorConfig) -> Result<(), Error> +pub async fn monitor_cmd(client: Client, config: MonitorConfig) -> Result<(), Error> where T: MinerConfig + Send @@ -173,7 +174,9 @@ where let account_info = { let addr = runtime::storage().system().account(signer.account_id()); - api.storage() + client + .chain_api() + .storage() .at_latest() .await? .fetch(&addr) @@ -185,10 +188,10 @@ where if config.dry_run { // if we want to try-run, ensure the node supports it. - dry_run_works(&api).await?; + dry_run_works(client.rpc()).await?; } - let mut subscription = heads_subscription(&api, config.listen).await?; + let mut subscription = heads_subscription(client.rpc(), config.listen).await?; let (tx, mut rx) = tokio::sync::mpsc::unbounded_channel::(); let submit_lock = Arc::new(Mutex::new(())); @@ -206,7 +209,7 @@ where // - the subscription could not keep up with the server. None => { log::warn!(target: LOG_TARGET, "subscription to `{:?}` terminated. Retrying..", config.listen); - subscription = heads_subscription(&api, config.listen).await?; + subscription = heads_subscription(client.rpc(), config.listen).await?; continue } } @@ -222,19 +225,20 @@ where // Spawn task and non-recoverable errors are sent back to the main task // such as if the connection has been closed. let tx2 = tx.clone(); - let api2 = api.clone(); + let client2 = client.clone(); let signer2 = signer.clone(); let config2 = config.clone(); let submit_lock2 = submit_lock.clone(); tokio::spawn(async move { if let Err(err) = - mine_and_submit_solution::(at, api2, signer2, config2, submit_lock2).await + mine_and_submit_solution::(at, client2, signer2, config2, submit_lock2).await { kill_main_task_if_critical_err(&tx2, err) } }); - let account_info = api + let account_info = client + .chain_api() .storage() .at_latest() .await? @@ -249,7 +253,7 @@ where /// Construct extrinsic at given block and watch it. async fn mine_and_submit_solution( at: Header, - api: SubxtClient, + client: Client, signer: Signer, config: MonitorConfig, submit_lock: Arc>, @@ -267,9 +271,9 @@ where // NOTE: as we try to send at each block then the nonce is used guard against // submitting twice. Because once a solution has been accepted on chain // the "next transaction" at a later block but with the same nonce will be rejected - let nonce = api.rpc().system_account_next_index(signer.account_id()).await?; + let nonce = client.rpc_system_account_next_index(signer.account_id()).await?; - ensure_signed_phase(&api, block_hash) + ensure_signed_phase(client.chain_api(), block_hash) .inspect_err(|e| { log::debug!( target: LOG_TARGET, @@ -281,7 +285,9 @@ where .await?; let round_fut = async { - api.storage() + client + .chain_api() + .storage() .at(block_hash) .fetch_or_default(&runtime::storage().election_provider_multi_phase().round()) .await @@ -291,22 +297,26 @@ where .inspect_err(|e| log::error!(target: LOG_TARGET, "Mining solution failed: {:?}", e)) .await?; - ensure_no_previous_solution::(&api, block_hash, &signer.account_id().0.into()) - .inspect_err(|e| { - log::debug!( - target: LOG_TARGET, - "ensure_no_previous_solution failed: {:?}; skipping block: {}", - e, - at.number - ) - }) - .await?; + ensure_no_previous_solution::( + client.chain_api(), + block_hash, + &signer.account_id().0.into(), + ) + .inspect_err(|e| { + log::debug!( + target: LOG_TARGET, + "ensure_no_previous_solution failed: {:?}; skipping block: {}", + e, + at.number + ) + }) + .await?; tokio::time::sleep(std::time::Duration::from_secs(config.delay as u64)).await; let _lock = submit_lock.lock().await; let (solution, score) = match epm::fetch_snapshot_and_mine_solution::( - &api, + &client.chain_api(), Some(block_hash), config.solver, round, @@ -356,9 +366,9 @@ where (Err(e), _) => return Err(Error::Other(e.to_string())), }; - let best_head = get_latest_head(&api, config.listen).await?; + let best_head = get_latest_head(client.rpc(), config.listen).await?; - ensure_signed_phase(&api, best_head) + ensure_signed_phase(client.chain_api(), best_head) .inspect_err(|e| { log::debug!( target: LOG_TARGET, @@ -369,20 +379,29 @@ where }) .await?; - ensure_no_previous_solution::(&api, best_head, &signer.account_id().0.into()) - .inspect_err(|e| { - log::debug!( - target: LOG_TARGET, - "ensure_no_previous_solution failed: {:?}; skipping block: {:?}", - e, - best_head, - ) - }) - .await?; - - match ensure_solution_passes_strategy(&api, best_head, score, config.submission_strategy) - .timed() - .await + ensure_no_previous_solution::( + client.chain_api(), + best_head, + &signer.account_id().0.into(), + ) + .inspect_err(|e| { + log::debug!( + target: LOG_TARGET, + "ensure_no_previous_solution failed: {:?}; skipping block: {:?}", + e, + best_head, + ) + }) + .await?; + + match ensure_solution_passes_strategy( + client.chain_api(), + best_head, + score, + config.submission_strategy, + ) + .timed() + .await { (Ok(_), now) => { log::trace!( @@ -404,7 +423,7 @@ where prometheus::on_submission_attempt(); match submit_and_watch_solution::( - &api, + &client, signer, (solution, score, round), nonce, @@ -430,7 +449,7 @@ where } /// Ensure that now is the signed phase. -async fn ensure_signed_phase(api: &SubxtClient, block_hash: Hash) -> Result<(), Error> { +async fn ensure_signed_phase(api: &ChainClient, block_hash: Hash) -> Result<(), Error> { use pallet_election_provider_multi_phase::Phase; let addr = runtime::storage().election_provider_multi_phase().current_phase(); @@ -445,7 +464,7 @@ async fn ensure_signed_phase(api: &SubxtClient, block_hash: Hash) -> Result<(), /// Ensure that our current `us` have not submitted anything previously. async fn ensure_no_previous_solution( - api: &SubxtClient, + api: &ChainClient, block_hash: Hash, us: &AccountId, ) -> Result<(), Error> @@ -469,7 +488,7 @@ where } async fn ensure_solution_passes_strategy( - api: &SubxtClient, + api: &ChainClient, block_hash: Hash, score: sp_npos_elections::ElectionScore, strategy: SubmissionStrategy, @@ -496,23 +515,26 @@ async fn ensure_solution_passes_strategy( } async fn submit_and_watch_solution( - api: &SubxtClient, + client: &Client, signer: Signer, (solution, score, round): (SolutionOf, sp_npos_elections::ElectionScore, u32), - nonce: u32, + nonce: u64, listen: Listen, dry_run: bool, ) -> Result<(), Error> { let tx = epm::signed_solution(RawSolution { solution, score, round })?; - let xt = api - .tx() - .create_signed_with_nonce(&tx, &*signer, nonce, ExtrinsicParams::default())?; + let xt = client.chain_api().tx().create_signed_with_nonce( + &tx, + &*signer, + nonce as u64, + Default::default(), + )?; if dry_run { - let dry_run_bytes = api.rpc().dry_run(xt.encoded(), None).await?; + let dry_run_bytes = client.rpc().dry_run(xt.encoded(), None).await?; - match dry_run_bytes.into_dry_run_result(&api.metadata())? { + match dry_run_bytes.into_dry_run_result(&client.chain_api().metadata())? { DryRunResult::Success => (), DryRunResult::DispatchError(e) => return Err(Error::TransactionRejected(e.to_string())), DryRunResult::TransactionValidityError => @@ -565,24 +587,24 @@ async fn submit_and_watch_solution( } async fn heads_subscription( - api: &SubxtClient, + rpc: &RpcClient, listen: Listen, -) -> Result, Error> { +) -> Result, Error> { match listen { - Listen::Head => api.rpc().subscribe_best_block_headers().await, - Listen::Finalized => api.rpc().subscribe_finalized_block_headers().await, + Listen::Head => rpc.chain_subscribe_new_heads().await, + Listen::Finalized => rpc.chain_subscribe_finalized_heads().await, } .map_err(Into::into) } -async fn get_latest_head(api: &SubxtClient, listen: Listen) -> Result { +async fn get_latest_head(rpc: &RpcClient, listen: Listen) -> Result { match listen { - Listen::Head => match api.rpc().block_hash(None).await { + Listen::Head => match rpc.chain_get_block_hash(None).await { Ok(Some(hash)) => Ok(hash), Ok(None) => Err(Error::Other("Latest block not found".into())), Err(e) => Err(e.into()), }, - Listen::Finalized => api.rpc().finalized_head().await.map_err(Into::into), + Listen::Finalized => rpc.chain_get_finalized_head().await.map_err(Into::into), } } @@ -603,8 +625,8 @@ pub(crate) fn score_passes_strategy( } } -async fn dry_run_works(api: &SubxtClient) -> Result<(), Error> { - if let Err(SubxtError::Rpc(RpcError::ClientError(e))) = api.rpc().dry_run(&[], None).await { +async fn dry_run_works(rpc: &RpcClient) -> Result<(), Error> { + if let Err(SubxtError::Rpc(RpcError::ClientError(e))) = rpc.dry_run(&[], None).await { let rpc_err = match e.downcast::() { Ok(e) => *e, Err(_) => @@ -613,7 +635,7 @@ async fn dry_run_works(api: &SubxtClient) -> Result<(), Error> { )), }; - if let JsonRpseeError::Call(CallError::Custom(e)) = rpc_err { + if let JsonRpseeError::Call(e) = rpc_err { if e.message() == "RPC call is unsafe to be called externally" { return Err(Error::Other( "dry-run requires a RPC endpoint with `--rpc-methods unsafe`; \ diff --git a/src/epm.rs b/src/epm.rs index 1ee4c099a..bb96efc9a 100644 --- a/src/epm.rs +++ b/src/epm.rs @@ -38,9 +38,8 @@ use pallet_election_provider_multi_phase::{ }; use scale_info::{PortableRegistry, TypeInfo}; use scale_value::scale::{decode_as_type, TypeId}; -use sp_core::Bytes; use sp_npos_elections::{ElectionScore, VoteWeight}; -use subxt::{dynamic::Value, rpc::rpc_params, tx::DynamicPayload}; +use subxt::{dynamic::Value, tx::DynamicPayload}; const EPM_PALLET_NAME: &str = "ElectionProviderMultiPhase"; @@ -180,7 +179,7 @@ where } /// Read the constants from the metadata and updates the static types. -pub(crate) async fn update_metadata_constants(api: &SubxtClient) -> Result<(), Error> { +pub(crate) async fn update_metadata_constants(api: &ChainClient) -> Result<(), Error> { const SIGNED_MAX_WEIGHT: EpmConstant = EpmConstant::new("SignedMaxWeight"); const MAX_LENGTH: EpmConstant = EpmConstant::new("MinerMaxLength"); const MAX_VOTES_PER_VOTER: EpmConstant = EpmConstant::new("MinerMaxVotesPerVoter"); @@ -214,7 +213,7 @@ fn invalid_metadata_error(item: String, err: E) -> Error { } fn read_constant<'a, T: serde::Deserialize<'a>>( - api: &SubxtClient, + api: &ChainClient, constant: EpmConstant, ) -> Result { let (epm_name, constant) = constant.to_parts(); @@ -266,7 +265,7 @@ pub fn unsigned_solution( pub async fn signed_submission_at( idx: u32, block_hash: Option, - api: &SubxtClient, + api: &ChainClient, ) -> Result>, Error> { let scale_idx = Value::u128(idx as u128); let addr = subxt::dynamic::storage(EPM_PALLET_NAME, "SignedSubmissionsMap", vec![scale_idx]); @@ -286,7 +285,7 @@ pub async fn signed_submission_at /// Helper to get the signed submissions at the current state. pub async fn snapshot_at( block_hash: Option, - api: &SubxtClient, + api: &ChainClient, ) -> Result { let empty = Vec::::new(); let addr = subxt::dynamic::storage(EPM_PALLET_NAME, "Snapshot", empty); @@ -343,7 +342,7 @@ where /// Helper to fetch snapshot data via RPC /// and compute an NPos solution via [`pallet_election_provider_multi_phase`]. pub async fn fetch_snapshot_and_mine_solution( - api: &SubxtClient, + api: &ChainClient, block_hash: Option, solver: Solver, round: u32, @@ -537,21 +536,21 @@ pub async fn runtime_api_solution_weight { + JsonRpseeError::Call(e) => { const BAD_EXTRINSIC_FORMAT: i32 = 1001; const VERIFICATION_ERROR: i32 = 1002; use jsonrpsee::types::error::ErrorCode; @@ -119,11 +119,10 @@ pub fn kill_main_task_if_critical_err(tx: &tokio::sync::mpsc::UnboundedSender {}, JsonRpseeError::RequestTimeout => {}, err => { let _ = tx.send(Error::Subxt(SubxtError::Rpc(RpcError::ClientError( @@ -145,8 +144,8 @@ pub fn kill_main_task_if_critical_err(tx: &tokio::sync::mpsc::UnboundedSender, - api: &SubxtClient, -) -> Result, Error> { + api: &ChainClient, +) -> Result, Error> { if let Some(block_hash) = block { Ok(api.storage().at(block_hash)) } else { diff --git a/src/lib.rs b/src/lib.rs index 26cebec6e..a78d9600c 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -16,6 +16,7 @@ #![allow(dead_code)] +pub mod client; pub mod commands; pub mod epm; pub mod error; diff --git a/src/main.rs b/src/main.rs index ea4bd232f..86ca8ee22 100644 --- a/src/main.rs +++ b/src/main.rs @@ -28,6 +28,7 @@ //! development. It is intended to run this bot with a `restart = true` way, so that it reports it //! crash, but resumes work thereafter. +mod client; mod commands; mod epm; mod error; @@ -41,13 +42,12 @@ mod static_types; use clap::Parser; use error::Error; use futures::future::{BoxFuture, FutureExt}; -use jsonrpsee::ws_client::WsClientBuilder; use prelude::*; -use std::{str::FromStr, sync::Arc}; +use std::str::FromStr; use tokio::sync::oneshot; use tracing_subscriber::EnvFilter; -use crate::opt::RuntimeVersion; +use crate::{client::Client, opt::RuntimeVersion}; #[derive(Debug, Clone, Parser)] #[cfg_attr(test, derive(PartialEq))] @@ -114,50 +114,34 @@ async fn main() -> Result<(), Error> { let filter = EnvFilter::from_default_env().add_directive(log.parse()?); tracing_subscriber::fmt().with_env_filter(filter).init(); - log::debug!(target: LOG_TARGET, "attempting to connect to {:?}", uri); - - let rpc = loop { - match WsClientBuilder::default() - .max_request_body_size(u32::MAX) - .request_timeout(std::time::Duration::from_secs(600)) - .build(&uri) - .await - { - Ok(rpc) => break rpc, - Err(e) => { - log::warn!( - target: LOG_TARGET, - "failed to connect to client due to {:?}, retrying soon..", - e, - ); - }, - }; - tokio::time::sleep(std::time::Duration::from_millis(2_500)).await; - }; - - let api = SubxtClient::from_rpc_client(Arc::new(rpc)).await?; - let runtime_version: RuntimeVersion = api.rpc().runtime_version(None).await?.into(); + let client = Client::new(&uri).await?; + let runtime_version: RuntimeVersion = + client.rpc().state_get_runtime_version(None).await?.into(); let chain = opt::Chain::from_str(&runtime_version.spec_name)?; let _prometheus_handle = prometheus::run(prometheus_port) .map_err(|e| log::warn!("Failed to start prometheus endpoint: {}", e)); log::info!(target: LOG_TARGET, "Connected to chain: {}", chain); - epm::update_metadata_constants(&api).await?; + epm::update_metadata_constants(client.chain_api()).await?; - SHARED_CLIENT.set(api.clone()).expect("shared client only set once; qed"); + SHARED_CLIENT.set(client.clone()).expect("shared client only set once; qed"); // Start a new tokio task to perform the runtime updates in the background. // if this fails then the miner will be stopped and has to be re-started. let (tx_upgrade, rx_upgrade) = oneshot::channel::(); - tokio::spawn(runtime_upgrade_task(api.clone(), tx_upgrade)); + tokio::spawn(runtime_upgrade_task(client.chain_api().clone(), tx_upgrade)); let res = any_runtime!(chain, { let fut = match command { - Command::Monitor(cfg) => commands::monitor_cmd::(api, cfg).boxed(), - Command::DryRun(cfg) => commands::dry_run_cmd::(api, cfg).boxed(), + Command::Monitor(cfg) => commands::monitor_cmd::(client, cfg).boxed(), + Command::DryRun(cfg) => commands::dry_run_cmd::(client, cfg).boxed(), Command::EmergencySolution(cfg) => - commands::emergency_solution_cmd::(api, cfg).boxed(), + commands::emergency_solution_cmd::(client, cfg).boxed(), Command::Info => async { - let is_compat = if runtime::validate_codegen(&api).is_ok() { "YES" } else { "NO" }; + let is_compat = if runtime::is_codegen_valid_for(&client.chain_api().metadata()) { + "YES" + } else { + "NO" + }; let remote_node = serde_json::to_string_pretty(&runtime_version) .expect("Serialize is infallible; qed"); @@ -223,7 +207,7 @@ async fn run_command( } /// Runs until the RPC connection fails or updating the metadata failed. -async fn runtime_upgrade_task(api: SubxtClient, tx: oneshot::Sender) { +async fn runtime_upgrade_task(api: ChainClient, tx: oneshot::Sender) { let updater = api.updater(); let mut update_stream = match updater.runtime_updates().await { diff --git a/src/opt.rs b/src/opt.rs index ab5db3734..52348e45c 100644 --- a/src/opt.rs +++ b/src/opt.rs @@ -21,6 +21,7 @@ use serde::{Deserialize, Serialize}; use sp_npos_elections::BalancingConfig; use sp_runtime::DeserializeOwned; use std::{collections::HashMap, fmt, str::FromStr}; +use subxt::backend::legacy::rpc_methods as subxt_rpc; /// The type of solver to use. // A common option across multiple commands. @@ -76,10 +77,10 @@ impl std::str::FromStr for Chain { } } -impl TryFrom for Chain { +impl TryFrom for Chain { type Error = Error; - fn try_from(rv: subxt::rpc::types::RuntimeVersion) -> Result { + fn try_from(rv: subxt_rpc::RuntimeVersion) -> Result { let json = rv .other .get("specName") @@ -94,8 +95,8 @@ impl TryFrom for Chain { // This is infallible because all these field must exist on substrate-based chains // and is based on -impl From for RuntimeVersion { - fn from(rv: subxt::rpc::types::RuntimeVersion) -> Self { +impl From for RuntimeVersion { + fn from(rv: subxt_rpc::RuntimeVersion) -> Self { let mut spec_name: String = get_val_unchecked("specName", &rv.other); let impl_name: String = get_val_unchecked("implName", &rv.other); let impl_version: u32 = get_val_unchecked("implVersion", &rv.other); diff --git a/src/prelude.rs b/src/prelude.rs index 0c817089b..636349040 100644 --- a/src/prelude.rs +++ b/src/prelude.rs @@ -21,10 +21,8 @@ //! needing to sprinkle `any_runtime` in a few extra places. // re-exports. -pub use frame_election_provider_support::VoteWeight; pub use pallet_election_provider_multi_phase::{Miner, MinerConfig}; pub use subxt::ext::sp_core; - /// The account id type. pub type AccountId = sp_runtime::AccountId32; /// The header type. We re-export it here, but we can easily get it from block as well. @@ -34,7 +32,6 @@ pub type Header = pub type Hash = sp_core::H256; /// Balance type pub type Balance = u128; - pub use subxt::ext::sp_runtime::traits::{Block as BlockT, Header as HeaderT}; /// Default URI to connect to. @@ -52,11 +49,9 @@ pub type Pair = sp_core::sr25519::Pair; /// The accuracy that we use for election computation. pub type Accuracy = sp_runtime::Perbill; -/// Extrinsics params used on all chains. -pub use subxt::config::polkadot::PolkadotExtrinsicParamsBuilder as ExtrinsicParams; - +pub type RpcClient = subxt::backend::legacy::LegacyRpcMethods; /// Subxt client used by the staking miner on all chains. -pub type SubxtClient = subxt::OnlineClient; +pub type ChainClient = subxt::OnlineClient; /// Config used by the staking-miner pub type Config = subxt::PolkadotConfig; @@ -83,4 +78,5 @@ pub type SignedSubmission = )] pub mod runtime {} -pub static SHARED_CLIENT: once_cell::sync::OnceCell = once_cell::sync::OnceCell::new(); +pub static SHARED_CLIENT: once_cell::sync::OnceCell = + once_cell::sync::OnceCell::new(); diff --git a/tests/common.rs b/tests/common.rs index 4a83c578e..d32141ac5 100644 --- a/tests/common.rs +++ b/tests/common.rs @@ -1,11 +1,7 @@ use assert_cmd::cargo::cargo_bin; -use futures::StreamExt; use staking_miner::{ opt::Chain, - prelude::{ - runtime::{self}, - SubxtClient, - }, + prelude::{runtime, ChainClient}, }; use std::{ io::{BufRead, BufReader, Read}, @@ -190,7 +186,7 @@ pub async fn test_submit_solution(target: Target) { /// /// Timeout's after 15 minutes which is regarded as an error. pub async fn wait_for_mined_solution(ws_url: &str) -> anyhow::Result { - let api = SubxtClient::from_url(&ws_url).await?; + let api = ChainClient::from_url(&ws_url).await?; let now = Instant::now(); let mut blocks_sub = api.blocks().subscribe_finalized().await?; diff --git a/tests/staking_miner_node.rs b/tests/staking_miner_node.rs deleted file mode 100644 index 480d02406..000000000 --- a/tests/staking_miner_node.rs +++ /dev/null @@ -1,77 +0,0 @@ -//! Requires a `staking-miner-playground binary ` in the path to run integration tests against. -#![cfg(feature = "staking-miner-playground-tests")] - -pub mod common; - -use assert_cmd::cargo::cargo_bin; -use codec::Decode; -use common::{init_logger, run_staking_miner_playground, KillChildOnDrop}; -use scale_info::TypeInfo; -use staking_miner::{ - prelude::SubxtClient, - signer::{PairSigner, Signer}, -}; -use std::process; -use subxt::dynamic::Value; - -#[tokio::test] -async fn constants_updated_on_the_fly() { - init_logger(); - let (_drop, ws_url) = run_staking_miner_playground(); - - let _miner = KillChildOnDrop( - process::Command::new(cargo_bin(env!("CARGO_PKG_NAME"))) - .stdout(process::Stdio::piped()) - .stderr(process::Stdio::piped()) - .env("RUST_LOG", "runtime=debug,staking-miner=debug") - .args(["--uri", &ws_url, "monitor", "--seed-or-path", "//Alice", "seq-phragmen"]) - .spawn() - .unwrap(), - ); - - let api = SubxtClient::from_url(&ws_url).await.unwrap(); - let signer = Signer::new("//Alice").unwrap(); - - let length: u32 = 1024; - let weight: u64 = 2048; - - submit_tx("ConfigBlock", "set_block_weight", &api, vec![Value::u128(weight as u128)], &signer) - .await; - submit_tx("ConfigBlock", "set_block_length", &api, vec![Value::u128(length as u128)], &signer) - .await; - - tokio::time::sleep(std::time::Duration::from_secs(12)).await; - - assert_eq!(weight, read_storage::("ConfigBlock", "BlockWeight", &api, vec![]).await); - assert_eq!(length, read_storage::("ConfigBlock", "BlockLength", &api, vec![]).await); -} - -async fn submit_tx( - pallet: &str, - name: &str, - api: &SubxtClient, - params: Vec, - signer: &PairSigner, -) { - let tx = subxt::dynamic::tx(pallet, name, params); - api.tx().sign_and_submit_then_watch_default(&tx, signer).await.unwrap(); -} - -async fn read_storage( - pallet: &str, - name: &str, - api: &SubxtClient, - params: Vec, -) -> T { - let addr = subxt::dynamic::storage(pallet, name, params); - let val = api - .storage() - .at_latest() - .await - .expect("Get storage should work") - .fetch(&addr) - .await - .expect("Fetch storage should work") - .expect("Storage should exist"); - Decode::decode(&mut val.encoded()).expect("Storage should be decodable") -}