diff --git a/polkadot/Cargo.lock b/polkadot/Cargo.lock index e9812cf590..ba6c6edb6d 100644 --- a/polkadot/Cargo.lock +++ b/polkadot/Cargo.lock @@ -1,5 +1,7 @@ # This file is automatically @generated by Cargo. # It is not intended for manual editing. +version = 3 + [[package]] name = "Inflector" version = "0.11.4" @@ -479,7 +481,7 @@ dependencies = [ [[package]] name = "beefy-gadget" version = "0.1.0" -source = "git+https://github.com/paritytech/grandpa-bridge-gadget#a58179d4f59f4c31c7a09d5b0ce14df8450743a3" +source = "git+https://github.com/paritytech/grandpa-bridge-gadget?branch=master#a58179d4f59f4c31c7a09d5b0ce14df8450743a3" dependencies = [ "beefy-primitives", "futures 0.3.15", @@ -507,7 +509,7 @@ dependencies = [ [[package]] name = "beefy-gadget-rpc" version = "0.1.0" -source = "git+https://github.com/paritytech/grandpa-bridge-gadget#a58179d4f59f4c31c7a09d5b0ce14df8450743a3" +source = "git+https://github.com/paritytech/grandpa-bridge-gadget?branch=master#a58179d4f59f4c31c7a09d5b0ce14df8450743a3" dependencies = [ "beefy-gadget", "beefy-primitives", @@ -528,7 +530,7 @@ dependencies = [ [[package]] name = "beefy-primitives" version = "0.1.0" -source = "git+https://github.com/paritytech/grandpa-bridge-gadget#a58179d4f59f4c31c7a09d5b0ce14df8450743a3" +source = "git+https://github.com/paritytech/grandpa-bridge-gadget?branch=master#a58179d4f59f4c31c7a09d5b0ce14df8450743a3" dependencies = [ "parity-scale-codec", "sp-api", @@ -1863,7 +1865,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cfcf0ed7fe52a17a03854ec54a9f76d6d84508d1c0e66bc1793301c73fc8493c" dependencies = [ "byteorder", - "rand 0.8.3", + "rand 0.8.4", "rustc-hex", "static_assertions", ] @@ -1896,7 +1898,7 @@ checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" [[package]] name = "fork-tree" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" +source = "git+https://github.com/paritytech/substrate?branch=master#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" dependencies = [ "parity-scale-codec", ] @@ -1914,7 +1916,7 @@ dependencies = [ [[package]] name = "frame-benchmarking" version = "3.1.0" -source = "git+https://github.com/paritytech/substrate#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" +source = "git+https://github.com/paritytech/substrate?branch=master#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" dependencies = [ "frame-support", "frame-system", @@ -1933,7 +1935,7 @@ dependencies = [ [[package]] name = "frame-benchmarking-cli" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" +source = "git+https://github.com/paritytech/substrate?branch=master#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" dependencies = [ "Inflector", "chrono", @@ -1956,7 +1958,7 @@ dependencies = [ [[package]] name = "frame-election-provider-support" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" +source = "git+https://github.com/paritytech/substrate?branch=master#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" dependencies = [ "frame-support", "frame-system", @@ -1969,7 +1971,7 @@ dependencies = [ [[package]] name = "frame-executive" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" +source = "git+https://github.com/paritytech/substrate?branch=master#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" dependencies = [ "frame-support", "frame-system", @@ -1984,7 +1986,7 @@ dependencies = [ [[package]] name = "frame-metadata" version = "13.0.0" -source = "git+https://github.com/paritytech/substrate#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" +source = "git+https://github.com/paritytech/substrate?branch=master#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" dependencies = [ "parity-scale-codec", "serde", @@ -1995,7 +1997,7 @@ dependencies = [ [[package]] name = "frame-support" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" +source = "git+https://github.com/paritytech/substrate?branch=master#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" dependencies = [ "bitflags", "frame-metadata", @@ -2022,7 +2024,7 @@ dependencies = [ [[package]] name = "frame-support-procedural" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" +source = "git+https://github.com/paritytech/substrate?branch=master#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" dependencies = [ "Inflector", "frame-support-procedural-tools", @@ -2034,7 +2036,7 @@ dependencies = [ [[package]] name = "frame-support-procedural-tools" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" +source = "git+https://github.com/paritytech/substrate?branch=master#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" dependencies = [ "frame-support-procedural-tools-derive", "proc-macro-crate 1.0.0", @@ -2046,7 +2048,7 @@ dependencies = [ [[package]] name = "frame-support-procedural-tools-derive" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" +source = "git+https://github.com/paritytech/substrate?branch=master#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" dependencies = [ "proc-macro2", "quote", @@ -2056,7 +2058,7 @@ dependencies = [ [[package]] name = "frame-support-test" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" +source = "git+https://github.com/paritytech/substrate?branch=master#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" dependencies = [ "frame-metadata", "frame-support", @@ -2076,7 +2078,7 @@ dependencies = [ [[package]] name = "frame-system" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" +source = "git+https://github.com/paritytech/substrate?branch=master#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" dependencies = [ "frame-support", "impl-trait-for-tuples", @@ -2093,7 +2095,7 @@ dependencies = [ [[package]] name = "frame-system-benchmarking" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" +source = "git+https://github.com/paritytech/substrate?branch=master#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" dependencies = [ "frame-benchmarking", "frame-support", @@ -2107,7 +2109,7 @@ dependencies = [ [[package]] name = "frame-system-rpc-runtime-api" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" +source = "git+https://github.com/paritytech/substrate?branch=master#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" dependencies = [ "parity-scale-codec", "sp-api", @@ -2116,7 +2118,7 @@ dependencies = [ [[package]] name = "frame-try-runtime" version = "0.9.0" -source = "git+https://github.com/paritytech/substrate#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" +source = "git+https://github.com/paritytech/substrate?branch=master#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" dependencies = [ "frame-support", "parity-scale-codec", @@ -3642,7 +3644,7 @@ dependencies = [ "libp2p-core", "libp2p-swarm", "log", - "rand 0.8.3", + "rand 0.8.4", "smallvec 1.6.1", "socket2 0.4.0", "void", @@ -4049,7 +4051,7 @@ dependencies = [ [[package]] name = "max-encoded-len" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" +source = "git+https://github.com/paritytech/substrate?branch=master#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" dependencies = [ "impl-trait-for-tuples", "max-encoded-len-derive", @@ -4060,7 +4062,7 @@ dependencies = [ [[package]] name = "max-encoded-len-derive" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" +source = "git+https://github.com/paritytech/substrate?branch=master#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" dependencies = [ "proc-macro-crate 1.0.0", "proc-macro2", @@ -4563,7 +4565,7 @@ checksum = "13370dae44474229701bb69b90b4f4dca6404cb0357a2d50d635f1171dc3aa7b" [[package]] name = "pallet-authority-discovery" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" +source = "git+https://github.com/paritytech/substrate?branch=master#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" dependencies = [ "frame-support", "frame-system", @@ -4578,7 +4580,7 @@ dependencies = [ [[package]] name = "pallet-authorship" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" +source = "git+https://github.com/paritytech/substrate?branch=master#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" dependencies = [ "frame-support", "frame-system", @@ -4592,7 +4594,7 @@ dependencies = [ [[package]] name = "pallet-babe" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" +source = "git+https://github.com/paritytech/substrate?branch=master#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" dependencies = [ "frame-benchmarking", "frame-support", @@ -4615,7 +4617,7 @@ dependencies = [ [[package]] name = "pallet-balances" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" +source = "git+https://github.com/paritytech/substrate?branch=master#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" dependencies = [ "frame-benchmarking", "frame-support", @@ -4630,7 +4632,7 @@ dependencies = [ [[package]] name = "pallet-beefy" version = "0.1.0" -source = "git+https://github.com/paritytech/grandpa-bridge-gadget#a58179d4f59f4c31c7a09d5b0ce14df8450743a3" +source = "git+https://github.com/paritytech/grandpa-bridge-gadget?branch=master#a58179d4f59f4c31c7a09d5b0ce14df8450743a3" dependencies = [ "beefy-primitives", "frame-support", @@ -4645,7 +4647,7 @@ dependencies = [ [[package]] name = "pallet-bounties" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" +source = "git+https://github.com/paritytech/substrate?branch=master#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" dependencies = [ "frame-benchmarking", "frame-support", @@ -4681,7 +4683,7 @@ dependencies = [ [[package]] name = "pallet-collective" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" +source = "git+https://github.com/paritytech/substrate?branch=master#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" dependencies = [ "frame-benchmarking", "frame-support", @@ -4697,7 +4699,7 @@ dependencies = [ [[package]] name = "pallet-democracy" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" +source = "git+https://github.com/paritytech/substrate?branch=master#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" dependencies = [ "frame-benchmarking", "frame-support", @@ -4712,7 +4714,7 @@ dependencies = [ [[package]] name = "pallet-election-provider-multi-phase" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" +source = "git+https://github.com/paritytech/substrate?branch=master#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -4733,7 +4735,7 @@ dependencies = [ [[package]] name = "pallet-elections-phragmen" version = "4.0.0" -source = "git+https://github.com/paritytech/substrate#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" +source = "git+https://github.com/paritytech/substrate?branch=master#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" dependencies = [ "frame-benchmarking", "frame-support", @@ -4750,7 +4752,7 @@ dependencies = [ [[package]] name = "pallet-gilt" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" +source = "git+https://github.com/paritytech/substrate?branch=master#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" dependencies = [ "frame-benchmarking", "frame-support", @@ -4764,7 +4766,7 @@ dependencies = [ [[package]] name = "pallet-grandpa" version = "3.1.0" -source = "git+https://github.com/paritytech/substrate#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" +source = "git+https://github.com/paritytech/substrate?branch=master#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" dependencies = [ "frame-benchmarking", "frame-support", @@ -4786,7 +4788,7 @@ dependencies = [ [[package]] name = "pallet-identity" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" +source = "git+https://github.com/paritytech/substrate?branch=master#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" dependencies = [ "enumflags2", "frame-benchmarking", @@ -4801,7 +4803,7 @@ dependencies = [ [[package]] name = "pallet-im-online" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" +source = "git+https://github.com/paritytech/substrate?branch=master#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" dependencies = [ "frame-benchmarking", "frame-support", @@ -4820,7 +4822,7 @@ dependencies = [ [[package]] name = "pallet-indices" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" +source = "git+https://github.com/paritytech/substrate?branch=master#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" dependencies = [ "frame-benchmarking", "frame-support", @@ -4836,7 +4838,7 @@ dependencies = [ [[package]] name = "pallet-membership" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" +source = "git+https://github.com/paritytech/substrate?branch=master#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" dependencies = [ "frame-benchmarking", "frame-support", @@ -4851,7 +4853,7 @@ dependencies = [ [[package]] name = "pallet-mmr" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" +source = "git+https://github.com/paritytech/substrate?branch=master#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" dependencies = [ "ckb-merkle-mountain-range", "frame-benchmarking", @@ -4868,7 +4870,7 @@ dependencies = [ [[package]] name = "pallet-mmr-primitives" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" +source = "git+https://github.com/paritytech/substrate?branch=master#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" dependencies = [ "frame-support", "frame-system", @@ -4884,7 +4886,7 @@ dependencies = [ [[package]] name = "pallet-mmr-rpc" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" +source = "git+https://github.com/paritytech/substrate?branch=master#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" dependencies = [ "jsonrpc-core", "jsonrpc-core-client", @@ -4902,7 +4904,7 @@ dependencies = [ [[package]] name = "pallet-multisig" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" +source = "git+https://github.com/paritytech/substrate?branch=master#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" dependencies = [ "frame-benchmarking", "frame-support", @@ -4917,7 +4919,7 @@ dependencies = [ [[package]] name = "pallet-nicks" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" +source = "git+https://github.com/paritytech/substrate?branch=master#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" dependencies = [ "frame-support", "frame-system", @@ -4930,7 +4932,7 @@ dependencies = [ [[package]] name = "pallet-offences" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" +source = "git+https://github.com/paritytech/substrate?branch=master#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" dependencies = [ "frame-support", "frame-system", @@ -4946,7 +4948,7 @@ dependencies = [ [[package]] name = "pallet-offences-benchmarking" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" +source = "git+https://github.com/paritytech/substrate?branch=master#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -4968,7 +4970,7 @@ dependencies = [ [[package]] name = "pallet-proxy" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" +source = "git+https://github.com/paritytech/substrate?branch=master#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" dependencies = [ "frame-benchmarking", "frame-support", @@ -4984,7 +4986,7 @@ dependencies = [ [[package]] name = "pallet-randomness-collective-flip" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" +source = "git+https://github.com/paritytech/substrate?branch=master#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" dependencies = [ "frame-support", "frame-system", @@ -4997,7 +4999,7 @@ dependencies = [ [[package]] name = "pallet-recovery" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" +source = "git+https://github.com/paritytech/substrate?branch=master#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" dependencies = [ "enumflags2", "frame-support", @@ -5011,7 +5013,7 @@ dependencies = [ [[package]] name = "pallet-scheduler" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" +source = "git+https://github.com/paritytech/substrate?branch=master#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" dependencies = [ "frame-benchmarking", "frame-support", @@ -5026,7 +5028,7 @@ dependencies = [ [[package]] name = "pallet-session" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" +source = "git+https://github.com/paritytech/substrate?branch=master#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" dependencies = [ "frame-support", "frame-system", @@ -5046,7 +5048,7 @@ dependencies = [ [[package]] name = "pallet-session-benchmarking" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" +source = "git+https://github.com/paritytech/substrate?branch=master#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" dependencies = [ "frame-benchmarking", "frame-support", @@ -5062,7 +5064,7 @@ dependencies = [ [[package]] name = "pallet-society" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" +source = "git+https://github.com/paritytech/substrate?branch=master#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" dependencies = [ "frame-support", "frame-system", @@ -5075,7 +5077,7 @@ dependencies = [ [[package]] name = "pallet-staking" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" +source = "git+https://github.com/paritytech/substrate?branch=master#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -5099,7 +5101,7 @@ dependencies = [ [[package]] name = "pallet-staking-reward-curve" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" +source = "git+https://github.com/paritytech/substrate?branch=master#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" dependencies = [ "proc-macro-crate 1.0.0", "proc-macro2", @@ -5110,7 +5112,7 @@ dependencies = [ [[package]] name = "pallet-staking-reward-fn" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" +source = "git+https://github.com/paritytech/substrate?branch=master#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" dependencies = [ "log", "sp-arithmetic", @@ -5119,7 +5121,7 @@ dependencies = [ [[package]] name = "pallet-sudo" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" +source = "git+https://github.com/paritytech/substrate?branch=master#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" dependencies = [ "frame-support", "frame-system", @@ -5132,7 +5134,7 @@ dependencies = [ [[package]] name = "pallet-timestamp" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" +source = "git+https://github.com/paritytech/substrate?branch=master#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" dependencies = [ "frame-benchmarking", "frame-support", @@ -5150,7 +5152,7 @@ dependencies = [ [[package]] name = "pallet-tips" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" +source = "git+https://github.com/paritytech/substrate?branch=master#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" dependencies = [ "frame-benchmarking", "frame-support", @@ -5165,7 +5167,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" +source = "git+https://github.com/paritytech/substrate?branch=master#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" dependencies = [ "frame-support", "frame-system", @@ -5181,7 +5183,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment-rpc" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" +source = "git+https://github.com/paritytech/substrate?branch=master#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" dependencies = [ "jsonrpc-core", "jsonrpc-core-client", @@ -5198,7 +5200,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment-rpc-runtime-api" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" +source = "git+https://github.com/paritytech/substrate?branch=master#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" dependencies = [ "pallet-transaction-payment", "parity-scale-codec", @@ -5209,7 +5211,7 @@ dependencies = [ [[package]] name = "pallet-treasury" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" +source = "git+https://github.com/paritytech/substrate?branch=master#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" dependencies = [ "frame-benchmarking", "frame-support", @@ -5225,7 +5227,7 @@ dependencies = [ [[package]] name = "pallet-utility" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" +source = "git+https://github.com/paritytech/substrate?branch=master#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" dependencies = [ "frame-benchmarking", "frame-support", @@ -5240,7 +5242,7 @@ dependencies = [ [[package]] name = "pallet-vesting" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" +source = "git+https://github.com/paritytech/substrate?branch=master#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" dependencies = [ "enumflags2", "frame-benchmarking", @@ -5279,7 +5281,7 @@ dependencies = [ "log", "memmap2", "parking_lot 0.11.1", - "rand 0.8.3", + "rand 0.8.4", ] [[package]] @@ -5757,7 +5759,7 @@ dependencies = [ "polkadot-node-subsystem-test-helpers", "polkadot-node-subsystem-util", "polkadot-primitives", - "rand 0.8.3", + "rand 0.8.4", "sc-keystore", "sc-network", "smallvec 1.6.1", @@ -5788,7 +5790,7 @@ dependencies = [ "polkadot-node-subsystem-test-helpers", "polkadot-node-subsystem-util", "polkadot-primitives", - "rand 0.8.3", + "rand 0.8.4", "sc-network", "smallvec 1.6.1", "sp-application-crypto", @@ -5910,8 +5912,11 @@ dependencies = [ "polkadot-node-subsystem-test-helpers", "polkadot-node-subsystem-util", "polkadot-primitives", + "rand 0.8.4", + "rand_chacha 0.3.0", "sc-keystore", "sp-application-crypto", + "sp-consensus-babe", "sp-core", "sp-keyring", "sp-keystore", @@ -6190,7 +6195,7 @@ dependencies = [ "pin-project 1.0.7", "polkadot-core-primitives", "polkadot-parachain", - "rand 0.8.3", + "rand 0.8.4", "sc-executor", "sc-executor-common", "sc-executor-wasmtime", @@ -6339,6 +6344,7 @@ dependencies = [ "env_logger 0.8.2", "futures 0.3.15", "futures-timer 3.0.2", + "itertools 0.10.0", "log", "lru", "metered-channel", @@ -6351,7 +6357,7 @@ dependencies = [ "polkadot-node-subsystem", "polkadot-node-subsystem-test-helpers", "polkadot-primitives", - "rand 0.8.3", + "rand 0.8.4", "sc-network", "sp-application-crypto", "sp-core", @@ -6648,7 +6654,7 @@ dependencies = [ "pallet-vesting", "parity-scale-codec", "polkadot-primitives", - "rand 0.8.3", + "rand 0.8.4", "rand_chacha 0.3.0", "rustc-hex", "sc-keystore", @@ -6925,7 +6931,7 @@ dependencies = [ "polkadot-runtime-parachains", "polkadot-service", "polkadot-test-runtime", - "rand 0.8.3", + "rand 0.8.4", "sc-authority-discovery", "sc-chain-spec", "sc-cli", @@ -7284,9 +7290,9 @@ dependencies = [ [[package]] name = "rand" -version = "0.8.3" +version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ef9e7e66b4468674bfcb0c81af8b7fa0bb154fa9f28eb840da5c447baeb8d7e" +checksum = "2e7573632e6454cf6b99d7aac4ccca54be06da05aca2ef7423d22d27d4d4bcd8" dependencies = [ "libc", "rand_chacha 0.3.0", @@ -7547,7 +7553,7 @@ dependencies = [ [[package]] name = "remote-externalities" version = "0.9.0" -source = "git+https://github.com/paritytech/substrate#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" +source = "git+https://github.com/paritytech/substrate?branch=master#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" dependencies = [ "env_logger 0.8.2", "hex", @@ -7850,7 +7856,7 @@ dependencies = [ [[package]] name = "sc-authority-discovery" version = "0.9.0" -source = "git+https://github.com/paritytech/substrate#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" +source = "git+https://github.com/paritytech/substrate?branch=master#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" dependencies = [ "async-trait", "derive_more", @@ -7879,7 +7885,7 @@ dependencies = [ [[package]] name = "sc-basic-authorship" version = "0.9.0" -source = "git+https://github.com/paritytech/substrate#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" +source = "git+https://github.com/paritytech/substrate?branch=master#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" dependencies = [ "futures 0.3.15", "futures-timer 3.0.2", @@ -7902,7 +7908,7 @@ dependencies = [ [[package]] name = "sc-block-builder" version = "0.9.0" -source = "git+https://github.com/paritytech/substrate#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" +source = "git+https://github.com/paritytech/substrate?branch=master#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" dependencies = [ "parity-scale-codec", "sc-client-api", @@ -7918,7 +7924,7 @@ dependencies = [ [[package]] name = "sc-chain-spec" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" +source = "git+https://github.com/paritytech/substrate?branch=master#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" dependencies = [ "impl-trait-for-tuples", "parity-scale-codec", @@ -7939,7 +7945,7 @@ dependencies = [ [[package]] name = "sc-chain-spec-derive" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" +source = "git+https://github.com/paritytech/substrate?branch=master#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" dependencies = [ "proc-macro-crate 1.0.0", "proc-macro2", @@ -7950,7 +7956,7 @@ dependencies = [ [[package]] name = "sc-cli" version = "0.9.0" -source = "git+https://github.com/paritytech/substrate#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" +source = "git+https://github.com/paritytech/substrate?branch=master#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" dependencies = [ "chrono", "fdlimit", @@ -7988,7 +7994,7 @@ dependencies = [ [[package]] name = "sc-client-api" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" +source = "git+https://github.com/paritytech/substrate?branch=master#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" dependencies = [ "derive_more", "fnv", @@ -8022,7 +8028,7 @@ dependencies = [ [[package]] name = "sc-client-db" version = "0.9.0" -source = "git+https://github.com/paritytech/substrate#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" +source = "git+https://github.com/paritytech/substrate?branch=master#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" dependencies = [ "blake2-rfc", "hash-db", @@ -8052,7 +8058,7 @@ dependencies = [ [[package]] name = "sc-consensus" version = "0.9.0" -source = "git+https://github.com/paritytech/substrate#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" +source = "git+https://github.com/paritytech/substrate?branch=master#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" dependencies = [ "parking_lot 0.11.1", "sc-client-api", @@ -8064,7 +8070,7 @@ dependencies = [ [[package]] name = "sc-consensus-babe" version = "0.9.0" -source = "git+https://github.com/paritytech/substrate#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" +source = "git+https://github.com/paritytech/substrate?branch=master#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" dependencies = [ "async-trait", "derive_more", @@ -8110,7 +8116,7 @@ dependencies = [ [[package]] name = "sc-consensus-babe-rpc" version = "0.9.0" -source = "git+https://github.com/paritytech/substrate#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" +source = "git+https://github.com/paritytech/substrate?branch=master#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" dependencies = [ "derive_more", "futures 0.3.15", @@ -8134,7 +8140,7 @@ dependencies = [ [[package]] name = "sc-consensus-epochs" version = "0.9.0" -source = "git+https://github.com/paritytech/substrate#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" +source = "git+https://github.com/paritytech/substrate?branch=master#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" dependencies = [ "fork-tree", "parity-scale-codec", @@ -8147,7 +8153,7 @@ dependencies = [ [[package]] name = "sc-consensus-slots" version = "0.9.0" -source = "git+https://github.com/paritytech/substrate#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" +source = "git+https://github.com/paritytech/substrate?branch=master#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" dependencies = [ "async-trait", "futures 0.3.15", @@ -8175,7 +8181,7 @@ dependencies = [ [[package]] name = "sc-consensus-uncles" version = "0.9.0" -source = "git+https://github.com/paritytech/substrate#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" +source = "git+https://github.com/paritytech/substrate?branch=master#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" dependencies = [ "sc-client-api", "sp-authorship", @@ -8186,7 +8192,7 @@ dependencies = [ [[package]] name = "sc-executor" version = "0.9.0" -source = "git+https://github.com/paritytech/substrate#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" +source = "git+https://github.com/paritytech/substrate?branch=master#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" dependencies = [ "derive_more", "lazy_static", @@ -8215,7 +8221,7 @@ dependencies = [ [[package]] name = "sc-executor-common" version = "0.9.0" -source = "git+https://github.com/paritytech/substrate#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" +source = "git+https://github.com/paritytech/substrate?branch=master#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" dependencies = [ "derive_more", "parity-scale-codec", @@ -8232,7 +8238,7 @@ dependencies = [ [[package]] name = "sc-executor-wasmi" version = "0.9.0" -source = "git+https://github.com/paritytech/substrate#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" +source = "git+https://github.com/paritytech/substrate?branch=master#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" dependencies = [ "log", "parity-scale-codec", @@ -8247,7 +8253,7 @@ dependencies = [ [[package]] name = "sc-executor-wasmtime" version = "0.9.0" -source = "git+https://github.com/paritytech/substrate#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" +source = "git+https://github.com/paritytech/substrate?branch=master#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" dependencies = [ "cfg-if 1.0.0", "libc", @@ -8266,7 +8272,7 @@ dependencies = [ [[package]] name = "sc-finality-grandpa" version = "0.9.0" -source = "git+https://github.com/paritytech/substrate#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" +source = "git+https://github.com/paritytech/substrate?branch=master#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" dependencies = [ "async-trait", "derive_more", @@ -8307,7 +8313,7 @@ dependencies = [ [[package]] name = "sc-finality-grandpa-rpc" version = "0.9.0" -source = "git+https://github.com/paritytech/substrate#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" +source = "git+https://github.com/paritytech/substrate?branch=master#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" dependencies = [ "derive_more", "finality-grandpa", @@ -8331,7 +8337,7 @@ dependencies = [ [[package]] name = "sc-finality-grandpa-warp-sync" version = "0.9.0" -source = "git+https://github.com/paritytech/substrate#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" +source = "git+https://github.com/paritytech/substrate?branch=master#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" dependencies = [ "derive_more", "futures 0.3.15", @@ -8352,7 +8358,7 @@ dependencies = [ [[package]] name = "sc-informant" version = "0.9.0" -source = "git+https://github.com/paritytech/substrate#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" +source = "git+https://github.com/paritytech/substrate?branch=master#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" dependencies = [ "ansi_term 0.12.1", "futures 0.3.15", @@ -8370,7 +8376,7 @@ dependencies = [ [[package]] name = "sc-keystore" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" +source = "git+https://github.com/paritytech/substrate?branch=master#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" dependencies = [ "async-trait", "derive_more", @@ -8390,7 +8396,7 @@ dependencies = [ [[package]] name = "sc-light" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" +source = "git+https://github.com/paritytech/substrate?branch=master#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" dependencies = [ "hash-db", "lazy_static", @@ -8409,7 +8415,7 @@ dependencies = [ [[package]] name = "sc-network" version = "0.9.0" -source = "git+https://github.com/paritytech/substrate#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" +source = "git+https://github.com/paritytech/substrate?branch=master#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" dependencies = [ "async-std", "async-trait", @@ -8462,7 +8468,7 @@ dependencies = [ [[package]] name = "sc-network-gossip" version = "0.9.0" -source = "git+https://github.com/paritytech/substrate#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" +source = "git+https://github.com/paritytech/substrate?branch=master#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" dependencies = [ "futures 0.3.15", "futures-timer 3.0.2", @@ -8479,7 +8485,7 @@ dependencies = [ [[package]] name = "sc-offchain" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" +source = "git+https://github.com/paritytech/substrate?branch=master#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" dependencies = [ "bytes 0.5.6", "fnv", @@ -8507,7 +8513,7 @@ dependencies = [ [[package]] name = "sc-peerset" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" +source = "git+https://github.com/paritytech/substrate?branch=master#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" dependencies = [ "futures 0.3.15", "libp2p", @@ -8520,7 +8526,7 @@ dependencies = [ [[package]] name = "sc-proposer-metrics" version = "0.9.0" -source = "git+https://github.com/paritytech/substrate#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" +source = "git+https://github.com/paritytech/substrate?branch=master#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" dependencies = [ "log", "substrate-prometheus-endpoint", @@ -8529,7 +8535,7 @@ dependencies = [ [[package]] name = "sc-rpc" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" +source = "git+https://github.com/paritytech/substrate?branch=master#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" dependencies = [ "futures 0.3.15", "hash-db", @@ -8564,7 +8570,7 @@ dependencies = [ [[package]] name = "sc-rpc-api" version = "0.9.0" -source = "git+https://github.com/paritytech/substrate#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" +source = "git+https://github.com/paritytech/substrate?branch=master#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" dependencies = [ "derive_more", "futures 0.3.15", @@ -8589,7 +8595,7 @@ dependencies = [ [[package]] name = "sc-rpc-server" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" +source = "git+https://github.com/paritytech/substrate?branch=master#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" dependencies = [ "futures 0.1.29", "jsonrpc-core", @@ -8607,7 +8613,7 @@ dependencies = [ [[package]] name = "sc-service" version = "0.9.0" -source = "git+https://github.com/paritytech/substrate#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" +source = "git+https://github.com/paritytech/substrate?branch=master#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" dependencies = [ "async-trait", "directories", @@ -8672,7 +8678,7 @@ dependencies = [ [[package]] name = "sc-state-db" version = "0.9.0" -source = "git+https://github.com/paritytech/substrate#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" +source = "git+https://github.com/paritytech/substrate?branch=master#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" dependencies = [ "log", "parity-scale-codec", @@ -8687,7 +8693,7 @@ dependencies = [ [[package]] name = "sc-sync-state-rpc" version = "0.9.0" -source = "git+https://github.com/paritytech/substrate#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" +source = "git+https://github.com/paritytech/substrate?branch=master#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" dependencies = [ "jsonrpc-core", "jsonrpc-core-client", @@ -8707,7 +8713,7 @@ dependencies = [ [[package]] name = "sc-telemetry" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" +source = "git+https://github.com/paritytech/substrate?branch=master#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" dependencies = [ "chrono", "futures 0.3.15", @@ -8727,7 +8733,7 @@ dependencies = [ [[package]] name = "sc-tracing" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" +source = "git+https://github.com/paritytech/substrate?branch=master#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" dependencies = [ "ansi_term 0.12.1", "atty", @@ -8764,7 +8770,7 @@ dependencies = [ [[package]] name = "sc-tracing-proc-macro" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" +source = "git+https://github.com/paritytech/substrate?branch=master#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" dependencies = [ "proc-macro-crate 1.0.0", "proc-macro2", @@ -8775,7 +8781,7 @@ dependencies = [ [[package]] name = "sc-transaction-graph" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" +source = "git+https://github.com/paritytech/substrate?branch=master#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" dependencies = [ "derive_more", "futures 0.3.15", @@ -8797,7 +8803,7 @@ dependencies = [ [[package]] name = "sc-transaction-pool" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" +source = "git+https://github.com/paritytech/substrate?branch=master#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" dependencies = [ "futures 0.3.15", "intervalier", @@ -9269,14 +9275,14 @@ dependencies = [ "futures 0.3.15", "httparse", "log", - "rand 0.8.3", + "rand 0.8.4", "sha-1 0.9.6", ] [[package]] name = "sp-allocator" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" +source = "git+https://github.com/paritytech/substrate?branch=master#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" dependencies = [ "log", "sp-core", @@ -9288,7 +9294,7 @@ dependencies = [ [[package]] name = "sp-api" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" +source = "git+https://github.com/paritytech/substrate?branch=master#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" dependencies = [ "hash-db", "log", @@ -9305,7 +9311,7 @@ dependencies = [ [[package]] name = "sp-api-proc-macro" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" +source = "git+https://github.com/paritytech/substrate?branch=master#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" dependencies = [ "blake2-rfc", "proc-macro-crate 1.0.0", @@ -9317,7 +9323,7 @@ dependencies = [ [[package]] name = "sp-application-crypto" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" +source = "git+https://github.com/paritytech/substrate?branch=master#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" dependencies = [ "max-encoded-len", "parity-scale-codec", @@ -9330,7 +9336,7 @@ dependencies = [ [[package]] name = "sp-arithmetic" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" +source = "git+https://github.com/paritytech/substrate?branch=master#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" dependencies = [ "integer-sqrt", "num-traits", @@ -9344,7 +9350,7 @@ dependencies = [ [[package]] name = "sp-authority-discovery" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" +source = "git+https://github.com/paritytech/substrate?branch=master#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" dependencies = [ "parity-scale-codec", "sp-api", @@ -9356,7 +9362,7 @@ dependencies = [ [[package]] name = "sp-authorship" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" +source = "git+https://github.com/paritytech/substrate?branch=master#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" dependencies = [ "async-trait", "parity-scale-codec", @@ -9368,7 +9374,7 @@ dependencies = [ [[package]] name = "sp-block-builder" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" +source = "git+https://github.com/paritytech/substrate?branch=master#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" dependencies = [ "parity-scale-codec", "sp-api", @@ -9380,7 +9386,7 @@ dependencies = [ [[package]] name = "sp-blockchain" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" +source = "git+https://github.com/paritytech/substrate?branch=master#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" dependencies = [ "futures 0.3.15", "log", @@ -9398,7 +9404,7 @@ dependencies = [ [[package]] name = "sp-chain-spec" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" +source = "git+https://github.com/paritytech/substrate?branch=master#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" dependencies = [ "serde", "serde_json", @@ -9407,7 +9413,7 @@ dependencies = [ [[package]] name = "sp-consensus" version = "0.9.0" -source = "git+https://github.com/paritytech/substrate#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" +source = "git+https://github.com/paritytech/substrate?branch=master#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" dependencies = [ "async-trait", "futures 0.3.15", @@ -9434,7 +9440,7 @@ dependencies = [ [[package]] name = "sp-consensus-babe" version = "0.9.0" -source = "git+https://github.com/paritytech/substrate#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" +source = "git+https://github.com/paritytech/substrate?branch=master#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" dependencies = [ "async-trait", "merlin", @@ -9456,7 +9462,7 @@ dependencies = [ [[package]] name = "sp-consensus-slots" version = "0.9.0" -source = "git+https://github.com/paritytech/substrate#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" +source = "git+https://github.com/paritytech/substrate?branch=master#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" dependencies = [ "parity-scale-codec", "sp-arithmetic", @@ -9466,7 +9472,7 @@ dependencies = [ [[package]] name = "sp-consensus-vrf" version = "0.9.0" -source = "git+https://github.com/paritytech/substrate#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" +source = "git+https://github.com/paritytech/substrate?branch=master#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" dependencies = [ "parity-scale-codec", "schnorrkel", @@ -9478,7 +9484,7 @@ dependencies = [ [[package]] name = "sp-core" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" +source = "git+https://github.com/paritytech/substrate?branch=master#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" dependencies = [ "base58", "blake2-rfc", @@ -9523,7 +9529,7 @@ dependencies = [ [[package]] name = "sp-database" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" +source = "git+https://github.com/paritytech/substrate?branch=master#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" dependencies = [ "kvdb", "parking_lot 0.11.1", @@ -9532,7 +9538,7 @@ dependencies = [ [[package]] name = "sp-debug-derive" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" +source = "git+https://github.com/paritytech/substrate?branch=master#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" dependencies = [ "proc-macro2", "quote", @@ -9542,7 +9548,7 @@ dependencies = [ [[package]] name = "sp-externalities" version = "0.9.0" -source = "git+https://github.com/paritytech/substrate#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" +source = "git+https://github.com/paritytech/substrate?branch=master#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" dependencies = [ "environmental", "parity-scale-codec", @@ -9553,7 +9559,7 @@ dependencies = [ [[package]] name = "sp-finality-grandpa" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" +source = "git+https://github.com/paritytech/substrate?branch=master#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" dependencies = [ "finality-grandpa", "log", @@ -9570,7 +9576,7 @@ dependencies = [ [[package]] name = "sp-inherents" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" +source = "git+https://github.com/paritytech/substrate?branch=master#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" dependencies = [ "async-trait", "impl-trait-for-tuples", @@ -9584,7 +9590,7 @@ dependencies = [ [[package]] name = "sp-io" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" +source = "git+https://github.com/paritytech/substrate?branch=master#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" dependencies = [ "futures 0.3.15", "hash-db", @@ -9609,7 +9615,7 @@ dependencies = [ [[package]] name = "sp-keyring" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" +source = "git+https://github.com/paritytech/substrate?branch=master#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" dependencies = [ "lazy_static", "sp-core", @@ -9620,7 +9626,7 @@ dependencies = [ [[package]] name = "sp-keystore" version = "0.9.0" -source = "git+https://github.com/paritytech/substrate#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" +source = "git+https://github.com/paritytech/substrate?branch=master#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" dependencies = [ "async-trait", "derive_more", @@ -9637,7 +9643,7 @@ dependencies = [ [[package]] name = "sp-maybe-compressed-blob" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" +source = "git+https://github.com/paritytech/substrate?branch=master#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" dependencies = [ "ruzstd", "zstd", @@ -9646,7 +9652,7 @@ dependencies = [ [[package]] name = "sp-npos-elections" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" +source = "git+https://github.com/paritytech/substrate?branch=master#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" dependencies = [ "parity-scale-codec", "serde", @@ -9659,7 +9665,7 @@ dependencies = [ [[package]] name = "sp-npos-elections-compact" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" +source = "git+https://github.com/paritytech/substrate?branch=master#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" dependencies = [ "proc-macro-crate 1.0.0", "proc-macro2", @@ -9670,7 +9676,7 @@ dependencies = [ [[package]] name = "sp-offchain" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" +source = "git+https://github.com/paritytech/substrate?branch=master#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" dependencies = [ "sp-api", "sp-core", @@ -9680,7 +9686,7 @@ dependencies = [ [[package]] name = "sp-panic-handler" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" +source = "git+https://github.com/paritytech/substrate?branch=master#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" dependencies = [ "backtrace", ] @@ -9688,7 +9694,7 @@ dependencies = [ [[package]] name = "sp-rpc" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" +source = "git+https://github.com/paritytech/substrate?branch=master#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" dependencies = [ "rustc-hash", "serde", @@ -9699,7 +9705,7 @@ dependencies = [ [[package]] name = "sp-runtime" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" +source = "git+https://github.com/paritytech/substrate?branch=master#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" dependencies = [ "either", "hash256-std-hasher", @@ -9721,7 +9727,7 @@ dependencies = [ [[package]] name = "sp-runtime-interface" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" +source = "git+https://github.com/paritytech/substrate?branch=master#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" dependencies = [ "impl-trait-for-tuples", "parity-scale-codec", @@ -9738,7 +9744,7 @@ dependencies = [ [[package]] name = "sp-runtime-interface-proc-macro" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" +source = "git+https://github.com/paritytech/substrate?branch=master#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" dependencies = [ "Inflector", "proc-macro-crate 1.0.0", @@ -9750,7 +9756,7 @@ dependencies = [ [[package]] name = "sp-serializer" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" +source = "git+https://github.com/paritytech/substrate?branch=master#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" dependencies = [ "serde", "serde_json", @@ -9759,7 +9765,7 @@ dependencies = [ [[package]] name = "sp-session" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" +source = "git+https://github.com/paritytech/substrate?branch=master#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" dependencies = [ "parity-scale-codec", "sp-api", @@ -9772,7 +9778,7 @@ dependencies = [ [[package]] name = "sp-staking" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" +source = "git+https://github.com/paritytech/substrate?branch=master#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" dependencies = [ "parity-scale-codec", "sp-runtime", @@ -9782,7 +9788,7 @@ dependencies = [ [[package]] name = "sp-state-machine" version = "0.9.0" -source = "git+https://github.com/paritytech/substrate#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" +source = "git+https://github.com/paritytech/substrate?branch=master#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" dependencies = [ "hash-db", "log", @@ -9805,12 +9811,12 @@ dependencies = [ [[package]] name = "sp-std" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" +source = "git+https://github.com/paritytech/substrate?branch=master#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" [[package]] name = "sp-storage" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" +source = "git+https://github.com/paritytech/substrate?branch=master#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" dependencies = [ "impl-serde", "parity-scale-codec", @@ -9823,7 +9829,7 @@ dependencies = [ [[package]] name = "sp-tasks" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" +source = "git+https://github.com/paritytech/substrate?branch=master#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" dependencies = [ "log", "sp-core", @@ -9836,7 +9842,7 @@ dependencies = [ [[package]] name = "sp-timestamp" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" +source = "git+https://github.com/paritytech/substrate?branch=master#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" dependencies = [ "async-trait", "futures-timer 3.0.2", @@ -9853,7 +9859,7 @@ dependencies = [ [[package]] name = "sp-tracing" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" +source = "git+https://github.com/paritytech/substrate?branch=master#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" dependencies = [ "erased-serde", "log", @@ -9871,7 +9877,7 @@ dependencies = [ [[package]] name = "sp-transaction-pool" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" +source = "git+https://github.com/paritytech/substrate?branch=master#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" dependencies = [ "derive_more", "futures 0.3.15", @@ -9887,7 +9893,7 @@ dependencies = [ [[package]] name = "sp-transaction-storage-proof" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" +source = "git+https://github.com/paritytech/substrate?branch=master#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" dependencies = [ "async-trait", "log", @@ -9902,7 +9908,7 @@ dependencies = [ [[package]] name = "sp-trie" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" +source = "git+https://github.com/paritytech/substrate?branch=master#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" dependencies = [ "hash-db", "memory-db", @@ -9916,7 +9922,7 @@ dependencies = [ [[package]] name = "sp-utils" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" +source = "git+https://github.com/paritytech/substrate?branch=master#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" dependencies = [ "futures 0.3.15", "futures-core", @@ -9928,7 +9934,7 @@ dependencies = [ [[package]] name = "sp-version" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" +source = "git+https://github.com/paritytech/substrate?branch=master#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" dependencies = [ "impl-serde", "parity-scale-codec", @@ -9941,7 +9947,7 @@ dependencies = [ [[package]] name = "sp-version-proc-macro" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" +source = "git+https://github.com/paritytech/substrate?branch=master#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" dependencies = [ "parity-scale-codec", "proc-macro-crate 1.0.0", @@ -9953,7 +9959,7 @@ dependencies = [ [[package]] name = "sp-wasm-interface" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" +source = "git+https://github.com/paritytech/substrate?branch=master#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" dependencies = [ "impl-trait-for-tuples", "parity-scale-codec", @@ -10110,7 +10116,7 @@ dependencies = [ [[package]] name = "substrate-browser-utils" version = "0.9.0" -source = "git+https://github.com/paritytech/substrate#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" +source = "git+https://github.com/paritytech/substrate?branch=master#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" dependencies = [ "chrono", "console_error_panic_hook", @@ -10136,7 +10142,7 @@ dependencies = [ [[package]] name = "substrate-build-script-utils" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" +source = "git+https://github.com/paritytech/substrate?branch=master#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" dependencies = [ "platforms", ] @@ -10144,7 +10150,7 @@ dependencies = [ [[package]] name = "substrate-frame-rpc-system" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" +source = "git+https://github.com/paritytech/substrate?branch=master#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" dependencies = [ "frame-system-rpc-runtime-api", "futures 0.3.15", @@ -10167,7 +10173,7 @@ dependencies = [ [[package]] name = "substrate-prometheus-endpoint" version = "0.9.0" -source = "git+https://github.com/paritytech/substrate#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" +source = "git+https://github.com/paritytech/substrate?branch=master#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" dependencies = [ "async-std", "derive_more", @@ -10181,7 +10187,7 @@ dependencies = [ [[package]] name = "substrate-test-client" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" +source = "git+https://github.com/paritytech/substrate?branch=master#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" dependencies = [ "async-trait", "futures 0.1.29", @@ -10210,7 +10216,7 @@ dependencies = [ [[package]] name = "substrate-test-utils" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" +source = "git+https://github.com/paritytech/substrate?branch=master#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" dependencies = [ "futures 0.3.15", "substrate-test-utils-derive", @@ -10220,7 +10226,7 @@ dependencies = [ [[package]] name = "substrate-test-utils-derive" version = "0.9.0" -source = "git+https://github.com/paritytech/substrate#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" +source = "git+https://github.com/paritytech/substrate?branch=master#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" dependencies = [ "proc-macro-crate 1.0.0", "quote", @@ -10304,7 +10310,7 @@ checksum = "dac1c663cfc93810f88aed9b8941d48cabf856a1b111c29a40439018d870eb22" dependencies = [ "cfg-if 1.0.0", "libc", - "rand 0.8.3", + "rand 0.8.4", "redox_syscall 0.2.4", "remove_dir_all", "winapi 0.3.9", @@ -10940,7 +10946,7 @@ dependencies = [ "ipnet", "lazy_static", "log", - "rand 0.8.3", + "rand 0.8.4", "smallvec 1.6.1", "thiserror", "tinyvec 1.1.1", @@ -10975,7 +10981,7 @@ checksum = "e604eb7b43c06650e854be16a2a03155743d3752dd1c943f6829e26b7a36e382" [[package]] name = "try-runtime-cli" version = "0.9.0" -source = "git+https://github.com/paritytech/substrate#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" +source = "git+https://github.com/paritytech/substrate?branch=master#34d4bb0ed47f7ec5ae26add9f9f8f244428a3e02" dependencies = [ "frame-try-runtime", "log", @@ -11580,7 +11586,7 @@ dependencies = [ "mach", "memoffset 0.6.1", "more-asserts", - "rand 0.8.3", + "rand 0.8.4", "region", "thiserror", "wasmtime-environ", @@ -11891,7 +11897,7 @@ dependencies = [ "log", "nohash-hasher", "parking_lot 0.11.1", - "rand 0.8.3", + "rand 0.8.4", "static_assertions", ] diff --git a/polkadot/node/network/approval-distribution/src/lib.rs b/polkadot/node/network/approval-distribution/src/lib.rs index 52be6b9b4b..160d45957b 100644 --- a/polkadot/node/network/approval-distribution/src/lib.rs +++ b/polkadot/node/network/approval-distribution/src/lib.rs @@ -81,6 +81,10 @@ struct State { /// Peer view data is partially stored here, and partially inline within the [`BlockEntry`]s peer_views: HashMap, + + /// Track all our neighbors in the current gossip topology. + /// We're not necessarily connected to all of them. + gossip_peers: HashSet, } #[derive(Debug, Clone, Hash, PartialEq, Eq)] @@ -209,6 +213,15 @@ impl State { entry.known_by.remove(&peer_id); }) } + NetworkBridgeEvent::NewGossipTopology(peers) => { + let newly_added: Vec = peers.difference(&self.gossip_peers).cloned().collect(); + self.gossip_peers = peers; + for peer_id in newly_added { + if let Some(view) = self.peer_views.remove(&peer_id) { + self.handle_peer_view_change(ctx, metrics, peer_id, view).await; + } + } + } NetworkBridgeEvent::PeerViewChange(peer_id, view) => { self.handle_peer_view_change(ctx, metrics, peer_id, view).await; } @@ -336,6 +349,7 @@ impl State { ); Self::unify_with_peer( ctx, + &self.gossip_peers, metrics, &mut self.blocks, peer_id.clone(), @@ -439,11 +453,9 @@ impl State { peer_id: PeerId, view: View, ) { - let lucky = util::gen_ratio_sqrt_subset(self.peer_views.len(), util::MIN_GOSSIP_PEERS); tracing::trace!( target: LOG_TARGET, ?view, - ?lucky, "Peer view change", ); let finalized_number = view.finalized_number; @@ -468,12 +480,9 @@ impl State { }); } - if !lucky { - return; - } - Self::unify_with_peer( ctx, + &self.gossip_peers, metrics, &mut self.blocks, peer_id.clone(), @@ -704,7 +713,12 @@ impl State { .collect::>(); let assignments = vec![(assignment, claimed_candidate_index)]; - let peers = util::choose_random_sqrt_subset(peers, MIN_GOSSIP_PEERS); + let gossip_peers = &self.gossip_peers; + let peers = util::choose_random_subset( + |e| gossip_peers.contains(e), + peers, + MIN_GOSSIP_PEERS, + ); // Add the fingerprint of the assignment to the knowledge of each peer. for peer in peers.iter() { @@ -943,7 +957,13 @@ impl State { .cloned() .filter(|key| maybe_peer_id.as_ref().map_or(true, |id| id != key)) .collect::>(); - let peers = util::choose_random_sqrt_subset(peers, MIN_GOSSIP_PEERS); + + let gossip_peers = &self.gossip_peers; + let peers = util::choose_random_subset( + |e| gossip_peers.contains(e), + peers, + MIN_GOSSIP_PEERS, + ); // Add the fingerprint of the assignment to the knowledge of each peer. for peer in peers.iter() { @@ -975,11 +995,27 @@ impl State { async fn unify_with_peer( ctx: &mut impl SubsystemContext, + gossip_peers: &HashSet, metrics: &Metrics, entries: &mut HashMap, peer_id: PeerId, view: View, ) { + let is_gossip_peer = gossip_peers.contains(&peer_id); + let lucky = is_gossip_peer || util::gen_ratio( + util::MIN_GOSSIP_PEERS.saturating_sub(gossip_peers.len()), + util::MIN_GOSSIP_PEERS, + ); + + if !lucky { + tracing::trace!( + target: LOG_TARGET, + ?peer_id, + "Unlucky peer", + ); + return; + } + metrics.on_unify_with_peer(); let _timer = metrics.time_unify_with_peer(); let mut to_send: Vec = Vec::new(); diff --git a/polkadot/node/network/bitfield-distribution/src/lib.rs b/polkadot/node/network/bitfield-distribution/src/lib.rs index 1cbd82bc10..55332389e0 100644 --- a/polkadot/node/network/bitfield-distribution/src/lib.rs +++ b/polkadot/node/network/bitfield-distribution/src/lib.rs @@ -80,10 +80,14 @@ impl BitfieldGossipMessage { /// overseer ordered us to work on. #[derive(Default, Debug)] struct ProtocolState { - /// track all active peers and their views + /// Track all active peers and their views /// to determine what is relevant to them. peer_views: HashMap, + /// Track all our neighbors in the current gossip topology. + /// We're not necessarily connected to all of them. + gossip_peers: HashSet, + /// Our current view. view: OurView, @@ -294,13 +298,14 @@ where return; }; - let peer_views = &mut state.peer_views; let msg = BitfieldGossipMessage { relay_parent, signed_availability, }; - relay_message(ctx, job_data, peer_views, validator, msg).await; + let gossip_peers = &state.gossip_peers; + let peer_views = &mut state.peer_views; + relay_message(ctx, job_data, gossip_peers, peer_views, validator, msg).await; metrics.on_own_bitfield_gossipped(); } @@ -311,6 +316,7 @@ where async fn relay_message( ctx: &mut Context, job_data: &mut PerRelayParentData, + gossip_peers: &HashSet, peer_views: &mut HashMap, validator: ValidatorId, message: BitfieldGossipMessage, @@ -353,7 +359,11 @@ where } }) .collect::>(); - let interested_peers = util::choose_random_sqrt_subset(interested_peers, MIN_GOSSIP_PEERS); + let interested_peers = util::choose_random_subset( + |e| gossip_peers.contains(e), + interested_peers, + MIN_GOSSIP_PEERS, + ); interested_peers.iter() .for_each(|peer|{ // track the message as sent for this peer @@ -497,7 +507,7 @@ where metrics.on_bitfield_received(); one_per_validator.insert(validator.clone(), message.clone()); - relay_message(ctx, job_data, &mut state.peer_views, validator, message).await; + relay_message(ctx, job_data, &state.gossip_peers, &mut state.peer_views, validator, message).await; modify_reputation(ctx, origin, BENEFIT_VALID_MESSAGE_FIRST).await } @@ -535,6 +545,15 @@ where // get rid of superfluous data state.peer_views.remove(&peerid); } + NetworkBridgeEvent::NewGossipTopology(peers) => { + let newly_added: Vec = peers.difference(&state.gossip_peers).cloned().collect(); + state.gossip_peers = peers; + for peer in newly_added { + if let Some(view) = state.peer_views.remove(&peer) { + handle_peer_view_change(ctx, state, peer, view).await; + } + } + } NetworkBridgeEvent::PeerViewChange(peerid, view) => { tracing::trace!( target: LOG_TARGET, @@ -590,7 +609,13 @@ where Context: SubsystemContext, { let added = state.peer_views.entry(origin.clone()).or_default().replace_difference(view).cloned().collect::>(); - let lucky = util::gen_ratio_sqrt_subset(state.peer_views.len(), util::MIN_GOSSIP_PEERS); + + let is_gossip_peer = state.gossip_peers.contains(&origin); + let lucky = is_gossip_peer || util::gen_ratio( + util::MIN_GOSSIP_PEERS.saturating_sub(state.gossip_peers.len()), + util::MIN_GOSSIP_PEERS, + ); + if !lucky { tracing::trace!( target: LOG_TARGET, @@ -599,9 +624,9 @@ where ); return; } + // Send all messages we've seen before and the peer is now interested // in to that peer. - let delta_set: Vec<(ValidatorId, BitfieldGossipMessage)> = added .into_iter() .filter_map(|new_relay_parent_interest| { @@ -812,3 +837,4 @@ impl metrics::Metrics for Metrics { Ok(Metrics(Some(metrics))) } } + diff --git a/polkadot/node/network/bitfield-distribution/src/tests.rs b/polkadot/node/network/bitfield-distribution/src/tests.rs index 70f8487214..de2da9316b 100644 --- a/polkadot/node/network/bitfield-distribution/src/tests.rs +++ b/polkadot/node/network/bitfield-distribution/src/tests.rs @@ -26,6 +26,7 @@ use sp_application_crypto::AppKey; use sp_keystore::testing::KeyStore; use std::sync::Arc; use std::time::Duration; +use std::iter::FromIterator as _; use assert_matches::assert_matches; use polkadot_node_network_protocol::{view, ObservedRole, our_view}; use polkadot_subsystem::jaeger; @@ -64,9 +65,11 @@ fn prewarmed_state( }, }, peer_views: peers - .into_iter() + .iter() + .cloned() .map(|peer| (peer, view!(relay_parent))) .collect(), + gossip_peers: peers.into_iter().collect(), view: our_view!(relay_parent), } } @@ -425,9 +428,13 @@ fn do_not_relay_message_twice() { make_subsystem_context::(pool); executor::block_on(async move { + let gossip_peers = HashSet::from_iter(vec![ + peer_a.clone(), peer_b.clone(), + ].into_iter()); relay_message( &mut ctx, state.per_relay_parent.get_mut(&hash).unwrap(), + &gossip_peers, &mut state.peer_views, validator.clone(), msg.clone(), @@ -460,6 +467,7 @@ fn do_not_relay_message_twice() { relay_message( &mut ctx, state.per_relay_parent.get_mut(&hash).unwrap(), + &gossip_peers, &mut state.peer_views, validator.clone(), msg.clone(), diff --git a/polkadot/node/network/bridge/src/lib.rs b/polkadot/node/network/bridge/src/lib.rs index 8635dbe501..87898b940d 100644 --- a/polkadot/node/network/bridge/src/lib.rs +++ b/polkadot/node/network/bridge/src/lib.rs @@ -48,7 +48,7 @@ use polkadot_node_subsystem_util::metrics::{self, prometheus}; /// To be added to [`NetworkConfiguration::extra_sets`]. pub use polkadot_node_network_protocol::peer_set::{peer_sets_info, IsAuthority}; -use std::collections::{HashMap, hash_map}; +use std::collections::{HashMap, hash_map, HashSet}; use std::iter::ExactSizeIterator; use std::sync::Arc; @@ -58,7 +58,7 @@ mod validator_discovery; /// /// Defines the `Network` trait with an implementation for an `Arc`. mod network; -use network::{Network, send_message}; +use network::{Network, send_message, get_peer_id_by_authority_id}; /// Request multiplexer for combining the multiple request sources into a single `Stream` of `AllMessages`. mod multiplexer; @@ -557,6 +557,34 @@ where network_service = ns; authority_discovery_service = ads; } + NetworkBridgeMessage::NewGossipTopology { + our_neighbors, + } => { + tracing::debug!( + target: LOG_TARGET, + action = "NewGossipTopology", + neighbors = our_neighbors.len(), + "Gossip topology has changed", + ); + + let ads = &mut authority_discovery_service; + let mut gossip_peers = HashSet::with_capacity(our_neighbors.len()); + for authority in our_neighbors { + let addr = get_peer_id_by_authority_id( + ads, + authority.clone(), + ).await; + + if let Some(peer_id) = addr { + gossip_peers.insert(peer_id); + } + } + + dispatch_validation_event_to_all_unbounded( + NetworkBridgeEvent::NewGossipTopology(gossip_peers), + ctx.sender(), + ); + } } Err(e) => return Err(e.into()), }, diff --git a/polkadot/node/network/bridge/src/network.rs b/polkadot/node/network/bridge/src/network.rs index 831ae6d3aa..40b2daa146 100644 --- a/polkadot/node/network/bridge/src/network.rs +++ b/polkadot/node/network/bridge/src/network.rs @@ -35,7 +35,7 @@ use polkadot_node_network_protocol::{ request_response::{OutgoingRequest, Requests, Recipient}, PeerId, UnifiedReputationChange as Rep, }; -use polkadot_primitives::v1::{Block, Hash}; +use polkadot_primitives::v1::{AuthorityDiscoveryId, Block, Hash}; use polkadot_subsystem::{SubsystemError, SubsystemResult}; use crate::validator_discovery::AuthorityDiscovery; @@ -303,3 +303,17 @@ impl Network for Arc> { ); } } + +/// We assume one peer_id per authority_id. +pub async fn get_peer_id_by_authority_id( + authority_discovery: &mut AD, + authority: AuthorityDiscoveryId, +) -> Option { + // Note: `get_addresses_by_authority_id` searched in a cache, and it thus expected + // to be very quick. + authority_discovery + .get_addresses_by_authority_id(authority).await + .into_iter() + .flat_map(|list| list.into_iter()) + .find_map(|addr| parse_addr(addr).ok().map(|(p, _)| p)) +} diff --git a/polkadot/node/network/collator-protocol/src/collator_side/mod.rs b/polkadot/node/network/collator-protocol/src/collator_side/mod.rs index 5ddbc8f561..b1e66324a0 100644 --- a/polkadot/node/network/collator-protocol/src/collator_side/mod.rs +++ b/polkadot/node/network/collator-protocol/src/collator_side/mod.rs @@ -795,6 +795,9 @@ async fn handle_network_msg( PeerMessage(remote, msg) => { handle_incoming_peer_message(ctx, runtime, state, remote, msg).await?; } + NewGossipTopology(..) => { + // impossibru! + } } Ok(()) diff --git a/polkadot/node/network/collator-protocol/src/validator_side/mod.rs b/polkadot/node/network/collator-protocol/src/validator_side/mod.rs index baf24123dc..5070402eda 100644 --- a/polkadot/node/network/collator-protocol/src/validator_side/mod.rs +++ b/polkadot/node/network/collator-protocol/src/validator_side/mod.rs @@ -899,6 +899,9 @@ where state.peer_data.remove(&peer_id); state.metrics.note_collator_peer_count(state.peer_data.len()); }, + NewGossipTopology(..) => { + // impossibru! + } PeerViewChange(peer_id, view) => { handle_peer_view_change(state, peer_id, view).await?; }, diff --git a/polkadot/node/network/gossip-support/Cargo.toml b/polkadot/node/network/gossip-support/Cargo.toml index f8f29bb63d..bd223e6e7c 100644 --- a/polkadot/node/network/gossip-support/Cargo.toml +++ b/polkadot/node/network/gossip-support/Cargo.toml @@ -7,6 +7,7 @@ edition = "2018" [dependencies] sp-application-crypto = { git = "https://github.com/paritytech/substrate", branch = "master" } sp-keystore = { git = "https://github.com/paritytech/substrate", branch = "master" } +sp-core = { git = "https://github.com/paritytech/substrate", branch = "master" } polkadot-node-network-protocol = { path = "../protocol" } polkadot-node-subsystem = { path = "../../subsystem" } @@ -14,12 +15,15 @@ polkadot-node-subsystem-util = { path = "../../subsystem-util" } polkadot-primitives = { path = "../../../primitives" } futures = "0.3.15" +rand = { version = "0.8.3", default-features = false } +rand_chacha = { version = "0.3.0", default-features = false } tracing = "0.1.26" [dev-dependencies] sp-core = { git = "https://github.com/paritytech/substrate", branch = "master", features = ["std"] } sp-keyring = { git = "https://github.com/paritytech/substrate", branch = "master" } sc-keystore = { git = "https://github.com/paritytech/substrate", branch = "master" } +sp-consensus-babe = { git = "https://github.com/paritytech/substrate", branch = "master" } polkadot-node-subsystem-test-helpers = { path = "../../subsystem-test-helpers" } diff --git a/polkadot/node/network/gossip-support/src/lib.rs b/polkadot/node/network/gossip-support/src/lib.rs index 8a12896bc7..29ba32b616 100644 --- a/polkadot/node/network/gossip-support/src/lib.rs +++ b/polkadot/node/network/gossip-support/src/lib.rs @@ -15,14 +15,23 @@ // along with Polkadot. If not, see . //! This subsystem is responsible for keeping track of session changes -//! and issuing a connection request to the validators relevant to -//! the gossiping subsystems on every new session. +//! and issuing a connection request to the relevant validators +//! on every new session. +//! +//! In addition to that, it creates a gossip overlay topology +//! which limits the amount of messages sent and received +//! to be an order of sqrt of the validators. Our neighbors +//! in this graph will be forwarded to the network bridge with +//! the `NetworkBridgeMessage::NewGossipTopology` message. use std::time::{Duration, Instant}; use futures::{channel::oneshot, FutureExt as _}; +use rand::{SeedableRng, seq::SliceRandom as _}; +use rand_chacha::ChaCha20Rng; use polkadot_node_subsystem::{ messages::{ AllMessages, GossipSupportMessage, NetworkBridgeMessage, + RuntimeApiMessage, RuntimeApiRequest, }, ActiveLeavesUpdate, FromOverseer, OverseerSignal, Subsystem, SpawnedSubsystem, SubsystemContext, @@ -39,8 +48,8 @@ use sp_application_crypto::{Public, AppKey}; mod tests; const LOG_TARGET: &str = "parachain::gossip-support"; -// How much time should we wait since the last -// authority discovery resolution failure. +// How much time should we wait to reissue a connection request +// since the last authority discovery resolution failure. const BACKOFF_DURATION: Duration = Duration::from_secs(5); /// The Gossip Support subsystem. @@ -85,7 +94,7 @@ impl GossipSupport { tracing::debug!( target: LOG_TARGET, err = ?e, - "Failed to receive a message from Overseer, exiting" + "Failed to receive a message from Overseer, exiting", ); return; }, @@ -120,28 +129,30 @@ async fn determine_relevant_authorities( tracing::debug!( target: LOG_TARGET, authority_count = ?authorities.len(), - "Determined relevant authorities" + "Determined relevant authorities", ); Ok(authorities) } /// Return an error if we're not a validator in the given set (do not have keys). +/// Otherwise, returns the index of our keys in `authorities`. async fn ensure_i_am_an_authority( keystore: &SyncCryptoStorePtr, authorities: &[AuthorityDiscoveryId], -) -> Result<(), util::Error> { - for v in authorities { - if CryptoStore::has_keys(&**keystore, &[(v.to_raw_vec(), AuthorityDiscoveryId::ID)]) - .await - { - return Ok(()); +) -> Result { + for (i, v) in authorities.iter().enumerate() { + if CryptoStore::has_keys( + &**keystore, + &[(v.to_raw_vec(), AuthorityDiscoveryId::ID)] + ).await { + return Ok(i); } } Err(util::Error::NotAValidator) } /// A helper function for making a `ConnectToValidators` request. -pub async fn connect_to_authorities( +async fn connect_to_authorities( ctx: &mut impl SubsystemContext, validator_ids: Vec, peer_set: PeerSet, @@ -157,6 +168,79 @@ pub async fn connect_to_authorities( failed_rx } +/// We partition the list of all sorted `authorities` into sqrt(len) groups of sqrt(len) size +/// and form a matrix where each validator is connected to all validators in its row and column. +/// This is similar to [web3] research proposed topology, except for the groups are not parachain +/// groups (because not all validators are parachain validators and the group size is small), +/// but formed randomly via BABE randomness from two epochs ago. +/// This limits the amount of gossip peers to 2 * sqrt(len) and ensures the diameter of 2. +/// +/// [web3]: https://research.web3.foundation/en/latest/polkadot/networking/3-avail-valid.html#topology +async fn update_gossip_topology( + ctx: &mut impl SubsystemContext, + our_index: usize, + authorities: Vec, + relay_parent: Hash, +) -> Result<(), util::Error> { + // retrieve BABE randomness + let random_seed = { + let (tx, rx) = oneshot::channel(); + + ctx.send_message(RuntimeApiMessage::Request( + relay_parent, + RuntimeApiRequest::CurrentBabeEpoch(tx), + ).into()).await; + + let randomness = rx.await??.randomness; + let mut subject = [0u8; 40]; + subject[..8].copy_from_slice(b"gossipsu"); + subject[8..].copy_from_slice(&randomness); + sp_core::blake2_256(&subject) + }; + + // shuffle the indices + let mut rng: ChaCha20Rng = SeedableRng::from_seed(random_seed); + let len = authorities.len(); + let mut indices: Vec = (0..len).collect(); + indices.shuffle(&mut rng); + let our_shuffled_position = indices.iter() + .position(|i| *i == our_index) + .expect("our_index < len; indices contains it; qed"); + + let neighbors = matrix_neighbors(our_shuffled_position, len); + let our_neighbors = neighbors.map(|i| authorities[indices[i]].clone()).collect(); + + ctx.send_message(AllMessages::NetworkBridge( + NetworkBridgeMessage::NewGossipTopology { + our_neighbors, + } + )).await; + + Ok(()) +} + +/// Compute our row and column neighbors in a matrix +fn matrix_neighbors(our_index: usize, len: usize) -> impl Iterator { + assert!(our_index < len, "our_index is computed using `enumerate`; qed"); + + // e.g. for size 11 the matrix would be + // + // 0 1 2 + // 3 4 5 + // 6 7 8 + // 9 10 + // + // and for index 10, the neighbors would be 1, 4, 7, 9 + + let sqrt = (len as f64).sqrt() as usize; + let our_row = our_index / sqrt; + let our_column = our_index % sqrt; + let row_neighbors = our_row * sqrt..std::cmp::min(our_row * sqrt + sqrt, len); + let column_neighbors = (our_column..len).step_by(sqrt); + + row_neighbors.chain(column_neighbors).filter(move |i| *i != our_index) +} + impl State { /// 1. Determine if the current session index has changed. /// 2. If it has, determine relevant validators @@ -171,46 +255,72 @@ impl State { let current_index = util::request_session_index_for_child(leaf, ctx.sender()).await.await??; let since_failure = self.last_failure.map(|i| i.elapsed()).unwrap_or_default(); let force_request = since_failure >= BACKOFF_DURATION; + let leaf_session = Some((current_index, leaf)); let maybe_new_session = match self.last_session_index { - Some(i) if current_index <= i && !force_request => None, - _ => Some((current_index, leaf)), + Some(i) if current_index <= i => None, + _ => leaf_session, }; - if let Some((new_session, relay_parent)) = maybe_new_session { - tracing::debug!( - target: LOG_TARGET, - %new_session, - %force_request, - "New session detected", - ); + let maybe_issue_connection = if force_request { + leaf_session + } else { + maybe_new_session + }; + + if let Some((session_index, relay_parent)) = maybe_issue_connection { + let is_new_session = maybe_new_session.is_some(); + if is_new_session { + tracing::debug!( + target: LOG_TARGET, + %session_index, + "New session detected", + ); + } + let authorities = determine_relevant_authorities(ctx, relay_parent).await?; - ensure_i_am_an_authority(keystore, &authorities).await?; - let num = authorities.len(); - tracing::debug!(target: LOG_TARGET, %num, "Issuing a connection request"); + let our_index = ensure_i_am_an_authority(keystore, &authorities).await?; - let failures = connect_to_authorities( - ctx, - authorities, - PeerSet::Validation, - ).await; + self.issue_connection_request(ctx, authorities.clone()).await?; - // we await for the request to be processed - // this is fine, it should take much less time than one session - let failures = failures.await.unwrap_or(num); - - self.last_session_index = Some(new_session); - // issue another request for the same session - // if at least a third of the authorities were not resolved - self.last_failure = if failures >= num / 3 { - Some(Instant::now()) - } else { - None + if is_new_session { + self.last_session_index = Some(session_index); + update_gossip_topology(ctx, our_index, authorities, relay_parent).await?; } } + } Ok(()) } + + async fn issue_connection_request( + &mut self, + ctx: &mut impl SubsystemContext, + authorities: Vec, + ) -> Result<(), util::Error> { + let num = authorities.len(); + tracing::debug!(target: LOG_TARGET, %num, "Issuing a connection request"); + + let failures = connect_to_authorities( + ctx, + authorities, + PeerSet::Validation, + ).await; + + // we await for the request to be processed + // this is fine, it should take much less time than one session + let failures = failures.await.unwrap_or(num); + + // issue another request for the same session + // if at least a third of the authorities were not resolved + self.last_failure = if failures >= num / 3 { + Some(Instant::now()) + } else { + None + }; + + Ok(()) + } } impl Subsystem for GossipSupport diff --git a/polkadot/node/network/gossip-support/src/tests.rs b/polkadot/node/network/gossip-support/src/tests.rs index 3fa99e9e07..7f96f4caf7 100644 --- a/polkadot/node/network/gossip-support/src/tests.rs +++ b/polkadot/node/network/gossip-support/src/tests.rs @@ -26,6 +26,9 @@ use polkadot_node_subsystem_util::TimeoutExt as _; use sc_keystore::LocalKeystore; use sp_keyring::Sr25519Keyring; use sp_keystore::SyncCryptoStore; +use sp_consensus_babe::{ + Epoch as BabeEpoch, BabeEpochConfiguration, AllowedSlots, +}; use std::sync::Arc; use std::time::Duration; @@ -117,6 +120,47 @@ fn authorities() -> Vec { ] } +fn neighbors() -> Vec { + vec![ + Sr25519Keyring::One.public().into(), + Sr25519Keyring::Alice.public().into(), + Sr25519Keyring::Eve.public().into(), + ] +} + +async fn test_neighbors(overseer: &mut VirtualOverseer) { + assert_matches!( + overseer_recv(overseer).await, + AllMessages::RuntimeApi(RuntimeApiMessage::Request( + _, + RuntimeApiRequest::CurrentBabeEpoch(tx), + )) => { + let _ = tx.send(Ok(BabeEpoch { + epoch_index: 2 as _, + start_slot: 0.into(), + duration: 200, + authorities: vec![(Sr25519Keyring::Alice.public().into(), 1)], + randomness: [0u8; 32], + config: BabeEpochConfiguration { + c: (1, 4), + allowed_slots: AllowedSlots::PrimarySlots, + }, + })).unwrap(); + } + ); + + assert_matches!( + overseer_recv(overseer).await, + AllMessages::NetworkBridge(NetworkBridgeMessage::NewGossipTopology { + our_neighbors, + }) => { + let mut got: Vec<_> = our_neighbors.into_iter().collect(); + got.sort(); + assert_eq!(got, neighbors()); + } + ); +} + #[test] fn issues_a_connection_request_on_new_session() { let hash = Hash::repeat_byte(0xAA); @@ -157,6 +201,8 @@ fn issues_a_connection_request_on_new_session() { } ); + test_neighbors(overseer).await; + virtual_overseer }); @@ -223,6 +269,8 @@ fn issues_a_connection_request_on_new_session() { } ); + test_neighbors(overseer).await; + virtual_overseer }); assert_eq!(state.last_session_index, Some(2)); @@ -268,6 +316,9 @@ fn issues_a_connection_request_when_last_request_was_mostly_unresolved() { failed.send(2).unwrap(); } ); + + test_neighbors(overseer).await; + virtual_overseer }); @@ -312,6 +363,7 @@ fn issues_a_connection_request_when_last_request_was_mostly_unresolved() { failed.send(1).unwrap(); } ); + virtual_overseer }); @@ -319,3 +371,18 @@ fn issues_a_connection_request_when_last_request_was_mostly_unresolved() { assert!(state.last_failure.is_none()); } +#[test] +fn test_matrix_neighbors() { + for (our_index, len, expected) in vec![ + (0usize, 1usize, vec![]), + (1, 2, vec![0usize]), + (0, 9, vec![1, 2, 3, 6]), + (9, 10, vec![0, 3, 6]), + (10, 11, vec![1, 4, 7, 9]), + (7, 11, vec![1, 4, 6, 8, 10]), + ].into_iter() { + let mut result: Vec<_> = matrix_neighbors(our_index, len).collect(); + result.sort(); + assert_eq!(result, expected); + } +} diff --git a/polkadot/node/network/statement-distribution/src/lib.rs b/polkadot/node/network/statement-distribution/src/lib.rs index f2e570a6b7..238ea4672f 100644 --- a/polkadot/node/network/statement-distribution/src/lib.rs +++ b/polkadot/node/network/statement-distribution/src/lib.rs @@ -843,6 +843,7 @@ fn check_statement_signature( /// sends all statements dependent on that statement to peers who could previously not receive /// them but now can. async fn circulate_statement_and_dependents( + gossip_peers: &HashSet, peers: &mut HashMap, active_heads: &mut HashMap, ctx: &mut impl SubsystemContext, @@ -868,7 +869,14 @@ async fn circulate_statement_and_dependents( { Some(( *stored.compact().candidate_hash(), - circulate_statement(peers, ctx, relay_parent, stored, priority_peers).await, + circulate_statement( + gossip_peers, + peers, + ctx, + relay_parent, + stored, + priority_peers, + ).await, )) }, _ => None, @@ -943,6 +951,7 @@ fn is_statement_large(statement: &SignedFullStatement) -> bool { /// Circulates a statement to all peers who have not seen it yet, and returns /// an iterator over peers who need to have dependent statements sent. async fn circulate_statement<'a>( + gossip_peers: &HashSet, peers: &mut HashMap, ctx: &mut impl SubsystemContext, relay_parent: Hash, @@ -968,7 +977,11 @@ async fn circulate_statement<'a>( peers_to_send.retain(|p| !priority_set.contains(p)); let mut peers_to_send = - util::choose_random_sqrt_subset(peers_to_send, MIN_GOSSIP_PEERS); + util::choose_random_subset( + |e| gossip_peers.contains(e), + peers_to_send, + MIN_GOSSIP_PEERS, + ); // We don't want to use less peers, than we would without any priority peers: let min_size = std::cmp::max(peers_to_send.len(), MIN_GOSSIP_PEERS); // Make set full: @@ -1248,6 +1261,7 @@ async fn launch_request( /// async fn handle_incoming_message_and_circulate<'a>( peer: PeerId, + gossip_peers: &HashSet, peers: &mut HashMap, active_heads: &'a mut HashMap, ctx: &mut impl SubsystemContext, @@ -1280,6 +1294,7 @@ async fn handle_incoming_message_and_circulate<'a>( // that require dependents. Thus, if this is a `Seconded` statement for a candidate we // were not aware of before, we cannot have any dependent statements from the candidate. let _ = circulate_statement( + gossip_peers, peers, ctx, relay_parent, @@ -1444,8 +1459,9 @@ async fn handle_incoming_message<'a>( } /// Update a peer's view. Sends all newly unlocked statements based on the previous -async fn update_peer_view_and_send_unlocked( +async fn update_peer_view_and_maybe_send_unlocked( peer: PeerId, + gossip_peers: &HashSet, peer_data: &mut PeerData, ctx: &mut impl SubsystemContext, active_heads: &HashMap, @@ -1459,12 +1475,20 @@ async fn update_peer_view_and_send_unlocked( let _ = peer_data.view_knowledge.remove(removed); } + let is_gossip_peer = gossip_peers.contains(&peer); + let lucky = is_gossip_peer || util::gen_ratio( + util::MIN_GOSSIP_PEERS.saturating_sub(gossip_peers.len()), + util::MIN_GOSSIP_PEERS, + ); + // Add entries for all relay-parents in the new view but not the old. // Furthermore, send all statements we have for those relay parents. let new_view = peer_data.view.difference(&old_view).copied().collect::>(); for new in new_view.iter().copied() { peer_data.view_knowledge.insert(new, Default::default()); - + if !lucky { + continue; + } if let Some(active_head) = active_heads.get(&new) { send_statements( peer.clone(), @@ -1480,6 +1504,7 @@ async fn update_peer_view_and_send_unlocked( async fn handle_network_update( peers: &mut HashMap, + gossip_peers: &mut HashSet, authorities: &mut HashMap, active_heads: &mut HashMap, ctx: &mut impl SubsystemContext, @@ -1514,9 +1539,28 @@ async fn handle_network_update( authorities.remove(&auth_id); } } + NetworkBridgeEvent::NewGossipTopology(new_peers) => { + let newly_added: Vec = new_peers.difference(gossip_peers).cloned().collect(); + *gossip_peers = new_peers; + for peer in newly_added { + if let Some(data) = peers.get_mut(&peer) { + let view = std::mem::take(&mut data.view); + update_peer_view_and_maybe_send_unlocked( + peer, + gossip_peers, + data, + ctx, + &*active_heads, + view, + metrics, + ).await + } + } + } NetworkBridgeEvent::PeerMessage(peer, message) => { handle_incoming_message_and_circulate( peer, + gossip_peers, peers, active_heads, ctx, @@ -1534,8 +1578,9 @@ async fn handle_network_update( ); match peers.get_mut(&peer) { Some(data) => { - update_peer_view_and_send_unlocked( + update_peer_view_and_maybe_send_unlocked( peer, + gossip_peers, data, ctx, &*active_heads, @@ -1558,6 +1603,7 @@ impl StatementDistribution { mut ctx: impl SubsystemContext, ) -> std::result::Result<(), Fatal> { let mut peers: HashMap = HashMap::new(); + let mut gossip_peers: HashSet = HashSet::new(); let mut authorities: HashMap = HashMap::new(); let mut active_heads: HashMap = HashMap::new(); @@ -1576,6 +1622,7 @@ impl StatementDistribution { &mut ctx, &mut runtime, &mut peers, + &mut gossip_peers, &mut authorities, &mut active_heads, &req_sender, @@ -1594,6 +1641,7 @@ impl StatementDistribution { Message::Requester(result) => { let result = self.handle_requester_message( &mut ctx, + &gossip_peers, &mut peers, &mut active_heads, &req_sender, @@ -1663,6 +1711,7 @@ impl StatementDistribution { async fn handle_requester_message( &self, ctx: &mut impl SubsystemContext, + gossip_peers: &HashSet, peers: &mut HashMap, active_heads: &mut HashMap, req_sender: &mpsc::Sender, @@ -1712,6 +1761,7 @@ impl StatementDistribution { for message in messages { handle_incoming_message_and_circulate( peer, + gossip_peers, peers, active_heads, ctx, @@ -1785,6 +1835,7 @@ impl StatementDistribution { ctx: &mut impl SubsystemContext, runtime: &mut RuntimeInfo, peers: &mut HashMap, + gossip_peers: &mut HashSet, authorities: &mut HashMap, active_heads: &mut HashMap, req_sender: &mpsc::Sender, @@ -1873,6 +1924,7 @@ impl StatementDistribution { } }; circulate_statement_and_dependents( + gossip_peers, peers, active_heads, ctx, @@ -1887,6 +1939,7 @@ impl StatementDistribution { handle_network_update( peers, + gossip_peers, authorities, active_heads, ctx, diff --git a/polkadot/node/network/statement-distribution/src/tests.rs b/polkadot/node/network/statement-distribution/src/tests.rs index b2baa428a5..32a7eb77a1 100644 --- a/polkadot/node/network/statement-distribution/src/tests.rs +++ b/polkadot/node/network/statement-distribution/src/tests.rs @@ -15,9 +15,10 @@ // along with Polkadot. If not, see . use std::time::Duration; +use std::sync::Arc; +use std::iter::FromIterator as _; use parity_scale_codec::{Decode, Encode}; use super::*; -use std::sync::Arc; use sp_keyring::Sr25519Keyring; use sp_application_crypto::{AppKey, sr25519::Pair, Pair as TraitPair}; use polkadot_node_primitives::Statement; @@ -441,8 +442,10 @@ fn peer_view_update_sends_messages() { let peer = PeerId::random(); executor::block_on(async move { - update_peer_view_and_send_unlocked( + let gossip_peers = HashSet::from_iter(vec![peer.clone()].into_iter()); + update_peer_view_and_maybe_send_unlocked( peer.clone(), + &gossip_peers, &mut peer_data, &mut ctx, &active_heads, @@ -562,7 +565,11 @@ fn circulated_statement_goes_to_all_peers_with_view() { statement: &statement, }; + let gossip_peers = HashSet::from_iter(vec![ + peer_a.clone(), peer_b.clone(), peer_c.clone(), + ].into_iter()); let needs_dependents = circulate_statement( + &gossip_peers, &mut peer_data, &mut ctx, hash_b, diff --git a/polkadot/node/subsystem-util/Cargo.toml b/polkadot/node/subsystem-util/Cargo.toml index af1d70aba5..a7f20bdfd9 100644 --- a/polkadot/node/subsystem-util/Cargo.toml +++ b/polkadot/node/subsystem-util/Cargo.toml @@ -9,6 +9,7 @@ description = "Subsystem traits and message definitions" async-trait = "0.1.42" futures = "0.3.15" futures-timer = "3.0.2" +itertools = "0.10" parity-scale-codec = { version = "2.0.0", default-features = false, features = ["derive"] } parking_lot = { version = "0.11.1", optional = true } pin-project = "1.0.7" diff --git a/polkadot/node/subsystem-util/src/lib.rs b/polkadot/node/subsystem-util/src/lib.rs index 80ac5d9b2f..62f86f5c08 100644 --- a/polkadot/node/subsystem-util/src/lib.rs +++ b/polkadot/node/subsystem-util/src/lib.rs @@ -224,30 +224,32 @@ pub fn find_validator_group(groups: &[Vec], index: ValidatorInde }) } -/// Chooses a random subset of sqrt(v.len()), but at least `min` elements. -pub fn choose_random_sqrt_subset(mut v: Vec, min: usize) -> Vec { +/// Choose a random subset of `min` elements. +/// But always include `is_priority` elements. +pub fn choose_random_subset bool>(is_priority: F, mut v: Vec, min: usize) -> Vec { use rand::seq::SliceRandom as _; - let mut rng = rand::thread_rng(); - v.shuffle(&mut rng); - let len = max_of_min_and_sqrt_len(v.len(), min); - v.truncate(len); + // partition the elements into priority first + // the returned index is when non_priority elements start + let i = itertools::partition(&mut v, is_priority); + + if i >= min || v.len() <= i { + v.truncate(i); + return v; + } + + let mut rng = rand::thread_rng(); + v[i..].shuffle(&mut rng); + + v.truncate(min); v } -/// Returns bool with a probability of `max(len.sqrt(), min) / len` -/// being true. -pub fn gen_ratio_sqrt_subset(len: usize, min: usize) -> bool { +/// Returns a bool with a probability of `a / b` of being true. +pub fn gen_ratio(a: usize, b: usize) -> bool { use rand::Rng as _; let mut rng = rand::thread_rng(); - let threshold = max_of_min_and_sqrt_len(len, min); - let n = rng.gen_range(0..len); - n < threshold -} - -fn max_of_min_and_sqrt_len(len: usize, min: usize) -> usize { - let len_sqrt = (len as f64).sqrt() as usize; - std::cmp::max(min, len_sqrt) + rng.gen_ratio(a as u32, b as u32) } /// Local validator information diff --git a/polkadot/node/subsystem/src/messages.rs b/polkadot/node/subsystem/src/messages.rs index f8ae3dead6..67bab4220a 100644 --- a/polkadot/node/subsystem/src/messages.rs +++ b/polkadot/node/subsystem/src/messages.rs @@ -22,7 +22,7 @@ //! //! Subsystems' APIs are defined separately from their implementation, leading to easier mocking. -use std::{collections::btree_map::BTreeMap, sync::Arc}; +use std::{collections::{BTreeMap, HashSet}, sync::Arc}; use futures::channel::{mpsc, oneshot}; use thiserror::Error; @@ -304,6 +304,13 @@ pub enum NetworkBridgeMessage { /// authority discovery has failed to resolve. failed: oneshot::Sender, }, + /// Inform the distribution subsystems about the new + /// gossip network topology formed. + NewGossipTopology { + /// Ids of our neighbors in the new gossip topology. + /// We're not necessarily connected to all of them, but we should. + our_neighbors: HashSet, + } } impl NetworkBridgeMessage { @@ -318,6 +325,7 @@ impl NetworkBridgeMessage { Self::SendCollationMessages(_) => None, Self::ConnectToValidators { .. } => None, Self::SendRequests { .. } => None, + Self::NewGossipTopology { .. } => None, } } } diff --git a/polkadot/node/subsystem/src/messages/network_bridge_event.rs b/polkadot/node/subsystem/src/messages/network_bridge_event.rs index 8d7c237985..3186e80e60 100644 --- a/polkadot/node/subsystem/src/messages/network_bridge_event.rs +++ b/polkadot/node/subsystem/src/messages/network_bridge_event.rs @@ -15,6 +15,7 @@ // along with Polkadot. If not, see . use std::convert::TryFrom; +use std::collections::HashSet; pub use sc_network::{ReputationChange, PeerId}; @@ -30,6 +31,15 @@ pub enum NetworkBridgeEvent { /// A peer has disconnected. PeerDisconnected(PeerId), + /// Our neighbors in the new gossip topology. + /// We're not necessarily connected to all of them. + /// + /// This message is issued only on the validation peer set. + /// + /// Note, that the distribution subsystems need to handle the last + /// view update of the newly added gossip peers manually. + NewGossipTopology(HashSet), + /// Peer has sent a message. PeerMessage(PeerId, M), @@ -64,6 +74,8 @@ impl NetworkBridgeEvent { => NetworkBridgeEvent::PeerConnected(peer.clone(), role.clone(), authority_id.clone()), NetworkBridgeEvent::PeerDisconnected(ref peer) => NetworkBridgeEvent::PeerDisconnected(peer.clone()), + NetworkBridgeEvent::NewGossipTopology(ref peers) + => NetworkBridgeEvent::NewGossipTopology(peers.clone()), NetworkBridgeEvent::PeerMessage(ref peer, ref msg) => NetworkBridgeEvent::PeerMessage(peer.clone(), <&'a T>::try_from(msg)?.clone()), NetworkBridgeEvent::PeerViewChange(ref peer, ref view) diff --git a/polkadot/roadmap/implementers-guide/src/node/utility/gossip-support.md b/polkadot/roadmap/implementers-guide/src/node/utility/gossip-support.md index 79e5b9a29d..8309c312f6 100644 --- a/polkadot/roadmap/implementers-guide/src/node/utility/gossip-support.md +++ b/polkadot/roadmap/implementers-guide/src/node/utility/gossip-support.md @@ -1,15 +1,19 @@ # Gossip Support The Gossip Support Subsystem is responsible for keeping track of session changes -and issuing a connection request to all validators in the next, current and a few past sessions -if we are a validator in these sessions. -The request will add all validators to a reserved PeerSet, meaning we will not reject a connection request -from any validator in that set. +and issuing a connection request to all validators in the next, current and +a few past sessions if we are a validator in these sessions. +The request will add all validators to a reserved PeerSet, meaning we will not +reject a connection request from any validator in that set. -Gossiping subsystems will be notified when a new peer connects or disconnects by network bridge. -It is their responsibility to limit the amount of outgoing gossip messages. -At the moment we enforce a cap of `max(sqrt(peers.len()), 25)` message recipients at a time in each gossiping subsystem. +In addition to that, it creates a gossip overlay topology per session which +limits the amount of messages sent and received to be an order of sqrt of the +validators. Our neighbors in this graph will be forwarded to the network bridge +with the `NetworkBridgeMessage::NewGossipTopology` message. -We also flip a coin with the same probability when handling peer view updates in the distribution subsystems. -Over time the probability of not handling a peer view update converges to zero, so it shouldn't be cause much trouble. -This should be considered as a temporary measure until we implement a more robust solution for gossiping. +See https://github.com/paritytech/polkadot/issues/3239 for more details. + +The gossip topology is used by parachain distribution subsystems, +such as Bitfield Distrubution, (small) Statement Distributuion and +Approval Distibution to limit the amount of peers we send messages to +and handle view updates. diff --git a/polkadot/roadmap/implementers-guide/src/node/utility/network-bridge.md b/polkadot/roadmap/implementers-guide/src/node/utility/network-bridge.md index 691e563470..a524315ffb 100644 --- a/polkadot/roadmap/implementers-guide/src/node/utility/network-bridge.md +++ b/polkadot/roadmap/implementers-guide/src/node/utility/network-bridge.md @@ -21,11 +21,10 @@ Input: [`NetworkBridgeMessage`][NBM] Output: - - [`AvailabilityDistributionMessage`][AvD]`::NetworkBridgeUpdateV1` + - [`ApprovalDistributionMessage`][AppD]`::NetworkBridgeUpdateV1` - [`BitfieldDistributionMessage`][BitD]`::NetworkBridgeUpdateV1` - - [`PoVDistributionMessage`][PoVD]`::NetworkBridgeUpdateV1` - - [`StatementDistributionMessage`][StmtD]`::NetworkBridgeUpdateV1` - [`CollatorProtocolMessage`][CollP]`::NetworkBridgeUpdateV1` + - [`StatementDistributionMessage`][StmtD]`::NetworkBridgeUpdateV1` ## Functionality @@ -59,7 +58,7 @@ Each network event is associated with a particular peer-set. The `activated` and `deactivated` lists determine the evolution of our local view over time. A `ProtocolMessage::ViewUpdate` is issued to each connected peer on each peer-set, and a `NetworkBridgeEvent::OurViewChange` is issued to each event handler for each protocol. -We only send view updates if the node has indicated that it has finished major blockchain synchronization. +We only send view updates if the node has indicated that it has finished major blockchain synchronization. If we are connected to the same peer on both peer-sets, we will send the peer two view updates as a result. @@ -107,25 +106,28 @@ Map the message onto the corresponding [Event Handler](#event-handlers) based on - Send all `(ValidatorId, PeerId)` pairs on the response channel. - Feed all Peer IDs to peer set manager the underlying network provides. +### NewGossipTopology + +- Map all `AuthorityDiscoveryId`s to `PeerId`s and issue a corresponding `NetworkBridgeUpdateV1` + to all validation subsystems. + ## Event Handlers Network bridge event handlers are the intended recipients of particular network protocol messages. These are each a variant of a message to be sent via the overseer. ### Validation V1 -* `StatementDistributionV1Message -> StatementDistributionMessage::NetworkBridgeUpdateV1` -* `PoVDistributionV1Message -> PoVDistributionMessage::NetworkBridgeUpdateV1` -* `AvailabilityDistributionV1Message -> AvailabilityDistributionMessage::NetworkBridgeUpdateV1` +* `ApprovalDistributionV1Message -> ApprovalDistributionMessage::NetworkBridgeUpdateV1` * `BitfieldDistributionV1Message -> BitfieldDistributionMessage::NetworkBridgeUpdateV1` +* `StatementDistributionV1Message -> StatementDistributionMessage::NetworkBridgeUpdateV1` ### Collation V1 * `CollatorProtocolV1Message -> CollatorProtocolMessage::NetworkBridgeUpdateV1` [NBM]: ../../types/overseer-protocol.md#network-bridge-message -[AvD]: ../../types/overseer-protocol.md#availability-distribution-message +[AppD]: ../../types/overseer-protocol.md#approval-distribution-message [BitD]: ../../types/overseer-protocol.md#bitfield-distribution-message -[PoVD]: ../../types/overseer-protocol.md#pov-distribution-message [StmtD]: ../../types/overseer-protocol.md#statement-distribution-message [CollP]: ../../types/overseer-protocol.md#collator-protocol-message diff --git a/polkadot/roadmap/implementers-guide/src/types/network.md b/polkadot/roadmap/implementers-guide/src/types/network.md index ee763e4d1a..4a71f42e1f 100644 --- a/polkadot/roadmap/implementers-guide/src/types/network.md +++ b/polkadot/roadmap/implementers-guide/src/types/network.md @@ -147,6 +147,14 @@ enum NetworkBridgeEvent { PeerConnected(PeerId, ObservedRole), /// A peer with given ID is now disconnected. PeerDisconnected(PeerId), + /// Our neighbors in the new gossip topology. + /// We're not necessarily connected to all of them. + /// + /// This message is issued only on the validation peer set. + /// + /// Note, that the distribution subsystems need to handle the last + /// view update of the newly added gossip peers manually. + NewGossipTopology(HashSet), /// We received a message from the given peer. PeerMessage(PeerId, M), /// The given peer has updated its description of its view. diff --git a/polkadot/roadmap/implementers-guide/src/types/overseer-protocol.md b/polkadot/roadmap/implementers-guide/src/types/overseer-protocol.md index 9376ce42ea..4cb2160f55 100644 --- a/polkadot/roadmap/implementers-guide/src/types/overseer-protocol.md +++ b/polkadot/roadmap/implementers-guide/src/types/overseer-protocol.md @@ -45,7 +45,35 @@ struct ActiveLeavesUpdate { } ``` -## Approval Voting +## All Messages + +A message type tying together all message types that are used across Subsystems. + +```rust +enum AllMessages { + CandidateValidation(CandidateValidationMessage), + CandidateBacking(CandidateBackingMessage), + ChainApi(ChainApiMessage), + CollatorProtocol(CollatorProtocolMessage), + StatementDistribution(StatementDistributionMessage), + AvailabilityDistribution(AvailabilityDistributionMessage), + AvailabilityRecovery(AvailabilityRecoveryMessage), + BitfieldDistribution(BitfieldDistributionMessage), + BitfieldSigning(BitfieldSigningMessage), + Provisioner(ProvisionerMessage), + RuntimeApi(RuntimeApiMessage), + AvailabilityStore(AvailabilityStoreMessage), + NetworkBridge(NetworkBridgeMessage), + CollationGeneration(CollationGenerationMessage), + ApprovalVoting(ApprovalVotingMessage), + ApprovalDistribution(ApprovalDistributionMessage), + GossipSupport(GossipSupportMessage), + DisputeCoordinator(DisputeCoordinatorMessage), + DisputeParticipation(DisputeParticipationMessage), +} +``` + +## Approval Voting Message Messages received by the approval voting subsystem. @@ -127,9 +155,9 @@ enum ApprovalVotingMessage { } ``` -## Approval Distribution +## Approval Distribution Message -Messages received by the approval Distribution subsystem. +Messages received by the approval distribution subsystem. ```rust /// Metadata about a block which is now live in the approval protocol. @@ -166,10 +194,6 @@ enum ApprovalDistributionMessage { } ``` -## All Messages - -> TODO (now) - ## Availability Distribution Message Messages received by the availability distribution subsystem. @@ -334,7 +358,7 @@ enum ChainSelectionMessage { /// Request the best leaf containing the given block in its ancestry. Return `None` if /// there is no such leaf. BestLeafContaining(Hash, ResponseChannel>), - + } ``` @@ -495,6 +519,13 @@ enum NetworkBridgeMessage { /// authority discovery has failed to resolve. failed: oneshot::Sender, }, + /// Inform the distribution subsystems about the new + /// gossip network topology formed. + NewGossipTopology { + /// Ids of our neighbors in the new gossip topology. + /// We're not necessarily connected to all of them, but we should. + our_neighbors: HashSet, + } } ```