diff --git a/Cargo.lock b/Cargo.lock index 4f67ef3e643c..82bb3111d398 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1784,7 +1784,7 @@ checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" [[package]] name = "fork-tree" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate#35b74db34833c7e9787f33e700a8db32982e9e18" +source = "git+https://github.com/paritytech/substrate#2425d14121a6988804a2c299477d7df32498f2d8" dependencies = [ "parity-scale-codec", ] @@ -1802,7 +1802,7 @@ dependencies = [ [[package]] name = "frame-benchmarking" version = "3.1.0" -source = "git+https://github.com/paritytech/substrate#35b74db34833c7e9787f33e700a8db32982e9e18" +source = "git+https://github.com/paritytech/substrate#2425d14121a6988804a2c299477d7df32498f2d8" dependencies = [ "frame-support", "frame-system", @@ -1821,7 +1821,7 @@ dependencies = [ [[package]] name = "frame-benchmarking-cli" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate#35b74db34833c7e9787f33e700a8db32982e9e18" +source = "git+https://github.com/paritytech/substrate#2425d14121a6988804a2c299477d7df32498f2d8" dependencies = [ "Inflector", "chrono", @@ -1844,7 +1844,7 @@ dependencies = [ [[package]] name = "frame-election-provider-support" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate#35b74db34833c7e9787f33e700a8db32982e9e18" +source = "git+https://github.com/paritytech/substrate#2425d14121a6988804a2c299477d7df32498f2d8" dependencies = [ "frame-support", "frame-system", @@ -1857,7 +1857,7 @@ dependencies = [ [[package]] name = "frame-executive" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate#35b74db34833c7e9787f33e700a8db32982e9e18" +source = "git+https://github.com/paritytech/substrate#2425d14121a6988804a2c299477d7df32498f2d8" dependencies = [ "frame-support", "frame-system", @@ -1873,7 +1873,7 @@ dependencies = [ [[package]] name = "frame-metadata" version = "13.0.0" -source = "git+https://github.com/paritytech/substrate#35b74db34833c7e9787f33e700a8db32982e9e18" +source = "git+https://github.com/paritytech/substrate#2425d14121a6988804a2c299477d7df32498f2d8" dependencies = [ "parity-scale-codec", "serde", @@ -1884,7 +1884,7 @@ dependencies = [ [[package]] name = "frame-support" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate#35b74db34833c7e9787f33e700a8db32982e9e18" +source = "git+https://github.com/paritytech/substrate#2425d14121a6988804a2c299477d7df32498f2d8" dependencies = [ "bitflags", "frame-metadata", @@ -1910,7 +1910,7 @@ dependencies = [ [[package]] name = "frame-support-procedural" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate#35b74db34833c7e9787f33e700a8db32982e9e18" +source = "git+https://github.com/paritytech/substrate#2425d14121a6988804a2c299477d7df32498f2d8" dependencies = [ "Inflector", "frame-support-procedural-tools", @@ -1922,7 +1922,7 @@ dependencies = [ [[package]] name = "frame-support-procedural-tools" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate#35b74db34833c7e9787f33e700a8db32982e9e18" +source = "git+https://github.com/paritytech/substrate#2425d14121a6988804a2c299477d7df32498f2d8" dependencies = [ "frame-support-procedural-tools-derive", "proc-macro-crate 1.0.0", @@ -1934,7 +1934,7 @@ dependencies = [ [[package]] name = "frame-support-procedural-tools-derive" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate#35b74db34833c7e9787f33e700a8db32982e9e18" +source = "git+https://github.com/paritytech/substrate#2425d14121a6988804a2c299477d7df32498f2d8" dependencies = [ "proc-macro2", "quote", @@ -1944,7 +1944,7 @@ dependencies = [ [[package]] name = "frame-support-test" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate#35b74db34833c7e9787f33e700a8db32982e9e18" +source = "git+https://github.com/paritytech/substrate#2425d14121a6988804a2c299477d7df32498f2d8" dependencies = [ "frame-metadata", "frame-support", @@ -1965,7 +1965,7 @@ dependencies = [ [[package]] name = "frame-system" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate#35b74db34833c7e9787f33e700a8db32982e9e18" +source = "git+https://github.com/paritytech/substrate#2425d14121a6988804a2c299477d7df32498f2d8" dependencies = [ "frame-support", "impl-trait-for-tuples", @@ -1982,7 +1982,7 @@ dependencies = [ [[package]] name = "frame-system-benchmarking" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate#35b74db34833c7e9787f33e700a8db32982e9e18" +source = "git+https://github.com/paritytech/substrate#2425d14121a6988804a2c299477d7df32498f2d8" dependencies = [ "frame-benchmarking", "frame-support", @@ -1996,7 +1996,7 @@ dependencies = [ [[package]] name = "frame-system-rpc-runtime-api" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate#35b74db34833c7e9787f33e700a8db32982e9e18" +source = "git+https://github.com/paritytech/substrate#2425d14121a6988804a2c299477d7df32498f2d8" dependencies = [ "parity-scale-codec", "sp-api", @@ -2005,7 +2005,7 @@ dependencies = [ [[package]] name = "frame-try-runtime" version = "0.9.0" -source = "git+https://github.com/paritytech/substrate#35b74db34833c7e9787f33e700a8db32982e9e18" +source = "git+https://github.com/paritytech/substrate#2425d14121a6988804a2c299477d7df32498f2d8" dependencies = [ "frame-support", "parity-scale-codec", @@ -4387,7 +4387,7 @@ checksum = "13370dae44474229701bb69b90b4f4dca6404cb0357a2d50d635f1171dc3aa7b" [[package]] name = "pallet-authority-discovery" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate#35b74db34833c7e9787f33e700a8db32982e9e18" +source = "git+https://github.com/paritytech/substrate#2425d14121a6988804a2c299477d7df32498f2d8" dependencies = [ "frame-support", "frame-system", @@ -4403,7 +4403,7 @@ dependencies = [ [[package]] name = "pallet-authorship" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate#35b74db34833c7e9787f33e700a8db32982e9e18" +source = "git+https://github.com/paritytech/substrate#2425d14121a6988804a2c299477d7df32498f2d8" dependencies = [ "frame-support", "frame-system", @@ -4418,7 +4418,7 @@ dependencies = [ [[package]] name = "pallet-babe" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate#35b74db34833c7e9787f33e700a8db32982e9e18" +source = "git+https://github.com/paritytech/substrate#2425d14121a6988804a2c299477d7df32498f2d8" dependencies = [ "frame-benchmarking", "frame-support", @@ -4442,7 +4442,7 @@ dependencies = [ [[package]] name = "pallet-balances" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate#35b74db34833c7e9787f33e700a8db32982e9e18" +source = "git+https://github.com/paritytech/substrate#2425d14121a6988804a2c299477d7df32498f2d8" dependencies = [ "frame-benchmarking", "frame-support", @@ -4472,7 +4472,7 @@ dependencies = [ [[package]] name = "pallet-bounties" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate#35b74db34833c7e9787f33e700a8db32982e9e18" +source = "git+https://github.com/paritytech/substrate#2425d14121a6988804a2c299477d7df32498f2d8" dependencies = [ "frame-benchmarking", "frame-support", @@ -4487,7 +4487,7 @@ dependencies = [ [[package]] name = "pallet-collective" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate#35b74db34833c7e9787f33e700a8db32982e9e18" +source = "git+https://github.com/paritytech/substrate#2425d14121a6988804a2c299477d7df32498f2d8" dependencies = [ "frame-benchmarking", "frame-support", @@ -4504,7 +4504,7 @@ dependencies = [ [[package]] name = "pallet-democracy" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate#35b74db34833c7e9787f33e700a8db32982e9e18" +source = "git+https://github.com/paritytech/substrate#2425d14121a6988804a2c299477d7df32498f2d8" dependencies = [ "frame-benchmarking", "frame-support", @@ -4519,7 +4519,7 @@ dependencies = [ [[package]] name = "pallet-election-provider-multi-phase" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate#35b74db34833c7e9787f33e700a8db32982e9e18" +source = "git+https://github.com/paritytech/substrate#2425d14121a6988804a2c299477d7df32498f2d8" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -4540,7 +4540,7 @@ dependencies = [ [[package]] name = "pallet-elections-phragmen" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate#35b74db34833c7e9787f33e700a8db32982e9e18" +source = "git+https://github.com/paritytech/substrate#2425d14121a6988804a2c299477d7df32498f2d8" dependencies = [ "frame-benchmarking", "frame-support", @@ -4556,7 +4556,7 @@ dependencies = [ [[package]] name = "pallet-grandpa" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate#35b74db34833c7e9787f33e700a8db32982e9e18" +source = "git+https://github.com/paritytech/substrate#2425d14121a6988804a2c299477d7df32498f2d8" dependencies = [ "frame-benchmarking", "frame-support", @@ -4578,7 +4578,7 @@ dependencies = [ [[package]] name = "pallet-identity" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate#35b74db34833c7e9787f33e700a8db32982e9e18" +source = "git+https://github.com/paritytech/substrate#2425d14121a6988804a2c299477d7df32498f2d8" dependencies = [ "enumflags2", "frame-benchmarking", @@ -4594,7 +4594,7 @@ dependencies = [ [[package]] name = "pallet-im-online" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate#35b74db34833c7e9787f33e700a8db32982e9e18" +source = "git+https://github.com/paritytech/substrate#2425d14121a6988804a2c299477d7df32498f2d8" dependencies = [ "frame-benchmarking", "frame-support", @@ -4614,7 +4614,7 @@ dependencies = [ [[package]] name = "pallet-indices" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate#35b74db34833c7e9787f33e700a8db32982e9e18" +source = "git+https://github.com/paritytech/substrate#2425d14121a6988804a2c299477d7df32498f2d8" dependencies = [ "frame-benchmarking", "frame-support", @@ -4631,7 +4631,7 @@ dependencies = [ [[package]] name = "pallet-membership" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate#35b74db34833c7e9787f33e700a8db32982e9e18" +source = "git+https://github.com/paritytech/substrate#2425d14121a6988804a2c299477d7df32498f2d8" dependencies = [ "frame-support", "frame-system", @@ -4645,7 +4645,7 @@ dependencies = [ [[package]] name = "pallet-mmr" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate#35b74db34833c7e9787f33e700a8db32982e9e18" +source = "git+https://github.com/paritytech/substrate#2425d14121a6988804a2c299477d7df32498f2d8" dependencies = [ "ckb-merkle-mountain-range", "frame-benchmarking", @@ -4663,7 +4663,7 @@ dependencies = [ [[package]] name = "pallet-mmr-primitives" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate#35b74db34833c7e9787f33e700a8db32982e9e18" +source = "git+https://github.com/paritytech/substrate#2425d14121a6988804a2c299477d7df32498f2d8" dependencies = [ "frame-support", "frame-system", @@ -4679,7 +4679,7 @@ dependencies = [ [[package]] name = "pallet-mmr-rpc" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate#35b74db34833c7e9787f33e700a8db32982e9e18" +source = "git+https://github.com/paritytech/substrate#2425d14121a6988804a2c299477d7df32498f2d8" dependencies = [ "jsonrpc-core", "jsonrpc-core-client", @@ -4697,7 +4697,7 @@ dependencies = [ [[package]] name = "pallet-multisig" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate#35b74db34833c7e9787f33e700a8db32982e9e18" +source = "git+https://github.com/paritytech/substrate#2425d14121a6988804a2c299477d7df32498f2d8" dependencies = [ "frame-benchmarking", "frame-support", @@ -4713,7 +4713,7 @@ dependencies = [ [[package]] name = "pallet-nicks" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate#35b74db34833c7e9787f33e700a8db32982e9e18" +source = "git+https://github.com/paritytech/substrate#2425d14121a6988804a2c299477d7df32498f2d8" dependencies = [ "frame-support", "frame-system", @@ -4727,7 +4727,7 @@ dependencies = [ [[package]] name = "pallet-offences" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate#35b74db34833c7e9787f33e700a8db32982e9e18" +source = "git+https://github.com/paritytech/substrate#2425d14121a6988804a2c299477d7df32498f2d8" dependencies = [ "frame-support", "frame-system", @@ -4743,7 +4743,7 @@ dependencies = [ [[package]] name = "pallet-offences-benchmarking" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate#35b74db34833c7e9787f33e700a8db32982e9e18" +source = "git+https://github.com/paritytech/substrate#2425d14121a6988804a2c299477d7df32498f2d8" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -4765,7 +4765,7 @@ dependencies = [ [[package]] name = "pallet-proxy" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate#35b74db34833c7e9787f33e700a8db32982e9e18" +source = "git+https://github.com/paritytech/substrate#2425d14121a6988804a2c299477d7df32498f2d8" dependencies = [ "frame-benchmarking", "frame-support", @@ -4781,7 +4781,7 @@ dependencies = [ [[package]] name = "pallet-randomness-collective-flip" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate#35b74db34833c7e9787f33e700a8db32982e9e18" +source = "git+https://github.com/paritytech/substrate#2425d14121a6988804a2c299477d7df32498f2d8" dependencies = [ "frame-support", "frame-system", @@ -4794,7 +4794,7 @@ dependencies = [ [[package]] name = "pallet-recovery" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate#35b74db34833c7e9787f33e700a8db32982e9e18" +source = "git+https://github.com/paritytech/substrate#2425d14121a6988804a2c299477d7df32498f2d8" dependencies = [ "enumflags2", "frame-support", @@ -4809,7 +4809,7 @@ dependencies = [ [[package]] name = "pallet-scheduler" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate#35b74db34833c7e9787f33e700a8db32982e9e18" +source = "git+https://github.com/paritytech/substrate#2425d14121a6988804a2c299477d7df32498f2d8" dependencies = [ "frame-benchmarking", "frame-support", @@ -4825,7 +4825,7 @@ dependencies = [ [[package]] name = "pallet-session" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate#35b74db34833c7e9787f33e700a8db32982e9e18" +source = "git+https://github.com/paritytech/substrate#2425d14121a6988804a2c299477d7df32498f2d8" dependencies = [ "frame-support", "frame-system", @@ -4845,7 +4845,7 @@ dependencies = [ [[package]] name = "pallet-session-benchmarking" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate#35b74db34833c7e9787f33e700a8db32982e9e18" +source = "git+https://github.com/paritytech/substrate#2425d14121a6988804a2c299477d7df32498f2d8" dependencies = [ "frame-benchmarking", "frame-support", @@ -4861,7 +4861,7 @@ dependencies = [ [[package]] name = "pallet-society" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate#35b74db34833c7e9787f33e700a8db32982e9e18" +source = "git+https://github.com/paritytech/substrate#2425d14121a6988804a2c299477d7df32498f2d8" dependencies = [ "frame-support", "frame-system", @@ -4875,7 +4875,7 @@ dependencies = [ [[package]] name = "pallet-staking" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate#35b74db34833c7e9787f33e700a8db32982e9e18" +source = "git+https://github.com/paritytech/substrate#2425d14121a6988804a2c299477d7df32498f2d8" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -4899,7 +4899,7 @@ dependencies = [ [[package]] name = "pallet-staking-reward-curve" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate#35b74db34833c7e9787f33e700a8db32982e9e18" +source = "git+https://github.com/paritytech/substrate#2425d14121a6988804a2c299477d7df32498f2d8" dependencies = [ "proc-macro-crate 1.0.0", "proc-macro2", @@ -4910,7 +4910,7 @@ dependencies = [ [[package]] name = "pallet-sudo" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate#35b74db34833c7e9787f33e700a8db32982e9e18" +source = "git+https://github.com/paritytech/substrate#2425d14121a6988804a2c299477d7df32498f2d8" dependencies = [ "frame-support", "frame-system", @@ -4924,7 +4924,7 @@ dependencies = [ [[package]] name = "pallet-timestamp" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate#35b74db34833c7e9787f33e700a8db32982e9e18" +source = "git+https://github.com/paritytech/substrate#2425d14121a6988804a2c299477d7df32498f2d8" dependencies = [ "frame-benchmarking", "frame-support", @@ -4943,7 +4943,7 @@ dependencies = [ [[package]] name = "pallet-tips" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate#35b74db34833c7e9787f33e700a8db32982e9e18" +source = "git+https://github.com/paritytech/substrate#2425d14121a6988804a2c299477d7df32498f2d8" dependencies = [ "frame-benchmarking", "frame-support", @@ -4958,7 +4958,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate#35b74db34833c7e9787f33e700a8db32982e9e18" +source = "git+https://github.com/paritytech/substrate#2425d14121a6988804a2c299477d7df32498f2d8" dependencies = [ "frame-support", "frame-system", @@ -4974,7 +4974,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment-rpc" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate#35b74db34833c7e9787f33e700a8db32982e9e18" +source = "git+https://github.com/paritytech/substrate#2425d14121a6988804a2c299477d7df32498f2d8" dependencies = [ "jsonrpc-core", "jsonrpc-core-client", @@ -4991,7 +4991,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment-rpc-runtime-api" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate#35b74db34833c7e9787f33e700a8db32982e9e18" +source = "git+https://github.com/paritytech/substrate#2425d14121a6988804a2c299477d7df32498f2d8" dependencies = [ "pallet-transaction-payment", "parity-scale-codec", @@ -5002,7 +5002,7 @@ dependencies = [ [[package]] name = "pallet-treasury" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate#35b74db34833c7e9787f33e700a8db32982e9e18" +source = "git+https://github.com/paritytech/substrate#2425d14121a6988804a2c299477d7df32498f2d8" dependencies = [ "frame-benchmarking", "frame-support", @@ -5018,7 +5018,7 @@ dependencies = [ [[package]] name = "pallet-utility" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate#35b74db34833c7e9787f33e700a8db32982e9e18" +source = "git+https://github.com/paritytech/substrate#2425d14121a6988804a2c299477d7df32498f2d8" dependencies = [ "frame-benchmarking", "frame-support", @@ -5034,7 +5034,7 @@ dependencies = [ [[package]] name = "pallet-vesting" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate#35b74db34833c7e9787f33e700a8db32982e9e18" +source = "git+https://github.com/paritytech/substrate#2425d14121a6988804a2c299477d7df32498f2d8" dependencies = [ "enumflags2", "frame-benchmarking", @@ -5046,6 +5046,19 @@ dependencies = [ "sp-std", ] +[[package]] +name = "pallet-xcm" +version = "0.1.0" +dependencies = [ + "frame-support", + "frame-system", + "parity-scale-codec", + "serde", + "sp-runtime", + "sp-std", + "xcm", +] + [[package]] name = "parity-db" version = "0.2.3" @@ -7228,7 +7241,7 @@ dependencies = [ [[package]] name = "remote-externalities" version = "0.9.0" -source = "git+https://github.com/paritytech/substrate#35b74db34833c7e9787f33e700a8db32982e9e18" +source = "git+https://github.com/paritytech/substrate#2425d14121a6988804a2c299477d7df32498f2d8" dependencies = [ "env_logger 0.8.2", "hex-literal", @@ -7318,6 +7331,7 @@ dependencies = [ "pallet-babe", "pallet-balances", "pallet-beefy", + "pallet-collective", "pallet-grandpa", "pallet-im-online", "pallet-indices", @@ -7333,6 +7347,7 @@ dependencies = [ "pallet-transaction-payment", "pallet-transaction-payment-rpc-runtime-api", "pallet-utility", + "pallet-xcm", "parity-scale-codec", "polkadot-parachain", "polkadot-primitives", @@ -7511,7 +7526,7 @@ dependencies = [ [[package]] name = "sc-authority-discovery" version = "0.9.0" -source = "git+https://github.com/paritytech/substrate#35b74db34833c7e9787f33e700a8db32982e9e18" +source = "git+https://github.com/paritytech/substrate#2425d14121a6988804a2c299477d7df32498f2d8" dependencies = [ "async-trait", "derive_more", @@ -7539,7 +7554,7 @@ dependencies = [ [[package]] name = "sc-basic-authorship" version = "0.9.0" -source = "git+https://github.com/paritytech/substrate#35b74db34833c7e9787f33e700a8db32982e9e18" +source = "git+https://github.com/paritytech/substrate#2425d14121a6988804a2c299477d7df32498f2d8" dependencies = [ "futures 0.3.13", "futures-timer 3.0.2", @@ -7562,7 +7577,7 @@ dependencies = [ [[package]] name = "sc-block-builder" version = "0.9.0" -source = "git+https://github.com/paritytech/substrate#35b74db34833c7e9787f33e700a8db32982e9e18" +source = "git+https://github.com/paritytech/substrate#2425d14121a6988804a2c299477d7df32498f2d8" dependencies = [ "parity-scale-codec", "sc-client-api", @@ -7578,7 +7593,7 @@ dependencies = [ [[package]] name = "sc-chain-spec" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate#35b74db34833c7e9787f33e700a8db32982e9e18" +source = "git+https://github.com/paritytech/substrate#2425d14121a6988804a2c299477d7df32498f2d8" dependencies = [ "impl-trait-for-tuples", "parity-scale-codec", @@ -7599,7 +7614,7 @@ dependencies = [ [[package]] name = "sc-chain-spec-derive" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate#35b74db34833c7e9787f33e700a8db32982e9e18" +source = "git+https://github.com/paritytech/substrate#2425d14121a6988804a2c299477d7df32498f2d8" dependencies = [ "proc-macro-crate 1.0.0", "proc-macro2", @@ -7610,7 +7625,7 @@ dependencies = [ [[package]] name = "sc-cli" version = "0.9.0" -source = "git+https://github.com/paritytech/substrate#35b74db34833c7e9787f33e700a8db32982e9e18" +source = "git+https://github.com/paritytech/substrate#2425d14121a6988804a2c299477d7df32498f2d8" dependencies = [ "chrono", "fdlimit", @@ -7648,7 +7663,7 @@ dependencies = [ [[package]] name = "sc-client-api" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate#35b74db34833c7e9787f33e700a8db32982e9e18" +source = "git+https://github.com/paritytech/substrate#2425d14121a6988804a2c299477d7df32498f2d8" dependencies = [ "derive_more", "fnv", @@ -7682,7 +7697,7 @@ dependencies = [ [[package]] name = "sc-client-db" version = "0.9.0" -source = "git+https://github.com/paritytech/substrate#35b74db34833c7e9787f33e700a8db32982e9e18" +source = "git+https://github.com/paritytech/substrate#2425d14121a6988804a2c299477d7df32498f2d8" dependencies = [ "blake2-rfc", "hash-db", @@ -7712,7 +7727,7 @@ dependencies = [ [[package]] name = "sc-consensus" version = "0.9.0" -source = "git+https://github.com/paritytech/substrate#35b74db34833c7e9787f33e700a8db32982e9e18" +source = "git+https://github.com/paritytech/substrate#2425d14121a6988804a2c299477d7df32498f2d8" dependencies = [ "parking_lot 0.11.1", "sc-client-api", @@ -7724,7 +7739,7 @@ dependencies = [ [[package]] name = "sc-consensus-babe" version = "0.9.0" -source = "git+https://github.com/paritytech/substrate#35b74db34833c7e9787f33e700a8db32982e9e18" +source = "git+https://github.com/paritytech/substrate#2425d14121a6988804a2c299477d7df32498f2d8" dependencies = [ "async-trait", "derive_more", @@ -7771,7 +7786,7 @@ dependencies = [ [[package]] name = "sc-consensus-babe-rpc" version = "0.9.0" -source = "git+https://github.com/paritytech/substrate#35b74db34833c7e9787f33e700a8db32982e9e18" +source = "git+https://github.com/paritytech/substrate#2425d14121a6988804a2c299477d7df32498f2d8" dependencies = [ "derive_more", "futures 0.3.13", @@ -7795,7 +7810,7 @@ dependencies = [ [[package]] name = "sc-consensus-epochs" version = "0.9.0" -source = "git+https://github.com/paritytech/substrate#35b74db34833c7e9787f33e700a8db32982e9e18" +source = "git+https://github.com/paritytech/substrate#2425d14121a6988804a2c299477d7df32498f2d8" dependencies = [ "fork-tree", "parity-scale-codec", @@ -7808,7 +7823,7 @@ dependencies = [ [[package]] name = "sc-consensus-slots" version = "0.9.0" -source = "git+https://github.com/paritytech/substrate#35b74db34833c7e9787f33e700a8db32982e9e18" +source = "git+https://github.com/paritytech/substrate#2425d14121a6988804a2c299477d7df32498f2d8" dependencies = [ "async-trait", "futures 0.3.13", @@ -7835,7 +7850,7 @@ dependencies = [ [[package]] name = "sc-consensus-uncles" version = "0.9.0" -source = "git+https://github.com/paritytech/substrate#35b74db34833c7e9787f33e700a8db32982e9e18" +source = "git+https://github.com/paritytech/substrate#2425d14121a6988804a2c299477d7df32498f2d8" dependencies = [ "log", "sc-client-api", @@ -7849,7 +7864,7 @@ dependencies = [ [[package]] name = "sc-executor" version = "0.9.0" -source = "git+https://github.com/paritytech/substrate#35b74db34833c7e9787f33e700a8db32982e9e18" +source = "git+https://github.com/paritytech/substrate#2425d14121a6988804a2c299477d7df32498f2d8" dependencies = [ "derive_more", "lazy_static", @@ -7879,7 +7894,7 @@ dependencies = [ [[package]] name = "sc-executor-common" version = "0.9.0" -source = "git+https://github.com/paritytech/substrate#35b74db34833c7e9787f33e700a8db32982e9e18" +source = "git+https://github.com/paritytech/substrate#2425d14121a6988804a2c299477d7df32498f2d8" dependencies = [ "derive_more", "parity-scale-codec", @@ -7896,7 +7911,7 @@ dependencies = [ [[package]] name = "sc-executor-wasmi" version = "0.9.0" -source = "git+https://github.com/paritytech/substrate#35b74db34833c7e9787f33e700a8db32982e9e18" +source = "git+https://github.com/paritytech/substrate#2425d14121a6988804a2c299477d7df32498f2d8" dependencies = [ "log", "parity-scale-codec", @@ -7911,7 +7926,7 @@ dependencies = [ [[package]] name = "sc-executor-wasmtime" version = "0.9.0" -source = "git+https://github.com/paritytech/substrate#35b74db34833c7e9787f33e700a8db32982e9e18" +source = "git+https://github.com/paritytech/substrate#2425d14121a6988804a2c299477d7df32498f2d8" dependencies = [ "log", "parity-scale-codec", @@ -7929,7 +7944,7 @@ dependencies = [ [[package]] name = "sc-finality-grandpa" version = "0.9.0" -source = "git+https://github.com/paritytech/substrate#35b74db34833c7e9787f33e700a8db32982e9e18" +source = "git+https://github.com/paritytech/substrate#2425d14121a6988804a2c299477d7df32498f2d8" dependencies = [ "async-trait", "derive_more", @@ -7969,7 +7984,7 @@ dependencies = [ [[package]] name = "sc-finality-grandpa-rpc" version = "0.9.0" -source = "git+https://github.com/paritytech/substrate#35b74db34833c7e9787f33e700a8db32982e9e18" +source = "git+https://github.com/paritytech/substrate#2425d14121a6988804a2c299477d7df32498f2d8" dependencies = [ "derive_more", "finality-grandpa", @@ -7993,7 +8008,7 @@ dependencies = [ [[package]] name = "sc-finality-grandpa-warp-sync" version = "0.9.0" -source = "git+https://github.com/paritytech/substrate#35b74db34833c7e9787f33e700a8db32982e9e18" +source = "git+https://github.com/paritytech/substrate#2425d14121a6988804a2c299477d7df32498f2d8" dependencies = [ "derive_more", "futures 0.3.13", @@ -8014,7 +8029,7 @@ dependencies = [ [[package]] name = "sc-informant" version = "0.9.0" -source = "git+https://github.com/paritytech/substrate#35b74db34833c7e9787f33e700a8db32982e9e18" +source = "git+https://github.com/paritytech/substrate#2425d14121a6988804a2c299477d7df32498f2d8" dependencies = [ "ansi_term 0.12.1", "futures 0.3.13", @@ -8032,7 +8047,7 @@ dependencies = [ [[package]] name = "sc-keystore" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate#35b74db34833c7e9787f33e700a8db32982e9e18" +source = "git+https://github.com/paritytech/substrate#2425d14121a6988804a2c299477d7df32498f2d8" dependencies = [ "async-trait", "derive_more", @@ -8052,7 +8067,7 @@ dependencies = [ [[package]] name = "sc-light" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate#35b74db34833c7e9787f33e700a8db32982e9e18" +source = "git+https://github.com/paritytech/substrate#2425d14121a6988804a2c299477d7df32498f2d8" dependencies = [ "hash-db", "lazy_static", @@ -8071,7 +8086,7 @@ dependencies = [ [[package]] name = "sc-network" version = "0.9.0" -source = "git+https://github.com/paritytech/substrate#35b74db34833c7e9787f33e700a8db32982e9e18" +source = "git+https://github.com/paritytech/substrate#2425d14121a6988804a2c299477d7df32498f2d8" dependencies = [ "async-std", "async-trait", @@ -8124,7 +8139,7 @@ dependencies = [ [[package]] name = "sc-network-gossip" version = "0.9.0" -source = "git+https://github.com/paritytech/substrate#35b74db34833c7e9787f33e700a8db32982e9e18" +source = "git+https://github.com/paritytech/substrate#2425d14121a6988804a2c299477d7df32498f2d8" dependencies = [ "futures 0.3.13", "futures-timer 3.0.2", @@ -8141,7 +8156,7 @@ dependencies = [ [[package]] name = "sc-offchain" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate#35b74db34833c7e9787f33e700a8db32982e9e18" +source = "git+https://github.com/paritytech/substrate#2425d14121a6988804a2c299477d7df32498f2d8" dependencies = [ "bytes 0.5.6", "fnv", @@ -8169,7 +8184,7 @@ dependencies = [ [[package]] name = "sc-peerset" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate#35b74db34833c7e9787f33e700a8db32982e9e18" +source = "git+https://github.com/paritytech/substrate#2425d14121a6988804a2c299477d7df32498f2d8" dependencies = [ "futures 0.3.13", "libp2p", @@ -8182,7 +8197,7 @@ dependencies = [ [[package]] name = "sc-proposer-metrics" version = "0.9.0" -source = "git+https://github.com/paritytech/substrate#35b74db34833c7e9787f33e700a8db32982e9e18" +source = "git+https://github.com/paritytech/substrate#2425d14121a6988804a2c299477d7df32498f2d8" dependencies = [ "log", "substrate-prometheus-endpoint", @@ -8191,7 +8206,7 @@ dependencies = [ [[package]] name = "sc-rpc" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate#35b74db34833c7e9787f33e700a8db32982e9e18" +source = "git+https://github.com/paritytech/substrate#2425d14121a6988804a2c299477d7df32498f2d8" dependencies = [ "futures 0.3.13", "hash-db", @@ -8225,7 +8240,7 @@ dependencies = [ [[package]] name = "sc-rpc-api" version = "0.9.0" -source = "git+https://github.com/paritytech/substrate#35b74db34833c7e9787f33e700a8db32982e9e18" +source = "git+https://github.com/paritytech/substrate#2425d14121a6988804a2c299477d7df32498f2d8" dependencies = [ "derive_more", "futures 0.3.13", @@ -8249,7 +8264,7 @@ dependencies = [ [[package]] name = "sc-rpc-server" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate#35b74db34833c7e9787f33e700a8db32982e9e18" +source = "git+https://github.com/paritytech/substrate#2425d14121a6988804a2c299477d7df32498f2d8" dependencies = [ "futures 0.1.29", "jsonrpc-core", @@ -8267,7 +8282,7 @@ dependencies = [ [[package]] name = "sc-service" version = "0.9.0" -source = "git+https://github.com/paritytech/substrate#35b74db34833c7e9787f33e700a8db32982e9e18" +source = "git+https://github.com/paritytech/substrate#2425d14121a6988804a2c299477d7df32498f2d8" dependencies = [ "async-trait", "directories", @@ -8331,7 +8346,7 @@ dependencies = [ [[package]] name = "sc-state-db" version = "0.9.0" -source = "git+https://github.com/paritytech/substrate#35b74db34833c7e9787f33e700a8db32982e9e18" +source = "git+https://github.com/paritytech/substrate#2425d14121a6988804a2c299477d7df32498f2d8" dependencies = [ "log", "parity-scale-codec", @@ -8346,7 +8361,7 @@ dependencies = [ [[package]] name = "sc-sync-state-rpc" version = "0.9.0" -source = "git+https://github.com/paritytech/substrate#35b74db34833c7e9787f33e700a8db32982e9e18" +source = "git+https://github.com/paritytech/substrate#2425d14121a6988804a2c299477d7df32498f2d8" dependencies = [ "jsonrpc-core", "jsonrpc-core-client", @@ -8366,7 +8381,7 @@ dependencies = [ [[package]] name = "sc-telemetry" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate#35b74db34833c7e9787f33e700a8db32982e9e18" +source = "git+https://github.com/paritytech/substrate#2425d14121a6988804a2c299477d7df32498f2d8" dependencies = [ "chrono", "futures 0.3.13", @@ -8386,7 +8401,7 @@ dependencies = [ [[package]] name = "sc-tracing" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate#35b74db34833c7e9787f33e700a8db32982e9e18" +source = "git+https://github.com/paritytech/substrate#2425d14121a6988804a2c299477d7df32498f2d8" dependencies = [ "ansi_term 0.12.1", "atty", @@ -8413,7 +8428,7 @@ dependencies = [ [[package]] name = "sc-tracing-proc-macro" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate#35b74db34833c7e9787f33e700a8db32982e9e18" +source = "git+https://github.com/paritytech/substrate#2425d14121a6988804a2c299477d7df32498f2d8" dependencies = [ "proc-macro-crate 1.0.0", "proc-macro2", @@ -8424,7 +8439,7 @@ dependencies = [ [[package]] name = "sc-transaction-graph" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate#35b74db34833c7e9787f33e700a8db32982e9e18" +source = "git+https://github.com/paritytech/substrate#2425d14121a6988804a2c299477d7df32498f2d8" dependencies = [ "derive_more", "futures 0.3.13", @@ -8446,7 +8461,7 @@ dependencies = [ [[package]] name = "sc-transaction-pool" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate#35b74db34833c7e9787f33e700a8db32982e9e18" +source = "git+https://github.com/paritytech/substrate#2425d14121a6988804a2c299477d7df32498f2d8" dependencies = [ "futures 0.3.13", "futures-diagnose", @@ -8867,7 +8882,7 @@ dependencies = [ [[package]] name = "sp-allocator" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate#35b74db34833c7e9787f33e700a8db32982e9e18" +source = "git+https://github.com/paritytech/substrate#2425d14121a6988804a2c299477d7df32498f2d8" dependencies = [ "log", "sp-core", @@ -8879,7 +8894,7 @@ dependencies = [ [[package]] name = "sp-api" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate#35b74db34833c7e9787f33e700a8db32982e9e18" +source = "git+https://github.com/paritytech/substrate#2425d14121a6988804a2c299477d7df32498f2d8" dependencies = [ "hash-db", "log", @@ -8896,7 +8911,7 @@ dependencies = [ [[package]] name = "sp-api-proc-macro" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate#35b74db34833c7e9787f33e700a8db32982e9e18" +source = "git+https://github.com/paritytech/substrate#2425d14121a6988804a2c299477d7df32498f2d8" dependencies = [ "blake2-rfc", "proc-macro-crate 1.0.0", @@ -8908,7 +8923,7 @@ dependencies = [ [[package]] name = "sp-application-crypto" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate#35b74db34833c7e9787f33e700a8db32982e9e18" +source = "git+https://github.com/paritytech/substrate#2425d14121a6988804a2c299477d7df32498f2d8" dependencies = [ "parity-scale-codec", "serde", @@ -8920,7 +8935,7 @@ dependencies = [ [[package]] name = "sp-arithmetic" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate#35b74db34833c7e9787f33e700a8db32982e9e18" +source = "git+https://github.com/paritytech/substrate#2425d14121a6988804a2c299477d7df32498f2d8" dependencies = [ "integer-sqrt", "num-traits", @@ -8928,12 +8943,13 @@ dependencies = [ "serde", "sp-debug-derive", "sp-std", + "static_assertions", ] [[package]] name = "sp-authority-discovery" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate#35b74db34833c7e9787f33e700a8db32982e9e18" +source = "git+https://github.com/paritytech/substrate#2425d14121a6988804a2c299477d7df32498f2d8" dependencies = [ "parity-scale-codec", "sp-api", @@ -8945,7 +8961,7 @@ dependencies = [ [[package]] name = "sp-authorship" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate#35b74db34833c7e9787f33e700a8db32982e9e18" +source = "git+https://github.com/paritytech/substrate#2425d14121a6988804a2c299477d7df32498f2d8" dependencies = [ "parity-scale-codec", "sp-inherents", @@ -8956,7 +8972,7 @@ dependencies = [ [[package]] name = "sp-block-builder" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate#35b74db34833c7e9787f33e700a8db32982e9e18" +source = "git+https://github.com/paritytech/substrate#2425d14121a6988804a2c299477d7df32498f2d8" dependencies = [ "parity-scale-codec", "sp-api", @@ -8968,7 +8984,7 @@ dependencies = [ [[package]] name = "sp-blockchain" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate#35b74db34833c7e9787f33e700a8db32982e9e18" +source = "git+https://github.com/paritytech/substrate#2425d14121a6988804a2c299477d7df32498f2d8" dependencies = [ "futures 0.3.13", "log", @@ -8986,7 +9002,7 @@ dependencies = [ [[package]] name = "sp-chain-spec" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate#35b74db34833c7e9787f33e700a8db32982e9e18" +source = "git+https://github.com/paritytech/substrate#2425d14121a6988804a2c299477d7df32498f2d8" dependencies = [ "serde", "serde_json", @@ -8995,7 +9011,7 @@ dependencies = [ [[package]] name = "sp-consensus" version = "0.9.0" -source = "git+https://github.com/paritytech/substrate#35b74db34833c7e9787f33e700a8db32982e9e18" +source = "git+https://github.com/paritytech/substrate#2425d14121a6988804a2c299477d7df32498f2d8" dependencies = [ "async-trait", "futures 0.3.13", @@ -9022,7 +9038,7 @@ dependencies = [ [[package]] name = "sp-consensus-babe" version = "0.9.0" -source = "git+https://github.com/paritytech/substrate#35b74db34833c7e9787f33e700a8db32982e9e18" +source = "git+https://github.com/paritytech/substrate#2425d14121a6988804a2c299477d7df32498f2d8" dependencies = [ "merlin", "parity-scale-codec", @@ -9043,7 +9059,7 @@ dependencies = [ [[package]] name = "sp-consensus-slots" version = "0.9.0" -source = "git+https://github.com/paritytech/substrate#35b74db34833c7e9787f33e700a8db32982e9e18" +source = "git+https://github.com/paritytech/substrate#2425d14121a6988804a2c299477d7df32498f2d8" dependencies = [ "parity-scale-codec", "sp-arithmetic", @@ -9053,7 +9069,7 @@ dependencies = [ [[package]] name = "sp-consensus-vrf" version = "0.9.0" -source = "git+https://github.com/paritytech/substrate#35b74db34833c7e9787f33e700a8db32982e9e18" +source = "git+https://github.com/paritytech/substrate#2425d14121a6988804a2c299477d7df32498f2d8" dependencies = [ "parity-scale-codec", "schnorrkel", @@ -9065,7 +9081,7 @@ dependencies = [ [[package]] name = "sp-core" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate#35b74db34833c7e9787f33e700a8db32982e9e18" +source = "git+https://github.com/paritytech/substrate#2425d14121a6988804a2c299477d7df32498f2d8" dependencies = [ "base58", "blake2-rfc", @@ -9109,7 +9125,7 @@ dependencies = [ [[package]] name = "sp-database" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate#35b74db34833c7e9787f33e700a8db32982e9e18" +source = "git+https://github.com/paritytech/substrate#2425d14121a6988804a2c299477d7df32498f2d8" dependencies = [ "kvdb", "parking_lot 0.11.1", @@ -9118,7 +9134,7 @@ dependencies = [ [[package]] name = "sp-debug-derive" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate#35b74db34833c7e9787f33e700a8db32982e9e18" +source = "git+https://github.com/paritytech/substrate#2425d14121a6988804a2c299477d7df32498f2d8" dependencies = [ "proc-macro2", "quote", @@ -9128,7 +9144,7 @@ dependencies = [ [[package]] name = "sp-externalities" version = "0.9.0" -source = "git+https://github.com/paritytech/substrate#35b74db34833c7e9787f33e700a8db32982e9e18" +source = "git+https://github.com/paritytech/substrate#2425d14121a6988804a2c299477d7df32498f2d8" dependencies = [ "environmental", "parity-scale-codec", @@ -9139,7 +9155,7 @@ dependencies = [ [[package]] name = "sp-finality-grandpa" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate#35b74db34833c7e9787f33e700a8db32982e9e18" +source = "git+https://github.com/paritytech/substrate#2425d14121a6988804a2c299477d7df32498f2d8" dependencies = [ "finality-grandpa", "log", @@ -9156,7 +9172,7 @@ dependencies = [ [[package]] name = "sp-inherents" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate#35b74db34833c7e9787f33e700a8db32982e9e18" +source = "git+https://github.com/paritytech/substrate#2425d14121a6988804a2c299477d7df32498f2d8" dependencies = [ "parity-scale-codec", "parking_lot 0.11.1", @@ -9168,7 +9184,7 @@ dependencies = [ [[package]] name = "sp-io" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate#35b74db34833c7e9787f33e700a8db32982e9e18" +source = "git+https://github.com/paritytech/substrate#2425d14121a6988804a2c299477d7df32498f2d8" dependencies = [ "futures 0.3.13", "hash-db", @@ -9192,7 +9208,7 @@ dependencies = [ [[package]] name = "sp-keyring" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate#35b74db34833c7e9787f33e700a8db32982e9e18" +source = "git+https://github.com/paritytech/substrate#2425d14121a6988804a2c299477d7df32498f2d8" dependencies = [ "lazy_static", "sp-core", @@ -9203,7 +9219,7 @@ dependencies = [ [[package]] name = "sp-keystore" version = "0.9.0" -source = "git+https://github.com/paritytech/substrate#35b74db34833c7e9787f33e700a8db32982e9e18" +source = "git+https://github.com/paritytech/substrate#2425d14121a6988804a2c299477d7df32498f2d8" dependencies = [ "async-trait", "derive_more", @@ -9220,7 +9236,7 @@ dependencies = [ [[package]] name = "sp-maybe-compressed-blob" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate#35b74db34833c7e9787f33e700a8db32982e9e18" +source = "git+https://github.com/paritytech/substrate#2425d14121a6988804a2c299477d7df32498f2d8" dependencies = [ "ruzstd", "zstd", @@ -9229,7 +9245,7 @@ dependencies = [ [[package]] name = "sp-npos-elections" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate#35b74db34833c7e9787f33e700a8db32982e9e18" +source = "git+https://github.com/paritytech/substrate#2425d14121a6988804a2c299477d7df32498f2d8" dependencies = [ "parity-scale-codec", "serde", @@ -9242,7 +9258,7 @@ dependencies = [ [[package]] name = "sp-npos-elections-compact" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate#35b74db34833c7e9787f33e700a8db32982e9e18" +source = "git+https://github.com/paritytech/substrate#2425d14121a6988804a2c299477d7df32498f2d8" dependencies = [ "proc-macro-crate 1.0.0", "proc-macro2", @@ -9253,7 +9269,7 @@ dependencies = [ [[package]] name = "sp-offchain" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate#35b74db34833c7e9787f33e700a8db32982e9e18" +source = "git+https://github.com/paritytech/substrate#2425d14121a6988804a2c299477d7df32498f2d8" dependencies = [ "sp-api", "sp-core", @@ -9263,7 +9279,7 @@ dependencies = [ [[package]] name = "sp-panic-handler" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate#35b74db34833c7e9787f33e700a8db32982e9e18" +source = "git+https://github.com/paritytech/substrate#2425d14121a6988804a2c299477d7df32498f2d8" dependencies = [ "backtrace", ] @@ -9271,7 +9287,7 @@ dependencies = [ [[package]] name = "sp-rpc" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate#35b74db34833c7e9787f33e700a8db32982e9e18" +source = "git+https://github.com/paritytech/substrate#2425d14121a6988804a2c299477d7df32498f2d8" dependencies = [ "serde", "sp-core", @@ -9280,7 +9296,7 @@ dependencies = [ [[package]] name = "sp-runtime" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate#35b74db34833c7e9787f33e700a8db32982e9e18" +source = "git+https://github.com/paritytech/substrate#2425d14121a6988804a2c299477d7df32498f2d8" dependencies = [ "either", "hash256-std-hasher", @@ -9301,7 +9317,7 @@ dependencies = [ [[package]] name = "sp-runtime-interface" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate#35b74db34833c7e9787f33e700a8db32982e9e18" +source = "git+https://github.com/paritytech/substrate#2425d14121a6988804a2c299477d7df32498f2d8" dependencies = [ "impl-trait-for-tuples", "parity-scale-codec", @@ -9318,7 +9334,7 @@ dependencies = [ [[package]] name = "sp-runtime-interface-proc-macro" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate#35b74db34833c7e9787f33e700a8db32982e9e18" +source = "git+https://github.com/paritytech/substrate#2425d14121a6988804a2c299477d7df32498f2d8" dependencies = [ "Inflector", "proc-macro-crate 1.0.0", @@ -9330,7 +9346,7 @@ dependencies = [ [[package]] name = "sp-serializer" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate#35b74db34833c7e9787f33e700a8db32982e9e18" +source = "git+https://github.com/paritytech/substrate#2425d14121a6988804a2c299477d7df32498f2d8" dependencies = [ "serde", "serde_json", @@ -9339,7 +9355,7 @@ dependencies = [ [[package]] name = "sp-session" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate#35b74db34833c7e9787f33e700a8db32982e9e18" +source = "git+https://github.com/paritytech/substrate#2425d14121a6988804a2c299477d7df32498f2d8" dependencies = [ "parity-scale-codec", "sp-api", @@ -9352,7 +9368,7 @@ dependencies = [ [[package]] name = "sp-staking" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate#35b74db34833c7e9787f33e700a8db32982e9e18" +source = "git+https://github.com/paritytech/substrate#2425d14121a6988804a2c299477d7df32498f2d8" dependencies = [ "parity-scale-codec", "sp-runtime", @@ -9362,7 +9378,7 @@ dependencies = [ [[package]] name = "sp-state-machine" version = "0.9.0" -source = "git+https://github.com/paritytech/substrate#35b74db34833c7e9787f33e700a8db32982e9e18" +source = "git+https://github.com/paritytech/substrate#2425d14121a6988804a2c299477d7df32498f2d8" dependencies = [ "hash-db", "log", @@ -9384,12 +9400,12 @@ dependencies = [ [[package]] name = "sp-std" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate#35b74db34833c7e9787f33e700a8db32982e9e18" +source = "git+https://github.com/paritytech/substrate#2425d14121a6988804a2c299477d7df32498f2d8" [[package]] name = "sp-storage" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate#35b74db34833c7e9787f33e700a8db32982e9e18" +source = "git+https://github.com/paritytech/substrate#2425d14121a6988804a2c299477d7df32498f2d8" dependencies = [ "impl-serde", "parity-scale-codec", @@ -9402,7 +9418,7 @@ dependencies = [ [[package]] name = "sp-tasks" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate#35b74db34833c7e9787f33e700a8db32982e9e18" +source = "git+https://github.com/paritytech/substrate#2425d14121a6988804a2c299477d7df32498f2d8" dependencies = [ "log", "sp-core", @@ -9415,7 +9431,7 @@ dependencies = [ [[package]] name = "sp-timestamp" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate#35b74db34833c7e9787f33e700a8db32982e9e18" +source = "git+https://github.com/paritytech/substrate#2425d14121a6988804a2c299477d7df32498f2d8" dependencies = [ "parity-scale-codec", "sp-api", @@ -9428,7 +9444,7 @@ dependencies = [ [[package]] name = "sp-tracing" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate#35b74db34833c7e9787f33e700a8db32982e9e18" +source = "git+https://github.com/paritytech/substrate#2425d14121a6988804a2c299477d7df32498f2d8" dependencies = [ "log", "parity-scale-codec", @@ -9441,7 +9457,7 @@ dependencies = [ [[package]] name = "sp-transaction-pool" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate#35b74db34833c7e9787f33e700a8db32982e9e18" +source = "git+https://github.com/paritytech/substrate#2425d14121a6988804a2c299477d7df32498f2d8" dependencies = [ "derive_more", "futures 0.3.13", @@ -9457,7 +9473,7 @@ dependencies = [ [[package]] name = "sp-trie" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate#35b74db34833c7e9787f33e700a8db32982e9e18" +source = "git+https://github.com/paritytech/substrate#2425d14121a6988804a2c299477d7df32498f2d8" dependencies = [ "hash-db", "memory-db", @@ -9471,7 +9487,7 @@ dependencies = [ [[package]] name = "sp-utils" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate#35b74db34833c7e9787f33e700a8db32982e9e18" +source = "git+https://github.com/paritytech/substrate#2425d14121a6988804a2c299477d7df32498f2d8" dependencies = [ "futures 0.3.13", "futures-core", @@ -9483,7 +9499,7 @@ dependencies = [ [[package]] name = "sp-version" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate#35b74db34833c7e9787f33e700a8db32982e9e18" +source = "git+https://github.com/paritytech/substrate#2425d14121a6988804a2c299477d7df32498f2d8" dependencies = [ "impl-serde", "parity-scale-codec", @@ -9495,7 +9511,7 @@ dependencies = [ [[package]] name = "sp-wasm-interface" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate#35b74db34833c7e9787f33e700a8db32982e9e18" +source = "git+https://github.com/paritytech/substrate#2425d14121a6988804a2c299477d7df32498f2d8" dependencies = [ "impl-trait-for-tuples", "parity-scale-codec", @@ -9652,7 +9668,7 @@ dependencies = [ [[package]] name = "substrate-browser-utils" version = "0.9.0" -source = "git+https://github.com/paritytech/substrate#35b74db34833c7e9787f33e700a8db32982e9e18" +source = "git+https://github.com/paritytech/substrate#2425d14121a6988804a2c299477d7df32498f2d8" dependencies = [ "chrono", "console_error_panic_hook", @@ -9678,7 +9694,7 @@ dependencies = [ [[package]] name = "substrate-build-script-utils" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate#35b74db34833c7e9787f33e700a8db32982e9e18" +source = "git+https://github.com/paritytech/substrate#2425d14121a6988804a2c299477d7df32498f2d8" dependencies = [ "platforms", ] @@ -9686,7 +9702,7 @@ dependencies = [ [[package]] name = "substrate-frame-rpc-system" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate#35b74db34833c7e9787f33e700a8db32982e9e18" +source = "git+https://github.com/paritytech/substrate#2425d14121a6988804a2c299477d7df32498f2d8" dependencies = [ "frame-system-rpc-runtime-api", "futures 0.3.13", @@ -9709,7 +9725,7 @@ dependencies = [ [[package]] name = "substrate-prometheus-endpoint" version = "0.9.0" -source = "git+https://github.com/paritytech/substrate#35b74db34833c7e9787f33e700a8db32982e9e18" +source = "git+https://github.com/paritytech/substrate#2425d14121a6988804a2c299477d7df32498f2d8" dependencies = [ "async-std", "derive_more", @@ -9723,7 +9739,7 @@ dependencies = [ [[package]] name = "substrate-test-client" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#35b74db34833c7e9787f33e700a8db32982e9e18" +source = "git+https://github.com/paritytech/substrate#2425d14121a6988804a2c299477d7df32498f2d8" dependencies = [ "async-trait", "futures 0.1.29", @@ -9752,7 +9768,7 @@ dependencies = [ [[package]] name = "substrate-test-utils" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate#35b74db34833c7e9787f33e700a8db32982e9e18" +source = "git+https://github.com/paritytech/substrate#2425d14121a6988804a2c299477d7df32498f2d8" dependencies = [ "futures 0.3.13", "substrate-test-utils-derive", @@ -9762,7 +9778,7 @@ dependencies = [ [[package]] name = "substrate-test-utils-derive" version = "0.9.0" -source = "git+https://github.com/paritytech/substrate#35b74db34833c7e9787f33e700a8db32982e9e18" +source = "git+https://github.com/paritytech/substrate#2425d14121a6988804a2c299477d7df32498f2d8" dependencies = [ "proc-macro-crate 1.0.0", "quote", @@ -10504,7 +10520,7 @@ checksum = "e604eb7b43c06650e854be16a2a03155743d3752dd1c943f6829e26b7a36e382" [[package]] name = "try-runtime-cli" version = "0.9.0" -source = "git+https://github.com/paritytech/substrate#35b74db34833c7e9787f33e700a8db32982e9e18" +source = "git+https://github.com/paritytech/substrate#2425d14121a6988804a2c299477d7df32498f2d8" dependencies = [ "frame-try-runtime", "log", @@ -11368,6 +11384,7 @@ name = "xcm" version = "0.8.30" dependencies = [ "derivative", + "impl-trait-for-tuples", "parity-scale-codec", ] @@ -11376,6 +11393,7 @@ name = "xcm-builder" version = "0.8.30" dependencies = [ "frame-support", + "frame-system", "impl-trait-for-tuples", "parity-scale-codec", "polkadot-parachain", diff --git a/Cargo.toml b/Cargo.toml index 65627b1fafce..f8914a160df7 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -45,6 +45,7 @@ members = [ "xcm", "xcm/xcm-builder", "xcm/xcm-executor", + "xcm/pallet-xcm", "node/collation-generation", "node/core/approval-voting", "node/core/av-store", diff --git a/runtime/common/src/xcm_sender.rs b/runtime/common/src/xcm_sender.rs index 84699d6b58b7..4ccd9074d87b 100644 --- a/runtime/common/src/xcm_sender.rs +++ b/runtime/common/src/xcm_sender.rs @@ -22,21 +22,22 @@ use xcm::opaque::{VersionedXcm, v0::{SendXcm, MultiLocation, Junction, Xcm, Resu use runtime_parachains::{configuration, dmp}; /// Xcm sender for relay chain. It only sends downward message. -pub struct RelayChainXcmSender(PhantomData); +pub struct ChildParachainRouter(PhantomData); -impl SendXcm for RelayChainXcmSender { +impl SendXcm for ChildParachainRouter { fn send_xcm(dest: MultiLocation, msg: Xcm) -> Result { - if let MultiLocation::X1(Junction::Parachain { id }) = dest { - // Downward message passing. - let config = >::config(); - >::queue_downward_message( - &config, - id.into(), - VersionedXcm::from(msg).encode(), - ).map_err(Into::::into)?; - Ok(()) - } else { - Err(Error::CannotReachDestination("UnsupportedDestination")) + match dest { + MultiLocation::X1(Junction::Parachain { id }) => { + // Downward message passing. + let config = >::config(); + >::queue_downward_message( + &config, + id.into(), + VersionedXcm::from(msg).encode(), + ).map_err(Into::::into)?; + Ok(()) + } + d => Err(Error::CannotReachDestination(d, msg)), } } } diff --git a/runtime/parachains/src/mock.rs b/runtime/parachains/src/mock.rs index 68a47718733e..270e93734867 100644 --- a/runtime/parachains/src/mock.rs +++ b/runtime/parachains/src/mock.rs @@ -117,8 +117,13 @@ impl crate::paras::Config for Test { impl crate::dmp::Config for Test { } +parameter_types! { + pub const FirstMessageFactorPercent: u64 = 100; +} + impl crate::ump::Config for Test { type UmpSink = crate::ump::mock_sink::MockUmpSink; + type FirstMessageFactorPercent = FirstMessageFactorPercent; } impl crate::hrmp::Config for Test { diff --git a/runtime/parachains/src/ump.rs b/runtime/parachains/src/ump.rs index 5c40844af790..f1998ba7ddf6 100644 --- a/runtime/parachains/src/ump.rs +++ b/runtime/parachains/src/ump.rs @@ -18,9 +18,8 @@ use crate::{ configuration::{self, HostConfiguration}, initializer, }; -use sp_std::{fmt, prelude::*}; +use sp_std::{prelude::*, fmt, marker::PhantomData}; use sp_std::collections::{btree_map::BTreeMap, vec_deque::VecDeque}; -use sp_runtime::traits::Zero; use frame_support::{decl_module, decl_storage, StorageMap, StorageValue, weights::Weight, traits::Get}; use primitives::v1::{Id as ParaId, UpwardMessage}; @@ -42,39 +41,41 @@ const LOG_TARGET: &str = "runtime::ump-sink"; /// It is possible that by the time the message is sank the origin parachain was offboarded. It is /// up to the implementer to check that if it cares. pub trait UmpSink { - /// Process an incoming upward message and return the amount of weight it consumed. + /// Process an incoming upward message and return the amount of weight it consumed, or `None` if + /// it did not begin processing a message since it would otherwise exceed `max_weight`. /// /// See the trait docs for more details. - fn process_upward_message(origin: ParaId, msg: Vec) -> Weight; + fn process_upward_message(origin: ParaId, msg: &[u8], max_weight: Weight) -> Option; } -/// An implementation of a sink that just swallows the message without consuming any weight. +/// An implementation of a sink that just swallows the message without consuming any weight. Returns +/// `Some(0)` indicating that no messages existed for it to process. impl UmpSink for () { - fn process_upward_message(_: ParaId, _: Vec) -> Weight { - 0 + fn process_upward_message(_: ParaId, _: &[u8], _: Weight) -> Option { + Some(0) } } /// A specific implementation of a UmpSink where messages are in the XCM format /// and will be forwarded to the XCM Executor. -pub struct XcmSink(sp_std::marker::PhantomData); +pub struct XcmSink(PhantomData<(XcmExecutor, Call)>); -impl UmpSink for XcmSink { - fn process_upward_message(origin: ParaId, msg: Vec) -> Weight { +impl, Call> UmpSink for XcmSink { + fn process_upward_message(origin: ParaId, mut msg: &[u8], max_weight: Weight) -> Option { use parity_scale_codec::Decode; use xcm::VersionedXcm; - use xcm::v0::{Junction, MultiLocation, ExecuteXcm}; - use xcm_executor::XcmExecutor; + use xcm::v0::{Junction, MultiLocation, Outcome, Error as XcmError}; - // TODO: #2841 #UMPQUEUE Get a proper weight limit here. Probably from Relay Chain Config - let weight_limit = Weight::max_value(); - let weight = if let Ok(versioned_xcm_message) = VersionedXcm::decode(&mut &msg[..]) { + if let Ok(versioned_xcm_message) = VersionedXcm::decode(&mut msg) { match versioned_xcm_message { VersionedXcm::V0(xcm_message) => { let xcm_junction: Junction = Junction::Parachain { id: origin.into() }; let xcm_location: MultiLocation = xcm_junction.into(); - let result = XcmExecutor::::execute_xcm(xcm_location, xcm_message, weight_limit); - result.weight_used() + match XcmExecutor::execute_xcm(xcm_location, xcm_message, max_weight) { + Outcome::Complete(w) | Outcome::Incomplete(w, _) => Some(w), + Outcome::Error(XcmError::WeightLimitReached) => None, + Outcome::Error(_) => Some(0), + } } } } else { @@ -82,13 +83,8 @@ impl UmpSink for XcmSink { target: LOG_TARGET, "Failed to decode versioned XCM from upward message.", ); - Weight::zero() - }; - - // TODO: #2841 #UMPQUEUE to be sound, this implementation must ensure that returned (and thus consumed) - // weight is limited to some small portion of the total block weight (as a ballpark, 1/4, 1/8 - // or lower). - weight + None + } } } @@ -148,6 +144,9 @@ impl fmt::Debug for AcceptanceCheckErr { pub trait Config: frame_system::Config + configuration::Config { /// A place where all received upward messages are funneled. type UmpSink: UmpSink; + + /// The factor by which the weight limit it multiplied for the first UMP message to execute with. + type FirstMessageFactorPercent: Get; } decl_storage! { @@ -337,12 +336,21 @@ impl Module { // if so - bail. break; } + let max_weight = if used_weight_so_far == 0 { + // we increase the amount of weight that we're allowed to use on the first message to try to prevent + // the possibility of blockage of the queue. + config.preferred_dispatchable_upward_messages_step_weight * T::FirstMessageFactorPercent::get() / 100 + } else { + config.preferred_dispatchable_upward_messages_step_weight - used_weight_so_far + }; // dequeue the next message from the queue of the dispatchee let (upward_message, became_empty) = queue_cache.dequeue::(dispatchee); if let Some(upward_message) = upward_message { - used_weight_so_far += - T::UmpSink::process_upward_message(dispatchee, upward_message); + match T::UmpSink::process_upward_message(dispatchee, &upward_message[..], max_weight) { + None => break, + Some(used) => used_weight_so_far += used, + } } if became_empty { @@ -555,28 +563,25 @@ pub(crate) mod mock_sink { pub struct MockUmpSink; impl UmpSink for MockUmpSink { - fn process_upward_message(actual_origin: ParaId, actual_msg: Vec) -> Weight { - HOOK.with(|opt_hook| match &mut *opt_hook.borrow_mut() { - Some(hook) => { - let UmpExpectation { - expected_origin, - expected_msg, - mock_weight, - } = match hook.pop_front() { - Some(expectation) => expectation, - None => { - panic!( - "The probe is active but didn't expect the message:\n\n\t{:?}.", - actual_msg, - ); - } - }; - assert_eq!(expected_origin, actual_origin); - assert_eq!(expected_msg, actual_msg); - mock_weight - } - None => 0, - }) + fn process_upward_message(actual_origin: ParaId, actual_msg: &[u8], _max_weight: Weight) -> Option { + HOOK.with(|opt_hook| opt_hook.borrow_mut().as_mut().map(|hook| { + let UmpExpectation { + expected_origin, + expected_msg, + mock_weight, + } = match hook.pop_front() { + Some(expectation) => expectation, + None => { + panic!( + "The probe is active but didn't expect the message:\n\n\t{:?}.", + actual_msg, + ); + } + }; + assert_eq!(expected_origin, actual_origin); + assert_eq!(expected_msg, &actual_msg[..]); + mock_weight + })) } } diff --git a/runtime/rococo/Cargo.toml b/runtime/rococo/Cargo.toml index e7c4b5581ea5..db5494d5cd06 100644 --- a/runtime/rococo/Cargo.toml +++ b/runtime/rococo/Cargo.toml @@ -36,6 +36,7 @@ pallet-authorship = { git = "https://github.com/paritytech/substrate", branch = pallet-babe = { git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } pallet-beefy = { git = "https://github.com/paritytech/grandpa-bridge-gadget", branch = "master", default-features = false } pallet-balances = { git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } +pallet-collective = { git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } pallet-grandpa = { git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } pallet-im-online = { git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } pallet-indices = { git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } @@ -64,6 +65,7 @@ runtime-parachains = { package = "polkadot-runtime-parachains", path = "../parac xcm = { package = "xcm", path = "../../xcm", default-features = false } xcm-executor = { package = "xcm-executor", path = "../../xcm/xcm-executor", default-features = false } xcm-builder = { package = "xcm-builder", path = "../../xcm/xcm-builder", default-features = false } +pallet-xcm = { path = "../../xcm/pallet-xcm", default-features = false } [build-dependencies] substrate-wasm-builder = "3.0.0" @@ -81,6 +83,7 @@ std = [ "pallet-babe/std", "beefy-primitives/std", "pallet-balances/std", + "pallet-collective/std", "pallet-beefy/std", "pallet-grandpa/std", "pallet-sudo/std", @@ -118,6 +121,7 @@ std = [ "xcm/std", "xcm-executor/std", "xcm-builder/std", + "pallet-xcm/std", "log/std", ] # When enabled, the runtime api will not be build. @@ -133,11 +137,14 @@ runtime-benchmarks = [ "sp-runtime/runtime-benchmarks", "pallet-babe/runtime-benchmarks", "pallet-balances/runtime-benchmarks", + "pallet-collective/runtime-benchmarks", "pallet-grandpa/runtime-benchmarks", "pallet-im-online/runtime-benchmarks", "pallet-indices/runtime-benchmarks", "pallet-staking/runtime-benchmarks", "pallet-timestamp/runtime-benchmarks", + "pallet-xcm/runtime-benchmarks", + "xcm-builder/runtime-benchmarks", ] try-runtime = [ "frame-executive/try-runtime", @@ -147,6 +154,7 @@ try-runtime = [ "pallet-authorship/try-runtime", "pallet-babe/try-runtime", "pallet-balances/try-runtime", + "pallet-collective/try-runtime", "pallet-grandpa/try-runtime", "pallet-sudo/try-runtime", "pallet-indices/try-runtime", diff --git a/runtime/rococo/src/lib.rs b/runtime/rococo/src/lib.rs index 4d95bf467dc8..dd3b6647399f 100644 --- a/runtime/rococo/src/lib.rs +++ b/runtime/rococo/src/lib.rs @@ -86,6 +86,7 @@ pub use pallet_balances::Call as BalancesCall; use polkadot_parachain::primitives::Id as ParaId; use xcm::v0::{MultiLocation, NetworkId}; +use xcm_executor::XcmExecutor; use xcm_builder::{ AccountId32Aliases, ChildParachainConvertsVia, SovereignSignedViaLocation, CurrencyAdapter as XcmCurrencyAdapter, ChildParachainAsNative, @@ -274,6 +275,9 @@ construct_runtime! { Utility: pallet_utility::{Pallet, Call, Event} = 90, Proxy: pallet_proxy::{Pallet, Call, Storage, Event} = 91, + + // Pallet for sending XCM. + XcmPallet: pallet_xcm::{Pallet, Call, Storage, Event} = 99, } } @@ -619,10 +623,17 @@ parameter_types! { pub const RocFee: (MultiLocation, u128) = (RocLocation::get(), 1 * CENTS); } +/// The XCM router. When we want to send an XCM message, we use this type. It amalgamates all of our +/// individual routers. +pub type XcmRouter = ( + // Only one router so far - use DMP to communicate with child parachains. + xcm_sender::ChildParachainRouter, +); + pub struct XcmConfig; impl xcm_executor::Config for XcmConfig { type Call = Call; - type XcmSender = xcm_sender::RelayChainXcmSender; + type XcmSender = XcmRouter; type AssetTransactor = LocalAssetTransactor; type OriginConverter = LocalOriginConverter; type IsReserve = (); @@ -634,10 +645,29 @@ impl xcm_executor::Config for XcmConfig { type ResponseHandler = (); } +/// Type to convert an `Origin` type value into a `MultiLocation` value which represents an interior location +/// of this chain. +pub type LocalOriginToLocation = ( +); + +impl pallet_xcm::Config for Runtime { + type Event = Event; + type SendXcmOrigin = xcm_builder::EnsureXcmOrigin; + type XcmRouter = XcmRouter; + // Right now nobody but root is allowed to dispatch local XCM messages. + type ExecuteXcmOrigin = xcm_builder::EnsureXcmOrigin; + type XcmExecutor = XcmExecutor; +} + impl parachains_session_info::Config for Runtime {} +parameter_types! { + pub const FirstMessageFactorPercent: u64 = 100; +} + impl parachains_ump::Config for Runtime { - type UmpSink = crate::parachains_ump::XcmSink; + type UmpSink = crate::parachains_ump::XcmSink, Call>; + type FirstMessageFactorPercent = FirstMessageFactorPercent; } impl parachains_dmp::Config for Runtime {} diff --git a/runtime/test-runtime/src/lib.rs b/runtime/test-runtime/src/lib.rs index 63f6cfae58e8..fd5253fe21fd 100644 --- a/runtime/test-runtime/src/lib.rs +++ b/runtime/test-runtime/src/lib.rs @@ -474,8 +474,13 @@ impl parachains_paras::Config for Runtime { impl parachains_dmp::Config for Runtime {} +parameter_types! { + pub const FirstMessageFactorPercent: u64 = 100; +} + impl parachains_ump::Config for Runtime { type UmpSink = (); + type FirstMessageFactorPercent = FirstMessageFactorPercent; } impl parachains_hrmp::Config for Runtime { diff --git a/xcm/Cargo.toml b/xcm/Cargo.toml index 660c29476b7c..2f3e8de4e675 100644 --- a/xcm/Cargo.toml +++ b/xcm/Cargo.toml @@ -6,6 +6,7 @@ description = "The basic XCM datastructures." edition = "2018" [dependencies] +impl-trait-for-tuples = "0.2.0" parity-scale-codec = { version = "2.0.0", default-features = false, features = [ "derive" ] } derivative = {version = "2.2.0", default-features = false, features = [ "use_core" ] } diff --git a/xcm/pallet-xcm/Cargo.toml b/xcm/pallet-xcm/Cargo.toml new file mode 100644 index 000000000000..c0448c312c62 --- /dev/null +++ b/xcm/pallet-xcm/Cargo.toml @@ -0,0 +1,29 @@ +[package] +authors = ["Parity Technologies "] +edition = "2018" +name = "pallet-xcm" +version = "0.1.0" + +[dependencies] +codec = { package = "parity-scale-codec", version = "2.0.0", default-features = false, features = ["derive"] } +serde = { version = "1.0.101", optional = true, features = ["derive"] } + +sp-std = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } +sp-runtime = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } +frame-support = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } +frame-system = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } + +xcm = { path = "..", default-features = false } + +[features] +default = ["std"] +std = [ + "codec/std", + "serde", + "sp-std/std", + "sp-runtime/std", + "frame-support/std", + "frame-system/std", + "xcm/std", +] +runtime-benchmarks = [] \ No newline at end of file diff --git a/xcm/pallet-xcm/src/lib.rs b/xcm/pallet-xcm/src/lib.rs new file mode 100644 index 000000000000..17035f98f70e --- /dev/null +++ b/xcm/pallet-xcm/src/lib.rs @@ -0,0 +1,182 @@ +// Copyright 2020-2021 Parity Technologies (UK) Ltd. +// This file is part of Cumulus. + +// Cumulus is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Cumulus is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Cumulus. If not, see . + +//! Pallet to handle XCM messages. + +#![cfg_attr(not(feature = "std"), no_std)] + +use sp_std::{marker::PhantomData, convert::TryInto, boxed::Box}; +use codec::{Encode, Decode}; +use xcm::v0::{BodyId, MultiLocation::{self, X1}, Junction::Plurality}; +use sp_runtime::{RuntimeDebug, traits::BadOrigin}; +use frame_support::traits::{EnsureOrigin, OriginTrait, Filter, Get}; + +pub use pallet::*; + +#[frame_support::pallet] +pub mod pallet { + use super::*; + use frame_support::pallet_prelude::*; + use frame_system::pallet_prelude::*; + use xcm::v0::{Xcm, MultiLocation, Error as XcmError, SendXcm, ExecuteXcm}; + + #[pallet::pallet] + #[pallet::generate_store(pub(super) trait Store)] + pub struct Pallet(_); + + #[pallet::config] + /// The module configuration trait. + pub trait Config: frame_system::Config { + /// The overarching event type. + type Event: From> + IsType<::Event>; + + /// Required origin for sending XCM messages. If successful, the it resolves to `MultiLocation` + /// which exists as an interior location within this chain's XCM context. + type SendXcmOrigin: EnsureOrigin; + + /// The type used to actually dispatch an XCM to its destination. + type XcmRouter: SendXcm; + + /// Required origin for executing XCM messages. If successful, the it resolves to `MultiLocation` + /// which exists as an interior location within this chain's XCM context. + type ExecuteXcmOrigin: EnsureOrigin; + + /// Something to execute an XCM message. + type XcmExecutor: ExecuteXcm; + } + + #[pallet::event] + #[pallet::generate_deposit(pub(super) fn deposit_event)] + pub enum Event { + Attempted(xcm::v0::Outcome), + } + + #[pallet::error] + pub enum Error { + Unreachable, + SendFailure, + } + + #[pallet::hooks] + impl Hooks> for Pallet {} + + #[pallet::call] + impl Pallet { + #[pallet::weight(1_000)] + fn send(origin: OriginFor, dest: MultiLocation, message: Xcm<()>) -> DispatchResult { + let origin_location = T::SendXcmOrigin::ensure_origin(origin)?; + Self::send_xcm(origin_location, dest, message) + .map_err(|e| match e { + XcmError::CannotReachDestination(..) => Error::::Unreachable, + _ => Error::::SendFailure, + })?; + Ok(()) + } + + /// Execute an XCM message from a local, signed, origin. + /// + /// An event is deposited indicating whether `msg` could be executed completely or only + /// partially. + /// + /// No more than `max_weight` will be used in its attempted execution. If this is less than the + /// maximum amount of weight that the message could take to be executed, then no execution + /// attempt will be made. + /// + /// NOTE: A successful return to this does *not* imply that the `msg` was executed successfully + /// to completion; only that *some* of it was executed. + #[pallet::weight(max_weight.saturating_add(1_000u64))] + fn execute(origin: OriginFor, message: Box>, max_weight: Weight) + -> DispatchResult + { + let origin_location = T::ExecuteXcmOrigin::ensure_origin(origin)?; + let outcome = T::XcmExecutor::execute_xcm(origin_location, *message, max_weight); + Self::deposit_event(Event::Attempted(outcome)); + Ok(()) + } + } + + impl Pallet { + /// Relay an XCM `message` from a given `interior` location in this context to a given `dest` + /// location. A null `dest` is not handled. + pub fn send_xcm(interior: MultiLocation, dest: MultiLocation, message: Xcm<()>) -> Result<(), XcmError> { + let message = match interior { + MultiLocation::Null => message, + who => Xcm::<()>::RelayedFrom { who, message: Box::new(message) }, + }; + T::XcmRouter::send_xcm(dest, message) + } + } +} + +/// Origin for the parachains module. +#[derive(PartialEq, Eq, Clone, Encode, Decode, RuntimeDebug)] +pub enum Origin { + /// It comes from somewhere in the XCM space. + Xcm(MultiLocation), +} + +impl From for Origin { + fn from(location: MultiLocation) -> Origin { + Origin::Xcm(location) + } +} + +/// Ensure that the origin `o` represents a sibling parachain. +/// Returns `Ok` with the parachain ID of the sibling or an `Err` otherwise. +pub fn ensure_xcm(o: OuterOrigin) -> Result + where OuterOrigin: Into> +{ + match o.into() { + Ok(Origin::Xcm(location)) => Ok(location), + _ => Err(BadOrigin), + } +} + +/// Filter for `MultiLocation` to find those which represent a strict majority approval of an identified +/// plurality. +/// +/// May reasonably be used with `EnsureXcm`. +pub struct IsMajorityOfBody(PhantomData); +impl> Filter for IsMajorityOfBody { + fn filter(l: &MultiLocation) -> bool { + matches!(l, X1(Plurality { id, part }) if id == &Body::get() && part.is_majority()) + } +} + +/// `EnsureOrigin` implementation succeeding with a `MultiLocation` value to recognise and filter the +/// `Origin::Xcm` item. +pub struct EnsureXcm(PhantomData); +impl, F: Filter> EnsureOrigin for EnsureXcm + where O::PalletsOrigin: From + TryInto +{ + type Success = MultiLocation; + + fn try_origin(outer: O) -> Result { + outer.try_with_caller(|caller| caller.try_into() + .and_then(|Origin::Xcm(location)| + if F::filter(&location) { + Ok(location) + } else { + Err(Origin::Xcm(location).into()) + } + )) + } + + #[cfg(feature = "runtime-benchmarks")] + fn successful_origin() -> O { + O::from(Origin::Xcm(MultiLocation::Null)) + } +} diff --git a/xcm/src/v0/junction.rs b/xcm/src/v0/junction.rs index fd0104a48feb..1cde3cf86430 100644 --- a/xcm/src/v0/junction.rs +++ b/xcm/src/v0/junction.rs @@ -61,12 +61,26 @@ pub enum BodyPart { Voice, /// A given number of members of the body. Members { #[codec(compact)] count: u32 }, + /// A given number of members of the body, out of some larger caucus. + Fraction { #[codec(compact)] nom: u32, #[codec(compact)] denom: u32 }, /// No less than the given proportion of members of the body. AtLeastProportion { #[codec(compact)] nom: u32, #[codec(compact)] denom: u32 }, /// More than than the given proportion of members of the body. MoreThanProportion { #[codec(compact)] nom: u32, #[codec(compact)] denom: u32 }, } +impl BodyPart { + /// Returns `true` if the part represents a strict majority (> 50%) of the body in question. + pub fn is_majority(&self) -> bool { + match self { + BodyPart::Fraction { nom, denom } if *nom * 2 > *denom => true, + BodyPart::AtLeastProportion { nom, denom } if *nom * 2 > *denom => true, + BodyPart::MoreThanProportion { nom, denom } if *nom * 2 >= *denom => true, + _ => false, + } + } +} + /// A single item in a path to describe the relative location of a consensus system. /// /// Each item assumes a pre-existing location as its context and is defined in terms of it. diff --git a/xcm/src/v0/mod.rs b/xcm/src/v0/mod.rs index 3beb0ee98e87..47a16e336f69 100644 --- a/xcm/src/v0/mod.rs +++ b/xcm/src/v0/mod.rs @@ -27,7 +27,7 @@ mod multi_asset; mod multi_location; mod order; mod traits; -pub use junction::{Junction, NetworkId}; +pub use junction::{Junction, NetworkId, BodyId, BodyPart}; pub use multi_asset::{MultiAsset, AssetInstance}; pub use multi_location::MultiLocation; pub use order::Order; diff --git a/xcm/src/v0/traits.rs b/xcm/src/v0/traits.rs index 0a5092f3cc57..b4601023555a 100644 --- a/xcm/src/v0/traits.rs +++ b/xcm/src/v0/traits.rs @@ -21,7 +21,7 @@ use parity_scale_codec::{Encode, Decode}; use super::{MultiLocation, Xcm}; -#[derive(Copy, Clone, Encode, Decode, Eq, PartialEq, Ord, PartialOrd, Debug)] +#[derive(Clone, Encode, Decode, Eq, PartialEq, Debug)] pub enum Error { Undefined, Overflow, @@ -33,7 +33,11 @@ pub enum Error { UntrustedReserveLocation, UntrustedTeleportLocation, DestinationBufferOverflow, - CannotReachDestination(#[codec(skip)] &'static str), + /// The message and destination was recognised as being reachable but the operation could not be completed. + /// A human-readable explanation of the specific issue is provided. + SendFailed(#[codec(skip)] &'static str), + /// The message and destination combination was not recognised as being reachable. + CannotReachDestination(MultiLocation, Xcm<()>), MultiLocationFull, FailedToDecode, BadOrigin, @@ -68,9 +72,6 @@ pub enum Error { NotWithdrawable, /// Indicates that the consensus system cannot deposit an asset under the ownership of a particular location. LocationCannotHold, - /// We attempted to send an XCM to the local consensus system. Execution was not possible probably due to - /// no execution weight being assigned. - DestinationIsLocal, } impl From<()> for Error { @@ -85,7 +86,7 @@ pub type Result = result::Result<(), Error>; pub type Weight = u64; /// Outcome of an XCM excution. -#[derive(Copy, Clone, Encode, Decode, Eq, PartialEq, Debug)] +#[derive(Clone, Encode, Decode, Eq, PartialEq, Debug)] pub enum Outcome { /// Execution completed successfully; given weight was used. Complete(Weight), @@ -121,21 +122,38 @@ impl Outcome { } pub trait ExecuteXcm { + type Call; fn execute_xcm(origin: MultiLocation, message: Xcm, weight_limit: Weight) -> Outcome; } impl ExecuteXcm for () { + type Call = C; fn execute_xcm(_origin: MultiLocation, _message: Xcm, _weight_limit: Weight) -> Outcome { Outcome::Error(Error::Unimplemented) } } +/// Utility for sending an XCM message. +/// +/// These can be amalgamted in tuples to form sophisticated routing systems. pub trait SendXcm { - fn send_xcm(dest: MultiLocation, msg: Xcm<()>) -> Result; + /// Send an XCM `message` to a given `destination`. + /// + /// If it is not a destination which can be reached with this type but possibly could by others, + /// then it *MUST* return `CannotReachDestination`. Any other error will cause the tuple implementation to + /// exit early without trying other type fields. + fn send_xcm(destination: MultiLocation, message: Xcm<()>) -> Result; } -impl SendXcm for () { - fn send_xcm(_dest: MultiLocation, _msg: Xcm<()>) -> Result { - Err(Error::Unimplemented) +#[impl_trait_for_tuples::impl_for_tuples(30)] +impl SendXcm for Tuple { + fn send_xcm(destination: MultiLocation, message: Xcm<()>) -> Result { + for_tuples!( #( + let (destination, message) = match Tuple::send_xcm(destination, message) { + Err(Error::CannotReachDestination(d, m)) => (d, m), + o @ _ => return o, + }; + )* ); + Err(Error::CannotReachDestination(destination, message)) } } diff --git a/xcm/xcm-builder/Cargo.toml b/xcm/xcm-builder/Cargo.toml index d3a5316f61bf..3f6f0a451e7f 100644 --- a/xcm/xcm-builder/Cargo.toml +++ b/xcm/xcm-builder/Cargo.toml @@ -15,12 +15,14 @@ sp-arithmetic = { git = "https://github.com/paritytech/substrate", branch = "mas sp-io = { git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } sp-runtime = { git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } frame-support = { git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } +frame-system = { git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } # Polkadot dependencies polkadot-parachain = { path = "../../parachain", default-features = false } [features] default = ["std"] +runtime-benchmarks = [] std = [ "parity-scale-codec/std", "xcm/std", diff --git a/xcm/xcm-builder/src/lib.rs b/xcm/xcm-builder/src/lib.rs index 5cfc7249fa9b..7620a617af47 100644 --- a/xcm/xcm-builder/src/lib.rs +++ b/xcm/xcm-builder/src/lib.rs @@ -31,7 +31,7 @@ mod origin_conversion; pub use origin_conversion::{ SovereignSignedViaLocation, ParentAsSuperuser, ChildSystemParachainAsSuperuser, SiblingSystemParachainAsSuperuser, ChildParachainAsNative, SiblingParachainAsNative, RelayChainAsNative, SignedAccountId32AsNative, - SignedAccountKey20AsNative, + SignedAccountKey20AsNative, EnsureXcmOrigin, SignedToAccountId32 }; mod barriers; diff --git a/xcm/xcm-builder/src/origin_conversion.rs b/xcm/xcm-builder/src/origin_conversion.rs index f7871b6bca76..37037171ba4d 100644 --- a/xcm/xcm-builder/src/origin_conversion.rs +++ b/xcm/xcm-builder/src/origin_conversion.rs @@ -14,10 +14,11 @@ // You should have received a copy of the GNU General Public License // along with Polkadot. If not, see . -use sp_std::marker::PhantomData; -use frame_support::traits::{Get, OriginTrait}; -use xcm::v0::{MultiLocation, OriginKind, NetworkId, Junction}; +use sp_std::{marker::PhantomData, convert::TryInto}; +use xcm::v0::{MultiLocation, OriginKind, NetworkId, Junction, BodyId, BodyPart}; use xcm_executor::traits::{Convert, ConvertOrigin}; +use frame_support::traits::{EnsureOrigin, Get, OriginTrait, GetBacking}; +use frame_system::RawOrigin as SystemRawOrigin; use polkadot_parachain::primitives::IsSystem; /// Sovereign accounts use the system's `Signed` origin with an account ID derived from the @@ -169,3 +170,87 @@ impl< } } } + +/// EnsureOrigin barrier to convert from dispatch origin to XCM origin, if one exists. +pub struct EnsureXcmOrigin(PhantomData<(Origin, Conversion)>); +impl< + Origin: OriginTrait + Clone, + Conversion: Convert, +> EnsureOrigin for EnsureXcmOrigin where + Origin::PalletsOrigin: PartialEq, +{ + type Success = MultiLocation; + fn try_origin(o: Origin) -> Result { + let o = match Conversion::convert(o) { + Ok(location) => return Ok(location), + Err(o) => o, + }; + // We institute a root fallback so root can always represent the context. This + // guarantees that `successful_origin` will work. + if o.caller() == Origin::root().caller() { + Ok(MultiLocation::Null) + } else { + Err(o) + } + } + + #[cfg(feature = "runtime-benchmarks")] + fn successful_origin() -> Origin { + Origin::root() + } +} + +/// `Convert` implementation to convert from some a `Signed` (system) `Origin` into an `AccountId32`. +/// +/// Typically used when configuring `pallet-xcm` for allowing normal accounts to dispatch an XCM from an `AccountId32` +/// origin. +pub struct SignedToAccountId32( + PhantomData<(Origin, AccountId, Network)> +); +impl< + Origin: OriginTrait + Clone, + AccountId: Into<[u8; 32]>, + Network: Get, +> Convert for SignedToAccountId32 where + Origin::PalletsOrigin: From> + + TryInto, Error=Origin::PalletsOrigin> +{ + fn convert(o: Origin) -> Result { + o.try_with_caller(|caller| match caller.try_into() { + Ok(SystemRawOrigin::Signed(who)) => + Ok(Junction::AccountId32 { network: Network::get(), id: who.into() }.into()), + Ok(other) => Err(other.into()), + Err(other) => Err(other), + }) + } +} + +/// `Convert` implementation to convert from some an origin which implements `Backing` into a corresponding `Plurality` +/// MultiLocation. +/// +/// Typically used when configuring `pallet-xcm` for allowing a collective's Origin to dispatch an XCM from a +/// `Plurality` origin. +pub struct BackingToPlurality( + PhantomData<(Origin, COrigin, Body)> +); +impl< + Origin: OriginTrait + Clone, + COrigin: GetBacking, + Body: Get, +> Convert for BackingToPlurality where + Origin::PalletsOrigin: From + + TryInto +{ + fn convert(o: Origin) -> Result { + o.try_with_caller(|caller| match caller.try_into() { + Ok(co) => match co.get_backing() { + Some(backing) => Ok(Junction::Plurality { + id: Body::get(), + part: BodyPart::Fraction { nom: backing.approvals, denom: backing.eligible }, + }.into()), + None => Err(co.into()), + } + Err(other) => Err(other), + }) + } +} diff --git a/xcm/xcm-executor/src/lib.rs b/xcm/xcm-executor/src/lib.rs index 143ab1113839..5c51341543b1 100644 --- a/xcm/xcm-executor/src/lib.rs +++ b/xcm/xcm-executor/src/lib.rs @@ -40,6 +40,7 @@ pub use config::Config; pub struct XcmExecutor(PhantomData); impl ExecuteXcm for XcmExecutor { + type Call = Config::Call; fn execute_xcm(origin: MultiLocation, message: Xcm, weight_limit: Weight) -> Outcome { // TODO: #2841 #HARDENXCM We should identify recursive bombs here and bail. let mut message = Xcm::::from(message);