diff --git a/Cargo.lock b/Cargo.lock index 190f87b90e914..f676f7c20b4cc 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3973,7 +3973,7 @@ dependencies = [ [[package]] name = "mangata-primitives" version = "0.1.0" -source = "git+https://github.com/mangata-finance/mangata-node?branch=develop-v0.9.24#5b8c2ffe036bac82e8ba0b7ef070ad53452f826a" +source = "git+https://github.com/mangata-finance//mangata-node?branch=develop#308742d9610dda9509e8ba6faa72e5c5ad226652" dependencies = [ "sp-core", "sp-runtime", @@ -4523,7 +4523,7 @@ checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" [[package]] name = "orml-tokens" version = "0.4.1-dev" -source = "git+https://github.com/mangata-finance//open-runtime-module-library?branch=mangata-dev-v0.9.24#2848fd5fe4993df90853d6533d2ffa82f2edb3f1" +source = "git+https://github.com/mangata-finance//open-runtime-module-library?branch=mangata-dev#b905cd0949e006dcd74d266c2fa80f77491a77da" dependencies = [ "frame-benchmarking", "frame-support", @@ -4540,7 +4540,7 @@ dependencies = [ [[package]] name = "orml-traits" version = "0.4.1-dev" -source = "git+https://github.com/mangata-finance//open-runtime-module-library?branch=mangata-dev-v0.9.24#2848fd5fe4993df90853d6533d2ffa82f2edb3f1" +source = "git+https://github.com/mangata-finance//open-runtime-module-library?branch=mangata-dev#b905cd0949e006dcd74d266c2fa80f77491a77da" dependencies = [ "frame-support", "impl-trait-for-tuples", @@ -4558,7 +4558,7 @@ dependencies = [ [[package]] name = "orml-utilities" version = "0.4.1-dev" -source = "git+https://github.com/mangata-finance//open-runtime-module-library?branch=mangata-dev-v0.9.24#2848fd5fe4993df90853d6533d2ffa82f2edb3f1" +source = "git+https://github.com/mangata-finance//open-runtime-module-library?branch=mangata-dev#b905cd0949e006dcd74d266c2fa80f77491a77da" dependencies = [ "frame-support", "parity-scale-codec", @@ -4614,6 +4614,27 @@ dependencies = [ "sp-storage", ] +[[package]] +name = "pallet-asset-tx-payment-mangata" +version = "4.0.0-dev" +dependencies = [ + "frame-support", + "frame-system", + "pallet-assets", + "pallet-authorship", + "pallet-balances", + "pallet-transaction-payment-mangata", + "parity-scale-codec", + "scale-info", + "serde", + "serde_json", + "sp-core", + "sp-io", + "sp-runtime", + "sp-std", + "sp-storage", +] + [[package]] name = "pallet-assets" version = "4.0.0-dev" @@ -5737,6 +5758,23 @@ dependencies = [ "sp-std", ] +[[package]] +name = "pallet-transaction-payment-mangata" +version = "4.0.0-dev" +dependencies = [ + "frame-support", + "frame-system", + "pallet-balances", + "parity-scale-codec", + "scale-info", + "serde", + "serde_json", + "sp-core", + "sp-io", + "sp-runtime", + "sp-std", +] + [[package]] name = "pallet-transaction-payment-rpc" version = "4.0.0-dev" @@ -5751,6 +5789,20 @@ dependencies = [ "sp-runtime", ] +[[package]] +name = "pallet-transaction-payment-rpc-mangata" +version = "4.0.0-dev" +dependencies = [ + "jsonrpsee", + "pallet-transaction-payment-rpc-runtime-api-mangata", + "parity-scale-codec", + "sp-api", + "sp-blockchain", + "sp-core", + "sp-rpc", + "sp-runtime", +] + [[package]] name = "pallet-transaction-payment-rpc-runtime-api" version = "4.0.0-dev" @@ -5761,6 +5813,16 @@ dependencies = [ "sp-runtime", ] +[[package]] +name = "pallet-transaction-payment-rpc-runtime-api-mangata" +version = "4.0.0-dev" +dependencies = [ + "pallet-transaction-payment-mangata", + "parity-scale-codec", + "sp-api", + "sp-runtime", +] + [[package]] name = "pallet-transaction-storage" version = "4.0.0-dev" @@ -11547,7 +11609,7 @@ dependencies = [ [[package]] name = "xcm" version = "0.9.24" -source = "git+https://github.com/mangata-finance//polkadot?branch=mangata-dev-v0.9.24#221e92dad377731be57817a0c414c511e7e055c6" +source = "git+https://github.com/mangata-finance//polkadot?branch=mangata-dev#56f604587571d1ff2f91e78015a971d7f6dc08ee" dependencies = [ "derivative", "impl-trait-for-tuples", @@ -11560,7 +11622,7 @@ dependencies = [ [[package]] name = "xcm-procedural" version = "0.1.0" -source = "git+https://github.com/mangata-finance//polkadot?branch=mangata-dev-v0.9.24#221e92dad377731be57817a0c414c511e7e055c6" +source = "git+https://github.com/mangata-finance//polkadot?branch=mangata-dev#56f604587571d1ff2f91e78015a971d7f6dc08ee" dependencies = [ "Inflector", "proc-macro2", @@ -11640,506 +11702,506 @@ version = "0.10.0-dev" name = "sc-finality-grandpa-rpc" version = "0.10.0-dev" -[[patch.unused]] -name = "sc-finality-grandpa-rpc" -version = "0.10.0-dev" - -[[patch.unused]] -name = "orml-unknown-tokens" -version = "0.4.1-dev" -source = "git+https://github.com/mangata-finance//open-runtime-module-library?branch=mangata-dev-v0.9.24#2848fd5fe4993df90853d6533d2ffa82f2edb3f1" - -[[patch.unused]] -name = "orml-xcm" -version = "0.4.1-dev" -source = "git+https://github.com/mangata-finance//open-runtime-module-library?branch=mangata-dev-v0.9.24#2848fd5fe4993df90853d6533d2ffa82f2edb3f1" - -[[patch.unused]] -name = "orml-xcm-support" -version = "0.4.1-dev" -source = "git+https://github.com/mangata-finance//open-runtime-module-library?branch=mangata-dev-v0.9.24#2848fd5fe4993df90853d6533d2ffa82f2edb3f1" - -[[patch.unused]] -name = "orml-xtokens" -version = "0.4.1-dev" -source = "git+https://github.com/mangata-finance//open-runtime-module-library?branch=mangata-dev-v0.9.24#2848fd5fe4993df90853d6533d2ffa82f2edb3f1" - [[patch.unused]] name = "pallet-xcm" version = "0.9.24" -source = "git+https://github.com/mangata-finance//polkadot?branch=mangata-dev-v0.9.24#221e92dad377731be57817a0c414c511e7e055c6" +source = "git+https://github.com/mangata-finance//polkadot?branch=mangata-dev#56f604587571d1ff2f91e78015a971d7f6dc08ee" [[patch.unused]] name = "polkadot-approval-distribution" version = "0.9.24" -source = "git+https://github.com/mangata-finance//polkadot?branch=mangata-dev-v0.9.24#221e92dad377731be57817a0c414c511e7e055c6" +source = "git+https://github.com/mangata-finance//polkadot?branch=mangata-dev#56f604587571d1ff2f91e78015a971d7f6dc08ee" [[patch.unused]] name = "polkadot-availability-bitfield-distribution" version = "0.9.24" -source = "git+https://github.com/mangata-finance//polkadot?branch=mangata-dev-v0.9.24#221e92dad377731be57817a0c414c511e7e055c6" +source = "git+https://github.com/mangata-finance//polkadot?branch=mangata-dev#56f604587571d1ff2f91e78015a971d7f6dc08ee" [[patch.unused]] name = "polkadot-availability-distribution" version = "0.9.24" -source = "git+https://github.com/mangata-finance//polkadot?branch=mangata-dev-v0.9.24#221e92dad377731be57817a0c414c511e7e055c6" +source = "git+https://github.com/mangata-finance//polkadot?branch=mangata-dev#56f604587571d1ff2f91e78015a971d7f6dc08ee" [[patch.unused]] name = "polkadot-availability-recovery" version = "0.9.24" -source = "git+https://github.com/mangata-finance//polkadot?branch=mangata-dev-v0.9.24#221e92dad377731be57817a0c414c511e7e055c6" +source = "git+https://github.com/mangata-finance//polkadot?branch=mangata-dev#56f604587571d1ff2f91e78015a971d7f6dc08ee" [[patch.unused]] name = "polkadot-cli" version = "0.9.24" -source = "git+https://github.com/mangata-finance//polkadot?branch=mangata-dev-v0.9.24#221e92dad377731be57817a0c414c511e7e055c6" +source = "git+https://github.com/mangata-finance//polkadot?branch=mangata-dev#56f604587571d1ff2f91e78015a971d7f6dc08ee" [[patch.unused]] name = "polkadot-client" version = "0.9.24" -source = "git+https://github.com/mangata-finance//polkadot?branch=mangata-dev-v0.9.24#221e92dad377731be57817a0c414c511e7e055c6" +source = "git+https://github.com/mangata-finance//polkadot?branch=mangata-dev#56f604587571d1ff2f91e78015a971d7f6dc08ee" [[patch.unused]] name = "polkadot-collator-protocol" version = "0.9.24" -source = "git+https://github.com/mangata-finance//polkadot?branch=mangata-dev-v0.9.24#221e92dad377731be57817a0c414c511e7e055c6" +source = "git+https://github.com/mangata-finance//polkadot?branch=mangata-dev#56f604587571d1ff2f91e78015a971d7f6dc08ee" [[patch.unused]] name = "polkadot-core-primitives" version = "0.9.24" -source = "git+https://github.com/mangata-finance//polkadot?branch=mangata-dev-v0.9.24#221e92dad377731be57817a0c414c511e7e055c6" +source = "git+https://github.com/mangata-finance//polkadot?branch=mangata-dev#56f604587571d1ff2f91e78015a971d7f6dc08ee" [[patch.unused]] name = "polkadot-dispute-distribution" version = "0.9.24" -source = "git+https://github.com/mangata-finance//polkadot?branch=mangata-dev-v0.9.24#221e92dad377731be57817a0c414c511e7e055c6" +source = "git+https://github.com/mangata-finance//polkadot?branch=mangata-dev#56f604587571d1ff2f91e78015a971d7f6dc08ee" [[patch.unused]] name = "polkadot-erasure-coding" version = "0.9.24" -source = "git+https://github.com/mangata-finance//polkadot?branch=mangata-dev-v0.9.24#221e92dad377731be57817a0c414c511e7e055c6" +source = "git+https://github.com/mangata-finance//polkadot?branch=mangata-dev#56f604587571d1ff2f91e78015a971d7f6dc08ee" [[patch.unused]] name = "polkadot-gossip-support" version = "0.9.24" -source = "git+https://github.com/mangata-finance//polkadot?branch=mangata-dev-v0.9.24#221e92dad377731be57817a0c414c511e7e055c6" +source = "git+https://github.com/mangata-finance//polkadot?branch=mangata-dev#56f604587571d1ff2f91e78015a971d7f6dc08ee" [[patch.unused]] name = "polkadot-network-bridge" version = "0.9.24" -source = "git+https://github.com/mangata-finance//polkadot?branch=mangata-dev-v0.9.24#221e92dad377731be57817a0c414c511e7e055c6" +source = "git+https://github.com/mangata-finance//polkadot?branch=mangata-dev#56f604587571d1ff2f91e78015a971d7f6dc08ee" [[patch.unused]] name = "polkadot-node-collation-generation" version = "0.9.24" -source = "git+https://github.com/mangata-finance//polkadot?branch=mangata-dev-v0.9.24#221e92dad377731be57817a0c414c511e7e055c6" +source = "git+https://github.com/mangata-finance//polkadot?branch=mangata-dev#56f604587571d1ff2f91e78015a971d7f6dc08ee" [[patch.unused]] name = "polkadot-node-core-approval-voting" version = "0.9.24" -source = "git+https://github.com/mangata-finance//polkadot?branch=mangata-dev-v0.9.24#221e92dad377731be57817a0c414c511e7e055c6" +source = "git+https://github.com/mangata-finance//polkadot?branch=mangata-dev#56f604587571d1ff2f91e78015a971d7f6dc08ee" [[patch.unused]] name = "polkadot-node-core-av-store" version = "0.9.24" -source = "git+https://github.com/mangata-finance//polkadot?branch=mangata-dev-v0.9.24#221e92dad377731be57817a0c414c511e7e055c6" +source = "git+https://github.com/mangata-finance//polkadot?branch=mangata-dev#56f604587571d1ff2f91e78015a971d7f6dc08ee" [[patch.unused]] name = "polkadot-node-core-backing" version = "0.9.24" -source = "git+https://github.com/mangata-finance//polkadot?branch=mangata-dev-v0.9.24#221e92dad377731be57817a0c414c511e7e055c6" +source = "git+https://github.com/mangata-finance//polkadot?branch=mangata-dev#56f604587571d1ff2f91e78015a971d7f6dc08ee" [[patch.unused]] name = "polkadot-node-core-bitfield-signing" version = "0.9.24" -source = "git+https://github.com/mangata-finance//polkadot?branch=mangata-dev-v0.9.24#221e92dad377731be57817a0c414c511e7e055c6" +source = "git+https://github.com/mangata-finance//polkadot?branch=mangata-dev#56f604587571d1ff2f91e78015a971d7f6dc08ee" [[patch.unused]] name = "polkadot-node-core-candidate-validation" version = "0.9.24" -source = "git+https://github.com/mangata-finance//polkadot?branch=mangata-dev-v0.9.24#221e92dad377731be57817a0c414c511e7e055c6" +source = "git+https://github.com/mangata-finance//polkadot?branch=mangata-dev#56f604587571d1ff2f91e78015a971d7f6dc08ee" [[patch.unused]] name = "polkadot-node-core-chain-api" version = "0.9.24" -source = "git+https://github.com/mangata-finance//polkadot?branch=mangata-dev-v0.9.24#221e92dad377731be57817a0c414c511e7e055c6" +source = "git+https://github.com/mangata-finance//polkadot?branch=mangata-dev#56f604587571d1ff2f91e78015a971d7f6dc08ee" [[patch.unused]] name = "polkadot-node-core-chain-selection" version = "0.9.24" -source = "git+https://github.com/mangata-finance//polkadot?branch=mangata-dev-v0.9.24#221e92dad377731be57817a0c414c511e7e055c6" +source = "git+https://github.com/mangata-finance//polkadot?branch=mangata-dev#56f604587571d1ff2f91e78015a971d7f6dc08ee" [[patch.unused]] name = "polkadot-node-core-dispute-coordinator" version = "0.9.24" -source = "git+https://github.com/mangata-finance//polkadot?branch=mangata-dev-v0.9.24#221e92dad377731be57817a0c414c511e7e055c6" +source = "git+https://github.com/mangata-finance//polkadot?branch=mangata-dev#56f604587571d1ff2f91e78015a971d7f6dc08ee" [[patch.unused]] name = "polkadot-node-core-parachains-inherent" version = "0.9.24" -source = "git+https://github.com/mangata-finance//polkadot?branch=mangata-dev-v0.9.24#221e92dad377731be57817a0c414c511e7e055c6" +source = "git+https://github.com/mangata-finance//polkadot?branch=mangata-dev#56f604587571d1ff2f91e78015a971d7f6dc08ee" [[patch.unused]] name = "polkadot-node-core-provisioner" version = "0.9.24" -source = "git+https://github.com/mangata-finance//polkadot?branch=mangata-dev-v0.9.24#221e92dad377731be57817a0c414c511e7e055c6" +source = "git+https://github.com/mangata-finance//polkadot?branch=mangata-dev#56f604587571d1ff2f91e78015a971d7f6dc08ee" [[patch.unused]] name = "polkadot-node-core-pvf" version = "0.9.24" -source = "git+https://github.com/mangata-finance//polkadot?branch=mangata-dev-v0.9.24#221e92dad377731be57817a0c414c511e7e055c6" +source = "git+https://github.com/mangata-finance//polkadot?branch=mangata-dev#56f604587571d1ff2f91e78015a971d7f6dc08ee" [[patch.unused]] name = "polkadot-node-core-runtime-api" version = "0.9.24" -source = "git+https://github.com/mangata-finance//polkadot?branch=mangata-dev-v0.9.24#221e92dad377731be57817a0c414c511e7e055c6" +source = "git+https://github.com/mangata-finance//polkadot?branch=mangata-dev#56f604587571d1ff2f91e78015a971d7f6dc08ee" [[patch.unused]] name = "polkadot-node-jaeger" version = "0.9.24" -source = "git+https://github.com/mangata-finance//polkadot?branch=mangata-dev-v0.9.24#221e92dad377731be57817a0c414c511e7e055c6" +source = "git+https://github.com/mangata-finance//polkadot?branch=mangata-dev#56f604587571d1ff2f91e78015a971d7f6dc08ee" [[patch.unused]] name = "polkadot-node-metrics" version = "0.9.24" -source = "git+https://github.com/mangata-finance//polkadot?branch=mangata-dev-v0.9.24#221e92dad377731be57817a0c414c511e7e055c6" +source = "git+https://github.com/mangata-finance//polkadot?branch=mangata-dev#56f604587571d1ff2f91e78015a971d7f6dc08ee" [[patch.unused]] name = "polkadot-node-network-protocol" version = "0.9.24" -source = "git+https://github.com/mangata-finance//polkadot?branch=mangata-dev-v0.9.24#221e92dad377731be57817a0c414c511e7e055c6" +source = "git+https://github.com/mangata-finance//polkadot?branch=mangata-dev#56f604587571d1ff2f91e78015a971d7f6dc08ee" [[patch.unused]] name = "polkadot-node-primitives" version = "0.9.24" -source = "git+https://github.com/mangata-finance//polkadot?branch=mangata-dev-v0.9.24#221e92dad377731be57817a0c414c511e7e055c6" +source = "git+https://github.com/mangata-finance//polkadot?branch=mangata-dev#56f604587571d1ff2f91e78015a971d7f6dc08ee" [[patch.unused]] name = "polkadot-node-subsystem" version = "0.9.24" -source = "git+https://github.com/mangata-finance//polkadot?branch=mangata-dev-v0.9.24#221e92dad377731be57817a0c414c511e7e055c6" +source = "git+https://github.com/mangata-finance//polkadot?branch=mangata-dev#56f604587571d1ff2f91e78015a971d7f6dc08ee" [[patch.unused]] name = "polkadot-node-subsystem-types" version = "0.9.24" -source = "git+https://github.com/mangata-finance//polkadot?branch=mangata-dev-v0.9.24#221e92dad377731be57817a0c414c511e7e055c6" +source = "git+https://github.com/mangata-finance//polkadot?branch=mangata-dev#56f604587571d1ff2f91e78015a971d7f6dc08ee" [[patch.unused]] name = "polkadot-node-subsystem-util" version = "0.9.24" -source = "git+https://github.com/mangata-finance//polkadot?branch=mangata-dev-v0.9.24#221e92dad377731be57817a0c414c511e7e055c6" +source = "git+https://github.com/mangata-finance//polkadot?branch=mangata-dev#56f604587571d1ff2f91e78015a971d7f6dc08ee" [[patch.unused]] name = "polkadot-overseer" version = "0.9.24" -source = "git+https://github.com/mangata-finance//polkadot?branch=mangata-dev-v0.9.24#221e92dad377731be57817a0c414c511e7e055c6" +source = "git+https://github.com/mangata-finance//polkadot?branch=mangata-dev#56f604587571d1ff2f91e78015a971d7f6dc08ee" [[patch.unused]] name = "polkadot-parachain" version = "0.9.24" -source = "git+https://github.com/mangata-finance//polkadot?branch=mangata-dev-v0.9.24#221e92dad377731be57817a0c414c511e7e055c6" +source = "git+https://github.com/mangata-finance//polkadot?branch=mangata-dev#56f604587571d1ff2f91e78015a971d7f6dc08ee" [[patch.unused]] name = "polkadot-primitives" version = "0.9.24" -source = "git+https://github.com/mangata-finance//polkadot?branch=mangata-dev-v0.9.24#221e92dad377731be57817a0c414c511e7e055c6" +source = "git+https://github.com/mangata-finance//polkadot?branch=mangata-dev#56f604587571d1ff2f91e78015a971d7f6dc08ee" [[patch.unused]] name = "polkadot-rpc" version = "0.9.24" -source = "git+https://github.com/mangata-finance//polkadot?branch=mangata-dev-v0.9.24#221e92dad377731be57817a0c414c511e7e055c6" +source = "git+https://github.com/mangata-finance//polkadot?branch=mangata-dev#56f604587571d1ff2f91e78015a971d7f6dc08ee" [[patch.unused]] name = "polkadot-runtime" version = "0.9.24" -source = "git+https://github.com/mangata-finance//polkadot?branch=mangata-dev-v0.9.24#221e92dad377731be57817a0c414c511e7e055c6" +source = "git+https://github.com/mangata-finance//polkadot?branch=mangata-dev#56f604587571d1ff2f91e78015a971d7f6dc08ee" [[patch.unused]] name = "polkadot-runtime-common" version = "0.9.24" -source = "git+https://github.com/mangata-finance//polkadot?branch=mangata-dev-v0.9.24#221e92dad377731be57817a0c414c511e7e055c6" +source = "git+https://github.com/mangata-finance//polkadot?branch=mangata-dev#56f604587571d1ff2f91e78015a971d7f6dc08ee" [[patch.unused]] name = "polkadot-runtime-parachains" version = "0.9.24" -source = "git+https://github.com/mangata-finance//polkadot?branch=mangata-dev-v0.9.24#221e92dad377731be57817a0c414c511e7e055c6" +source = "git+https://github.com/mangata-finance//polkadot?branch=mangata-dev#56f604587571d1ff2f91e78015a971d7f6dc08ee" [[patch.unused]] name = "polkadot-service" version = "0.9.24" -source = "git+https://github.com/mangata-finance//polkadot?branch=mangata-dev-v0.9.24#221e92dad377731be57817a0c414c511e7e055c6" +source = "git+https://github.com/mangata-finance//polkadot?branch=mangata-dev#56f604587571d1ff2f91e78015a971d7f6dc08ee" [[patch.unused]] name = "polkadot-statement-distribution" version = "0.9.24" -source = "git+https://github.com/mangata-finance//polkadot?branch=mangata-dev-v0.9.24#221e92dad377731be57817a0c414c511e7e055c6" +source = "git+https://github.com/mangata-finance//polkadot?branch=mangata-dev#56f604587571d1ff2f91e78015a971d7f6dc08ee" [[patch.unused]] name = "polkadot-statement-table" version = "0.9.24" -source = "git+https://github.com/mangata-finance//polkadot?branch=mangata-dev-v0.9.24#221e92dad377731be57817a0c414c511e7e055c6" +source = "git+https://github.com/mangata-finance//polkadot?branch=mangata-dev#56f604587571d1ff2f91e78015a971d7f6dc08ee" [[patch.unused]] name = "polkadot-test-runtime" version = "0.9.24" -source = "git+https://github.com/mangata-finance//polkadot?branch=mangata-dev-v0.9.24#221e92dad377731be57817a0c414c511e7e055c6" +source = "git+https://github.com/mangata-finance//polkadot?branch=mangata-dev#56f604587571d1ff2f91e78015a971d7f6dc08ee" [[patch.unused]] name = "polkadot-test-service" version = "0.9.24" -source = "git+https://github.com/mangata-finance//polkadot?branch=mangata-dev-v0.9.24#221e92dad377731be57817a0c414c511e7e055c6" +source = "git+https://github.com/mangata-finance//polkadot?branch=mangata-dev#56f604587571d1ff2f91e78015a971d7f6dc08ee" [[patch.unused]] name = "slot-range-helper" version = "0.9.24" -source = "git+https://github.com/mangata-finance//polkadot?branch=mangata-dev-v0.9.24#221e92dad377731be57817a0c414c511e7e055c6" +source = "git+https://github.com/mangata-finance//polkadot?branch=mangata-dev#56f604587571d1ff2f91e78015a971d7f6dc08ee" [[patch.unused]] name = "xcm-builder" version = "0.9.24" -source = "git+https://github.com/mangata-finance//polkadot?branch=mangata-dev-v0.9.24#221e92dad377731be57817a0c414c511e7e055c6" +source = "git+https://github.com/mangata-finance//polkadot?branch=mangata-dev#56f604587571d1ff2f91e78015a971d7f6dc08ee" [[patch.unused]] name = "xcm-executor" version = "0.9.24" -source = "git+https://github.com/mangata-finance//polkadot?branch=mangata-dev-v0.9.24#221e92dad377731be57817a0c414c511e7e055c6" +source = "git+https://github.com/mangata-finance//polkadot?branch=mangata-dev#56f604587571d1ff2f91e78015a971d7f6dc08ee" + +[[patch.unused]] +name = "orml-unknown-tokens" +version = "0.4.1-dev" +source = "git+https://github.com/mangata-finance//open-runtime-module-library?branch=mangata-dev#b905cd0949e006dcd74d266c2fa80f77491a77da" + +[[patch.unused]] +name = "orml-xcm" +version = "0.4.1-dev" +source = "git+https://github.com/mangata-finance//open-runtime-module-library?branch=mangata-dev#b905cd0949e006dcd74d266c2fa80f77491a77da" + +[[patch.unused]] +name = "orml-xcm-support" +version = "0.4.1-dev" +source = "git+https://github.com/mangata-finance//open-runtime-module-library?branch=mangata-dev#b905cd0949e006dcd74d266c2fa80f77491a77da" + +[[patch.unused]] +name = "orml-xtokens" +version = "0.4.1-dev" +source = "git+https://github.com/mangata-finance//open-runtime-module-library?branch=mangata-dev#b905cd0949e006dcd74d266c2fa80f77491a77da" + +[[patch.unused]] +name = "sc-finality-grandpa-rpc" +version = "0.10.0-dev" [[patch.unused]] name = "pallet-xcm" version = "0.9.24" -source = "git+https://github.com/mangata-finance//polkadot?branch=mangata-dev-v0.9.24#221e92dad377731be57817a0c414c511e7e055c6" +source = "git+https://github.com/mangata-finance//polkadot?branch=mangata-dev#56f604587571d1ff2f91e78015a971d7f6dc08ee" [[patch.unused]] name = "polkadot-approval-distribution" version = "0.9.24" -source = "git+https://github.com/mangata-finance//polkadot?branch=mangata-dev-v0.9.24#221e92dad377731be57817a0c414c511e7e055c6" +source = "git+https://github.com/mangata-finance//polkadot?branch=mangata-dev#56f604587571d1ff2f91e78015a971d7f6dc08ee" [[patch.unused]] name = "polkadot-availability-bitfield-distribution" version = "0.9.24" -source = "git+https://github.com/mangata-finance//polkadot?branch=mangata-dev-v0.9.24#221e92dad377731be57817a0c414c511e7e055c6" +source = "git+https://github.com/mangata-finance//polkadot?branch=mangata-dev#56f604587571d1ff2f91e78015a971d7f6dc08ee" [[patch.unused]] name = "polkadot-availability-distribution" version = "0.9.24" -source = "git+https://github.com/mangata-finance//polkadot?branch=mangata-dev-v0.9.24#221e92dad377731be57817a0c414c511e7e055c6" +source = "git+https://github.com/mangata-finance//polkadot?branch=mangata-dev#56f604587571d1ff2f91e78015a971d7f6dc08ee" [[patch.unused]] name = "polkadot-availability-recovery" version = "0.9.24" -source = "git+https://github.com/mangata-finance//polkadot?branch=mangata-dev-v0.9.24#221e92dad377731be57817a0c414c511e7e055c6" +source = "git+https://github.com/mangata-finance//polkadot?branch=mangata-dev#56f604587571d1ff2f91e78015a971d7f6dc08ee" [[patch.unused]] name = "polkadot-cli" version = "0.9.24" -source = "git+https://github.com/mangata-finance//polkadot?branch=mangata-dev-v0.9.24#221e92dad377731be57817a0c414c511e7e055c6" +source = "git+https://github.com/mangata-finance//polkadot?branch=mangata-dev#56f604587571d1ff2f91e78015a971d7f6dc08ee" [[patch.unused]] name = "polkadot-client" version = "0.9.24" -source = "git+https://github.com/mangata-finance//polkadot?branch=mangata-dev-v0.9.24#221e92dad377731be57817a0c414c511e7e055c6" +source = "git+https://github.com/mangata-finance//polkadot?branch=mangata-dev#56f604587571d1ff2f91e78015a971d7f6dc08ee" [[patch.unused]] name = "polkadot-collator-protocol" version = "0.9.24" -source = "git+https://github.com/mangata-finance//polkadot?branch=mangata-dev-v0.9.24#221e92dad377731be57817a0c414c511e7e055c6" +source = "git+https://github.com/mangata-finance//polkadot?branch=mangata-dev#56f604587571d1ff2f91e78015a971d7f6dc08ee" [[patch.unused]] name = "polkadot-core-primitives" version = "0.9.24" -source = "git+https://github.com/mangata-finance//polkadot?branch=mangata-dev-v0.9.24#221e92dad377731be57817a0c414c511e7e055c6" +source = "git+https://github.com/mangata-finance//polkadot?branch=mangata-dev#56f604587571d1ff2f91e78015a971d7f6dc08ee" [[patch.unused]] name = "polkadot-dispute-distribution" version = "0.9.24" -source = "git+https://github.com/mangata-finance//polkadot?branch=mangata-dev-v0.9.24#221e92dad377731be57817a0c414c511e7e055c6" +source = "git+https://github.com/mangata-finance//polkadot?branch=mangata-dev#56f604587571d1ff2f91e78015a971d7f6dc08ee" [[patch.unused]] name = "polkadot-erasure-coding" version = "0.9.24" -source = "git+https://github.com/mangata-finance//polkadot?branch=mangata-dev-v0.9.24#221e92dad377731be57817a0c414c511e7e055c6" +source = "git+https://github.com/mangata-finance//polkadot?branch=mangata-dev#56f604587571d1ff2f91e78015a971d7f6dc08ee" [[patch.unused]] name = "polkadot-gossip-support" version = "0.9.24" -source = "git+https://github.com/mangata-finance//polkadot?branch=mangata-dev-v0.9.24#221e92dad377731be57817a0c414c511e7e055c6" +source = "git+https://github.com/mangata-finance//polkadot?branch=mangata-dev#56f604587571d1ff2f91e78015a971d7f6dc08ee" [[patch.unused]] name = "polkadot-network-bridge" version = "0.9.24" -source = "git+https://github.com/mangata-finance//polkadot?branch=mangata-dev-v0.9.24#221e92dad377731be57817a0c414c511e7e055c6" +source = "git+https://github.com/mangata-finance//polkadot?branch=mangata-dev#56f604587571d1ff2f91e78015a971d7f6dc08ee" [[patch.unused]] name = "polkadot-node-collation-generation" version = "0.9.24" -source = "git+https://github.com/mangata-finance//polkadot?branch=mangata-dev-v0.9.24#221e92dad377731be57817a0c414c511e7e055c6" +source = "git+https://github.com/mangata-finance//polkadot?branch=mangata-dev#56f604587571d1ff2f91e78015a971d7f6dc08ee" [[patch.unused]] name = "polkadot-node-core-approval-voting" version = "0.9.24" -source = "git+https://github.com/mangata-finance//polkadot?branch=mangata-dev-v0.9.24#221e92dad377731be57817a0c414c511e7e055c6" +source = "git+https://github.com/mangata-finance//polkadot?branch=mangata-dev#56f604587571d1ff2f91e78015a971d7f6dc08ee" [[patch.unused]] name = "polkadot-node-core-av-store" version = "0.9.24" -source = "git+https://github.com/mangata-finance//polkadot?branch=mangata-dev-v0.9.24#221e92dad377731be57817a0c414c511e7e055c6" +source = "git+https://github.com/mangata-finance//polkadot?branch=mangata-dev#56f604587571d1ff2f91e78015a971d7f6dc08ee" [[patch.unused]] name = "polkadot-node-core-backing" version = "0.9.24" -source = "git+https://github.com/mangata-finance//polkadot?branch=mangata-dev-v0.9.24#221e92dad377731be57817a0c414c511e7e055c6" +source = "git+https://github.com/mangata-finance//polkadot?branch=mangata-dev#56f604587571d1ff2f91e78015a971d7f6dc08ee" [[patch.unused]] name = "polkadot-node-core-bitfield-signing" version = "0.9.24" -source = "git+https://github.com/mangata-finance//polkadot?branch=mangata-dev-v0.9.24#221e92dad377731be57817a0c414c511e7e055c6" +source = "git+https://github.com/mangata-finance//polkadot?branch=mangata-dev#56f604587571d1ff2f91e78015a971d7f6dc08ee" [[patch.unused]] name = "polkadot-node-core-candidate-validation" version = "0.9.24" -source = "git+https://github.com/mangata-finance//polkadot?branch=mangata-dev-v0.9.24#221e92dad377731be57817a0c414c511e7e055c6" +source = "git+https://github.com/mangata-finance//polkadot?branch=mangata-dev#56f604587571d1ff2f91e78015a971d7f6dc08ee" [[patch.unused]] name = "polkadot-node-core-chain-api" version = "0.9.24" -source = "git+https://github.com/mangata-finance//polkadot?branch=mangata-dev-v0.9.24#221e92dad377731be57817a0c414c511e7e055c6" +source = "git+https://github.com/mangata-finance//polkadot?branch=mangata-dev#56f604587571d1ff2f91e78015a971d7f6dc08ee" [[patch.unused]] name = "polkadot-node-core-chain-selection" version = "0.9.24" -source = "git+https://github.com/mangata-finance//polkadot?branch=mangata-dev-v0.9.24#221e92dad377731be57817a0c414c511e7e055c6" +source = "git+https://github.com/mangata-finance//polkadot?branch=mangata-dev#56f604587571d1ff2f91e78015a971d7f6dc08ee" [[patch.unused]] name = "polkadot-node-core-dispute-coordinator" version = "0.9.24" -source = "git+https://github.com/mangata-finance//polkadot?branch=mangata-dev-v0.9.24#221e92dad377731be57817a0c414c511e7e055c6" +source = "git+https://github.com/mangata-finance//polkadot?branch=mangata-dev#56f604587571d1ff2f91e78015a971d7f6dc08ee" [[patch.unused]] name = "polkadot-node-core-parachains-inherent" version = "0.9.24" -source = "git+https://github.com/mangata-finance//polkadot?branch=mangata-dev-v0.9.24#221e92dad377731be57817a0c414c511e7e055c6" +source = "git+https://github.com/mangata-finance//polkadot?branch=mangata-dev#56f604587571d1ff2f91e78015a971d7f6dc08ee" [[patch.unused]] name = "polkadot-node-core-provisioner" version = "0.9.24" -source = "git+https://github.com/mangata-finance//polkadot?branch=mangata-dev-v0.9.24#221e92dad377731be57817a0c414c511e7e055c6" +source = "git+https://github.com/mangata-finance//polkadot?branch=mangata-dev#56f604587571d1ff2f91e78015a971d7f6dc08ee" [[patch.unused]] name = "polkadot-node-core-pvf" version = "0.9.24" -source = "git+https://github.com/mangata-finance//polkadot?branch=mangata-dev-v0.9.24#221e92dad377731be57817a0c414c511e7e055c6" +source = "git+https://github.com/mangata-finance//polkadot?branch=mangata-dev#56f604587571d1ff2f91e78015a971d7f6dc08ee" [[patch.unused]] name = "polkadot-node-core-runtime-api" version = "0.9.24" -source = "git+https://github.com/mangata-finance//polkadot?branch=mangata-dev-v0.9.24#221e92dad377731be57817a0c414c511e7e055c6" +source = "git+https://github.com/mangata-finance//polkadot?branch=mangata-dev#56f604587571d1ff2f91e78015a971d7f6dc08ee" [[patch.unused]] name = "polkadot-node-jaeger" version = "0.9.24" -source = "git+https://github.com/mangata-finance//polkadot?branch=mangata-dev-v0.9.24#221e92dad377731be57817a0c414c511e7e055c6" +source = "git+https://github.com/mangata-finance//polkadot?branch=mangata-dev#56f604587571d1ff2f91e78015a971d7f6dc08ee" [[patch.unused]] name = "polkadot-node-metrics" version = "0.9.24" -source = "git+https://github.com/mangata-finance//polkadot?branch=mangata-dev-v0.9.24#221e92dad377731be57817a0c414c511e7e055c6" +source = "git+https://github.com/mangata-finance//polkadot?branch=mangata-dev#56f604587571d1ff2f91e78015a971d7f6dc08ee" [[patch.unused]] name = "polkadot-node-network-protocol" version = "0.9.24" -source = "git+https://github.com/mangata-finance//polkadot?branch=mangata-dev-v0.9.24#221e92dad377731be57817a0c414c511e7e055c6" +source = "git+https://github.com/mangata-finance//polkadot?branch=mangata-dev#56f604587571d1ff2f91e78015a971d7f6dc08ee" [[patch.unused]] name = "polkadot-node-primitives" version = "0.9.24" -source = "git+https://github.com/mangata-finance//polkadot?branch=mangata-dev-v0.9.24#221e92dad377731be57817a0c414c511e7e055c6" +source = "git+https://github.com/mangata-finance//polkadot?branch=mangata-dev#56f604587571d1ff2f91e78015a971d7f6dc08ee" [[patch.unused]] name = "polkadot-node-subsystem" version = "0.9.24" -source = "git+https://github.com/mangata-finance//polkadot?branch=mangata-dev-v0.9.24#221e92dad377731be57817a0c414c511e7e055c6" +source = "git+https://github.com/mangata-finance//polkadot?branch=mangata-dev#56f604587571d1ff2f91e78015a971d7f6dc08ee" [[patch.unused]] name = "polkadot-node-subsystem-types" version = "0.9.24" -source = "git+https://github.com/mangata-finance//polkadot?branch=mangata-dev-v0.9.24#221e92dad377731be57817a0c414c511e7e055c6" +source = "git+https://github.com/mangata-finance//polkadot?branch=mangata-dev#56f604587571d1ff2f91e78015a971d7f6dc08ee" [[patch.unused]] name = "polkadot-node-subsystem-util" version = "0.9.24" -source = "git+https://github.com/mangata-finance//polkadot?branch=mangata-dev-v0.9.24#221e92dad377731be57817a0c414c511e7e055c6" +source = "git+https://github.com/mangata-finance//polkadot?branch=mangata-dev#56f604587571d1ff2f91e78015a971d7f6dc08ee" [[patch.unused]] name = "polkadot-overseer" version = "0.9.24" -source = "git+https://github.com/mangata-finance//polkadot?branch=mangata-dev-v0.9.24#221e92dad377731be57817a0c414c511e7e055c6" +source = "git+https://github.com/mangata-finance//polkadot?branch=mangata-dev#56f604587571d1ff2f91e78015a971d7f6dc08ee" [[patch.unused]] name = "polkadot-parachain" version = "0.9.24" -source = "git+https://github.com/mangata-finance//polkadot?branch=mangata-dev-v0.9.24#221e92dad377731be57817a0c414c511e7e055c6" +source = "git+https://github.com/mangata-finance//polkadot?branch=mangata-dev#56f604587571d1ff2f91e78015a971d7f6dc08ee" [[patch.unused]] name = "polkadot-primitives" version = "0.9.24" -source = "git+https://github.com/mangata-finance//polkadot?branch=mangata-dev-v0.9.24#221e92dad377731be57817a0c414c511e7e055c6" +source = "git+https://github.com/mangata-finance//polkadot?branch=mangata-dev#56f604587571d1ff2f91e78015a971d7f6dc08ee" [[patch.unused]] name = "polkadot-rpc" version = "0.9.24" -source = "git+https://github.com/mangata-finance//polkadot?branch=mangata-dev-v0.9.24#221e92dad377731be57817a0c414c511e7e055c6" +source = "git+https://github.com/mangata-finance//polkadot?branch=mangata-dev#56f604587571d1ff2f91e78015a971d7f6dc08ee" [[patch.unused]] name = "polkadot-runtime" version = "0.9.24" -source = "git+https://github.com/mangata-finance//polkadot?branch=mangata-dev-v0.9.24#221e92dad377731be57817a0c414c511e7e055c6" +source = "git+https://github.com/mangata-finance//polkadot?branch=mangata-dev#56f604587571d1ff2f91e78015a971d7f6dc08ee" [[patch.unused]] name = "polkadot-runtime-common" version = "0.9.24" -source = "git+https://github.com/mangata-finance//polkadot?branch=mangata-dev-v0.9.24#221e92dad377731be57817a0c414c511e7e055c6" +source = "git+https://github.com/mangata-finance//polkadot?branch=mangata-dev#56f604587571d1ff2f91e78015a971d7f6dc08ee" [[patch.unused]] name = "polkadot-runtime-parachains" version = "0.9.24" -source = "git+https://github.com/mangata-finance//polkadot?branch=mangata-dev-v0.9.24#221e92dad377731be57817a0c414c511e7e055c6" +source = "git+https://github.com/mangata-finance//polkadot?branch=mangata-dev#56f604587571d1ff2f91e78015a971d7f6dc08ee" [[patch.unused]] name = "polkadot-service" version = "0.9.24" -source = "git+https://github.com/mangata-finance//polkadot?branch=mangata-dev-v0.9.24#221e92dad377731be57817a0c414c511e7e055c6" +source = "git+https://github.com/mangata-finance//polkadot?branch=mangata-dev#56f604587571d1ff2f91e78015a971d7f6dc08ee" [[patch.unused]] name = "polkadot-statement-distribution" version = "0.9.24" -source = "git+https://github.com/mangata-finance//polkadot?branch=mangata-dev-v0.9.24#221e92dad377731be57817a0c414c511e7e055c6" +source = "git+https://github.com/mangata-finance//polkadot?branch=mangata-dev#56f604587571d1ff2f91e78015a971d7f6dc08ee" [[patch.unused]] name = "polkadot-statement-table" version = "0.9.24" -source = "git+https://github.com/mangata-finance//polkadot?branch=mangata-dev-v0.9.24#221e92dad377731be57817a0c414c511e7e055c6" +source = "git+https://github.com/mangata-finance//polkadot?branch=mangata-dev#56f604587571d1ff2f91e78015a971d7f6dc08ee" [[patch.unused]] name = "polkadot-test-runtime" version = "0.9.24" -source = "git+https://github.com/mangata-finance//polkadot?branch=mangata-dev-v0.9.24#221e92dad377731be57817a0c414c511e7e055c6" +source = "git+https://github.com/mangata-finance//polkadot?branch=mangata-dev#56f604587571d1ff2f91e78015a971d7f6dc08ee" [[patch.unused]] name = "polkadot-test-service" version = "0.9.24" -source = "git+https://github.com/mangata-finance//polkadot?branch=mangata-dev-v0.9.24#221e92dad377731be57817a0c414c511e7e055c6" +source = "git+https://github.com/mangata-finance//polkadot?branch=mangata-dev#56f604587571d1ff2f91e78015a971d7f6dc08ee" [[patch.unused]] name = "slot-range-helper" version = "0.9.24" -source = "git+https://github.com/mangata-finance//polkadot?branch=mangata-dev-v0.9.24#221e92dad377731be57817a0c414c511e7e055c6" +source = "git+https://github.com/mangata-finance//polkadot?branch=mangata-dev#56f604587571d1ff2f91e78015a971d7f6dc08ee" [[patch.unused]] name = "xcm-builder" version = "0.9.24" -source = "git+https://github.com/mangata-finance//polkadot?branch=mangata-dev-v0.9.24#221e92dad377731be57817a0c414c511e7e055c6" +source = "git+https://github.com/mangata-finance//polkadot?branch=mangata-dev#56f604587571d1ff2f91e78015a971d7f6dc08ee" [[patch.unused]] name = "xcm-executor" version = "0.9.24" -source = "git+https://github.com/mangata-finance//polkadot?branch=mangata-dev-v0.9.24#221e92dad377731be57817a0c414c511e7e055c6" +source = "git+https://github.com/mangata-finance//polkadot?branch=mangata-dev#56f604587571d1ff2f91e78015a971d7f6dc08ee" diff --git a/Cargo.toml b/Cargo.toml index 554549e363b1f..3f3a6a6e3b452 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -154,6 +154,10 @@ members = [ "frame/vesting", "frame/whitelist", "frame/vesting-mangata", + "frame/transaction-payment-mangata", + "frame/transaction-payment-mangata/asset-tx-payment", + "frame/transaction-payment-mangata/rpc", + "frame/transaction-payment-mangata/rpc/runtime-api", "primitives/api", "primitives/api/proc-macro", "primitives/api/test", @@ -629,559 +633,559 @@ panic = "unwind" # pallet-multisig = { path = "../substrate/frame/multisig" } # pallet-society = { path = "../substrate/frame/society" } -# [patch."https://github.com/mangata-finance/mangata-node"] -# mangata-primitives = { git = "https://github.com/mangata-finance//mangata-node", branch = "develop-v0.9.20" } +[patch."https://github.com/mangata-finance/mangata-node"] +mangata-primitives = { git = "https://github.com/mangata-finance//mangata-node", branch = "develop" } # # patch generated by ./scripts/dev_manifest.sh # [patch."https://github.com/mangata-finance/polkadot"] -# xcm-executor = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev-v0.9.24" } -# pallet-xcm = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev-v0.9.24" } -# xcm-builder = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev-v0.9.24" } -# xcm = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev-v0.9.24" } -# xcm-procedural = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev-v0.9.24" } -# polkadot-parachain = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev-v0.9.24" } -# polkadot-statement-table = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev-v0.9.24" } -# polkadot-rpc = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev-v0.9.24" } -# polkadot-primitives = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev-v0.9.24" } -# polkadot-core-primitives = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev-v0.9.24" } -# polkadot-cli = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev-v0.9.24" } -# polkadot-node-subsystem-util = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev-v0.9.24" } -# polkadot-node-jaeger = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev-v0.9.24" } -# polkadot-test-service = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev-v0.9.24" } -# polkadot-node-subsystem-types = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev-v0.9.24" } -# polkadot-client = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev-v0.9.24" } -# polkadot-availability-bitfield-distribution = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev-v0.9.24" } -# polkadot-availability-recovery = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev-v0.9.24" } -# polkadot-gossip-support = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev-v0.9.24" } -# polkadot-approval-distribution = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev-v0.9.24" } -# polkadot-collator-protocol = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev-v0.9.24" } -# polkadot-dispute-distribution = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev-v0.9.24" } -# polkadot-node-network-protocol = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev-v0.9.24" } -# polkadot-network-bridge = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev-v0.9.24" } -# polkadot-statement-distribution = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev-v0.9.24" } -# polkadot-availability-distribution = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev-v0.9.24" } -# polkadot-node-core-approval-voting = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev-v0.9.24" } -# polkadot-node-core-pvf = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev-v0.9.24" } -# polkadot-node-core-backing = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev-v0.9.24" } -# polkadot-node-core-dispute-coordinator = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev-v0.9.24" } -# polkadot-node-core-runtime-api = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev-v0.9.24" } -# polkadot-node-core-bitfield-signing = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev-v0.9.24" } -# polkadot-node-core-provisioner = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev-v0.9.24" } -# polkadot-node-core-parachains-inherent = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev-v0.9.24" } -# polkadot-node-core-chain-api = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev-v0.9.24" } -# polkadot-node-core-chain-selection = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev-v0.9.24" } -# polkadot-node-core-candidate-validation = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev-v0.9.24" } -# polkadot-node-core-av-store = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev-v0.9.24" } -# polkadot-node-subsystem = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev-v0.9.24" } -# polkadot-service = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev-v0.9.24" } -# polkadot-node-metrics = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev-v0.9.24" } -# metered-channel = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev-v0.9.24" } -# polkadot-overseer-gen-proc-macro = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev-v0.9.24" } -# polkadot-overseer-gen = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev-v0.9.24" } -# polkadot-overseer = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev-v0.9.24" } -# polkadot-node-collation-generation = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev-v0.9.24" } -# polkadot-node-primitives = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev-v0.9.24" } -# polkadot-runtime = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev-v0.9.24" } -# polkadot-test-runtime = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev-v0.9.24" } -# slot-range-helper = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev-v0.9.24" } -# polkadot-runtime-common = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev-v0.9.24" } -# polkadot-runtime-parachains = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev-v0.9.24" } -# polkadot-erasure-coding = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev-v0.9.24" } +# xcm-executor = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev" } +# pallet-xcm = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev" } +# xcm-builder = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev" } +# xcm = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev" } +# xcm-procedural = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev" } +# polkadot-parachain = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev" } +# polkadot-statement-table = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev" } +# polkadot-rpc = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev" } +# polkadot-primitives = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev" } +# polkadot-core-primitives = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev" } +# polkadot-cli = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev" } +# polkadot-node-subsystem-util = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev" } +# polkadot-node-jaeger = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev" } +# polkadot-test-service = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev" } +# polkadot-node-subsystem-types = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev" } +# polkadot-client = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev" } +# polkadot-availability-bitfield-distribution = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev" } +# polkadot-availability-recovery = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev" } +# polkadot-gossip-support = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev" } +# polkadot-approval-distribution = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev" } +# polkadot-collator-protocol = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev" } +# polkadot-dispute-distribution = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev" } +# polkadot-node-network-protocol = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev" } +# polkadot-network-bridge = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev" } +# polkadot-statement-distribution = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev" } +# polkadot-availability-distribution = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev" } +# polkadot-node-core-approval-voting = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev" } +# polkadot-node-core-pvf = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev" } +# polkadot-node-core-backing = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev" } +# polkadot-node-core-dispute-coordinator = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev" } +# polkadot-node-core-runtime-api = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev" } +# polkadot-node-core-bitfield-signing = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev" } +# polkadot-node-core-provisioner = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev" } +# polkadot-node-core-parachains-inherent = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev" } +# polkadot-node-core-chain-api = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev" } +# polkadot-node-core-chain-selection = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev" } +# polkadot-node-core-candidate-validation = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev" } +# polkadot-node-core-av-store = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev" } +# polkadot-node-subsystem = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev" } +# polkadot-service = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev" } +# polkadot-node-metrics = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev" } +# metered-channel = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev" } +# polkadot-overseer-gen-proc-macro = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev" } +# polkadot-overseer-gen = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev" } +# polkadot-overseer = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev" } +# polkadot-node-collation-generation = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev" } +# polkadot-node-primitives = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev" } +# polkadot-runtime = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev" } +# polkadot-test-runtime = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev" } +# slot-range-helper = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev" } +# polkadot-runtime-common = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev" } +# polkadot-runtime-parachains = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev" } +# polkadot-erasure-coding = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev" } # # patch generated by ./scripts/dev_manifest.sh # [patch."https://github.com/paritytech/polkadot"] -# xcm-executor = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev-v0.9.24" } -# pallet-xcm = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev-v0.9.24" } -# xcm-builder = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev-v0.9.24" } -# xcm = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev-v0.9.24" } -# xcm-procedural = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev-v0.9.24" } -# polkadot-parachain = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev-v0.9.24" } -# polkadot-statement-table = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev-v0.9.24" } -# polkadot-rpc = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev-v0.9.24" } -# polkadot-primitives = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev-v0.9.24" } -# polkadot-core-primitives = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev-v0.9.24" } -# polkadot-cli = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev-v0.9.24" } -# polkadot-node-subsystem-util = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev-v0.9.24" } -# polkadot-node-jaeger = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev-v0.9.24" } -# polkadot-test-service = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev-v0.9.24" } -# polkadot-node-subsystem-types = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev-v0.9.24" } -# polkadot-client = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev-v0.9.24" } -# polkadot-availability-bitfield-distribution = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev-v0.9.24" } -# polkadot-availability-recovery = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev-v0.9.24" } -# polkadot-gossip-support = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev-v0.9.24" } -# polkadot-approval-distribution = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev-v0.9.24" } -# polkadot-collator-protocol = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev-v0.9.24" } -# polkadot-dispute-distribution = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev-v0.9.24" } -# polkadot-node-network-protocol = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev-v0.9.24" } -# polkadot-network-bridge = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev-v0.9.24" } -# polkadot-statement-distribution = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev-v0.9.24" } -# polkadot-availability-distribution = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev-v0.9.24" } -# polkadot-node-core-approval-voting = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev-v0.9.24" } -# polkadot-node-core-pvf = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev-v0.9.24" } -# polkadot-node-core-backing = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev-v0.9.24" } -# polkadot-node-core-dispute-coordinator = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev-v0.9.24" } -# polkadot-node-core-runtime-api = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev-v0.9.24" } -# polkadot-node-core-bitfield-signing = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev-v0.9.24" } -# polkadot-node-core-provisioner = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev-v0.9.24" } -# polkadot-node-core-parachains-inherent = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev-v0.9.24" } -# polkadot-node-core-chain-api = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev-v0.9.24" } -# polkadot-node-core-chain-selection = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev-v0.9.24" } -# polkadot-node-core-candidate-validation = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev-v0.9.24" } -# polkadot-node-core-av-store = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev-v0.9.24" } -# polkadot-node-subsystem = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev-v0.9.24" } -# polkadot-service = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev-v0.9.24" } -# polkadot-node-metrics = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev-v0.9.24" } -# metered-channel = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev-v0.9.24" } -# polkadot-overseer-gen-proc-macro = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev-v0.9.24" } -# polkadot-overseer-gen = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev-v0.9.24" } -# polkadot-overseer = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev-v0.9.24" } -# polkadot-node-collation-generation = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev-v0.9.24" } -# polkadot-node-primitives = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev-v0.9.24" } -# polkadot-runtime = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev-v0.9.24" } -# polkadot-test-runtime = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev-v0.9.24" } -# slot-range-helper = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev-v0.9.24" } -# polkadot-runtime-common = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev-v0.9.24" } -# polkadot-runtime-parachains = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev-v0.9.24" } -# polkadot-erasure-coding = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev-v0.9.24" } +# xcm-executor = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev" } +# pallet-xcm = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev" } +# xcm-builder = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev" } +# xcm = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev" } +# xcm-procedural = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev" } +# polkadot-parachain = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev" } +# polkadot-statement-table = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev" } +# polkadot-rpc = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev" } +# polkadot-primitives = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev" } +# polkadot-core-primitives = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev" } +# polkadot-cli = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev" } +# polkadot-node-subsystem-util = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev" } +# polkadot-node-jaeger = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev" } +# polkadot-test-service = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev" } +# polkadot-node-subsystem-types = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev" } +# polkadot-client = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev" } +# polkadot-availability-bitfield-distribution = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev" } +# polkadot-availability-recovery = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev" } +# polkadot-gossip-support = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev" } +# polkadot-approval-distribution = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev" } +# polkadot-collator-protocol = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev" } +# polkadot-dispute-distribution = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev" } +# polkadot-node-network-protocol = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev" } +# polkadot-network-bridge = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev" } +# polkadot-statement-distribution = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev" } +# polkadot-availability-distribution = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev" } +# polkadot-node-core-approval-voting = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev" } +# polkadot-node-core-pvf = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev" } +# polkadot-node-core-backing = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev" } +# polkadot-node-core-dispute-coordinator = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev" } +# polkadot-node-core-runtime-api = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev" } +# polkadot-node-core-bitfield-signing = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev" } +# polkadot-node-core-provisioner = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev" } +# polkadot-node-core-parachains-inherent = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev" } +# polkadot-node-core-chain-api = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev" } +# polkadot-node-core-chain-selection = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev" } +# polkadot-node-core-candidate-validation = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev" } +# polkadot-node-core-av-store = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev" } +# polkadot-node-subsystem = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev" } +# polkadot-service = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev" } +# polkadot-node-metrics = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev" } +# metered-channel = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev" } +# polkadot-overseer-gen-proc-macro = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev" } +# polkadot-overseer-gen = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev" } +# polkadot-overseer = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev" } +# polkadot-node-collation-generation = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev" } +# polkadot-node-primitives = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev" } +# polkadot-runtime = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev" } +# polkadot-test-runtime = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev" } +# slot-range-helper = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev" } +# polkadot-runtime-common = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev" } +# polkadot-runtime-parachains = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev" } +# polkadot-erasure-coding = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev" } # # patch generated by ./scripts/dev_manifest.sh # [patch."https://github.com/paritytech/cumulus"] -# cumulus-test-relay-sproof-builder = { git = "https://github.com/mangata-finance//cumulus", branch = "mangata-dev-v0.9.24" } -# cumulus-client-pov-recovery = { git = "https://github.com/mangata-finance//cumulus", branch = "mangata-dev-v0.9.24" } -# cumulus-client-network = { git = "https://github.com/mangata-finance//cumulus", branch = "mangata-dev-v0.9.24" } -# cumulus-client-service = { git = "https://github.com/mangata-finance//cumulus", branch = "mangata-dev-v0.9.24" } -# cumulus-client-collator = { git = "https://github.com/mangata-finance//cumulus", branch = "mangata-dev-v0.9.24" } -# cumulus-client-consensus-common = { git = "https://github.com/mangata-finance//cumulus", branch = "mangata-dev-v0.9.24" } -# cumulus-client-consensus-aura = { git = "https://github.com/mangata-finance//cumulus", branch = "mangata-dev-v0.9.24" } -# cumulus-client-cli = { git = "https://github.com/mangata-finance//cumulus", branch = "mangata-dev-v0.9.24" } -# parachain-info = { git = "https://github.com/mangata-finance//cumulus", branch = "mangata-dev-v0.9.24" } -# cumulus-pallet-xcm = { git = "https://github.com/mangata-finance//cumulus", branch = "mangata-dev-v0.9.24" } -# cumulus-pallet-aura-ext = { git = "https://github.com/mangata-finance//cumulus", branch = "mangata-dev-v0.9.24" } -# cumulus-pallet-xcmp-queue = { git = "https://github.com/mangata-finance//cumulus", branch = "mangata-dev-v0.9.24" } -# cumulus-pallet-parachain-system-proc-macro = { git = "https://github.com/mangata-finance//cumulus", branch = "mangata-dev-v0.9.24" } -# cumulus-pallet-parachain-system = { git = "https://github.com/mangata-finance//cumulus", branch = "mangata-dev-v0.9.24" } -# cumulus-pallet-dmp-queue = { git = "https://github.com/mangata-finance//cumulus", branch = "mangata-dev-v0.9.24" } -# cumulus-primitives-parachain-inherent = { git = "https://github.com/mangata-finance//cumulus", branch = "mangata-dev-v0.9.24" } -# cumulus-primitives-core = { git = "https://github.com/mangata-finance//cumulus", branch = "mangata-dev-v0.9.24" } -# cumulus-primitives-utility = { git = "https://github.com/mangata-finance//cumulus", branch = "mangata-dev-v0.9.24" } -# cumulus-primitives-timestamp = { git = "https://github.com/mangata-finance//cumulus", branch = "mangata-dev-v0.9.24" } -# cumulus-relay-chain-interface = { git = "https://github.com/mangata-finance//cumulus", branch = "mangata-dev-v0.9.24" } -# cumulus-relay-chain-local = { git = "https://github.com/mangata-finance//cumulus", branch = "mangata-dev-v0.9.24" } +# cumulus-test-relay-sproof-builder = { git = "https://github.com/mangata-finance//cumulus", branch = "mangata-dev" } +# cumulus-client-pov-recovery = { git = "https://github.com/mangata-finance//cumulus", branch = "mangata-dev" } +# cumulus-client-network = { git = "https://github.com/mangata-finance//cumulus", branch = "mangata-dev" } +# cumulus-client-service = { git = "https://github.com/mangata-finance//cumulus", branch = "mangata-dev" } +# cumulus-client-collator = { git = "https://github.com/mangata-finance//cumulus", branch = "mangata-dev" } +# cumulus-client-consensus-common = { git = "https://github.com/mangata-finance//cumulus", branch = "mangata-dev" } +# cumulus-client-consensus-aura = { git = "https://github.com/mangata-finance//cumulus", branch = "mangata-dev" } +# cumulus-client-cli = { git = "https://github.com/mangata-finance//cumulus", branch = "mangata-dev" } +# parachain-info = { git = "https://github.com/mangata-finance//cumulus", branch = "mangata-dev" } +# cumulus-pallet-xcm = { git = "https://github.com/mangata-finance//cumulus", branch = "mangata-dev" } +# cumulus-pallet-aura-ext = { git = "https://github.com/mangata-finance//cumulus", branch = "mangata-dev" } +# cumulus-pallet-xcmp-queue = { git = "https://github.com/mangata-finance//cumulus", branch = "mangata-dev" } +# cumulus-pallet-parachain-system-proc-macro = { git = "https://github.com/mangata-finance//cumulus", branch = "mangata-dev" } +# cumulus-pallet-parachain-system = { git = "https://github.com/mangata-finance//cumulus", branch = "mangata-dev" } +# cumulus-pallet-dmp-queue = { git = "https://github.com/mangata-finance//cumulus", branch = "mangata-dev" } +# cumulus-primitives-parachain-inherent = { git = "https://github.com/mangata-finance//cumulus", branch = "mangata-dev" } +# cumulus-primitives-core = { git = "https://github.com/mangata-finance//cumulus", branch = "mangata-dev" } +# cumulus-primitives-utility = { git = "https://github.com/mangata-finance//cumulus", branch = "mangata-dev" } +# cumulus-primitives-timestamp = { git = "https://github.com/mangata-finance//cumulus", branch = "mangata-dev" } +# cumulus-relay-chain-interface = { git = "https://github.com/mangata-finance//cumulus", branch = "mangata-dev" } +# cumulus-relay-chain-local = { git = "https://github.com/mangata-finance//cumulus", branch = "mangata-dev" } # # patch generated by ./scripts/dev_manifest.sh # [patch."https://github.com/mangata-finance/cumulus"] -# cumulus-test-relay-sproof-builder = { git = "https://github.com/mangata-finance//cumulus", branch = "mangata-dev-v0.9.24" } -# cumulus-client-pov-recovery = { git = "https://github.com/mangata-finance//cumulus", branch = "mangata-dev-v0.9.24" } -# cumulus-client-network = { git = "https://github.com/mangata-finance//cumulus", branch = "mangata-dev-v0.9.24" } -# cumulus-client-service = { git = "https://github.com/mangata-finance//cumulus", branch = "mangata-dev-v0.9.24" } -# cumulus-client-collator = { git = "https://github.com/mangata-finance//cumulus", branch = "mangata-dev-v0.9.24" } -# cumulus-client-consensus-common = { git = "https://github.com/mangata-finance//cumulus", branch = "mangata-dev-v0.9.24" } -# cumulus-client-consensus-aura = { git = "https://github.com/mangata-finance//cumulus", branch = "mangata-dev-v0.9.24" } -# cumulus-client-cli = { git = "https://github.com/mangata-finance//cumulus", branch = "mangata-dev-v0.9.24" } -# parachain-info = { git = "https://github.com/mangata-finance//cumulus", branch = "mangata-dev-v0.9.24" } -# cumulus-pallet-xcm = { git = "https://github.com/mangata-finance//cumulus", branch = "mangata-dev-v0.9.24" } -# cumulus-pallet-aura-ext = { git = "https://github.com/mangata-finance//cumulus", branch = "mangata-dev-v0.9.24" } -# cumulus-pallet-xcmp-queue = { git = "https://github.com/mangata-finance//cumulus", branch = "mangata-dev-v0.9.24" } -# cumulus-pallet-parachain-system-proc-macro = { git = "https://github.com/mangata-finance//cumulus", branch = "mangata-dev-v0.9.24" } -# cumulus-pallet-parachain-system = { git = "https://github.com/mangata-finance//cumulus", branch = "mangata-dev-v0.9.24" } -# cumulus-pallet-dmp-queue = { git = "https://github.com/mangata-finance//cumulus", branch = "mangata-dev-v0.9.24" } -# cumulus-primitives-parachain-inherent = { git = "https://github.com/mangata-finance//cumulus", branch = "mangata-dev-v0.9.24" } -# cumulus-primitives-core = { git = "https://github.com/mangata-finance//cumulus", branch = "mangata-dev-v0.9.24" } -# cumulus-primitives-utility = { git = "https://github.com/mangata-finance//cumulus", branch = "mangata-dev-v0.9.24" } -# cumulus-primitives-timestamp = { git = "https://github.com/mangata-finance//cumulus", branch = "mangata-dev-v0.9.24" } -# cumulus-relay-chain-interface = { git = "https://github.com/mangata-finance//cumulus", branch = "mangata-dev-v0.9.24" } -# cumulus-relay-chain-local = { git = "https://github.com/mangata-finance//cumulus", branch = "mangata-dev-v0.9.24" } +# cumulus-test-relay-sproof-builder = { git = "https://github.com/mangata-finance//cumulus", branch = "mangata-dev" } +# cumulus-client-pov-recovery = { git = "https://github.com/mangata-finance//cumulus", branch = "mangata-dev" } +# cumulus-client-network = { git = "https://github.com/mangata-finance//cumulus", branch = "mangata-dev" } +# cumulus-client-service = { git = "https://github.com/mangata-finance//cumulus", branch = "mangata-dev" } +# cumulus-client-collator = { git = "https://github.com/mangata-finance//cumulus", branch = "mangata-dev" } +# cumulus-client-consensus-common = { git = "https://github.com/mangata-finance//cumulus", branch = "mangata-dev" } +# cumulus-client-consensus-aura = { git = "https://github.com/mangata-finance//cumulus", branch = "mangata-dev" } +# cumulus-client-cli = { git = "https://github.com/mangata-finance//cumulus", branch = "mangata-dev" } +# parachain-info = { git = "https://github.com/mangata-finance//cumulus", branch = "mangata-dev" } +# cumulus-pallet-xcm = { git = "https://github.com/mangata-finance//cumulus", branch = "mangata-dev" } +# cumulus-pallet-aura-ext = { git = "https://github.com/mangata-finance//cumulus", branch = "mangata-dev" } +# cumulus-pallet-xcmp-queue = { git = "https://github.com/mangata-finance//cumulus", branch = "mangata-dev" } +# cumulus-pallet-parachain-system-proc-macro = { git = "https://github.com/mangata-finance//cumulus", branch = "mangata-dev" } +# cumulus-pallet-parachain-system = { git = "https://github.com/mangata-finance//cumulus", branch = "mangata-dev" } +# cumulus-pallet-dmp-queue = { git = "https://github.com/mangata-finance//cumulus", branch = "mangata-dev" } +# cumulus-primitives-parachain-inherent = { git = "https://github.com/mangata-finance//cumulus", branch = "mangata-dev" } +# cumulus-primitives-core = { git = "https://github.com/mangata-finance//cumulus", branch = "mangata-dev" } +# cumulus-primitives-utility = { git = "https://github.com/mangata-finance//cumulus", branch = "mangata-dev" } +# cumulus-primitives-timestamp = { git = "https://github.com/mangata-finance//cumulus", branch = "mangata-dev" } +# cumulus-relay-chain-interface = { git = "https://github.com/mangata-finance//cumulus", branch = "mangata-dev" } +# cumulus-relay-chain-local = { git = "https://github.com/mangata-finance//cumulus", branch = "mangata-dev" } # # # patch generated by ./scripts/dev_manifest.sh # [patch."https://github.com/mangata-finance/open-runtime-module-library"] -# orml-xcm = { git = "https://github.com/mangata-finance//open-runtime-module-library", branch = "mangata-dev-v0.9.24" } -# orml-xcm-support = { git = "https://github.com/mangata-finance//open-runtime-module-library", branch = "mangata-dev-v0.9.24" } -# orml-utilities = { git = "https://github.com/mangata-finance//open-runtime-module-library", branch = "mangata-dev-v0.9.24" } -# orml-unknown-tokens = { git = "https://github.com/mangata-finance//open-runtime-module-library", branch = "mangata-dev-v0.9.24" } -# orml-xtokens = { git = "https://github.com/mangata-finance//open-runtime-module-library", branch = "mangata-dev-v0.9.24" } -# orml-traits = { git = "https://github.com/mangata-finance//open-runtime-module-library", branch = "mangata-dev-v0.9.24" } -# orml-tokens = { git = "https://github.com/mangata-finance//open-runtime-module-library", branch = "mangata-dev-v0.9.24" } +# orml-xcm = { git = "https://github.com/mangata-finance//open-runtime-module-library", branch = "mangata-dev" } +# orml-xcm-support = { git = "https://github.com/mangata-finance//open-runtime-module-library", branch = "mangata-dev" } +# orml-utilities = { git = "https://github.com/mangata-finance//open-runtime-module-library", branch = "mangata-dev" } +# orml-unknown-tokens = { git = "https://github.com/mangata-finance//open-runtime-module-library", branch = "mangata-dev" } +# orml-xtokens = { git = "https://github.com/mangata-finance//open-runtime-module-library", branch = "mangata-dev" } +# orml-traits = { git = "https://github.com/mangata-finance//open-runtime-module-library", branch = "mangata-dev" } +# orml-tokens = { git = "https://github.com/mangata-finance//open-runtime-module-library", branch = "mangata-dev" } # # patch generated by ./scripts/dev_manifest.sh # [patch."https://github.com/mangata-finance/substrate"] -# pallet-authorship = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# pallet-bags-list = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# pallet-transaction-payment-rpc-runtime-api = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# pallet-transaction-payment-rpc = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# pallet-transaction-payment = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# frame-try-runtime = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# frame-system-rpc-runtime-api = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# frame-system = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# pallet-beefy = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# pallet-membership = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# frame-benchmarking = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# pallet-identity = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# pallet-session = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# pallet-aura = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# pallet-bounties = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# pallet-balances = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# pallet-authority-discovery = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# pallet-tips = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# pallet-election-provider-multi-phase = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# pallet-beefy-mmr = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# beefy-merkle-tree = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# pallet-scheduler = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# pallet-multisig = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# frame-executive = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# pallet-im-online = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# pallet-treasury = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# pallet-utility = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# pallet-sudo = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# pallet-offences = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# pallet-democracy = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# pallet-grandpa = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# frame-election-provider-support = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# pallet-collective = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# pallet-mmr-rpc = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# pallet-mmr = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# pallet-mmr-primitives = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# frame-support = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# frame-support-procedural-tools-derive = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# frame-support-procedural-tools = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# frame-support-procedural = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# pallet-nicks = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# pallet-staking = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# pallet-staking-reward-curve = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# pallet-society = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# pallet-indices = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# pallet-babe = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# pallet-timestamp = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# pallet-elections-phragmen = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# pallet-proxy = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# pallet-vesting = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# pallet-vesting-mangata = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sc-informant = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sc-finality-grandpa-rpc = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sc-finality-grandpa = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# beefy-gadget-rpc = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# beefy-gadget = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sc-executor-wasmtime = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sc-executor-common = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sc-executor-wasmi = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sc-executor = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sc-network-gossip = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sc-transaction-pool-api = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sc-transaction-pool = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sc-tracing-proc-macro = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sc-tracing = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sc-client-db = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sc-sync-state-rpc = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sc-network = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sc-authority-discovery = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sc-utils = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sc-block-builder-ver = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sc-keystore = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sc-rpc-server = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sc-client-api = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sc-rpc = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sc-service = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sc-basic-authorship-ver = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sc-block-builder = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sc-rpc-api = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sc-chain-spec-derive = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sc-chain-spec = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sc-proposer-metrics = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sc-peerset = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sc-basic-authorship = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sc-offchain = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sc-state-db = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sc-allocator = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sc-consensus = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sc-consensus-aura = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sc-consensus-uncles = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sc-consensus-epochs = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sc-consensus-slots = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sc-consensus-babe-rpc = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sc-consensus-babe = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sc-cli = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sc-telemetry = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# fork-tree = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# substrate-wasm-builder = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# try-runtime-cli = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# frame-benchmarking-cli = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# substrate-frame-rpc-system = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# remote-externalities = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# substrate-build-script-utils = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# substrate-prometheus-endpoint = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# substrate-test-client = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-panic-handler = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-inherents = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-authorship = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-storage = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-std = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-finality-grandpa = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# beefy-primitives = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-version-proc-macro = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-version = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-transaction-pool = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-ver = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-tracing = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-database = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-debug-derive = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-session = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# extrinsic-shuffler = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# ver-api = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-core-hashing-proc-macro = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-core-hashing = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-core = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-keyring = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-authority-discovery = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-tasks = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-runtime-interface-proc-macro = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-runtime-interface = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-arithmetic = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-keystore = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-api-proc-macro = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-api = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-rpc = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-maybe-compressed-blob = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-transaction-storage-proof = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-state-machine = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-block-builder = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-wasm-interface = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-npos-elections = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-npos-elections-solution-type = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-application-crypto = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-serializer = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-offchain = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-staking = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-trie = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-blockchain = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-externalities = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-consensus = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-consensus-aura = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-consensus-slots = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-consensus-vrf = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-consensus-babe = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-timestamp = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-runtime = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-io = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } +# pallet-authorship = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# pallet-bags-list = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# pallet-transaction-payment-rpc-runtime-api = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# pallet-transaction-payment-rpc = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# pallet-transaction-payment = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# frame-try-runtime = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# frame-system-rpc-runtime-api = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# frame-system = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# pallet-beefy = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# pallet-membership = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# frame-benchmarking = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# pallet-identity = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# pallet-session = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# pallet-aura = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# pallet-bounties = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# pallet-balances = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# pallet-authority-discovery = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# pallet-tips = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# pallet-election-provider-multi-phase = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# pallet-beefy-mmr = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# beefy-merkle-tree = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# pallet-scheduler = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# pallet-multisig = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# frame-executive = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# pallet-im-online = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# pallet-treasury = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# pallet-utility = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# pallet-sudo = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# pallet-offences = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# pallet-democracy = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# pallet-grandpa = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# frame-election-provider-support = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# pallet-collective = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# pallet-mmr-rpc = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# pallet-mmr = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# pallet-mmr-primitives = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# frame-support = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# frame-support-procedural-tools-derive = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# frame-support-procedural-tools = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# frame-support-procedural = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# pallet-nicks = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# pallet-staking = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# pallet-staking-reward-curve = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# pallet-society = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# pallet-indices = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# pallet-babe = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# pallet-timestamp = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# pallet-elections-phragmen = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# pallet-proxy = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# pallet-vesting = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# pallet-vesting-mangata = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sc-informant = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sc-finality-grandpa-rpc = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sc-finality-grandpa = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# beefy-gadget-rpc = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# beefy-gadget = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sc-executor-wasmtime = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sc-executor-common = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sc-executor-wasmi = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sc-executor = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sc-network-gossip = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sc-transaction-pool-api = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sc-transaction-pool = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sc-tracing-proc-macro = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sc-tracing = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sc-client-db = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sc-sync-state-rpc = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sc-network = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sc-authority-discovery = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sc-utils = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sc-block-builder-ver = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sc-keystore = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sc-rpc-server = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sc-client-api = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sc-rpc = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sc-service = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sc-basic-authorship-ver = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sc-block-builder = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sc-rpc-api = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sc-chain-spec-derive = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sc-chain-spec = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sc-proposer-metrics = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sc-peerset = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sc-basic-authorship = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sc-offchain = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sc-state-db = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sc-allocator = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sc-consensus = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sc-consensus-aura = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sc-consensus-uncles = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sc-consensus-epochs = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sc-consensus-slots = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sc-consensus-babe-rpc = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sc-consensus-babe = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sc-cli = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sc-telemetry = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# fork-tree = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# substrate-wasm-builder = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# try-runtime-cli = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# frame-benchmarking-cli = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# substrate-frame-rpc-system = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# remote-externalities = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# substrate-build-script-utils = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# substrate-prometheus-endpoint = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# substrate-test-client = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-panic-handler = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-inherents = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-authorship = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-storage = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-std = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-finality-grandpa = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# beefy-primitives = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-version-proc-macro = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-version = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-transaction-pool = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-ver = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-tracing = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-database = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-debug-derive = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-session = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# extrinsic-shuffler = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# ver-api = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-core-hashing-proc-macro = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-core-hashing = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-core = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-keyring = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-authority-discovery = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-tasks = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-runtime-interface-proc-macro = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-runtime-interface = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-arithmetic = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-keystore = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-api-proc-macro = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-api = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-rpc = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-maybe-compressed-blob = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-transaction-storage-proof = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-state-machine = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-block-builder = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-wasm-interface = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-npos-elections = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-npos-elections-solution-type = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-application-crypto = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-serializer = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-offchain = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-staking = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-trie = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-blockchain = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-externalities = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-consensus = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-consensus-aura = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-consensus-slots = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-consensus-vrf = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-consensus-babe = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-timestamp = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-runtime = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-io = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } # # patch generated by ./scripts/dev_manifest.sh # [patch."https://github.com/paritytech/substrate"] -# pallet-authorship = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# pallet-bags-list = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# pallet-transaction-payment-rpc-runtime-api = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# pallet-transaction-payment-rpc = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# pallet-transaction-payment = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# frame-try-runtime = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# frame-system-rpc-runtime-api = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# frame-system = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# pallet-beefy = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# pallet-membership = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# frame-benchmarking = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# pallet-identity = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# pallet-session = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# pallet-aura = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# pallet-bounties = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# pallet-balances = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# pallet-authority-discovery = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# pallet-tips = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# pallet-election-provider-multi-phase = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# pallet-beefy-mmr = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# beefy-merkle-tree = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# pallet-scheduler = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# pallet-multisig = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# frame-executive = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# pallet-im-online = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# pallet-treasury = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# pallet-utility = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# pallet-sudo = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# pallet-offences = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# pallet-democracy = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# pallet-grandpa = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# frame-election-provider-support = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# pallet-collective = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# pallet-mmr-rpc = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# pallet-mmr = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# pallet-mmr-primitives = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# frame-support = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# frame-support-procedural-tools-derive = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# frame-support-procedural-tools = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# frame-support-procedural = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# pallet-nicks = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# pallet-staking = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# pallet-staking-reward-curve = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# pallet-society = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# pallet-indices = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# pallet-babe = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# pallet-timestamp = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# pallet-elections-phragmen = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# pallet-proxy = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# pallet-vesting = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# pallet-vesting-mangata = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sc-informant = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sc-finality-grandpa-rpc = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sc-finality-grandpa = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# beefy-gadget-rpc = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# beefy-gadget = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sc-executor-wasmtime = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sc-executor-common = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sc-executor-wasmi = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sc-executor = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sc-network-gossip = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sc-transaction-pool-api = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sc-transaction-pool = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sc-tracing-proc-macro = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sc-tracing = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sc-client-db = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sc-sync-state-rpc = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sc-network = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sc-authority-discovery = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sc-utils = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sc-block-builder-ver = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sc-keystore = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sc-rpc-server = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sc-client-api = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sc-rpc = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sc-service = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sc-basic-authorship-ver = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sc-block-builder = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sc-rpc-api = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sc-chain-spec-derive = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sc-chain-spec = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sc-proposer-metrics = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sc-peerset = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sc-basic-authorship = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sc-offchain = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sc-state-db = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sc-allocator = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sc-consensus = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sc-consensus-aura = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sc-consensus-uncles = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sc-consensus-epochs = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sc-consensus-slots = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sc-consensus-babe-rpc = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sc-consensus-babe = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sc-cli = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sc-telemetry = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# fork-tree = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# substrate-wasm-builder = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# try-runtime-cli = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# frame-benchmarking-cli = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# substrate-frame-rpc-system = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# remote-externalities = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# substrate-build-script-utils = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# substrate-prometheus-endpoint = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# substrate-test-client = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-panic-handler = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-inherents = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-authorship = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-storage = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-std = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-finality-grandpa = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# beefy-primitives = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-version-proc-macro = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-version = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-transaction-pool = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-ver = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-tracing = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-database = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-debug-derive = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-session = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# extrinsic-shuffler = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# ver-api = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-core-hashing-proc-macro = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-core-hashing = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-core = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-keyring = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-authority-discovery = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-tasks = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-runtime-interface-proc-macro = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-runtime-interface = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-arithmetic = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-keystore = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-api-proc-macro = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-api = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-rpc = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-maybe-compressed-blob = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-transaction-storage-proof = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-state-machine = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-block-builder = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-wasm-interface = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-npos-elections = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-npos-elections-solution-type = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-application-crypto = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-serializer = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-offchain = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-staking = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-trie = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-blockchain = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-externalities = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-consensus = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-consensus-aura = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-consensus-slots = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-consensus-vrf = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-consensus-babe = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-timestamp = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-runtime = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-io = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } +# pallet-authorship = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# pallet-bags-list = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# pallet-transaction-payment-rpc-runtime-api = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# pallet-transaction-payment-rpc = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# pallet-transaction-payment = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# frame-try-runtime = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# frame-system-rpc-runtime-api = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# frame-system = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# pallet-beefy = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# pallet-membership = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# frame-benchmarking = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# pallet-identity = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# pallet-session = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# pallet-aura = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# pallet-bounties = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# pallet-balances = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# pallet-authority-discovery = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# pallet-tips = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# pallet-election-provider-multi-phase = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# pallet-beefy-mmr = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# beefy-merkle-tree = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# pallet-scheduler = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# pallet-multisig = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# frame-executive = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# pallet-im-online = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# pallet-treasury = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# pallet-utility = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# pallet-sudo = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# pallet-offences = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# pallet-democracy = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# pallet-grandpa = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# frame-election-provider-support = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# pallet-collective = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# pallet-mmr-rpc = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# pallet-mmr = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# pallet-mmr-primitives = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# frame-support = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# frame-support-procedural-tools-derive = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# frame-support-procedural-tools = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# frame-support-procedural = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# pallet-nicks = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# pallet-staking = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# pallet-staking-reward-curve = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# pallet-society = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# pallet-indices = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# pallet-babe = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# pallet-timestamp = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# pallet-elections-phragmen = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# pallet-proxy = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# pallet-vesting = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# pallet-vesting-mangata = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sc-informant = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sc-finality-grandpa-rpc = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sc-finality-grandpa = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# beefy-gadget-rpc = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# beefy-gadget = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sc-executor-wasmtime = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sc-executor-common = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sc-executor-wasmi = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sc-executor = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sc-network-gossip = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sc-transaction-pool-api = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sc-transaction-pool = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sc-tracing-proc-macro = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sc-tracing = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sc-client-db = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sc-sync-state-rpc = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sc-network = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sc-authority-discovery = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sc-utils = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sc-block-builder-ver = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sc-keystore = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sc-rpc-server = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sc-client-api = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sc-rpc = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sc-service = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sc-basic-authorship-ver = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sc-block-builder = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sc-rpc-api = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sc-chain-spec-derive = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sc-chain-spec = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sc-proposer-metrics = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sc-peerset = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sc-basic-authorship = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sc-offchain = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sc-state-db = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sc-allocator = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sc-consensus = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sc-consensus-aura = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sc-consensus-uncles = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sc-consensus-epochs = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sc-consensus-slots = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sc-consensus-babe-rpc = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sc-consensus-babe = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sc-cli = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sc-telemetry = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# fork-tree = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# substrate-wasm-builder = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# try-runtime-cli = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# frame-benchmarking-cli = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# substrate-frame-rpc-system = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# remote-externalities = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# substrate-build-script-utils = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# substrate-prometheus-endpoint = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# substrate-test-client = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-panic-handler = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-inherents = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-authorship = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-storage = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-std = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-finality-grandpa = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# beefy-primitives = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-version-proc-macro = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-version = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-transaction-pool = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-ver = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-tracing = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-database = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-debug-derive = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-session = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# extrinsic-shuffler = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# ver-api = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-core-hashing-proc-macro = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-core-hashing = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-core = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-keyring = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-authority-discovery = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-tasks = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-runtime-interface-proc-macro = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-runtime-interface = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-arithmetic = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-keystore = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-api-proc-macro = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-api = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-rpc = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-maybe-compressed-blob = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-transaction-storage-proof = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-state-machine = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-block-builder = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-wasm-interface = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-npos-elections = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-npos-elections-solution-type = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-application-crypto = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-serializer = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-offchain = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-staking = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-trie = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-blockchain = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-externalities = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-consensus = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-consensus-aura = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-consensus-slots = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-consensus-vrf = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-consensus-babe = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-timestamp = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-runtime = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-io = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } # patch generated by ./scripts/dev_manifest.sh #[patch."https://github.com/paritytech/cumulus"] -#cumulus-test-relay-sproof-builder = { git = "https://github.com/mangata-finance//cumulus", branch = "mangata-dev-v0.9.24" } -#cumulus-client-pov-recovery = { git = "https://github.com/mangata-finance//cumulus", branch = "mangata-dev-v0.9.24" } -#cumulus-client-network = { git = "https://github.com/mangata-finance//cumulus", branch = "mangata-dev-v0.9.24" } -#cumulus-client-service = { git = "https://github.com/mangata-finance//cumulus", branch = "mangata-dev-v0.9.24" } -#cumulus-client-collator = { git = "https://github.com/mangata-finance//cumulus", branch = "mangata-dev-v0.9.24" } -#cumulus-client-consensus-common = { git = "https://github.com/mangata-finance//cumulus", branch = "mangata-dev-v0.9.24" } -#cumulus-client-consensus-aura = { git = "https://github.com/mangata-finance//cumulus", branch = "mangata-dev-v0.9.24" } -#cumulus-client-cli = { git = "https://github.com/mangata-finance//cumulus", branch = "mangata-dev-v0.9.24" } -#parachain-info = { git = "https://github.com/mangata-finance//cumulus", branch = "mangata-dev-v0.9.24" } -#cumulus-pallet-xcm = { git = "https://github.com/mangata-finance//cumulus", branch = "mangata-dev-v0.9.24" } -#cumulus-pallet-aura-ext = { git = "https://github.com/mangata-finance//cumulus", branch = "mangata-dev-v0.9.24" } -#cumulus-pallet-xcmp-queue = { git = "https://github.com/mangata-finance//cumulus", branch = "mangata-dev-v0.9.24" } -#cumulus-pallet-parachain-system-proc-macro = { git = "https://github.com/mangata-finance//cumulus", branch = "mangata-dev-v0.9.24" } -#cumulus-pallet-parachain-system = { git = "https://github.com/mangata-finance//cumulus", branch = "mangata-dev-v0.9.24" } -#cumulus-pallet-dmp-queue = { git = "https://github.com/mangata-finance//cumulus", branch = "mangata-dev-v0.9.24" } -#cumulus-primitives-parachain-inherent = { git = "https://github.com/mangata-finance//cumulus", branch = "mangata-dev-v0.9.24" } -#cumulus-primitives-core = { git = "https://github.com/mangata-finance//cumulus", branch = "mangata-dev-v0.9.24" } -#cumulus-primitives-utility = { git = "https://github.com/mangata-finance//cumulus", branch = "mangata-dev-v0.9.24" } -#cumulus-primitives-timestamp = { git = "https://github.com/mangata-finance//cumulus", branch = "mangata-dev-v0.9.24" } -#cumulus-relay-chain-interface = { git = "https://github.com/mangata-finance//cumulus", branch = "mangata-dev-v0.9.24" } -#cumulus-relay-chain-local = { git = "https://github.com/mangata-finance//cumulus", branch = "mangata-dev-v0.9.24" } +#cumulus-test-relay-sproof-builder = { git = "https://github.com/mangata-finance//cumulus", branch = "mangata-dev" } +#cumulus-client-pov-recovery = { git = "https://github.com/mangata-finance//cumulus", branch = "mangata-dev" } +#cumulus-client-network = { git = "https://github.com/mangata-finance//cumulus", branch = "mangata-dev" } +#cumulus-client-service = { git = "https://github.com/mangata-finance//cumulus", branch = "mangata-dev" } +#cumulus-client-collator = { git = "https://github.com/mangata-finance//cumulus", branch = "mangata-dev" } +#cumulus-client-consensus-common = { git = "https://github.com/mangata-finance//cumulus", branch = "mangata-dev" } +#cumulus-client-consensus-aura = { git = "https://github.com/mangata-finance//cumulus", branch = "mangata-dev" } +#cumulus-client-cli = { git = "https://github.com/mangata-finance//cumulus", branch = "mangata-dev" } +#parachain-info = { git = "https://github.com/mangata-finance//cumulus", branch = "mangata-dev" } +#cumulus-pallet-xcm = { git = "https://github.com/mangata-finance//cumulus", branch = "mangata-dev" } +#cumulus-pallet-aura-ext = { git = "https://github.com/mangata-finance//cumulus", branch = "mangata-dev" } +#cumulus-pallet-xcmp-queue = { git = "https://github.com/mangata-finance//cumulus", branch = "mangata-dev" } +#cumulus-pallet-parachain-system-proc-macro = { git = "https://github.com/mangata-finance//cumulus", branch = "mangata-dev" } +#cumulus-pallet-parachain-system = { git = "https://github.com/mangata-finance//cumulus", branch = "mangata-dev" } +#cumulus-pallet-dmp-queue = { git = "https://github.com/mangata-finance//cumulus", branch = "mangata-dev" } +#cumulus-primitives-parachain-inherent = { git = "https://github.com/mangata-finance//cumulus", branch = "mangata-dev" } +#cumulus-primitives-core = { git = "https://github.com/mangata-finance//cumulus", branch = "mangata-dev" } +#cumulus-primitives-utility = { git = "https://github.com/mangata-finance//cumulus", branch = "mangata-dev" } +#cumulus-primitives-timestamp = { git = "https://github.com/mangata-finance//cumulus", branch = "mangata-dev" } +#cumulus-relay-chain-interface = { git = "https://github.com/mangata-finance//cumulus", branch = "mangata-dev" } +#cumulus-relay-chain-local = { git = "https://github.com/mangata-finance//cumulus", branch = "mangata-dev" } # patch generated by ./scripts/dev_manifest.sh #[patch."https://github.com/mangata-finance/cumulus"] -#cumulus-test-relay-sproof-builder = { git = "https://github.com/mangata-finance//cumulus", branch = "mangata-dev-v0.9.24" } -#cumulus-client-pov-recovery = { git = "https://github.com/mangata-finance//cumulus", branch = "mangata-dev-v0.9.24" } -#cumulus-client-network = { git = "https://github.com/mangata-finance//cumulus", branch = "mangata-dev-v0.9.24" } -#cumulus-client-service = { git = "https://github.com/mangata-finance//cumulus", branch = "mangata-dev-v0.9.24" } -#cumulus-client-collator = { git = "https://github.com/mangata-finance//cumulus", branch = "mangata-dev-v0.9.24" } -#cumulus-client-consensus-common = { git = "https://github.com/mangata-finance//cumulus", branch = "mangata-dev-v0.9.24" } -#cumulus-client-consensus-aura = { git = "https://github.com/mangata-finance//cumulus", branch = "mangata-dev-v0.9.24" } -#cumulus-client-cli = { git = "https://github.com/mangata-finance//cumulus", branch = "mangata-dev-v0.9.24" } -#parachain-info = { git = "https://github.com/mangata-finance//cumulus", branch = "mangata-dev-v0.9.24" } -#cumulus-pallet-xcm = { git = "https://github.com/mangata-finance//cumulus", branch = "mangata-dev-v0.9.24" } -#cumulus-pallet-aura-ext = { git = "https://github.com/mangata-finance//cumulus", branch = "mangata-dev-v0.9.24" } -#cumulus-pallet-xcmp-queue = { git = "https://github.com/mangata-finance//cumulus", branch = "mangata-dev-v0.9.24" } -#cumulus-pallet-parachain-system-proc-macro = { git = "https://github.com/mangata-finance//cumulus", branch = "mangata-dev-v0.9.24" } -#cumulus-pallet-parachain-system = { git = "https://github.com/mangata-finance//cumulus", branch = "mangata-dev-v0.9.24" } -#cumulus-pallet-dmp-queue = { git = "https://github.com/mangata-finance//cumulus", branch = "mangata-dev-v0.9.24" } -#cumulus-primitives-parachain-inherent = { git = "https://github.com/mangata-finance//cumulus", branch = "mangata-dev-v0.9.24" } -#cumulus-primitives-core = { git = "https://github.com/mangata-finance//cumulus", branch = "mangata-dev-v0.9.24" } -#cumulus-primitives-utility = { git = "https://github.com/mangata-finance//cumulus", branch = "mangata-dev-v0.9.24" } -#cumulus-primitives-timestamp = { git = "https://github.com/mangata-finance//cumulus", branch = "mangata-dev-v0.9.24" } -#cumulus-relay-chain-interface = { git = "https://github.com/mangata-finance//cumulus", branch = "mangata-dev-v0.9.24" } -#cumulus-relay-chain-local = { git = "https://github.com/mangata-finance//cumulus", branch = "mangata-dev-v0.9.24" } +#cumulus-test-relay-sproof-builder = { git = "https://github.com/mangata-finance//cumulus", branch = "mangata-dev" } +#cumulus-client-pov-recovery = { git = "https://github.com/mangata-finance//cumulus", branch = "mangata-dev" } +#cumulus-client-network = { git = "https://github.com/mangata-finance//cumulus", branch = "mangata-dev" } +#cumulus-client-service = { git = "https://github.com/mangata-finance//cumulus", branch = "mangata-dev" } +#cumulus-client-collator = { git = "https://github.com/mangata-finance//cumulus", branch = "mangata-dev" } +#cumulus-client-consensus-common = { git = "https://github.com/mangata-finance//cumulus", branch = "mangata-dev" } +#cumulus-client-consensus-aura = { git = "https://github.com/mangata-finance//cumulus", branch = "mangata-dev" } +#cumulus-client-cli = { git = "https://github.com/mangata-finance//cumulus", branch = "mangata-dev" } +#parachain-info = { git = "https://github.com/mangata-finance//cumulus", branch = "mangata-dev" } +#cumulus-pallet-xcm = { git = "https://github.com/mangata-finance//cumulus", branch = "mangata-dev" } +#cumulus-pallet-aura-ext = { git = "https://github.com/mangata-finance//cumulus", branch = "mangata-dev" } +#cumulus-pallet-xcmp-queue = { git = "https://github.com/mangata-finance//cumulus", branch = "mangata-dev" } +#cumulus-pallet-parachain-system-proc-macro = { git = "https://github.com/mangata-finance//cumulus", branch = "mangata-dev" } +#cumulus-pallet-parachain-system = { git = "https://github.com/mangata-finance//cumulus", branch = "mangata-dev" } +#cumulus-pallet-dmp-queue = { git = "https://github.com/mangata-finance//cumulus", branch = "mangata-dev" } +#cumulus-primitives-parachain-inherent = { git = "https://github.com/mangata-finance//cumulus", branch = "mangata-dev" } +#cumulus-primitives-core = { git = "https://github.com/mangata-finance//cumulus", branch = "mangata-dev" } +#cumulus-primitives-utility = { git = "https://github.com/mangata-finance//cumulus", branch = "mangata-dev" } +#cumulus-primitives-timestamp = { git = "https://github.com/mangata-finance//cumulus", branch = "mangata-dev" } +#cumulus-relay-chain-interface = { git = "https://github.com/mangata-finance//cumulus", branch = "mangata-dev" } +#cumulus-relay-chain-local = { git = "https://github.com/mangata-finance//cumulus", branch = "mangata-dev" } # # patch generated by ./scripts/dev_manifest.sh [patch."https://github.com/mangata-finance/open-runtime-module-library"] -orml-xcm = { git = "https://github.com/mangata-finance//open-runtime-module-library", branch = "mangata-dev-v0.9.24" } -orml-xcm-support = { git = "https://github.com/mangata-finance//open-runtime-module-library", branch = "mangata-dev-v0.9.24" } -orml-utilities = { git = "https://github.com/mangata-finance//open-runtime-module-library", branch = "mangata-dev-v0.9.24" } -orml-unknown-tokens = { git = "https://github.com/mangata-finance//open-runtime-module-library", branch = "mangata-dev-v0.9.24" } -orml-xtokens = { git = "https://github.com/mangata-finance//open-runtime-module-library", branch = "mangata-dev-v0.9.24" } -orml-traits = { git = "https://github.com/mangata-finance//open-runtime-module-library", branch = "mangata-dev-v0.9.24" } -orml-tokens = { git = "https://github.com/mangata-finance//open-runtime-module-library", branch = "mangata-dev-v0.9.24" } +orml-xcm = { git = "https://github.com/mangata-finance//open-runtime-module-library", branch = "mangata-dev" } +orml-xcm-support = { git = "https://github.com/mangata-finance//open-runtime-module-library", branch = "mangata-dev" } +orml-utilities = { git = "https://github.com/mangata-finance//open-runtime-module-library", branch = "mangata-dev" } +orml-unknown-tokens = { git = "https://github.com/mangata-finance//open-runtime-module-library", branch = "mangata-dev" } +orml-xtokens = { git = "https://github.com/mangata-finance//open-runtime-module-library", branch = "mangata-dev" } +orml-traits = { git = "https://github.com/mangata-finance//open-runtime-module-library", branch = "mangata-dev" } +orml-tokens = { git = "https://github.com/mangata-finance//open-runtime-module-library", branch = "mangata-dev" } # orml-tokens = { path = "../open-runtime-module-library/tokens" } # orml-xcm = { path = "../open-runtime-module-library/xcm" } # orml-xcm-support = { path = "../open-runtime-module-library/xcm-support" } @@ -1192,613 +1196,613 @@ orml-tokens = { git = "https://github.com/mangata-finance//open-runtime-module-l # patch generated by ./scripts/dev_manifest.sh [patch."https://github.com/mangata-finance/polkadot"] -xcm-executor = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev-v0.9.24" } -pallet-xcm = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev-v0.9.24" } -xcm-builder = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev-v0.9.24" } -xcm = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev-v0.9.24" } -xcm-procedural = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev-v0.9.24" } -polkadot-parachain = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev-v0.9.24" } -polkadot-statement-table = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev-v0.9.24" } -polkadot-rpc = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev-v0.9.24" } -polkadot-primitives = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev-v0.9.24" } -polkadot-core-primitives = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev-v0.9.24" } -polkadot-cli = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev-v0.9.24" } -polkadot-node-subsystem-util = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev-v0.9.24" } -polkadot-node-jaeger = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev-v0.9.24" } -polkadot-test-service = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev-v0.9.24" } -polkadot-node-subsystem-types = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev-v0.9.24" } -polkadot-client = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev-v0.9.24" } -polkadot-availability-bitfield-distribution = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev-v0.9.24" } -polkadot-availability-recovery = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev-v0.9.24" } -polkadot-gossip-support = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev-v0.9.24" } -polkadot-approval-distribution = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev-v0.9.24" } -polkadot-collator-protocol = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev-v0.9.24" } -polkadot-dispute-distribution = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev-v0.9.24" } -polkadot-node-network-protocol = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev-v0.9.24" } -polkadot-network-bridge = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev-v0.9.24" } -polkadot-statement-distribution = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev-v0.9.24" } -polkadot-availability-distribution = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev-v0.9.24" } -polkadot-node-core-approval-voting = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev-v0.9.24" } -polkadot-node-core-pvf = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev-v0.9.24" } -polkadot-node-core-backing = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev-v0.9.24" } -polkadot-node-core-dispute-coordinator = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev-v0.9.24" } -polkadot-node-core-runtime-api = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev-v0.9.24" } -polkadot-node-core-bitfield-signing = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev-v0.9.24" } -polkadot-node-core-provisioner = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev-v0.9.24" } -polkadot-node-core-parachains-inherent = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev-v0.9.24" } -polkadot-node-core-chain-api = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev-v0.9.24" } -polkadot-node-core-chain-selection = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev-v0.9.24" } -polkadot-node-core-candidate-validation = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev-v0.9.24" } -polkadot-node-core-av-store = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev-v0.9.24" } -polkadot-node-subsystem = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev-v0.9.24" } -polkadot-service = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev-v0.9.24" } -polkadot-node-metrics = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev-v0.9.24" } -#metered-channel = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev-v0.9.24" } -#polkadot-overseer-gen-proc-macro = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev-v0.9.24" } -#polkadot-overseer-gen = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev-v0.9.24" } -polkadot-overseer = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev-v0.9.24" } -polkadot-node-collation-generation = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev-v0.9.24" } -polkadot-node-primitives = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev-v0.9.24" } -polkadot-runtime = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev-v0.9.24" } -polkadot-test-runtime = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev-v0.9.24" } -slot-range-helper = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev-v0.9.24" } -polkadot-runtime-common = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev-v0.9.24" } -polkadot-runtime-parachains = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev-v0.9.24" } -polkadot-erasure-coding = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev-v0.9.24" } +xcm-executor = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev" } +pallet-xcm = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev" } +xcm-builder = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev" } +xcm = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev" } +xcm-procedural = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev" } +polkadot-parachain = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev" } +polkadot-statement-table = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev" } +polkadot-rpc = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev" } +polkadot-primitives = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev" } +polkadot-core-primitives = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev" } +polkadot-cli = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev" } +polkadot-node-subsystem-util = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev" } +polkadot-node-jaeger = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev" } +polkadot-test-service = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev" } +polkadot-node-subsystem-types = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev" } +polkadot-client = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev" } +polkadot-availability-bitfield-distribution = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev" } +polkadot-availability-recovery = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev" } +polkadot-gossip-support = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev" } +polkadot-approval-distribution = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev" } +polkadot-collator-protocol = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev" } +polkadot-dispute-distribution = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev" } +polkadot-node-network-protocol = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev" } +polkadot-network-bridge = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev" } +polkadot-statement-distribution = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev" } +polkadot-availability-distribution = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev" } +polkadot-node-core-approval-voting = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev" } +polkadot-node-core-pvf = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev" } +polkadot-node-core-backing = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev" } +polkadot-node-core-dispute-coordinator = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev" } +polkadot-node-core-runtime-api = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev" } +polkadot-node-core-bitfield-signing = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev" } +polkadot-node-core-provisioner = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev" } +polkadot-node-core-parachains-inherent = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev" } +polkadot-node-core-chain-api = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev" } +polkadot-node-core-chain-selection = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev" } +polkadot-node-core-candidate-validation = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev" } +polkadot-node-core-av-store = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev" } +polkadot-node-subsystem = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev" } +polkadot-service = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev" } +polkadot-node-metrics = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev" } +#metered-channel = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev" } +#polkadot-overseer-gen-proc-macro = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev" } +#polkadot-overseer-gen = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev" } +polkadot-overseer = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev" } +polkadot-node-collation-generation = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev" } +polkadot-node-primitives = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev" } +polkadot-runtime = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev" } +polkadot-test-runtime = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev" } +slot-range-helper = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev" } +polkadot-runtime-common = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev" } +polkadot-runtime-parachains = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev" } +polkadot-erasure-coding = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev" } # patch generated by ./scripts/dev_manifest.sh [patch."https://github.com/paritytech/polkadot"] -xcm-executor = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev-v0.9.24" } -pallet-xcm = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev-v0.9.24" } -xcm-builder = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev-v0.9.24" } -xcm = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev-v0.9.24" } -xcm-procedural = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev-v0.9.24" } -polkadot-parachain = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev-v0.9.24" } -polkadot-statement-table = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev-v0.9.24" } -polkadot-rpc = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev-v0.9.24" } -polkadot-primitives = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev-v0.9.24" } -polkadot-core-primitives = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev-v0.9.24" } -polkadot-cli = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev-v0.9.24" } -polkadot-node-subsystem-util = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev-v0.9.24" } -polkadot-node-jaeger = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev-v0.9.24" } -polkadot-test-service = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev-v0.9.24" } -polkadot-node-subsystem-types = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev-v0.9.24" } -polkadot-client = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev-v0.9.24" } -polkadot-availability-bitfield-distribution = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev-v0.9.24" } -polkadot-availability-recovery = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev-v0.9.24" } -polkadot-gossip-support = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev-v0.9.24" } -polkadot-approval-distribution = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev-v0.9.24" } -polkadot-collator-protocol = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev-v0.9.24" } -polkadot-dispute-distribution = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev-v0.9.24" } -polkadot-node-network-protocol = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev-v0.9.24" } -polkadot-network-bridge = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev-v0.9.24" } -polkadot-statement-distribution = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev-v0.9.24" } -polkadot-availability-distribution = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev-v0.9.24" } -polkadot-node-core-approval-voting = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev-v0.9.24" } -polkadot-node-core-pvf = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev-v0.9.24" } -polkadot-node-core-backing = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev-v0.9.24" } -polkadot-node-core-dispute-coordinator = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev-v0.9.24" } -polkadot-node-core-runtime-api = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev-v0.9.24" } -polkadot-node-core-bitfield-signing = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev-v0.9.24" } -polkadot-node-core-provisioner = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev-v0.9.24" } -polkadot-node-core-parachains-inherent = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev-v0.9.24" } -polkadot-node-core-chain-api = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev-v0.9.24" } -polkadot-node-core-chain-selection = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev-v0.9.24" } -polkadot-node-core-candidate-validation = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev-v0.9.24" } -polkadot-node-core-av-store = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev-v0.9.24" } -polkadot-node-subsystem = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev-v0.9.24" } -polkadot-service = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev-v0.9.24" } -polkadot-node-metrics = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev-v0.9.24" } -#metered-channel = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev-v0.9.24" } -#polkadot-overseer-gen-proc-macro = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev-v0.9.24" } -#polkadot-overseer-gen = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev-v0.9.24" } -polkadot-overseer = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev-v0.9.24" } -polkadot-node-collation-generation = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev-v0.9.24" } -polkadot-node-primitives = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev-v0.9.24" } -polkadot-runtime = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev-v0.9.24" } -polkadot-test-runtime = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev-v0.9.24" } -slot-range-helper = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev-v0.9.24" } -polkadot-runtime-common = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev-v0.9.24" } -polkadot-runtime-parachains = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev-v0.9.24" } -polkadot-erasure-coding = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev-v0.9.24" } +xcm-executor = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev" } +pallet-xcm = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev" } +xcm-builder = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev" } +xcm = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev" } +xcm-procedural = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev" } +polkadot-parachain = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev" } +polkadot-statement-table = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev" } +polkadot-rpc = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev" } +polkadot-primitives = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev" } +polkadot-core-primitives = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev" } +polkadot-cli = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev" } +polkadot-node-subsystem-util = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev" } +polkadot-node-jaeger = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev" } +polkadot-test-service = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev" } +polkadot-node-subsystem-types = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev" } +polkadot-client = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev" } +polkadot-availability-bitfield-distribution = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev" } +polkadot-availability-recovery = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev" } +polkadot-gossip-support = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev" } +polkadot-approval-distribution = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev" } +polkadot-collator-protocol = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev" } +polkadot-dispute-distribution = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev" } +polkadot-node-network-protocol = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev" } +polkadot-network-bridge = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev" } +polkadot-statement-distribution = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev" } +polkadot-availability-distribution = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev" } +polkadot-node-core-approval-voting = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev" } +polkadot-node-core-pvf = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev" } +polkadot-node-core-backing = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev" } +polkadot-node-core-dispute-coordinator = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev" } +polkadot-node-core-runtime-api = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev" } +polkadot-node-core-bitfield-signing = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev" } +polkadot-node-core-provisioner = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev" } +polkadot-node-core-parachains-inherent = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev" } +polkadot-node-core-chain-api = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev" } +polkadot-node-core-chain-selection = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev" } +polkadot-node-core-candidate-validation = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev" } +polkadot-node-core-av-store = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev" } +polkadot-node-subsystem = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev" } +polkadot-service = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev" } +polkadot-node-metrics = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev" } +#metered-channel = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev" } +#polkadot-overseer-gen-proc-macro = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev" } +#polkadot-overseer-gen = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev" } +polkadot-overseer = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev" } +polkadot-node-collation-generation = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev" } +polkadot-node-primitives = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev" } +polkadot-runtime = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev" } +polkadot-test-runtime = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev" } +slot-range-helper = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev" } +polkadot-runtime-common = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev" } +polkadot-runtime-parachains = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev" } +polkadot-erasure-coding = { git = "https://github.com/mangata-finance//polkadot", branch = "mangata-dev" } # # patch generated by ./scripts/dev_manifest.sh # [patch."https://github.com/mangata-finance/substrate"] -# pallet-authorship = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# pallet-bags-list = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# pallet-transaction-payment-rpc-runtime-api = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# pallet-transaction-payment-rpc = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# pallet-transaction-payment = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# frame-try-runtime = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# frame-system-rpc-runtime-api = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# frame-system = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# pallet-beefy = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# pallet-membership = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# frame-benchmarking = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# pallet-identity = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# pallet-session = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# pallet-aura = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# pallet-bounties = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# pallet-balances = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# pallet-authority-discovery = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# pallet-tips = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# pallet-election-provider-multi-phase = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# pallet-beefy-mmr = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# beefy-merkle-tree = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# pallet-scheduler = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# pallet-multisig = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# frame-executive = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# pallet-im-online = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# pallet-treasury = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# pallet-utility = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# pallet-sudo = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# pallet-offences = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# pallet-democracy = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# pallet-grandpa = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# frame-election-provider-support = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# pallet-collective = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# pallet-mmr-rpc = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# pallet-mmr = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# pallet-mmr-primitives = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# frame-support = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# frame-support-procedural-tools-derive = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# frame-support-procedural-tools = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# frame-support-procedural = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# pallet-nicks = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# pallet-staking = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# pallet-staking-reward-curve = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# pallet-society = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# pallet-indices = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# pallet-babe = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# pallet-timestamp = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# pallet-elections-phragmen = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# pallet-proxy = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# pallet-vesting = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# pallet-vesting-mangata = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sc-informant = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sc-finality-grandpa-rpc = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sc-finality-grandpa = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# beefy-gadget-rpc = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# beefy-gadget = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sc-executor-wasmtime = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sc-executor-common = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sc-executor-wasmi = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sc-executor = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sc-network-gossip = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sc-transaction-pool-api = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sc-transaction-pool = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sc-tracing-proc-macro = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sc-tracing = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sc-client-db = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sc-sync-state-rpc = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sc-network = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sc-authority-discovery = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sc-utils = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sc-block-builder-ver = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sc-keystore = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sc-rpc-server = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sc-client-api = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sc-rpc = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sc-service = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sc-basic-authorship-ver = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sc-block-builder = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sc-rpc-api = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sc-chain-spec-derive = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sc-chain-spec = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sc-proposer-metrics = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sc-peerset = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sc-basic-authorship = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sc-offchain = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sc-state-db = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sc-allocator = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sc-consensus = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sc-consensus-aura = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sc-consensus-uncles = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sc-consensus-epochs = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sc-consensus-slots = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sc-consensus-babe-rpc = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sc-consensus-babe = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sc-cli = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sc-telemetry = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# fork-tree = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# substrate-wasm-builder = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# try-runtime-cli = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# frame-benchmarking-cli = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# substrate-frame-rpc-system = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# remote-externalities = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# substrate-build-script-utils = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# substrate-prometheus-endpoint = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# substrate-test-client = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-panic-handler = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-inherents = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-authorship = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-storage = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-std = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-finality-grandpa = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# beefy-primitives = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-version-proc-macro = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-version = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-transaction-pool = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-ver = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-tracing = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-database = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-debug-derive = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-session = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# extrinsic-shuffler = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# ver-api = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-core-hashing-proc-macro = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-core-hashing = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-core = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-keyring = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-authority-discovery = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-tasks = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-runtime-interface-proc-macro = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-runtime-interface = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-arithmetic = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-keystore = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-api-proc-macro = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-api = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-rpc = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-maybe-compressed-blob = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-transaction-storage-proof = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-state-machine = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-block-builder = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-wasm-interface = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-npos-elections = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-npos-elections-solution-type = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-application-crypto = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-serializer = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-offchain = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-staking = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-trie = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-blockchain = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-externalities = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-consensus = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-consensus-aura = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-consensus-slots = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-consensus-vrf = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-consensus-babe = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-timestamp = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-runtime = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-io = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } +# pallet-authorship = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# pallet-bags-list = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# pallet-transaction-payment-rpc-runtime-api = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# pallet-transaction-payment-rpc = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# pallet-transaction-payment = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# frame-try-runtime = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# frame-system-rpc-runtime-api = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# frame-system = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# pallet-beefy = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# pallet-membership = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# frame-benchmarking = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# pallet-identity = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# pallet-session = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# pallet-aura = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# pallet-bounties = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# pallet-balances = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# pallet-authority-discovery = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# pallet-tips = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# pallet-election-provider-multi-phase = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# pallet-beefy-mmr = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# beefy-merkle-tree = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# pallet-scheduler = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# pallet-multisig = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# frame-executive = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# pallet-im-online = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# pallet-treasury = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# pallet-utility = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# pallet-sudo = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# pallet-offences = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# pallet-democracy = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# pallet-grandpa = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# frame-election-provider-support = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# pallet-collective = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# pallet-mmr-rpc = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# pallet-mmr = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# pallet-mmr-primitives = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# frame-support = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# frame-support-procedural-tools-derive = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# frame-support-procedural-tools = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# frame-support-procedural = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# pallet-nicks = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# pallet-staking = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# pallet-staking-reward-curve = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# pallet-society = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# pallet-indices = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# pallet-babe = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# pallet-timestamp = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# pallet-elections-phragmen = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# pallet-proxy = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# pallet-vesting = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# pallet-vesting-mangata = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sc-informant = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sc-finality-grandpa-rpc = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sc-finality-grandpa = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# beefy-gadget-rpc = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# beefy-gadget = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sc-executor-wasmtime = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sc-executor-common = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sc-executor-wasmi = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sc-executor = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sc-network-gossip = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sc-transaction-pool-api = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sc-transaction-pool = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sc-tracing-proc-macro = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sc-tracing = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sc-client-db = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sc-sync-state-rpc = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sc-network = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sc-authority-discovery = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sc-utils = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sc-block-builder-ver = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sc-keystore = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sc-rpc-server = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sc-client-api = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sc-rpc = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sc-service = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sc-basic-authorship-ver = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sc-block-builder = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sc-rpc-api = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sc-chain-spec-derive = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sc-chain-spec = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sc-proposer-metrics = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sc-peerset = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sc-basic-authorship = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sc-offchain = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sc-state-db = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sc-allocator = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sc-consensus = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sc-consensus-aura = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sc-consensus-uncles = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sc-consensus-epochs = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sc-consensus-slots = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sc-consensus-babe-rpc = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sc-consensus-babe = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sc-cli = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sc-telemetry = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# fork-tree = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# substrate-wasm-builder = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# try-runtime-cli = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# frame-benchmarking-cli = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# substrate-frame-rpc-system = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# remote-externalities = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# substrate-build-script-utils = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# substrate-prometheus-endpoint = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# substrate-test-client = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-panic-handler = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-inherents = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-authorship = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-storage = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-std = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-finality-grandpa = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# beefy-primitives = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-version-proc-macro = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-version = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-transaction-pool = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-ver = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-tracing = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-database = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-debug-derive = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-session = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# extrinsic-shuffler = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# ver-api = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-core-hashing-proc-macro = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-core-hashing = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-core = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-keyring = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-authority-discovery = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-tasks = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-runtime-interface-proc-macro = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-runtime-interface = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-arithmetic = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-keystore = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-api-proc-macro = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-api = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-rpc = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-maybe-compressed-blob = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-transaction-storage-proof = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-state-machine = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-block-builder = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-wasm-interface = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-npos-elections = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-npos-elections-solution-type = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-application-crypto = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-serializer = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-offchain = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-staking = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-trie = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-blockchain = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-externalities = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-consensus = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-consensus-aura = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-consensus-slots = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-consensus-vrf = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-consensus-babe = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-timestamp = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-runtime = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-io = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } # # patch generated by ./scripts/dev_manifest.sh # [patch."https://github.com/paritytech/substrate"] -# pallet-authorship = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# pallet-bags-list = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# pallet-transaction-payment-rpc-runtime-api = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# pallet-transaction-payment-rpc = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# pallet-transaction-payment = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# frame-try-runtime = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# frame-system-rpc-runtime-api = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# frame-system = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# pallet-beefy = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# pallet-membership = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# frame-benchmarking = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# pallet-identity = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# pallet-session = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# pallet-aura = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# pallet-bounties = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# pallet-balances = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# pallet-authority-discovery = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# pallet-tips = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# pallet-election-provider-multi-phase = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# pallet-beefy-mmr = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# beefy-merkle-tree = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# pallet-scheduler = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# pallet-multisig = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# frame-executive = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# pallet-im-online = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# pallet-treasury = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# pallet-utility = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# pallet-sudo = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# pallet-offences = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# pallet-democracy = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# pallet-grandpa = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# frame-election-provider-support = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# pallet-collective = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# pallet-mmr-rpc = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# pallet-mmr = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# pallet-mmr-primitives = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# frame-support = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# frame-support-procedural-tools-derive = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# frame-support-procedural-tools = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# frame-support-procedural = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# pallet-nicks = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# pallet-staking = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# pallet-staking-reward-curve = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# pallet-society = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# pallet-indices = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# pallet-babe = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# pallet-timestamp = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# pallet-elections-phragmen = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# pallet-proxy = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# pallet-vesting = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# pallet-vesting-mangata = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sc-informant = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sc-finality-grandpa-rpc = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sc-finality-grandpa = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# beefy-gadget-rpc = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# beefy-gadget = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sc-executor-wasmtime = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sc-executor-common = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sc-executor-wasmi = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sc-executor = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sc-network-gossip = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sc-transaction-pool-api = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sc-transaction-pool = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sc-tracing-proc-macro = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sc-tracing = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sc-client-db = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sc-sync-state-rpc = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sc-network = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sc-authority-discovery = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sc-utils = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sc-block-builder-ver = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sc-keystore = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sc-rpc-server = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sc-client-api = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sc-rpc = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sc-service = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sc-basic-authorship-ver = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sc-block-builder = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sc-rpc-api = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sc-chain-spec-derive = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sc-chain-spec = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sc-proposer-metrics = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sc-peerset = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sc-basic-authorship = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sc-offchain = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sc-state-db = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sc-allocator = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sc-consensus = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sc-consensus-aura = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sc-consensus-uncles = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sc-consensus-epochs = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sc-consensus-slots = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sc-consensus-babe-rpc = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sc-consensus-babe = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sc-cli = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sc-telemetry = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# fork-tree = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# substrate-wasm-builder = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# try-runtime-cli = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# frame-benchmarking-cli = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# substrate-frame-rpc-system = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# remote-externalities = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# substrate-build-script-utils = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# substrate-prometheus-endpoint = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# substrate-test-client = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-panic-handler = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-inherents = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-authorship = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-storage = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-std = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-finality-grandpa = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# beefy-primitives = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-version-proc-macro = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-version = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-transaction-pool = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-ver = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-tracing = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-database = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-debug-derive = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-session = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# extrinsic-shuffler = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# ver-api = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-core-hashing-proc-macro = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-core-hashing = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-core = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-keyring = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-authority-discovery = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-tasks = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-runtime-interface-proc-macro = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-runtime-interface = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-arithmetic = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-keystore = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-api-proc-macro = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-api = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-rpc = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-maybe-compressed-blob = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-transaction-storage-proof = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-state-machine = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-block-builder = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-wasm-interface = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-npos-elections = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-npos-elections-solution-type = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-application-crypto = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-serializer = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-offchain = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-staking = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-trie = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-blockchain = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-externalities = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-consensus = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-consensus-aura = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-consensus-slots = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-consensus-vrf = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-consensus-babe = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-timestamp = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-runtime = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-io = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } +# pallet-authorship = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# pallet-bags-list = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# pallet-transaction-payment-rpc-runtime-api = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# pallet-transaction-payment-rpc = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# pallet-transaction-payment = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# frame-try-runtime = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# frame-system-rpc-runtime-api = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# frame-system = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# pallet-beefy = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# pallet-membership = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# frame-benchmarking = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# pallet-identity = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# pallet-session = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# pallet-aura = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# pallet-bounties = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# pallet-balances = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# pallet-authority-discovery = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# pallet-tips = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# pallet-election-provider-multi-phase = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# pallet-beefy-mmr = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# beefy-merkle-tree = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# pallet-scheduler = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# pallet-multisig = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# frame-executive = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# pallet-im-online = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# pallet-treasury = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# pallet-utility = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# pallet-sudo = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# pallet-offences = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# pallet-democracy = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# pallet-grandpa = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# frame-election-provider-support = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# pallet-collective = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# pallet-mmr-rpc = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# pallet-mmr = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# pallet-mmr-primitives = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# frame-support = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# frame-support-procedural-tools-derive = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# frame-support-procedural-tools = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# frame-support-procedural = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# pallet-nicks = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# pallet-staking = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# pallet-staking-reward-curve = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# pallet-society = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# pallet-indices = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# pallet-babe = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# pallet-timestamp = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# pallet-elections-phragmen = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# pallet-proxy = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# pallet-vesting = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# pallet-vesting-mangata = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sc-informant = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sc-finality-grandpa-rpc = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sc-finality-grandpa = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# beefy-gadget-rpc = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# beefy-gadget = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sc-executor-wasmtime = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sc-executor-common = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sc-executor-wasmi = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sc-executor = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sc-network-gossip = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sc-transaction-pool-api = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sc-transaction-pool = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sc-tracing-proc-macro = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sc-tracing = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sc-client-db = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sc-sync-state-rpc = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sc-network = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sc-authority-discovery = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sc-utils = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sc-block-builder-ver = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sc-keystore = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sc-rpc-server = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sc-client-api = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sc-rpc = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sc-service = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sc-basic-authorship-ver = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sc-block-builder = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sc-rpc-api = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sc-chain-spec-derive = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sc-chain-spec = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sc-proposer-metrics = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sc-peerset = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sc-basic-authorship = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sc-offchain = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sc-state-db = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sc-allocator = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sc-consensus = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sc-consensus-aura = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sc-consensus-uncles = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sc-consensus-epochs = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sc-consensus-slots = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sc-consensus-babe-rpc = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sc-consensus-babe = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sc-cli = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sc-telemetry = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# fork-tree = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# substrate-wasm-builder = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# try-runtime-cli = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# frame-benchmarking-cli = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# substrate-frame-rpc-system = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# remote-externalities = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# substrate-build-script-utils = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# substrate-prometheus-endpoint = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# substrate-test-client = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-panic-handler = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-inherents = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-authorship = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-storage = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-std = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-finality-grandpa = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# beefy-primitives = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-version-proc-macro = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-version = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-transaction-pool = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-ver = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-tracing = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-database = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-debug-derive = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-session = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# extrinsic-shuffler = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# ver-api = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-core-hashing-proc-macro = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-core-hashing = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-core = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-keyring = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-authority-discovery = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-tasks = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-runtime-interface-proc-macro = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-runtime-interface = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-arithmetic = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-keystore = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-api-proc-macro = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-api = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-rpc = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-maybe-compressed-blob = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-transaction-storage-proof = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-state-machine = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-block-builder = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-wasm-interface = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-npos-elections = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-npos-elections-solution-type = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-application-crypto = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-serializer = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-offchain = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-staking = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-trie = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-blockchain = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-externalities = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-consensus = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-consensus-aura = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-consensus-slots = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-consensus-vrf = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-consensus-babe = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-timestamp = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-runtime = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-io = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } # # patch generated by ./scripts/dev_manifest.sh # [patch."https://github.com/PureStake/substrate"] -# pallet-authorship = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# pallet-bags-list = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# pallet-transaction-payment-rpc-runtime-api = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# pallet-transaction-payment-rpc = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# pallet-transaction-payment = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# frame-try-runtime = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# frame-system-rpc-runtime-api = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# frame-system = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# pallet-beefy = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# pallet-membership = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# frame-benchmarking = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# pallet-identity = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# pallet-session = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# pallet-aura = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# pallet-bounties = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# pallet-balances = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# pallet-authority-discovery = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# pallet-tips = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# pallet-election-provider-multi-phase = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# pallet-beefy-mmr = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# beefy-merkle-tree = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# pallet-scheduler = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# pallet-multisig = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# frame-executive = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# pallet-im-online = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# pallet-treasury = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# pallet-utility = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# pallet-sudo = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# pallet-offences = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# pallet-democracy = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# pallet-grandpa = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# frame-election-provider-support = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# pallet-collective = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# pallet-mmr-rpc = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# pallet-mmr = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# pallet-mmr-primitives = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# frame-support = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# frame-support-procedural-tools-derive = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# frame-support-procedural-tools = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# frame-support-procedural = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# pallet-nicks = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# pallet-staking = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# pallet-staking-reward-curve = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# pallet-society = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# pallet-indices = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# pallet-babe = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# pallet-timestamp = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# pallet-elections-phragmen = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# pallet-proxy = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# pallet-vesting = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# pallet-vesting-mangata = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sc-informant = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sc-finality-grandpa-rpc = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sc-finality-grandpa = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# beefy-gadget-rpc = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# beefy-gadget = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sc-executor-wasmtime = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sc-executor-common = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sc-executor-wasmi = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sc-executor = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sc-network-gossip = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sc-transaction-pool-api = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sc-transaction-pool = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sc-tracing-proc-macro = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sc-tracing = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sc-client-db = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sc-sync-state-rpc = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sc-network = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sc-authority-discovery = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sc-utils = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sc-block-builder-ver = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sc-keystore = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sc-rpc-server = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sc-client-api = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sc-rpc = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sc-service = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sc-basic-authorship-ver = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sc-block-builder = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sc-rpc-api = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sc-chain-spec-derive = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sc-chain-spec = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sc-proposer-metrics = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sc-peerset = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sc-basic-authorship = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sc-offchain = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sc-state-db = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sc-allocator = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sc-consensus = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sc-consensus-aura = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sc-consensus-uncles = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sc-consensus-epochs = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sc-consensus-slots = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sc-consensus-babe-rpc = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sc-consensus-babe = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sc-cli = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sc-telemetry = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# fork-tree = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# substrate-wasm-builder = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# try-runtime-cli = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# frame-benchmarking-cli = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# substrate-frame-rpc-system = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# remote-externalities = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# substrate-build-script-utils = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# substrate-prometheus-endpoint = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# substrate-test-client = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-panic-handler = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-inherents = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-authorship = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-storage = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-std = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-finality-grandpa = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# beefy-primitives = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-version-proc-macro = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-version = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-transaction-pool = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-ver = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-tracing = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-database = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-debug-derive = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-session = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# extrinsic-shuffler = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# ver-api = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-core-hashing-proc-macro = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-core-hashing = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-core = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-keyring = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-authority-discovery = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-tasks = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-runtime-interface-proc-macro = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-runtime-interface = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-arithmetic = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-keystore = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-api-proc-macro = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-api = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-rpc = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-maybe-compressed-blob = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-transaction-storage-proof = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-state-machine = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-block-builder = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-wasm-interface = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-npos-elections = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-npos-elections-solution-type = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-application-crypto = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-serializer = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-offchain = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-staking = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-trie = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-blockchain = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-externalities = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-consensus = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-consensus-aura = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-consensus-slots = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-consensus-vrf = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-consensus-babe = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-timestamp = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-runtime = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } -# sp-io = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev-v0.9.24" } +# pallet-authorship = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# pallet-bags-list = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# pallet-transaction-payment-rpc-runtime-api = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# pallet-transaction-payment-rpc = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# pallet-transaction-payment = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# frame-try-runtime = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# frame-system-rpc-runtime-api = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# frame-system = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# pallet-beefy = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# pallet-membership = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# frame-benchmarking = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# pallet-identity = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# pallet-session = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# pallet-aura = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# pallet-bounties = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# pallet-balances = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# pallet-authority-discovery = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# pallet-tips = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# pallet-election-provider-multi-phase = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# pallet-beefy-mmr = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# beefy-merkle-tree = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# pallet-scheduler = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# pallet-multisig = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# frame-executive = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# pallet-im-online = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# pallet-treasury = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# pallet-utility = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# pallet-sudo = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# pallet-offences = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# pallet-democracy = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# pallet-grandpa = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# frame-election-provider-support = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# pallet-collective = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# pallet-mmr-rpc = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# pallet-mmr = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# pallet-mmr-primitives = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# frame-support = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# frame-support-procedural-tools-derive = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# frame-support-procedural-tools = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# frame-support-procedural = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# pallet-nicks = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# pallet-staking = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# pallet-staking-reward-curve = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# pallet-society = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# pallet-indices = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# pallet-babe = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# pallet-timestamp = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# pallet-elections-phragmen = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# pallet-proxy = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# pallet-vesting = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# pallet-vesting-mangata = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sc-informant = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sc-finality-grandpa-rpc = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sc-finality-grandpa = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# beefy-gadget-rpc = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# beefy-gadget = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sc-executor-wasmtime = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sc-executor-common = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sc-executor-wasmi = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sc-executor = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sc-network-gossip = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sc-transaction-pool-api = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sc-transaction-pool = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sc-tracing-proc-macro = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sc-tracing = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sc-client-db = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sc-sync-state-rpc = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sc-network = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sc-authority-discovery = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sc-utils = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sc-block-builder-ver = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sc-keystore = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sc-rpc-server = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sc-client-api = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sc-rpc = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sc-service = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sc-basic-authorship-ver = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sc-block-builder = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sc-rpc-api = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sc-chain-spec-derive = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sc-chain-spec = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sc-proposer-metrics = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sc-peerset = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sc-basic-authorship = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sc-offchain = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sc-state-db = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sc-allocator = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sc-consensus = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sc-consensus-aura = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sc-consensus-uncles = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sc-consensus-epochs = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sc-consensus-slots = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sc-consensus-babe-rpc = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sc-consensus-babe = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sc-cli = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sc-telemetry = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# fork-tree = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# substrate-wasm-builder = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# try-runtime-cli = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# frame-benchmarking-cli = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# substrate-frame-rpc-system = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# remote-externalities = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# substrate-build-script-utils = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# substrate-prometheus-endpoint = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# substrate-test-client = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-panic-handler = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-inherents = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-authorship = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-storage = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-std = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-finality-grandpa = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# beefy-primitives = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-version-proc-macro = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-version = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-transaction-pool = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-ver = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-tracing = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-database = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-debug-derive = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-session = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# extrinsic-shuffler = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# ver-api = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-core-hashing-proc-macro = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-core-hashing = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-core = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-keyring = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-authority-discovery = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-tasks = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-runtime-interface-proc-macro = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-runtime-interface = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-arithmetic = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-keystore = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-api-proc-macro = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-api = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-rpc = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-maybe-compressed-blob = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-transaction-storage-proof = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-state-machine = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-block-builder = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-wasm-interface = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-npos-elections = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-npos-elections-solution-type = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-application-crypto = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-serializer = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-offchain = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-staking = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-trie = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-blockchain = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-externalities = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-consensus = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-consensus-aura = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-consensus-slots = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-consensus-vrf = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-consensus-babe = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-timestamp = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-runtime = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } +# sp-io = { git = "https://github.com/mangata-finance//substrate", branch = "mangata-dev" } # patch generated by ./scripts/dev_manifest.sh #[patch."https://github.com/mangata-finance/snowbridge"] -#artemis-asset = { git = "https://github.com/mangata-finance//snowbridge", branch = "mangata-dev-v0.9.24" } -#artemis-erc20-app = { git = "https://github.com/mangata-finance//snowbridge", branch = "mangata-dev-v0.9.24" } -#pallet-bridge = { git = "https://github.com/mangata-finance//snowbridge", branch = "mangata-dev-v0.9.24" } -#artemis-eth-app = { git = "https://github.com/mangata-finance//snowbridge", branch = "mangata-dev-v0.9.24" } -#pallet-verifier = { git = "https://github.com/mangata-finance//snowbridge", branch = "mangata-dev-v0.9.24" } -#artemis-core = { git = "https://github.com/mangata-finance//snowbridge", branch = "mangata-dev-v0.9.24" } -#artemis-ethereum = { git = "https://github.com/mangata-finance//snowbridge", branch = "mangata-dev-v0.9.24" } +#artemis-asset = { git = "https://github.com/mangata-finance//snowbridge", branch = "mangata-dev" } +#artemis-erc20-app = { git = "https://github.com/mangata-finance//snowbridge", branch = "mangata-dev" } +#pallet-bridge = { git = "https://github.com/mangata-finance//snowbridge", branch = "mangata-dev" } +#artemis-eth-app = { git = "https://github.com/mangata-finance//snowbridge", branch = "mangata-dev" } +#pallet-verifier = { git = "https://github.com/mangata-finance//snowbridge", branch = "mangata-dev" } +#artemis-core = { git = "https://github.com/mangata-finance//snowbridge", branch = "mangata-dev" } +#artemis-ethereum = { git = "https://github.com/mangata-finance//snowbridge", branch = "mangata-dev" } # patch generated by ./scripts/dev_manifest.sh #[patch."https://github.com/mangata-finance/moonbeam"] -#parachain-staking = { git = "https://github.com/mangata-finance//moonbeam", branch = "mangata-dev-v0.9.24" } +#parachain-staking = { git = "https://github.com/mangata-finance//moonbeam", branch = "mangata-dev" } # parachain-staking = { path = "../moonbeam/pallets/parachain-staking" } #[patch."https://github.com/mangata-finance/crowdloan-rewards"] -#pallet-crowdloan-rewards = { git = "https://github.com/mangata-finance//crowdloan-rewards", branch = "mangata-dev-v0.9.24" } +#pallet-crowdloan-rewards = { git = "https://github.com/mangata-finance//crowdloan-rewards", branch = "mangata-dev" } # pallet-crowdloan-rewards = { path = "../crowdloan-rewards/" } diff --git a/frame/transaction-payment-mangata/Cargo.toml b/frame/transaction-payment-mangata/Cargo.toml new file mode 100644 index 0000000000000..987750b1b2d6a --- /dev/null +++ b/frame/transaction-payment-mangata/Cargo.toml @@ -0,0 +1,45 @@ +[package] +name = "pallet-transaction-payment-mangata" +version = "4.0.0-dev" +authors = ["Parity Technologies "] +edition = "2021" +license = "Apache-2.0" +homepage = "https://substrate.io" +repository = "https://github.com/paritytech/substrate/" +description = "FRAME pallet to manage transaction payments" +readme = "README.md" + +[package.metadata.docs.rs] +targets = ["x86_64-unknown-linux-gnu"] + +[dependencies] +codec = { package = "parity-scale-codec", version = "3.0.0", default-features = false, features = [ + "derive", +] } +scale-info = { version = "2.1.1", default-features = false, features = ["derive"] } +serde = { version = "1.0.136", optional = true } +frame-support = { version = "4.0.0-dev", default-features = false, path = "../support" } +frame-system = { version = "4.0.0-dev", default-features = false, path = "../system" } +sp-core = { version = "6.0.0", default-features = false, path = "../../primitives/core" } +sp-io = { version = "6.0.0", default-features = false, path = "../../primitives/io" } +sp-runtime = { version = "6.0.0", default-features = false, path = "../../primitives/runtime" } +sp-std = { version = "4.0.0", default-features = false, path = "../../primitives/std" } + +[dev-dependencies] +serde_json = "1.0.79" +pallet-balances = { version = "4.0.0-dev", path = "../balances" } + +[features] +default = ["std"] +std = [ + "codec/std", + "frame-support/std", + "frame-system/std", + "scale-info/std", + "serde", + "sp-core/std", + "sp-io/std", + "sp-runtime/std", + "sp-std/std", +] +try-runtime = ["frame-support/try-runtime"] diff --git a/frame/transaction-payment-mangata/README.md b/frame/transaction-payment-mangata/README.md new file mode 100644 index 0000000000000..bf114246e60fa --- /dev/null +++ b/frame/transaction-payment-mangata/README.md @@ -0,0 +1,16 @@ +# Transaction Payment Pallet + +This pallet provides the basic logic needed to pay the absolute minimum amount needed for a +transaction to be included. This includes: + - _weight fee_: A fee proportional to amount of weight a transaction consumes. + - _length fee_: A fee proportional to the encoded length of the transaction. + - _tip_: An optional tip. Tip increases the priority of the transaction, giving it a higher + chance to be included by the transaction queue. + +Additionally, this pallet allows one to configure: + - The mapping between one unit of weight to one unit of fee via [`Config::WeightToFee`]. + - A means of updating the fee for the next block, via defining a multiplier, based on the + final state of the chain at the end of the previous block. This can be configured via + [`Config::FeeMultiplierUpdate`] + +License: Apache-2.0 diff --git a/frame/transaction-payment-mangata/asset-tx-payment/Cargo.toml b/frame/transaction-payment-mangata/asset-tx-payment/Cargo.toml new file mode 100644 index 0000000000000..e2ee594b2f0c5 --- /dev/null +++ b/frame/transaction-payment-mangata/asset-tx-payment/Cargo.toml @@ -0,0 +1,54 @@ +[package] +name = "pallet-asset-tx-payment-mangata" +version = "4.0.0-dev" +authors = ["Parity Technologies "] +edition = "2021" +license = "Apache-2.0" +homepage = "https://substrate.io" +repository = "https://github.com/paritytech/substrate/" +description = "pallet to manage transaction payments in assets" +readme = "README.md" + +[package.metadata.docs.rs] +targets = ["x86_64-unknown-linux-gnu"] + +[dependencies] +# Substrate dependencies +sp-core = { version = "6.0.0", default-features = false, path = "../../../primitives/core" } +sp-io = { version = "6.0.0", default-features = false, path = "../../../primitives/io" } +sp-runtime = { version = "6.0.0", default-features = false, path = "../../../primitives/runtime" } +sp-std = { version = "4.0.0", default-features = false, path = "../../../primitives/std" } + +frame-support = { version = "4.0.0-dev", default-features = false, path = "../../support" } +frame-system = { version = "4.0.0-dev", default-features = false, path = "../../system" } +pallet-transaction-payment-mangata = { version = "4.0.0-dev", default-features = false, path = ".." } + +# Other dependencies +codec = { package = "parity-scale-codec", version = "3.0.0", default-features = false, features = ["derive"] } +scale-info = { version = "2.1.1", default-features = false, features = ["derive"] } +serde = { version = "1.0.136", optional = true } + +[dev-dependencies] +serde_json = "1.0.79" + +sp-storage = { version = "6.0.0", default-features = false, path = "../../../primitives/storage" } + +pallet-assets = { version = "4.0.0-dev", path = "../../assets" } +pallet-authorship = { version = "4.0.0-dev", path = "../../authorship" } +pallet-balances = { version = "4.0.0-dev", path = "../../balances" } + + +[features] +default = ["std"] +std = [ + "serde", + "codec/std", + "sp-std/std", + "sp-runtime/std", + "frame-support/std", + "frame-system/std", + "sp-io/std", + "sp-core/std", + "pallet-transaction-payment-mangata/std", +] +try-runtime = ["frame-support/try-runtime"] diff --git a/frame/transaction-payment-mangata/asset-tx-payment/README.md b/frame/transaction-payment-mangata/asset-tx-payment/README.md new file mode 100644 index 0000000000000..beda765101f0e --- /dev/null +++ b/frame/transaction-payment-mangata/asset-tx-payment/README.md @@ -0,0 +1,21 @@ +# pallet-asset-tx-payment + +## Asset Transaction Payment Pallet + +This pallet allows runtimes that include it to pay for transactions in assets other than the +native token of the chain. + +### Overview +It does this by extending transactions to include an optional `AssetId` that specifies the asset +to be used for payment (defaulting to the native token on `None`). It expects an +[`OnChargeAssetTransaction`] implementation analogously to [`pallet-transaction-payment-mangata`]. The +included [`FungiblesAdapter`] (implementing [`OnChargeAssetTransaction`]) determines the fee +amount by converting the fee calculated by [`pallet-transaction-payment-mangata`] into the desired +asset. + +### Integration +This pallet wraps FRAME's transaction payment pallet and functions as a replacement. This means +you should include both pallets in your `construct_runtime` macro, but only include this +pallet's [`SignedExtension`] ([`ChargeAssetTxPayment`]). + +License: Apache-2.0 diff --git a/frame/transaction-payment-mangata/asset-tx-payment/src/lib.rs b/frame/transaction-payment-mangata/asset-tx-payment/src/lib.rs new file mode 100644 index 0000000000000..43ca55e729cb6 --- /dev/null +++ b/frame/transaction-payment-mangata/asset-tx-payment/src/lib.rs @@ -0,0 +1,289 @@ +// Copyright (C) 2021-2022 Parity Technologies (UK) Ltd. +// SPDX-License-Identifier: Apache-2.0 + +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +//! # Asset Transaction Payment Pallet +//! +//! This pallet allows runtimes that include it to pay for transactions in assets other than the +//! main token of the chain. +//! +//! ## Overview + +//! It does this by extending transactions to include an optional `AssetId` that specifies the asset +//! to be used for payment (defaulting to the native token on `None`). It expects an +//! [`OnChargeAssetTransaction`] implementation analogously to [`pallet-transaction-payment-mangata`]. The +//! included [`FungiblesAdapter`] (implementing [`OnChargeAssetTransaction`]) determines the fee +//! amount by converting the fee calculated by [`pallet-transaction-payment-mangata`] into the desired +//! asset. +//! +//! ## Integration + +//! This pallet wraps FRAME's transaction payment pallet and functions as a replacement. This means +//! you should include both pallets in your `construct_runtime` macro, but only include this +//! pallet's [`SignedExtension`] ([`ChargeAssetTxPayment`]). + +#![cfg_attr(not(feature = "std"), no_std)] + +use sp_std::prelude::*; + +use codec::{Decode, Encode}; +use frame_support::{ + dispatch::DispatchResult, + traits::{ + tokens::{ + fungibles::{Balanced, CreditOf, Inspect}, + WithdrawConsequence, + }, + IsType, + }, + weights::{DispatchInfo, PostDispatchInfo}, + DefaultNoBound, +}; +use pallet_transaction_payment_mangata::OnChargeTransaction; +use scale_info::TypeInfo; +use sp_runtime::{ + traits::{DispatchInfoOf, Dispatchable, PostDispatchInfoOf, SignedExtension, Zero}, + transaction_validity::{ + InvalidTransaction, TransactionValidity, TransactionValidityError, ValidTransaction, + }, + FixedPointOperand, +}; + +#[cfg(test)] +mod tests; + +mod payment; +pub use payment::*; + +// Type aliases used for interaction with `OnChargeTransaction`. +pub(crate) type OnChargeTransactionOf = + ::OnChargeTransaction; +// Balance type alias. +pub(crate) type BalanceOf = as OnChargeTransaction>::Balance; +// Liquity info type alias. +pub(crate) type LiquidityInfoOf = + as OnChargeTransaction>::LiquidityInfo; + +// Type alias used for interaction with fungibles (assets). +// Balance type alias. +pub(crate) type AssetBalanceOf = + <::Fungibles as Inspect<::AccountId>>::Balance; +/// Asset id type alias. +pub(crate) type AssetIdOf = + <::Fungibles as Inspect<::AccountId>>::AssetId; + +// Type aliases used for interaction with `OnChargeAssetTransaction`. +// Balance type alias. +pub(crate) type ChargeAssetBalanceOf = + <::OnChargeAssetTransaction as OnChargeAssetTransaction>::Balance; +// Asset id type alias. +pub(crate) type ChargeAssetIdOf = + <::OnChargeAssetTransaction as OnChargeAssetTransaction>::AssetId; +// Liquity info type alias. +pub(crate) type ChargeAssetLiquidityOf = + <::OnChargeAssetTransaction as OnChargeAssetTransaction>::LiquidityInfo; + +/// Used to pass the initial payment info from pre- to post-dispatch. +#[derive(Encode, Decode, DefaultNoBound, TypeInfo)] +pub enum InitialPayment { + /// No initial fee was payed. + Nothing, + /// The initial fee was payed in the native currency. + Native(LiquidityInfoOf), + /// The initial fee was payed in an asset. + Asset(CreditOf), +} + +pub use pallet::*; + +#[frame_support::pallet] +pub mod pallet { + use super::*; + + #[pallet::config] + pub trait Config: frame_system::Config + pallet_transaction_payment_mangata::Config { + /// The fungibles instance used to pay for transactions in assets. + type Fungibles: Balanced; + /// The actual transaction charging logic that charges the fees. + type OnChargeAssetTransaction: OnChargeAssetTransaction; + } + + #[pallet::pallet] + #[pallet::generate_store(pub(super) trait Store)] + pub struct Pallet(_); +} + +/// Require the transactor pay for themselves and maybe include a tip to gain additional priority +/// in the queue. Allows paying via both `Currency` as well as `fungibles::Balanced`. +/// +/// Wraps the transaction logic in [`pallet_transaction_payment_mangata`] and extends it with assets. +/// An asset id of `None` falls back to the underlying transaction payment via the native currency. +#[derive(Encode, Decode, Clone, Eq, PartialEq, TypeInfo)] +#[scale_info(skip_type_params(T))] +pub struct ChargeAssetTxPayment { + #[codec(compact)] + tip: BalanceOf, + asset_id: Option>, +} + +impl ChargeAssetTxPayment +where + T::Call: Dispatchable, + AssetBalanceOf: Send + Sync + FixedPointOperand, + BalanceOf: Send + Sync + FixedPointOperand + IsType>, + ChargeAssetIdOf: Send + Sync, + CreditOf: IsType>, +{ + /// Utility constructor. Used only in client/factory code. + pub fn from(tip: BalanceOf, asset_id: Option>) -> Self { + Self { tip, asset_id } + } + + /// Fee withdrawal logic that dispatches to either `OnChargeAssetTransaction` or + /// `OnChargeTransaction`. + fn withdraw_fee( + &self, + who: &T::AccountId, + call: &T::Call, + info: &DispatchInfoOf, + len: usize, + ) -> Result<(BalanceOf, InitialPayment), TransactionValidityError> { + let fee = pallet_transaction_payment_mangata::Pallet::::compute_fee(len as u32, info, self.tip); + debug_assert!(self.tip <= fee, "tip should be included in the computed fee"); + if fee.is_zero() { + Ok((fee, InitialPayment::Nothing)) + } else if let Some(asset_id) = self.asset_id { + T::OnChargeAssetTransaction::withdraw_fee( + who, + call, + info, + asset_id, + fee.into(), + self.tip.into(), + ) + .map(|i| (fee, InitialPayment::Asset(i.into()))) + } else { + as OnChargeTransaction>::withdraw_fee( + who, call, info, fee, self.tip, + ) + .map(|i| (fee, InitialPayment::Native(i))) + .map_err(|_| -> TransactionValidityError { InvalidTransaction::Payment.into() }) + } + } +} + +impl sp_std::fmt::Debug for ChargeAssetTxPayment { + #[cfg(feature = "std")] + fn fmt(&self, f: &mut sp_std::fmt::Formatter) -> sp_std::fmt::Result { + write!(f, "ChargeAssetTxPayment<{:?}, {:?}>", self.tip, self.asset_id.encode()) + } + #[cfg(not(feature = "std"))] + fn fmt(&self, _: &mut sp_std::fmt::Formatter) -> sp_std::fmt::Result { + Ok(()) + } +} + +impl SignedExtension for ChargeAssetTxPayment +where + T::Call: Dispatchable, + AssetBalanceOf: Send + Sync + FixedPointOperand, + BalanceOf: Send + Sync + From + FixedPointOperand + IsType>, + ChargeAssetIdOf: Send + Sync, + CreditOf: IsType>, +{ + const IDENTIFIER: &'static str = "ChargeAssetTxPayment"; + type AccountId = T::AccountId; + type Call = T::Call; + type AdditionalSigned = (); + type Pre = ( + // tip + BalanceOf, + // who paid the fee + Self::AccountId, + // imbalance resulting from withdrawing the fee + InitialPayment, + ); + + fn additional_signed(&self) -> sp_std::result::Result<(), TransactionValidityError> { + Ok(()) + } + + fn validate( + &self, + who: &Self::AccountId, + call: &Self::Call, + info: &DispatchInfoOf, + len: usize, + ) -> TransactionValidity { + use pallet_transaction_payment_mangata::ChargeTransactionPayment; + let (fee, _) = self.withdraw_fee(who, call, info, len)?; + let priority = ChargeTransactionPayment::::get_priority(info, len, self.tip, fee); + Ok(ValidTransaction { priority, ..Default::default() }) + } + + fn pre_dispatch( + self, + who: &Self::AccountId, + call: &Self::Call, + info: &DispatchInfoOf, + len: usize, + ) -> Result { + let (_fee, initial_payment) = self.withdraw_fee(who, call, info, len)?; + Ok((self.tip, who.clone(), initial_payment)) + } + + fn post_dispatch( + pre: Option, + info: &DispatchInfoOf, + post_info: &PostDispatchInfoOf, + len: usize, + result: &DispatchResult, + ) -> Result<(), TransactionValidityError> { + if let Some((tip, who, initial_payment)) = pre { + match initial_payment { + InitialPayment::Native(already_withdrawn) => { + pallet_transaction_payment_mangata::ChargeTransactionPayment::::post_dispatch( + Some((tip, who, already_withdrawn)), + info, + post_info, + len, + result, + )?; + }, + InitialPayment::Asset(already_withdrawn) => { + let actual_fee = pallet_transaction_payment_mangata::Pallet::::compute_actual_fee( + len as u32, info, post_info, tip, + ); + T::OnChargeAssetTransaction::correct_and_deposit_fee( + &who, + info, + post_info, + actual_fee.into(), + tip.into(), + already_withdrawn.into(), + )?; + }, + InitialPayment::Nothing => { + // `actual_fee` should be zero here for any signed extrinsic. It would be + // non-zero here in case of unsigned extrinsics as they don't pay fees but + // `compute_actual_fee` is not aware of them. In both cases it's fine to just + // move ahead without adjusting the fee, though, so we do nothing. + debug_assert!(tip.is_zero(), "tip should be zero if initial fee was zero."); + }, + } + } + + Ok(()) + } +} diff --git a/frame/transaction-payment-mangata/asset-tx-payment/src/payment.rs b/frame/transaction-payment-mangata/asset-tx-payment/src/payment.rs new file mode 100644 index 0000000000000..394696cc18929 --- /dev/null +++ b/frame/transaction-payment-mangata/asset-tx-payment/src/payment.rs @@ -0,0 +1,165 @@ +// Copyright (C) 2021-2022 Parity Technologies (UK) Ltd. +// SPDX-License-Identifier: Apache-2.0 + +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +///! Traits and default implementation for paying transaction fees in assets. +use super::*; +use crate::Config; + +use codec::FullCodec; +use frame_support::{ + traits::{ + fungibles::{Balanced, CreditOf, Inspect}, + tokens::BalanceConversion, + }, + unsigned::TransactionValidityError, +}; +use scale_info::TypeInfo; +use sp_runtime::{ + traits::{ + AtLeast32BitUnsigned, DispatchInfoOf, MaybeSerializeDeserialize, One, PostDispatchInfoOf, + }, + transaction_validity::InvalidTransaction, +}; +use sp_std::{fmt::Debug, marker::PhantomData}; + +/// Handle withdrawing, refunding and depositing of transaction fees. +pub trait OnChargeAssetTransaction { + /// The underlying integer type in which fees are calculated. + type Balance: AtLeast32BitUnsigned + + FullCodec + + Copy + + MaybeSerializeDeserialize + + Debug + + Default + + TypeInfo; + /// The type used to identify the assets used for transaction payment. + type AssetId: FullCodec + Copy + MaybeSerializeDeserialize + Debug + Default + Eq + TypeInfo; + /// The type used to store the intermediate values between pre- and post-dispatch. + type LiquidityInfo; + + /// Before the transaction is executed the payment of the transaction fees needs to be secured. + /// + /// Note: The `fee` already includes the `tip`. + fn withdraw_fee( + who: &T::AccountId, + call: &T::Call, + dispatch_info: &DispatchInfoOf, + asset_id: Self::AssetId, + fee: Self::Balance, + tip: Self::Balance, + ) -> Result; + + /// After the transaction was executed the actual fee can be calculated. + /// This function should refund any overpaid fees and optionally deposit + /// the corrected amount. + /// + /// Note: The `fee` already includes the `tip`. + fn correct_and_deposit_fee( + who: &T::AccountId, + dispatch_info: &DispatchInfoOf, + post_info: &PostDispatchInfoOf, + corrected_fee: Self::Balance, + tip: Self::Balance, + already_withdrawn: Self::LiquidityInfo, + ) -> Result<(), TransactionValidityError>; +} + +/// Allows specifying what to do with the withdrawn asset fees. +pub trait HandleCredit> { + /// Implement to determine what to do with the withdrawn asset fees. + /// Default for `CreditOf` from the assets pallet is to burn and + /// decrease total issuance. + fn handle_credit(credit: CreditOf); +} + +/// Default implementation that just drops the credit according to the `OnDrop` in the underlying +/// imbalance type. +impl> HandleCredit for () { + fn handle_credit(_credit: CreditOf) {} +} + +/// Implements the asset transaction for a balance to asset converter (implementing +/// [`BalanceConversion`]) and a credit handler (implementing [`HandleCredit`]). +/// +/// The credit handler is given the complete fee in terms of the asset used for the transaction. +pub struct FungiblesAdapter(PhantomData<(CON, HC)>); + +/// Default implementation for a runtime instantiating this pallet, a balance to asset converter and +/// a credit handler. +impl OnChargeAssetTransaction for FungiblesAdapter +where + T: Config, + CON: BalanceConversion, AssetIdOf, AssetBalanceOf>, + HC: HandleCredit, + AssetIdOf: FullCodec + Copy + MaybeSerializeDeserialize + Debug + Default + Eq + TypeInfo, +{ + type Balance = BalanceOf; + type AssetId = AssetIdOf; + type LiquidityInfo = CreditOf; + + /// Withdraw the predicted fee from the transaction origin. + /// + /// Note: The `fee` already includes the `tip`. + fn withdraw_fee( + who: &T::AccountId, + _call: &T::Call, + _info: &DispatchInfoOf, + asset_id: Self::AssetId, + fee: Self::Balance, + _tip: Self::Balance, + ) -> Result { + // We don't know the precision of the underlying asset. Because the converted fee could be + // less than one (e.g. 0.5) but gets rounded down by integer division we introduce a minimum + // fee. + let min_converted_fee = if fee.is_zero() { Zero::zero() } else { One::one() }; + let converted_fee = CON::to_asset_balance(fee, asset_id) + .map_err(|_| TransactionValidityError::from(InvalidTransaction::Payment))? + .max(min_converted_fee); + let can_withdraw = + >::can_withdraw(asset_id, who, converted_fee); + if !matches!(can_withdraw, WithdrawConsequence::Success) { + return Err(InvalidTransaction::Payment.into()) + } + >::withdraw(asset_id, who, converted_fee) + .map_err(|_| TransactionValidityError::from(InvalidTransaction::Payment)) + } + + /// Hand the fee and the tip over to the `[HandleCredit]` implementation. + /// Since the predicted fee might have been too high, parts of the fee may be refunded. + /// + /// Note: The `corrected_fee` already includes the `tip`. + fn correct_and_deposit_fee( + who: &T::AccountId, + _dispatch_info: &DispatchInfoOf, + _post_info: &PostDispatchInfoOf, + corrected_fee: Self::Balance, + _tip: Self::Balance, + paid: Self::LiquidityInfo, + ) -> Result<(), TransactionValidityError> { + let min_converted_fee = if corrected_fee.is_zero() { Zero::zero() } else { One::one() }; + // Convert the corrected fee into the asset used for payment. + let converted_fee = CON::to_asset_balance(corrected_fee, paid.asset()) + .map_err(|_| -> TransactionValidityError { InvalidTransaction::Payment.into() })? + .max(min_converted_fee); + // Calculate how much refund we should return. + let (final_fee, refund) = paid.split(converted_fee); + // Refund to the account that paid the fees. If this fails, the account might have dropped + // below the existential balance. In that case we don't refund anything. + let _ = >::resolve(who, refund); + // Handle the final fee, e.g. by transferring to the block author or burning. + HC::handle_credit(final_fee); + Ok(()) + } +} diff --git a/frame/transaction-payment-mangata/asset-tx-payment/src/tests.rs b/frame/transaction-payment-mangata/asset-tx-payment/src/tests.rs new file mode 100644 index 0000000000000..9a3691cc1918c --- /dev/null +++ b/frame/transaction-payment-mangata/asset-tx-payment/src/tests.rs @@ -0,0 +1,732 @@ +// Copyright (C) 2021-2022 Parity Technologies (UK) Ltd. +// SPDX-License-Identifier: Apache-2.0 + +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +use super::*; +use crate as pallet_asset_tx_payment; + +use frame_support::{ + assert_ok, + pallet_prelude::*, + parameter_types, + traits::{fungibles::Mutate, ConstU32, ConstU64, ConstU8, FindAuthor}, + weights::{DispatchClass, DispatchInfo, PostDispatchInfo, Weight, WeightToFee as WeightToFeeT}, + ConsensusEngineId, +}; +use frame_system as system; +use frame_system::EnsureRoot; +use pallet_balances::Call as BalancesCall; +use pallet_transaction_payment_mangata::CurrencyAdapter; +use sp_core::H256; +use sp_runtime::{ + testing::Header, + traits::{BlakeTwo256, ConvertInto, IdentityLookup, SaturatedConversion, StaticLookup}, +}; +use std::cell::RefCell; + +type UncheckedExtrinsic = frame_system::mocking::MockUncheckedExtrinsic; +type Block = frame_system::mocking::MockBlock; +type Balance = u64; +type AccountId = u64; + +frame_support::construct_runtime!( + pub enum Runtime where + Block = Block, + NodeBlock = Block, + UncheckedExtrinsic = UncheckedExtrinsic, + { + System: system::{Pallet, Call, Config, Storage, Event}, + Balances: pallet_balances::{Pallet, Call, Storage, Config, Event}, + TransactionPayment: pallet_transaction_payment_mangata::{Pallet, Storage}, + Assets: pallet_assets::{Pallet, Call, Storage, Event}, + Authorship: pallet_authorship::{Pallet, Call, Storage}, + AssetTxPayment: pallet_asset_tx_payment::{Pallet}, + } +); + +const CALL: &::Call = + &Call::Balances(BalancesCall::transfer { dest: 2, value: 69 }); + +thread_local! { + static EXTRINSIC_BASE_WEIGHT: RefCell = RefCell::new(0); +} + +pub struct BlockWeights; +impl Get for BlockWeights { + fn get() -> frame_system::limits::BlockWeights { + frame_system::limits::BlockWeights::builder() + .base_block(0) + .for_class(DispatchClass::all(), |weights| { + weights.base_extrinsic = EXTRINSIC_BASE_WEIGHT.with(|v| *v.borrow()).into(); + }) + .for_class(DispatchClass::non_mandatory(), |weights| { + weights.max_total = 1024.into(); + }) + .build_or_panic() + } +} + +parameter_types! { + pub static WeightToFee: u64 = 1; + pub static TransactionByteFee: u64 = 1; +} + +impl frame_system::Config for Runtime { + type BaseCallFilter = frame_support::traits::Everything; + type BlockWeights = BlockWeights; + type BlockLength = (); + type DbWeight = (); + type Origin = Origin; + type Index = u64; + type BlockNumber = u64; + type Call = Call; + type Hash = H256; + type Hashing = BlakeTwo256; + type AccountId = AccountId; + type Lookup = IdentityLookup; + type Header = Header; + type Event = Event; + type BlockHashCount = ConstU64<250>; + type Version = (); + type PalletInfo = PalletInfo; + type AccountData = pallet_balances::AccountData; + type OnNewAccount = (); + type OnKilledAccount = (); + type SystemWeightInfo = (); + type SS58Prefix = (); + type OnSetCode = (); + type MaxConsumers = ConstU32<16>; +} + +parameter_types! { + pub const ExistentialDeposit: u64 = 10; +} + +impl pallet_balances::Config for Runtime { + type Balance = Balance; + type Event = Event; + type DustRemoval = (); + type ExistentialDeposit = ConstU64<10>; + type AccountStore = System; + type MaxLocks = (); + type WeightInfo = (); + type MaxReserves = ConstU32<50>; + type ReserveIdentifier = [u8; 8]; +} + +impl WeightToFeeT for WeightToFee { + type Balance = u64; + + fn weight_to_fee(weight: &Weight) -> Self::Balance { + Self::Balance::saturated_from(*weight).saturating_mul(WEIGHT_TO_FEE.with(|v| *v.borrow())) + } +} + +impl WeightToFeeT for TransactionByteFee { + type Balance = u64; + + fn weight_to_fee(weight: &Weight) -> Self::Balance { + Self::Balance::saturated_from(*weight) + .saturating_mul(TRANSACTION_BYTE_FEE.with(|v| *v.borrow())) + } +} + +impl pallet_transaction_payment_mangata::Config for Runtime { + type OnChargeTransaction = CurrencyAdapter; + type WeightToFee = WeightToFee; + type LengthToFee = TransactionByteFee; + type FeeMultiplierUpdate = (); + type OperationalFeeMultiplier = ConstU8<5>; +} + +impl pallet_assets::Config for Runtime { + type Event = Event; + type Balance = Balance; + type AssetId = u32; + type Currency = Balances; + type ForceOrigin = EnsureRoot; + type AssetDeposit = ConstU64<2>; + type AssetAccountDeposit = ConstU64<2>; + type MetadataDepositBase = ConstU64<0>; + type MetadataDepositPerByte = ConstU64<0>; + type ApprovalDeposit = ConstU64<0>; + type StringLimit = ConstU32<20>; + type Freezer = (); + type Extra = (); + type WeightInfo = (); +} + +pub struct HardcodedAuthor; +const BLOCK_AUTHOR: AccountId = 1234; +impl FindAuthor for HardcodedAuthor { + fn find_author<'a, I>(_: I) -> Option + where + I: 'a + IntoIterator, + { + Some(BLOCK_AUTHOR) + } +} + +impl pallet_authorship::Config for Runtime { + type FindAuthor = HardcodedAuthor; + type UncleGenerations = (); + type FilterUncle = (); + type EventHandler = (); +} + +pub struct CreditToBlockAuthor; +impl HandleCredit for CreditToBlockAuthor { + fn handle_credit(credit: CreditOf) { + if let Some(author) = pallet_authorship::Pallet::::author() { + // What to do in case paying the author fails (e.g. because `fee < min_balance`) + // default: drop the result which will trigger the `OnDrop` of the imbalance. + let _ = >::resolve(&author, credit); + } + } +} + +impl Config for Runtime { + type Fungibles = Assets; + type OnChargeAssetTransaction = FungiblesAdapter< + pallet_assets::BalanceToAssetBalance, + CreditToBlockAuthor, + >; +} + +pub struct ExtBuilder { + balance_factor: u64, + base_weight: u64, + byte_fee: u64, + weight_to_fee: u64, +} + +impl Default for ExtBuilder { + fn default() -> Self { + Self { balance_factor: 1, base_weight: 0, byte_fee: 1, weight_to_fee: 1 } + } +} + +impl ExtBuilder { + pub fn base_weight(mut self, base_weight: u64) -> Self { + self.base_weight = base_weight; + self + } + pub fn balance_factor(mut self, factor: u64) -> Self { + self.balance_factor = factor; + self + } + fn set_constants(&self) { + EXTRINSIC_BASE_WEIGHT.with(|v| *v.borrow_mut() = self.base_weight); + TRANSACTION_BYTE_FEE.with(|v| *v.borrow_mut() = self.byte_fee); + WEIGHT_TO_FEE.with(|v| *v.borrow_mut() = self.weight_to_fee); + } + pub fn build(self) -> sp_io::TestExternalities { + self.set_constants(); + let mut t = frame_system::GenesisConfig::default().build_storage::().unwrap(); + pallet_balances::GenesisConfig:: { + balances: if self.balance_factor > 0 { + vec![ + (1, 10 * self.balance_factor), + (2, 20 * self.balance_factor), + (3, 30 * self.balance_factor), + (4, 40 * self.balance_factor), + (5, 50 * self.balance_factor), + (6, 60 * self.balance_factor), + ] + } else { + vec![] + }, + } + .assimilate_storage(&mut t) + .unwrap(); + t.into() + } +} + +/// create a transaction info struct from weight. Handy to avoid building the whole struct. +pub fn info_from_weight(w: Weight) -> DispatchInfo { + // pays_fee: Pays::Yes -- class: DispatchClass::Normal + DispatchInfo { weight: w, ..Default::default() } +} + +fn post_info_from_weight(w: Weight) -> PostDispatchInfo { + PostDispatchInfo { actual_weight: Some(w), pays_fee: Default::default() } +} + +fn info_from_pays(p: Pays) -> DispatchInfo { + DispatchInfo { pays_fee: p, ..Default::default() } +} + +fn post_info_from_pays(p: Pays) -> PostDispatchInfo { + PostDispatchInfo { actual_weight: None, pays_fee: p } +} + +fn default_post_info() -> PostDispatchInfo { + PostDispatchInfo { actual_weight: None, pays_fee: Default::default() } +} + +#[test] +fn transaction_payment_in_native_possible() { + let balance_factor = 100; + ExtBuilder::default() + .balance_factor(balance_factor) + .base_weight(5) + .build() + .execute_with(|| { + let len = 10; + let pre = ChargeAssetTxPayment::::from(0, None) + .pre_dispatch(&1, CALL, &info_from_weight(5), len) + .unwrap(); + let initial_balance = 10 * balance_factor; + assert_eq!(Balances::free_balance(1), initial_balance - 5 - 5 - 10); + + assert_ok!(ChargeAssetTxPayment::::post_dispatch( + Some(pre), + &info_from_weight(5), + &default_post_info(), + len, + &Ok(()) + )); + assert_eq!(Balances::free_balance(1), initial_balance - 5 - 5 - 10); + + let pre = ChargeAssetTxPayment::::from(5 /* tipped */, None) + .pre_dispatch(&2, CALL, &info_from_weight(100), len) + .unwrap(); + let initial_balance_for_2 = 20 * balance_factor; + assert_eq!(Balances::free_balance(2), initial_balance_for_2 - 5 - 10 - 100 - 5); + + assert_ok!(ChargeAssetTxPayment::::post_dispatch( + Some(pre), + &info_from_weight(100), + &post_info_from_weight(50), + len, + &Ok(()) + )); + assert_eq!(Balances::free_balance(2), initial_balance_for_2 - 5 - 10 - 50 - 5); + }); +} + +#[test] +fn transaction_payment_in_asset_possible() { + let base_weight = 5; + let balance_factor = 100; + ExtBuilder::default() + .balance_factor(balance_factor) + .base_weight(base_weight) + .build() + .execute_with(|| { + // create the asset + let asset_id = 1; + let min_balance = 2; + assert_ok!(Assets::force_create( + Origin::root(), + asset_id, + 42, /* owner */ + true, /* is_sufficient */ + min_balance + )); + + // mint into the caller account + let caller = 1; + let beneficiary = ::Lookup::unlookup(caller); + let balance = 100; + assert_ok!(Assets::mint_into(asset_id, &beneficiary, balance)); + assert_eq!(Assets::balance(asset_id, caller), balance); + let weight = 5; + let len = 10; + // we convert the from weight to fee based on the ratio between asset min balance and + // existential deposit + let fee = (base_weight + weight + len as u64) * min_balance / ExistentialDeposit::get(); + let pre = ChargeAssetTxPayment::::from(0, Some(asset_id)) + .pre_dispatch(&caller, CALL, &info_from_weight(weight), len) + .unwrap(); + // assert that native balance is not used + assert_eq!(Balances::free_balance(caller), 10 * balance_factor); + // check that fee was charged in the given asset + assert_eq!(Assets::balance(asset_id, caller), balance - fee); + assert_eq!(Assets::balance(asset_id, BLOCK_AUTHOR), 0); + + assert_ok!(ChargeAssetTxPayment::::post_dispatch( + Some(pre), + &info_from_weight(weight), + &default_post_info(), + len, + &Ok(()) + )); + assert_eq!(Assets::balance(asset_id, caller), balance - fee); + // check that the block author gets rewarded + assert_eq!(Assets::balance(asset_id, BLOCK_AUTHOR), fee); + }); +} + +#[test] +fn transaction_payment_without_fee() { + let base_weight = 5; + let balance_factor = 100; + ExtBuilder::default() + .balance_factor(balance_factor) + .base_weight(base_weight) + .build() + .execute_with(|| { + // create the asset + let asset_id = 1; + let min_balance = 2; + assert_ok!(Assets::force_create( + Origin::root(), + asset_id, + 42, /* owner */ + true, /* is_sufficient */ + min_balance + )); + + // mint into the caller account + let caller = 1; + let beneficiary = ::Lookup::unlookup(caller); + let balance = 100; + assert_ok!(Assets::mint_into(asset_id, &beneficiary, balance)); + assert_eq!(Assets::balance(asset_id, caller), balance); + let weight = 5; + let len = 10; + // we convert the from weight to fee based on the ratio between asset min balance and + // existential deposit + let fee = (base_weight + weight + len as u64) * min_balance / ExistentialDeposit::get(); + let pre = ChargeAssetTxPayment::::from(0, Some(asset_id)) + .pre_dispatch(&caller, CALL, &info_from_weight(weight), len) + .unwrap(); + // assert that native balance is not used + assert_eq!(Balances::free_balance(caller), 10 * balance_factor); + // check that fee was charged in the given asset + assert_eq!(Assets::balance(asset_id, caller), balance - fee); + assert_eq!(Assets::balance(asset_id, BLOCK_AUTHOR), 0); + + assert_ok!(ChargeAssetTxPayment::::post_dispatch( + Some(pre), + &info_from_weight(weight), + &post_info_from_pays(Pays::No), + len, + &Ok(()) + )); + // caller should be refunded + assert_eq!(Assets::balance(asset_id, caller), balance); + // check that the block author did not get rewarded + assert_eq!(Assets::balance(asset_id, BLOCK_AUTHOR), 0); + }); +} + +#[test] +fn asset_transaction_payment_with_tip_and_refund() { + let base_weight = 5; + ExtBuilder::default() + .balance_factor(100) + .base_weight(base_weight) + .build() + .execute_with(|| { + // create the asset + let asset_id = 1; + let min_balance = 2; + assert_ok!(Assets::force_create( + Origin::root(), + asset_id, + 42, /* owner */ + true, /* is_sufficient */ + min_balance + )); + + // mint into the caller account + let caller = 2; + let beneficiary = ::Lookup::unlookup(caller); + let balance = 1000; + assert_ok!(Assets::mint_into(asset_id, &beneficiary, balance)); + assert_eq!(Assets::balance(asset_id, caller), balance); + let weight = 100; + let tip = 5; + let len = 10; + // we convert the from weight to fee based on the ratio between asset min balance and + // existential deposit + let fee_with_tip = + (base_weight + weight + len as u64 + tip) * min_balance / ExistentialDeposit::get(); + let pre = ChargeAssetTxPayment::::from(tip, Some(asset_id)) + .pre_dispatch(&caller, CALL, &info_from_weight(weight), len) + .unwrap(); + assert_eq!(Assets::balance(asset_id, caller), balance - fee_with_tip); + + let final_weight = 50; + assert_ok!(ChargeAssetTxPayment::::post_dispatch( + Some(pre), + &info_from_weight(weight), + &post_info_from_weight(final_weight), + len, + &Ok(()) + )); + let final_fee = + fee_with_tip - (weight - final_weight) * min_balance / ExistentialDeposit::get(); + assert_eq!(Assets::balance(asset_id, caller), balance - (final_fee)); + assert_eq!(Assets::balance(asset_id, BLOCK_AUTHOR), final_fee); + }); +} + +#[test] +fn payment_from_account_with_only_assets() { + let base_weight = 5; + ExtBuilder::default() + .balance_factor(100) + .base_weight(base_weight) + .build() + .execute_with(|| { + // create the asset + let asset_id = 1; + let min_balance = 2; + assert_ok!(Assets::force_create( + Origin::root(), + asset_id, + 42, /* owner */ + true, /* is_sufficient */ + min_balance + )); + + // mint into the caller account + let caller = 333; + let beneficiary = ::Lookup::unlookup(caller); + let balance = 100; + assert_ok!(Assets::mint_into(asset_id, &beneficiary, balance)); + assert_eq!(Assets::balance(asset_id, caller), balance); + // assert that native balance is not necessary + assert_eq!(Balances::free_balance(caller), 0); + let weight = 5; + let len = 10; + // we convert the from weight to fee based on the ratio between asset min balance and + // existential deposit + let fee = (base_weight + weight + len as u64) * min_balance / ExistentialDeposit::get(); + let pre = ChargeAssetTxPayment::::from(0, Some(asset_id)) + .pre_dispatch(&caller, CALL, &info_from_weight(weight), len) + .unwrap(); + assert_eq!(Balances::free_balance(caller), 0); + // check that fee was charged in the given asset + assert_eq!(Assets::balance(asset_id, caller), balance - fee); + + assert_ok!(ChargeAssetTxPayment::::post_dispatch( + Some(pre), + &info_from_weight(weight), + &default_post_info(), + len, + &Ok(()) + )); + assert_eq!(Assets::balance(asset_id, caller), balance - fee); + assert_eq!(Balances::free_balance(caller), 0); + }); +} + +#[test] +fn payment_only_with_existing_sufficient_asset() { + let base_weight = 5; + ExtBuilder::default() + .balance_factor(100) + .base_weight(base_weight) + .build() + .execute_with(|| { + let asset_id = 1; + let caller = 1; + let weight = 5; + let len = 10; + // pre_dispatch fails for non-existent asset + assert!(ChargeAssetTxPayment::::from(0, Some(asset_id)) + .pre_dispatch(&caller, CALL, &info_from_weight(weight), len) + .is_err()); + + // create the non-sufficient asset + let min_balance = 2; + assert_ok!(Assets::force_create( + Origin::root(), + asset_id, + 42, /* owner */ + false, /* is_sufficient */ + min_balance + )); + // pre_dispatch fails for non-sufficient asset + assert!(ChargeAssetTxPayment::::from(0, Some(asset_id)) + .pre_dispatch(&caller, CALL, &info_from_weight(weight), len) + .is_err()); + }); +} + +#[test] +fn converted_fee_is_never_zero_if_input_fee_is_not() { + let base_weight = 1; + ExtBuilder::default() + .balance_factor(100) + .base_weight(base_weight) + .build() + .execute_with(|| { + // create the asset + let asset_id = 1; + let min_balance = 1; + assert_ok!(Assets::force_create( + Origin::root(), + asset_id, + 42, /* owner */ + true, /* is_sufficient */ + min_balance + )); + + // mint into the caller account + let caller = 333; + let beneficiary = ::Lookup::unlookup(caller); + let balance = 100; + assert_ok!(Assets::mint_into(asset_id, &beneficiary, balance)); + assert_eq!(Assets::balance(asset_id, caller), balance); + let weight = 1; + let len = 1; + // we convert the from weight to fee based on the ratio between asset min balance and + // existential deposit + let fee = (base_weight + weight + len as u64) * min_balance / ExistentialDeposit::get(); + // naive fee calculation would round down to zero + assert_eq!(fee, 0); + { + let pre = ChargeAssetTxPayment::::from(0, Some(asset_id)) + .pre_dispatch(&caller, CALL, &info_from_pays(Pays::No), len) + .unwrap(); + // `Pays::No` still implies no fees + assert_eq!(Assets::balance(asset_id, caller), balance); + + assert_ok!(ChargeAssetTxPayment::::post_dispatch( + Some(pre), + &info_from_pays(Pays::No), + &post_info_from_pays(Pays::No), + len, + &Ok(()) + )); + assert_eq!(Assets::balance(asset_id, caller), balance); + } + let pre = ChargeAssetTxPayment::::from(0, Some(asset_id)) + .pre_dispatch(&caller, CALL, &info_from_weight(weight), len) + .unwrap(); + // check that at least one coin was charged in the given asset + assert_eq!(Assets::balance(asset_id, caller), balance - 1); + + assert_ok!(ChargeAssetTxPayment::::post_dispatch( + Some(pre), + &info_from_weight(weight), + &default_post_info(), + len, + &Ok(()) + )); + assert_eq!(Assets::balance(asset_id, caller), balance - 1); + }); +} + +#[test] +fn post_dispatch_fee_is_zero_if_pre_dispatch_fee_is_zero() { + let base_weight = 1; + ExtBuilder::default() + .balance_factor(100) + .base_weight(base_weight) + .build() + .execute_with(|| { + // create the asset + let asset_id = 1; + let min_balance = 100; + assert_ok!(Assets::force_create( + Origin::root(), + asset_id, + 42, /* owner */ + true, /* is_sufficient */ + min_balance + )); + + // mint into the caller account + let caller = 333; + let beneficiary = ::Lookup::unlookup(caller); + let balance = 100; + assert_ok!(Assets::mint_into(asset_id, &beneficiary, balance)); + assert_eq!(Assets::balance(asset_id, caller), balance); + let weight = 1; + let len = 1; + // we convert the from weight to fee based on the ratio between asset min balance and + // existential deposit + let fee = (base_weight + weight + len as u64) * min_balance / ExistentialDeposit::get(); + // calculated fee is greater than 0 + assert!(fee > 0); + let pre = ChargeAssetTxPayment::::from(0, Some(asset_id)) + .pre_dispatch(&caller, CALL, &info_from_pays(Pays::No), len) + .unwrap(); + // `Pays::No` implies no pre-dispatch fees + assert_eq!(Assets::balance(asset_id, caller), balance); + let (_tip, _who, initial_payment) = ⪯ + let not_paying = match initial_payment { + &InitialPayment::Nothing => true, + _ => false, + }; + assert!(not_paying, "initial payment should be Nothing if we pass Pays::No"); + + // `Pays::Yes` on post-dispatch does not mean we pay (we never charge more than the + // initial fee) + assert_ok!(ChargeAssetTxPayment::::post_dispatch( + Some(pre), + &info_from_pays(Pays::No), + &post_info_from_pays(Pays::Yes), + len, + &Ok(()) + )); + assert_eq!(Assets::balance(asset_id, caller), balance); + }); +} + +#[test] +fn post_dispatch_fee_is_zero_if_unsigned_pre_dispatch_fee_is_zero() { + let base_weight = 1; + ExtBuilder::default() + .balance_factor(100) + .base_weight(base_weight) + .build() + .execute_with(|| { + // create the asset + let asset_id = 1; + let min_balance = 100; + assert_ok!(Assets::force_create( + Origin::root(), + asset_id, + 42, /* owner */ + true, /* is_sufficient */ + min_balance + )); + + // mint into the caller account + let caller = 333; + let beneficiary = ::Lookup::unlookup(caller); + let balance = 100; + assert_ok!(Assets::mint_into(asset_id, &beneficiary, balance)); + assert_eq!(Assets::balance(asset_id, caller), balance); + let weight = 1; + let len = 1; + ChargeAssetTxPayment::::pre_dispatch_unsigned( + CALL, + &info_from_weight(weight), + len, + ) + .unwrap(); + + assert_eq!(Assets::balance(asset_id, caller), balance); + + // `Pays::Yes` on post-dispatch does not mean we pay (we never charge more than the + // initial fee) + assert_ok!(ChargeAssetTxPayment::::post_dispatch( + None, + &info_from_weight(weight), + &post_info_from_pays(Pays::Yes), + len, + &Ok(()) + )); + assert_eq!(Assets::balance(asset_id, caller), balance); + }); +} diff --git a/frame/transaction-payment-mangata/rpc/Cargo.toml b/frame/transaction-payment-mangata/rpc/Cargo.toml new file mode 100644 index 0000000000000..0adaa918de5dd --- /dev/null +++ b/frame/transaction-payment-mangata/rpc/Cargo.toml @@ -0,0 +1,23 @@ +[package] +name = "pallet-transaction-payment-rpc-mangata" +version = "4.0.0-dev" +authors = ["Parity Technologies "] +edition = "2021" +license = "Apache-2.0" +homepage = "https://substrate.io" +repository = "https://github.com/paritytech/substrate/" +description = "RPC interface for the transaction payment pallet." +readme = "README.md" + +[package.metadata.docs.rs] +targets = ["x86_64-unknown-linux-gnu"] + +[dependencies] +codec = { package = "parity-scale-codec", version = "3.0.0" } +jsonrpsee = { version = "0.13.0", features = ["server", "macros"] } +pallet-transaction-payment-rpc-runtime-api-mangata = { version = "4.0.0-dev", path = "./runtime-api" } +sp-api = { version = "4.0.0-dev", path = "../../../primitives/api" } +sp-blockchain = { version = "4.0.0-dev", path = "../../../primitives/blockchain" } +sp-core = { version = "6.0.0", path = "../../../primitives/core" } +sp-rpc = { version = "6.0.0", path = "../../../primitives/rpc" } +sp-runtime = { version = "6.0.0", path = "../../../primitives/runtime" } diff --git a/frame/transaction-payment-mangata/rpc/README.md b/frame/transaction-payment-mangata/rpc/README.md new file mode 100644 index 0000000000000..bf2ada1ff0ab3 --- /dev/null +++ b/frame/transaction-payment-mangata/rpc/README.md @@ -0,0 +1,3 @@ +RPC interface for the transaction payment pallet. + +License: Apache-2.0 diff --git a/frame/transaction-payment-mangata/rpc/runtime-api/Cargo.toml b/frame/transaction-payment-mangata/rpc/runtime-api/Cargo.toml new file mode 100644 index 0000000000000..76ef2c302c2d5 --- /dev/null +++ b/frame/transaction-payment-mangata/rpc/runtime-api/Cargo.toml @@ -0,0 +1,28 @@ +[package] +name = "pallet-transaction-payment-rpc-runtime-api-mangata" +version = "4.0.0-dev" +authors = ["Parity Technologies "] +edition = "2021" +license = "Apache-2.0" +homepage = "https://substrate.io" +repository = "https://github.com/paritytech/substrate/" +description = "RPC runtime API for transaction payment FRAME pallet" +readme = "README.md" + +[package.metadata.docs.rs] +targets = ["x86_64-unknown-linux-gnu"] + +[dependencies] +codec = { package = "parity-scale-codec", version = "3.0.0", default-features = false, features = ["derive"] } +pallet-transaction-payment-mangata = { version = "4.0.0-dev", default-features = false, path = "../../../transaction-payment-mangata" } +sp-api = { version = "4.0.0-dev", default-features = false, path = "../../../../primitives/api" } +sp-runtime = { version = "6.0.0", default-features = false, path = "../../../../primitives/runtime" } + +[features] +default = ["std"] +std = [ + "codec/std", + "pallet-transaction-payment-mangata/std", + "sp-api/std", + "sp-runtime/std", +] diff --git a/frame/transaction-payment-mangata/rpc/runtime-api/README.md b/frame/transaction-payment-mangata/rpc/runtime-api/README.md new file mode 100644 index 0000000000000..0d81abdb1eeb3 --- /dev/null +++ b/frame/transaction-payment-mangata/rpc/runtime-api/README.md @@ -0,0 +1,3 @@ +Runtime API definition for transaction payment pallet. + +License: Apache-2.0 diff --git a/frame/transaction-payment-mangata/rpc/runtime-api/src/lib.rs b/frame/transaction-payment-mangata/rpc/runtime-api/src/lib.rs new file mode 100644 index 0000000000000..3b1fffe3f720d --- /dev/null +++ b/frame/transaction-payment-mangata/rpc/runtime-api/src/lib.rs @@ -0,0 +1,34 @@ +// This file is part of Substrate. + +// Copyright (C) 2019-2022 Parity Technologies (UK) Ltd. +// SPDX-License-Identifier: Apache-2.0 + +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +//! Runtime API definition for transaction payment pallet. + +#![cfg_attr(not(feature = "std"), no_std)] + +use codec::Codec; +use sp_runtime::traits::MaybeDisplay; + +pub use pallet_transaction_payment_mangata::{FeeDetails, InclusionFee, RuntimeDispatchInfo}; + +sp_api::decl_runtime_apis! { + pub trait TransactionPaymentApi where + Balance: Codec + MaybeDisplay, + { + fn query_info(uxt: Block::Extrinsic, len: u32) -> RuntimeDispatchInfo; + fn query_fee_details(uxt: Block::Extrinsic, len: u32) -> FeeDetails; + } +} diff --git a/frame/transaction-payment-mangata/rpc/src/lib.rs b/frame/transaction-payment-mangata/rpc/src/lib.rs new file mode 100644 index 0000000000000..2ee035e9a00b1 --- /dev/null +++ b/frame/transaction-payment-mangata/rpc/src/lib.rs @@ -0,0 +1,169 @@ +// This file is part of Substrate. + +// Copyright (C) 2019-2022 Parity Technologies (UK) Ltd. +// SPDX-License-Identifier: Apache-2.0 + +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +//! RPC interface for the transaction payment pallet. + +use std::{convert::TryInto, sync::Arc}; + +use codec::{Codec, Decode}; +use jsonrpsee::{ + core::{async_trait, Error as JsonRpseeError, RpcResult}, + proc_macros::rpc, + types::error::{CallError, ErrorCode, ErrorObject}, +}; +use pallet_transaction_payment_rpc_runtime_api_mangata::{FeeDetails, InclusionFee, RuntimeDispatchInfo}; +use sp_api::ProvideRuntimeApi; +use sp_blockchain::HeaderBackend; +use sp_core::Bytes; +use sp_rpc::number::NumberOrHex; +use sp_runtime::{ + generic::BlockId, + traits::{Block as BlockT, MaybeDisplay}, +}; + +pub use pallet_transaction_payment_rpc_runtime_api_mangata::TransactionPaymentApi as TransactionPaymentRuntimeApi; + +#[rpc(client, server)] +pub trait TransactionPaymentApi { + #[method(name = "payment_queryInfo")] + fn query_info(&self, encoded_xt: Bytes, at: Option) -> RpcResult; + + #[method(name = "payment_queryFeeDetails")] + fn query_fee_details( + &self, + encoded_xt: Bytes, + at: Option, + ) -> RpcResult>; +} + +/// Provides RPC methods to query a dispatchable's class, weight and fee. +pub struct TransactionPayment { + /// Shared reference to the client. + client: Arc, + _marker: std::marker::PhantomData

, +} + +impl TransactionPayment { + /// Creates a new instance of the TransactionPayment Rpc helper. + pub fn new(client: Arc) -> Self { + Self { client, _marker: Default::default() } + } +} + +/// Error type of this RPC api. +pub enum Error { + /// The transaction was not decodable. + DecodeError, + /// The call to runtime failed. + RuntimeError, +} + +impl From for i32 { + fn from(e: Error) -> i32 { + match e { + Error::RuntimeError => 1, + Error::DecodeError => 2, + } + } +} + +#[async_trait] +impl + TransactionPaymentApiServer<::Hash, RuntimeDispatchInfo> + for TransactionPayment +where + Block: BlockT, + C: ProvideRuntimeApi + HeaderBackend + Send + Sync + 'static, + C::Api: TransactionPaymentRuntimeApi, + Balance: Codec + MaybeDisplay + Copy + TryInto + Send + Sync + 'static, +{ + fn query_info( + &self, + encoded_xt: Bytes, + at: Option, + ) -> RpcResult> { + let api = self.client.runtime_api(); + let at = BlockId::hash(at.unwrap_or_else(|| self.client.info().best_hash)); + + let encoded_len = encoded_xt.len() as u32; + + let uxt: Block::Extrinsic = Decode::decode(&mut &*encoded_xt).map_err(|e| { + CallError::Custom(ErrorObject::owned( + Error::DecodeError.into(), + "Unable to query dispatch info.", + Some(format!("{:?}", e)), + )) + })?; + api.query_info(&at, uxt, encoded_len).map_err(|e| { + CallError::Custom(ErrorObject::owned( + Error::RuntimeError.into(), + "Unable to query dispatch info.", + Some(e.to_string()), + )) + .into() + }) + } + + fn query_fee_details( + &self, + encoded_xt: Bytes, + at: Option, + ) -> RpcResult> { + let api = self.client.runtime_api(); + let at = BlockId::hash(at.unwrap_or_else(|| self.client.info().best_hash)); + + let encoded_len = encoded_xt.len() as u32; + + let uxt: Block::Extrinsic = Decode::decode(&mut &*encoded_xt).map_err(|e| { + CallError::Custom(ErrorObject::owned( + Error::DecodeError.into(), + "Unable to query fee details.", + Some(format!("{:?}", e)), + )) + })?; + let fee_details = api.query_fee_details(&at, uxt, encoded_len).map_err(|e| { + CallError::Custom(ErrorObject::owned( + Error::RuntimeError.into(), + "Unable to query fee details.", + Some(e.to_string()), + )) + })?; + + let try_into_rpc_balance = |value: Balance| { + value.try_into().map_err(|_| { + JsonRpseeError::Call(CallError::Custom(ErrorObject::owned( + ErrorCode::InvalidParams.code(), + format!("{} doesn't fit in NumberOrHex representation", value), + None::<()>, + ))) + }) + }; + + Ok(FeeDetails { + inclusion_fee: if let Some(inclusion_fee) = fee_details.inclusion_fee { + Some(InclusionFee { + base_fee: try_into_rpc_balance(inclusion_fee.base_fee)?, + len_fee: try_into_rpc_balance(inclusion_fee.len_fee)?, + adjusted_weight_fee: try_into_rpc_balance(inclusion_fee.adjusted_weight_fee)?, + }) + } else { + None + }, + tip: Default::default(), + }) + } +} diff --git a/frame/transaction-payment-mangata/src/lib.rs b/frame/transaction-payment-mangata/src/lib.rs new file mode 100644 index 0000000000000..74b7bb79be071 --- /dev/null +++ b/frame/transaction-payment-mangata/src/lib.rs @@ -0,0 +1,1605 @@ +// This file is part of Substrate. + +// Copyright (C) 2019-2022 Parity Technologies (UK) Ltd. +// SPDX-License-Identifier: Apache-2.0 + +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +//! # Transaction Payment Pallet +//! +//! This pallet provides the basic logic needed to pay the absolute minimum amount needed for a +//! transaction to be included. This includes: +//! - _base fee_: This is the minimum amount a user pays for a transaction. It is declared +//! as a base _weight_ in the runtime and converted to a fee using `WeightToFee`. +//! - _weight fee_: A fee proportional to amount of weight a transaction consumes. +//! - _length fee_: A fee proportional to the encoded length of the transaction. +//! - _tip_: An optional tip. Tip increases the priority of the transaction, giving it a higher +//! chance to be included by the transaction queue. +//! +//! The base fee and adjusted weight and length fees constitute the _inclusion fee_, which is +//! the minimum fee for a transaction to be included in a block. +//! +//! The formula of final fee: +//! ```ignore +//! inclusion_fee = base_fee + length_fee + [targeted_fee_adjustment * weight_fee]; +//! final_fee = inclusion_fee + tip; +//! ``` +//! +//! - `targeted_fee_adjustment`: This is a multiplier that can tune the final fee based on +//! the congestion of the network. +//! +//! Additionally, this pallet allows one to configure: +//! - The mapping between one unit of weight to one unit of fee via [`Config::WeightToFee`]. +//! - A means of updating the fee for the next block, via defining a multiplier, based on the +//! final state of the chain at the end of the previous block. This can be configured via +//! [`Config::FeeMultiplierUpdate`] +//! - How the fees are paid via [`Config::OnChargeTransaction`]. + +#![cfg_attr(not(feature = "std"), no_std)] + +use codec::{Decode, Encode, MaxEncodedLen}; +use scale_info::TypeInfo; + +use sp_runtime::{ + traits::{ + Convert, DispatchInfoOf, Dispatchable, One, PostDispatchInfoOf, SaturatedConversion, + Saturating, SignedExtension, Zero, + }, + transaction_validity::{ + TransactionPriority, TransactionValidity, TransactionValidityError, ValidTransaction, + }, + FixedPointNumber, FixedPointOperand, FixedU128, Perquintill, RuntimeDebug, +}; +use sp_std::prelude::*; + +use frame_support::{ + dispatch::DispatchResult, + traits::{EstimateCallFee, Get}, + weights::{ + DispatchClass, DispatchInfo, GetDispatchInfo, Pays, PostDispatchInfo, Weight, WeightToFee, + }, +}; + +mod payment; +mod types; + +pub use pallet::*; +pub use payment::*; +pub use types::{FeeDetails, InclusionFee, RuntimeDispatchInfo}; + +/// Fee multiplier. +pub type Multiplier = FixedU128; + +type BalanceOf = <::OnChargeTransaction as OnChargeTransaction>::Balance; + +/// A struct to update the weight multiplier per block. It implements `Convert`, meaning that it can convert the previous multiplier to the next one. This should +/// be called on `on_finalize` of a block, prior to potentially cleaning the weight data from the +/// system pallet. +/// +/// given: +/// s = previous block weight +/// s'= ideal block weight +/// m = maximum block weight +/// diff = (s - s')/m +/// v = 0.00001 +/// t1 = (v * diff) +/// t2 = (v * diff)^2 / 2 +/// then: +/// next_multiplier = prev_multiplier * (1 + t1 + t2) +/// +/// Where `(s', v)` must be given as the `Get` implementation of the `T` generic type. Moreover, `M` +/// must provide the minimum allowed value for the multiplier. Note that a runtime should ensure +/// with tests that the combination of this `M` and `V` is not such that the multiplier can drop to +/// zero and never recover. +/// +/// note that `s'` is interpreted as a portion in the _normal transaction_ capacity of the block. +/// For example, given `s' == 0.25` and `AvailableBlockRatio = 0.75`, then the target fullness is +/// _0.25 of the normal capacity_ and _0.1875 of the entire block_. +/// +/// This implementation implies the bound: +/// - `v ≤ p / k * (s − s')` +/// - or, solving for `p`: `p >= v * k * (s - s')` +/// +/// where `p` is the amount of change over `k` blocks. +/// +/// Hence: +/// - in a fully congested chain: `p >= v * k * (1 - s')`. +/// - in an empty chain: `p >= v * k * (-s')`. +/// +/// For example, when all blocks are full and there are 28800 blocks per day (default in +/// `substrate-node`) and v == 0.00001, s' == 0.1875, we'd have: +/// +/// p >= 0.00001 * 28800 * 0.8125 +/// p >= 0.234 +/// +/// Meaning that fees can change by around ~23% per day, given extreme congestion. +/// +/// More info can be found at: +/// +pub struct TargetedFeeAdjustment(sp_std::marker::PhantomData<(T, S, V, M)>); + +/// Something that can convert the current multiplier to the next one. +pub trait MultiplierUpdate: Convert { + /// Minimum multiplier + fn min() -> Multiplier; + /// Target block saturation level + fn target() -> Perquintill; + /// Variability factor + fn variability() -> Multiplier; +} + +impl MultiplierUpdate for () { + fn min() -> Multiplier { + Default::default() + } + fn target() -> Perquintill { + Default::default() + } + fn variability() -> Multiplier { + Default::default() + } +} + +impl MultiplierUpdate for TargetedFeeAdjustment +where + T: frame_system::Config, + S: Get, + V: Get, + M: Get, +{ + fn min() -> Multiplier { + M::get() + } + fn target() -> Perquintill { + S::get() + } + fn variability() -> Multiplier { + V::get() + } +} + +impl Convert for TargetedFeeAdjustment +where + T: frame_system::Config, + S: Get, + V: Get, + M: Get, +{ + fn convert(previous: Multiplier) -> Multiplier { + // Defensive only. The multiplier in storage should always be at most positive. Nonetheless + // we recover here in case of errors, because any value below this would be stale and can + // never change. + let min_multiplier = M::get(); + let previous = previous.max(min_multiplier); + + let weights = T::BlockWeights::get(); + // the computed ratio is only among the normal class. + let normal_max_weight = + weights.get(DispatchClass::Normal).max_total.unwrap_or(weights.max_block); + let current_block_weight = >::block_weight(); + let normal_block_weight = + *current_block_weight.get(DispatchClass::Normal).min(&normal_max_weight); + + let s = S::get(); + let v = V::get(); + + let target_weight = (s * normal_max_weight) as u128; + let block_weight = normal_block_weight as u128; + + // determines if the first_term is positive + let positive = block_weight >= target_weight; + let diff_abs = block_weight.max(target_weight) - block_weight.min(target_weight); + + // defensive only, a test case assures that the maximum weight diff can fit in Multiplier + // without any saturation. + let diff = Multiplier::saturating_from_rational(diff_abs, normal_max_weight.max(1)); + let diff_squared = diff.saturating_mul(diff); + + let v_squared_2 = v.saturating_mul(v) / Multiplier::saturating_from_integer(2); + + let first_term = v.saturating_mul(diff); + let second_term = v_squared_2.saturating_mul(diff_squared); + + if positive { + let excess = first_term.saturating_add(second_term).saturating_mul(previous); + previous.saturating_add(excess).max(min_multiplier) + } else { + // Defensive-only: first_term > second_term. Safe subtraction. + let negative = first_term.saturating_sub(second_term).saturating_mul(previous); + previous.saturating_sub(negative).max(min_multiplier) + } + } +} + +/// Storage releases of the pallet. +#[derive(Encode, Decode, Clone, Copy, PartialEq, Eq, RuntimeDebug, TypeInfo, MaxEncodedLen)] +enum Releases { + /// Original version of the pallet. + V1Ancient, + /// One that bumps the usage to FixedU128 from FixedI128. + V2, +} + +impl Default for Releases { + fn default() -> Self { + Releases::V1Ancient + } +} + +#[frame_support::pallet] +pub mod pallet { + use super::*; + use frame_support::pallet_prelude::*; + use frame_system::pallet_prelude::*; + + #[pallet::pallet] + #[pallet::generate_store(pub(super) trait Store)] + pub struct Pallet(_); + + #[pallet::config] + pub trait Config: frame_system::Config { + /// Handler for withdrawing, refunding and depositing the transaction fee. + /// Transaction fees are withdrawn before the transaction is executed. + /// After the transaction was executed the transaction weight can be + /// adjusted, depending on the used resources by the transaction. If the + /// transaction weight is lower than expected, parts of the transaction fee + /// might be refunded. In the end the fees can be deposited. + type OnChargeTransaction: OnChargeTransaction; + + /// A fee mulitplier for `Operational` extrinsics to compute "virtual tip" to boost their + /// `priority` + /// + /// This value is multipled by the `final_fee` to obtain a "virtual tip" that is later + /// added to a tip component in regular `priority` calculations. + /// It means that a `Normal` transaction can front-run a similarly-sized `Operational` + /// extrinsic (with no tip), by including a tip value greater than the virtual tip. + /// + /// ```rust,ignore + /// // For `Normal` + /// let priority = priority_calc(tip); + /// + /// // For `Operational` + /// let virtual_tip = (inclusion_fee + tip) * OperationalFeeMultiplier; + /// let priority = priority_calc(tip + virtual_tip); + /// ``` + /// + /// Note that since we use `final_fee` the multiplier applies also to the regular `tip` + /// sent with the transaction. So, not only does the transaction get a priority bump based + /// on the `inclusion_fee`, but we also amplify the impact of tips applied to `Operational` + /// transactions. + #[pallet::constant] + type OperationalFeeMultiplier: Get; + + /// Convert a weight value into a deductible fee based on the currency type. + type WeightToFee: WeightToFee>; + + /// Convert a length value into a deductible fee based on the currency type. + type LengthToFee: WeightToFee>; + + /// Update the multiplier of the next block, based on the previous block's weight. + type FeeMultiplierUpdate: MultiplierUpdate; + } + + #[pallet::type_value] + pub fn NextFeeMultiplierOnEmpty() -> Multiplier { + Multiplier::saturating_from_integer(1) + } + + #[pallet::storage] + #[pallet::getter(fn next_fee_multiplier)] + pub type NextFeeMultiplier = + StorageValue<_, Multiplier, ValueQuery, NextFeeMultiplierOnEmpty>; + + #[pallet::storage] + pub(super) type StorageVersion = StorageValue<_, Releases, ValueQuery>; + + #[pallet::genesis_config] + pub struct GenesisConfig; + + #[cfg(feature = "std")] + impl Default for GenesisConfig { + fn default() -> Self { + Self + } + } + + #[pallet::genesis_build] + impl GenesisBuild for GenesisConfig { + fn build(&self) { + StorageVersion::::put(Releases::V2); + } + } + + #[pallet::hooks] + impl Hooks> for Pallet { + fn on_finalize(_: T::BlockNumber) { + >::mutate(|fm| { + *fm = T::FeeMultiplierUpdate::convert(*fm); + }); + } + + fn integrity_test() { + // given weight == u64, we build multipliers from `diff` of two weight values, which can + // at most be maximum block weight. Make sure that this can fit in a multiplier without + // loss. + assert!( + ::max_value() >= + Multiplier::checked_from_integer::( + T::BlockWeights::get().max_block.try_into().unwrap() + ) + .unwrap(), + ); + + let target = T::FeeMultiplierUpdate::target() * + T::BlockWeights::get().get(DispatchClass::Normal).max_total.expect( + "Setting `max_total` for `Normal` dispatch class is not compatible with \ + `transaction-payment-mangata` pallet.", + ); + // add 1 percent; + let addition = target / 100; + if addition == 0 { + // this is most likely because in a test setup we set everything to (). + return + } + + // We disable this test as our variability is 0, and min multiplier is set to 1. + + // #[cfg(any(feature = "std", test))] + // sp_io::TestExternalities::new_empty().execute_with(|| { + // // This is the minimum value of the multiplier. Make sure that if we collapse to + // // this value, we can recover with a reasonable amount of traffic. For this test we + // // assert that if we collapse to minimum, the trend will be positive with a weight + // // value which is 1% more than the target. + // let min_value = T::FeeMultiplierUpdate::min(); + + // let target = target + addition; + + // >::set_block_consumed_resources(target, 0); + // let next = T::FeeMultiplierUpdate::convert(min_value); + // assert!( + // next > min_value, + // "The minimum bound of the multiplier is too low. When \ + // block saturation is more than target by 1% and multiplier is minimal then \ + // the multiplier doesn't increase." + // ); + // }); + } + } +} + +impl Pallet +where + BalanceOf: FixedPointOperand, +{ + /// Query the data that we know about the fee of a given `call`. + /// + /// This pallet is not and cannot be aware of the internals of a signed extension, for example + /// a tip. It only interprets the extrinsic as some encoded value and accounts for its weight + /// and length, the runtime's extrinsic base weight, and the current fee multiplier. + /// + /// All dispatchables must be annotated with weight and will have some fee info. This function + /// always returns. + pub fn query_info( + unchecked_extrinsic: Extrinsic, + len: u32, + ) -> RuntimeDispatchInfo> + where + T::Call: Dispatchable, + { + // NOTE: we can actually make it understand `ChargeTransactionPayment`, but would be some + // hassle for sure. We have to make it aware of the index of `ChargeTransactionPayment` in + // `Extra`. Alternatively, we could actually execute the tx's per-dispatch and record the + // balance of the sender before and after the pipeline.. but this is way too much hassle for + // a very very little potential gain in the future. + let dispatch_info = ::get_dispatch_info(&unchecked_extrinsic); + + let partial_fee = if unchecked_extrinsic.is_signed().unwrap_or(false) { + Self::compute_fee(len, &dispatch_info, 0u32.into()) + } else { + // Unsigned extrinsics have no partial fee. + 0u32.into() + }; + + let DispatchInfo { weight, class, .. } = dispatch_info; + + RuntimeDispatchInfo { weight, class, partial_fee } + } + + /// Query the detailed fee of a given `call`. + pub fn query_fee_details( + unchecked_extrinsic: Extrinsic, + len: u32, + ) -> FeeDetails> + where + T::Call: Dispatchable, + { + let dispatch_info = ::get_dispatch_info(&unchecked_extrinsic); + + let tip = 0u32.into(); + + if unchecked_extrinsic.is_signed().unwrap_or(false) { + Self::compute_fee_details(len, &dispatch_info, tip) + } else { + // Unsigned extrinsics have no inclusion fee. + FeeDetails { inclusion_fee: None, tip } + } + } + + /// Compute the final fee value for a particular transaction. + pub fn compute_fee(len: u32, info: &DispatchInfoOf, tip: BalanceOf) -> BalanceOf + where + T::Call: Dispatchable, + { + Self::compute_fee_details(len, info, tip).final_fee() + } + + /// Compute the fee details for a particular transaction. + pub fn compute_fee_details( + len: u32, + info: &DispatchInfoOf, + tip: BalanceOf, + ) -> FeeDetails> + where + T::Call: Dispatchable, + { + Self::compute_fee_raw(len, info.weight, tip, info.pays_fee, info.class) + } + + /// Compute the actual post dispatch fee for a particular transaction. + /// + /// Identical to `compute_fee` with the only difference that the post dispatch corrected + /// weight is used for the weight fee calculation. + pub fn compute_actual_fee( + len: u32, + info: &DispatchInfoOf, + post_info: &PostDispatchInfoOf, + tip: BalanceOf, + ) -> BalanceOf + where + T::Call: Dispatchable, + { + Self::compute_actual_fee_details(len, info, post_info, tip).final_fee() + } + + /// Compute the actual post dispatch fee details for a particular transaction. + pub fn compute_actual_fee_details( + len: u32, + info: &DispatchInfoOf, + post_info: &PostDispatchInfoOf, + tip: BalanceOf, + ) -> FeeDetails> + where + T::Call: Dispatchable, + { + Self::compute_fee_raw( + len, + post_info.calc_actual_weight(info), + tip, + post_info.pays_fee(info), + info.class, + ) + } + + fn compute_fee_raw( + len: u32, + weight: Weight, + tip: BalanceOf, + pays_fee: Pays, + class: DispatchClass, + ) -> FeeDetails> { + if pays_fee == Pays::Yes { + // the adjustable part of the fee. + let unadjusted_weight_fee = Self::weight_to_fee(weight); + let multiplier = Self::next_fee_multiplier(); + // final adjusted weight fee. + let adjusted_weight_fee = multiplier.saturating_mul_int(unadjusted_weight_fee); + + // length fee. this is adjusted via `LengthToFee`. + let len_fee = Self::length_to_fee(len); + + let base_fee = Self::weight_to_fee(T::BlockWeights::get().get(class).base_extrinsic); + FeeDetails { + inclusion_fee: Some(InclusionFee { base_fee, len_fee, adjusted_weight_fee }), + tip, + } + } else { + FeeDetails { inclusion_fee: None, tip } + } + } + + fn length_to_fee(length: u32) -> BalanceOf { + T::LengthToFee::weight_to_fee(&(length as Weight)) + } + + fn weight_to_fee(weight: Weight) -> BalanceOf { + // cap the weight to the maximum defined in runtime, otherwise it will be the + // `Bounded` maximum of its data type, which is not desired. + let capped_weight = weight.min(T::BlockWeights::get().max_block); + T::WeightToFee::weight_to_fee(&capped_weight) + } +} + +impl Convert> for Pallet +where + T: Config, + BalanceOf: FixedPointOperand, +{ + /// Compute the fee for the specified weight. + /// + /// This fee is already adjusted by the per block fee adjustment factor and is therefore the + /// share that the weight contributes to the overall fee of a transaction. It is mainly + /// for informational purposes and not used in the actual fee calculation. + fn convert(weight: Weight) -> BalanceOf { + >::get().saturating_mul_int(Self::weight_to_fee(weight)) + } +} + +/// Require the transactor pay for themselves and maybe include a tip to gain additional priority +/// in the queue. +/// +/// # Transaction Validity +/// +/// This extension sets the `priority` field of `TransactionValidity` depending on the amount +/// of tip being paid per weight unit. +/// +/// Operational transactions will receive an additional priority bump, so that they are normally +/// considered before regular transactions. +#[derive(Encode, Decode, Clone, Eq, PartialEq, TypeInfo)] +#[scale_info(skip_type_params(T))] +pub struct ChargeTransactionPayment(#[codec(compact)] BalanceOf); + +impl ChargeTransactionPayment +where + T::Call: Dispatchable, + BalanceOf: Send + Sync + FixedPointOperand, +{ + /// utility constructor. Used only in client/factory code. + pub fn from(fee: BalanceOf) -> Self { + Self(fee) + } + + /// Returns the tip as being choosen by the transaction sender. + pub fn tip(&self) -> BalanceOf { + self.0 + } + + fn withdraw_fee( + &self, + who: &T::AccountId, + call: &T::Call, + info: &DispatchInfoOf, + len: usize, + ) -> Result< + ( + BalanceOf, + <::OnChargeTransaction as OnChargeTransaction>::LiquidityInfo, + ), + TransactionValidityError, + > { + let tip = self.0; + let fee = Pallet::::compute_fee(len as u32, info, tip); + + <::OnChargeTransaction as OnChargeTransaction>::withdraw_fee( + who, call, info, fee, tip, + ) + .map(|i| (fee, i)) + } + + /// Get an appropriate priority for a transaction with the given `DispatchInfo`, encoded length + /// and user-included tip. + /// + /// The priority is based on the amount of `tip` the user is willing to pay per unit of either + /// `weight` or `length`, depending which one is more limitting. For `Operational` extrinsics + /// we add a "virtual tip" to the calculations. + /// + /// The formula should simply be `tip / bounded_{weight|length}`, but since we are using + /// integer division, we have no guarantees it's going to give results in any reasonable + /// range (might simply end up being zero). Hence we use a scaling factor: + /// `tip * (max_block_{weight|length} / bounded_{weight|length})`, since given current + /// state of-the-art blockchains, number of per-block transactions is expected to be in a + /// range reasonable enough to not saturate the `Balance` type while multiplying by the tip. + pub fn get_priority( + info: &DispatchInfoOf, + len: usize, + tip: BalanceOf, + final_fee: BalanceOf, + ) -> TransactionPriority { + // Calculate how many such extrinsics we could fit into an empty block and take + // the limitting factor. + let max_block_weight = T::BlockWeights::get().max_block; + let max_block_length = *T::BlockLength::get().max.get(info.class) as u64; + + let bounded_weight = info.weight.max(1).min(max_block_weight); + let bounded_length = (len as u64).max(1).min(max_block_length); + + let max_tx_per_block_weight = max_block_weight / bounded_weight; + let max_tx_per_block_length = max_block_length / bounded_length; + // Given our current knowledge this value is going to be in a reasonable range - i.e. + // less than 10^9 (2^30), so multiplying by the `tip` value is unlikely to overflow the + // balance type. We still use saturating ops obviously, but the point is to end up with some + // `priority` distribution instead of having all transactions saturate the priority. + let max_tx_per_block = max_tx_per_block_length + .min(max_tx_per_block_weight) + .saturated_into::>(); + let max_reward = |val: BalanceOf| val.saturating_mul(max_tx_per_block); + + // To distribute no-tip transactions a little bit, we increase the tip value by one. + // This means that given two transactions without a tip, smaller one will be preferred. + let tip = tip.saturating_add(One::one()); + let scaled_tip = max_reward(tip); + + match info.class { + DispatchClass::Normal => { + // For normal class we simply take the `tip_per_weight`. + scaled_tip + }, + DispatchClass::Mandatory => { + // Mandatory extrinsics should be prohibited (e.g. by the [`CheckWeight`] + // extensions), but just to be safe let's return the same priority as `Normal` here. + scaled_tip + }, + DispatchClass::Operational => { + // A "virtual tip" value added to an `Operational` extrinsic. + // This value should be kept high enough to allow `Operational` extrinsics + // to get in even during congestion period, but at the same time low + // enough to prevent a possible spam attack by sending invalid operational + // extrinsics which push away regular transactions from the pool. + let fee_multiplier = T::OperationalFeeMultiplier::get().saturated_into(); + let virtual_tip = final_fee.saturating_mul(fee_multiplier); + let scaled_virtual_tip = max_reward(virtual_tip); + + scaled_tip.saturating_add(scaled_virtual_tip) + }, + } + .saturated_into::() + } +} + +impl sp_std::fmt::Debug for ChargeTransactionPayment { + #[cfg(feature = "std")] + fn fmt(&self, f: &mut sp_std::fmt::Formatter) -> sp_std::fmt::Result { + write!(f, "ChargeTransactionPayment<{:?}>", self.0) + } + #[cfg(not(feature = "std"))] + fn fmt(&self, _: &mut sp_std::fmt::Formatter) -> sp_std::fmt::Result { + Ok(()) + } +} + +impl SignedExtension for ChargeTransactionPayment +where + BalanceOf: Send + Sync + From + FixedPointOperand, + T::Call: Dispatchable, +{ + const IDENTIFIER: &'static str = "ChargeTransactionPayment"; + type AccountId = T::AccountId; + type Call = T::Call; + type AdditionalSigned = (); + type Pre = ( + // tip + BalanceOf, + // who paid the fee - this is an option to allow for a Default impl. + Self::AccountId, + // imbalance resulting from withdrawing the fee + <::OnChargeTransaction as OnChargeTransaction>::LiquidityInfo, + ); + fn additional_signed(&self) -> sp_std::result::Result<(), TransactionValidityError> { + Ok(()) + } + + fn validate( + &self, + who: &Self::AccountId, + call: &Self::Call, + info: &DispatchInfoOf, + len: usize, + ) -> TransactionValidity { + let (final_fee, _) = self.withdraw_fee(who, call, info, len)?; + let tip = self.0; + Ok(ValidTransaction { + priority: Self::get_priority(info, len, tip, final_fee), + ..Default::default() + }) + } + + fn pre_dispatch( + self, + who: &Self::AccountId, + call: &Self::Call, + info: &DispatchInfoOf, + len: usize, + ) -> Result { + let (_fee, imbalance) = self.withdraw_fee(who, call, info, len)?; + Ok((self.0, who.clone(), imbalance)) + } + + fn post_dispatch( + maybe_pre: Option, + info: &DispatchInfoOf, + post_info: &PostDispatchInfoOf, + len: usize, + _result: &DispatchResult, + ) -> Result<(), TransactionValidityError> { + if let Some((tip, who, imbalance)) = maybe_pre { + let actual_fee = Pallet::::compute_actual_fee(len as u32, info, post_info, tip); + T::OnChargeTransaction::correct_and_deposit_fee( + &who, info, post_info, actual_fee, tip, imbalance, + )?; + } + Ok(()) + } +} + +impl EstimateCallFee> + for Pallet +where + BalanceOf: FixedPointOperand, + T::Call: Dispatchable, +{ + fn estimate_call_fee(call: &AnyCall, post_info: PostDispatchInfo) -> BalanceOf { + let len = call.encoded_size() as u32; + let info = call.get_dispatch_info(); + Self::compute_actual_fee(len, &info, &post_info, Zero::zero()) + } +} + +#[cfg(test)] +mod tests { + use super::*; + use crate as pallet_transaction_payment_mangata; + + use std::cell::RefCell; + + use codec::Encode; + + use sp_core::H256; + use sp_runtime::{ + testing::{Header, TestXt}, + traits::{BlakeTwo256, IdentityLookup, One}, + transaction_validity::InvalidTransaction, + }; + + use frame_support::{ + assert_noop, assert_ok, parameter_types, + traits::{ConstU32, ConstU64, Currency, Imbalance, OnUnbalanced}, + weights::{ + DispatchClass, DispatchInfo, GetDispatchInfo, PostDispatchInfo, Weight, + WeightToFee as WeightToFeeT, + }, + }; + use frame_system as system; + use pallet_balances::Call as BalancesCall; + + type UncheckedExtrinsic = frame_system::mocking::MockUncheckedExtrinsic; + type Block = frame_system::mocking::MockBlock; + + frame_support::construct_runtime!( + pub enum Runtime where + Block = Block, + NodeBlock = Block, + UncheckedExtrinsic = UncheckedExtrinsic, + { + System: system::{Pallet, Call, Config, Storage, Event}, + Balances: pallet_balances::{Pallet, Call, Storage, Config, Event}, + TransactionPayment: pallet_transaction_payment_mangata::{Pallet, Storage}, + } + ); + + const CALL: &::Call = + &Call::Balances(BalancesCall::transfer { dest: 2, value: 69 }); + + thread_local! { + static EXTRINSIC_BASE_WEIGHT: RefCell = RefCell::new(0); + } + + pub struct BlockWeights; + impl Get for BlockWeights { + fn get() -> frame_system::limits::BlockWeights { + frame_system::limits::BlockWeights::builder() + .base_block(0) + .for_class(DispatchClass::all(), |weights| { + weights.base_extrinsic = EXTRINSIC_BASE_WEIGHT.with(|v| *v.borrow()).into(); + }) + .for_class(DispatchClass::non_mandatory(), |weights| { + weights.max_total = 1024.into(); + }) + .build_or_panic() + } + } + + parameter_types! { + pub static WeightToFee: u64 = 1; + pub static TransactionByteFee: u64 = 1; + pub static OperationalFeeMultiplier: u8 = 5; + } + + impl frame_system::Config for Runtime { + type BaseCallFilter = frame_support::traits::Everything; + type BlockWeights = BlockWeights; + type BlockLength = (); + type DbWeight = (); + type Origin = Origin; + type Index = u64; + type BlockNumber = u64; + type Call = Call; + type Hash = H256; + type Hashing = BlakeTwo256; + type AccountId = u64; + type Lookup = IdentityLookup; + type Header = Header; + type Event = Event; + type BlockHashCount = ConstU64<250>; + type Version = (); + type PalletInfo = PalletInfo; + type AccountData = pallet_balances::AccountData; + type OnNewAccount = (); + type OnKilledAccount = (); + type SystemWeightInfo = (); + type SS58Prefix = (); + type OnSetCode = (); + type MaxConsumers = ConstU32<16>; + } + + impl pallet_balances::Config for Runtime { + type Balance = u64; + type Event = Event; + type DustRemoval = (); + type ExistentialDeposit = ConstU64<1>; + type AccountStore = System; + type MaxLocks = (); + type MaxReserves = (); + type ReserveIdentifier = [u8; 8]; + type WeightInfo = (); + } + + impl WeightToFeeT for WeightToFee { + type Balance = u64; + + fn weight_to_fee(weight: &Weight) -> Self::Balance { + Self::Balance::saturated_from(*weight) + .saturating_mul(WEIGHT_TO_FEE.with(|v| *v.borrow())) + } + } + + impl WeightToFeeT for TransactionByteFee { + type Balance = u64; + + fn weight_to_fee(weight: &Weight) -> Self::Balance { + Self::Balance::saturated_from(*weight) + .saturating_mul(TRANSACTION_BYTE_FEE.with(|v| *v.borrow())) + } + } + + thread_local! { + static TIP_UNBALANCED_AMOUNT: RefCell = RefCell::new(0); + static FEE_UNBALANCED_AMOUNT: RefCell = RefCell::new(0); + } + + pub struct DealWithFees; + impl OnUnbalanced> for DealWithFees { + fn on_unbalanceds( + mut fees_then_tips: impl Iterator>, + ) { + if let Some(fees) = fees_then_tips.next() { + FEE_UNBALANCED_AMOUNT.with(|a| *a.borrow_mut() += fees.peek()); + if let Some(tips) = fees_then_tips.next() { + TIP_UNBALANCED_AMOUNT.with(|a| *a.borrow_mut() += tips.peek()); + } + } + } + } + + impl Config for Runtime { + type OnChargeTransaction = CurrencyAdapter; + type OperationalFeeMultiplier = OperationalFeeMultiplier; + type WeightToFee = WeightToFee; + type LengthToFee = TransactionByteFee; + type FeeMultiplierUpdate = (); + } + + pub struct ExtBuilder { + balance_factor: u64, + base_weight: u64, + byte_fee: u64, + weight_to_fee: u64, + } + + impl Default for ExtBuilder { + fn default() -> Self { + Self { balance_factor: 1, base_weight: 0, byte_fee: 1, weight_to_fee: 1 } + } + } + + impl ExtBuilder { + pub fn base_weight(mut self, base_weight: u64) -> Self { + self.base_weight = base_weight; + self + } + pub fn byte_fee(mut self, byte_fee: u64) -> Self { + self.byte_fee = byte_fee; + self + } + pub fn weight_fee(mut self, weight_to_fee: u64) -> Self { + self.weight_to_fee = weight_to_fee; + self + } + pub fn balance_factor(mut self, factor: u64) -> Self { + self.balance_factor = factor; + self + } + fn set_constants(&self) { + EXTRINSIC_BASE_WEIGHT.with(|v| *v.borrow_mut() = self.base_weight); + TRANSACTION_BYTE_FEE.with(|v| *v.borrow_mut() = self.byte_fee); + WEIGHT_TO_FEE.with(|v| *v.borrow_mut() = self.weight_to_fee); + } + pub fn build(self) -> sp_io::TestExternalities { + self.set_constants(); + let mut t = frame_system::GenesisConfig::default().build_storage::().unwrap(); + pallet_balances::GenesisConfig:: { + balances: if self.balance_factor > 0 { + vec![ + (1, 10 * self.balance_factor), + (2, 20 * self.balance_factor), + (3, 30 * self.balance_factor), + (4, 40 * self.balance_factor), + (5, 50 * self.balance_factor), + (6, 60 * self.balance_factor), + ] + } else { + vec![] + }, + } + .assimilate_storage(&mut t) + .unwrap(); + t.into() + } + } + + /// create a transaction info struct from weight. Handy to avoid building the whole struct. + pub fn info_from_weight(w: Weight) -> DispatchInfo { + // pays_fee: Pays::Yes -- class: DispatchClass::Normal + DispatchInfo { weight: w, ..Default::default() } + } + + fn post_info_from_weight(w: Weight) -> PostDispatchInfo { + PostDispatchInfo { actual_weight: Some(w), pays_fee: Default::default() } + } + + fn post_info_from_pays(p: Pays) -> PostDispatchInfo { + PostDispatchInfo { actual_weight: None, pays_fee: p } + } + + fn default_post_info() -> PostDispatchInfo { + PostDispatchInfo { actual_weight: None, pays_fee: Default::default() } + } + + #[test] + fn signed_extension_transaction_payment_work() { + ExtBuilder::default() + .balance_factor(10) + .base_weight(5) + .build() + .execute_with(|| { + let len = 10; + let pre = ChargeTransactionPayment::::from(0) + .pre_dispatch(&1, CALL, &info_from_weight(5), len) + .unwrap(); + assert_eq!(Balances::free_balance(1), 100 - 5 - 5 - 10); + + assert_ok!(ChargeTransactionPayment::::post_dispatch( + Some(pre), + &info_from_weight(5), + &default_post_info(), + len, + &Ok(()) + )); + assert_eq!(Balances::free_balance(1), 100 - 5 - 5 - 10); + assert_eq!(FEE_UNBALANCED_AMOUNT.with(|a| a.borrow().clone()), 5 + 5 + 10); + assert_eq!(TIP_UNBALANCED_AMOUNT.with(|a| a.borrow().clone()), 0); + + FEE_UNBALANCED_AMOUNT.with(|a| *a.borrow_mut() = 0); + + let pre = ChargeTransactionPayment::::from(5 /* tipped */) + .pre_dispatch(&2, CALL, &info_from_weight(100), len) + .unwrap(); + assert_eq!(Balances::free_balance(2), 200 - 5 - 10 - 100 - 5); + + assert_ok!(ChargeTransactionPayment::::post_dispatch( + Some(pre), + &info_from_weight(100), + &post_info_from_weight(50), + len, + &Ok(()) + )); + assert_eq!(Balances::free_balance(2), 200 - 5 - 10 - 50 - 5); + assert_eq!(FEE_UNBALANCED_AMOUNT.with(|a| a.borrow().clone()), 5 + 10 + 50); + assert_eq!(TIP_UNBALANCED_AMOUNT.with(|a| a.borrow().clone()), 5); + }); + } + + #[test] + fn signed_extension_transaction_payment_multiplied_refund_works() { + ExtBuilder::default() + .balance_factor(10) + .base_weight(5) + .build() + .execute_with(|| { + let len = 10; + >::put(Multiplier::saturating_from_rational(3, 2)); + + let pre = ChargeTransactionPayment::::from(5 /* tipped */) + .pre_dispatch(&2, CALL, &info_from_weight(100), len) + .unwrap(); + // 5 base fee, 10 byte fee, 3/2 * 100 weight fee, 5 tip + assert_eq!(Balances::free_balance(2), 200 - 5 - 10 - 150 - 5); + + assert_ok!(ChargeTransactionPayment::::post_dispatch( + Some(pre), + &info_from_weight(100), + &post_info_from_weight(50), + len, + &Ok(()) + )); + // 75 (3/2 of the returned 50 units of weight) is refunded + assert_eq!(Balances::free_balance(2), 200 - 5 - 10 - 75 - 5); + }); + } + + #[test] + fn signed_extension_transaction_payment_is_bounded() { + ExtBuilder::default().balance_factor(1000).byte_fee(0).build().execute_with(|| { + // maximum weight possible + assert_ok!(ChargeTransactionPayment::::from(0).pre_dispatch( + &1, + CALL, + &info_from_weight(Weight::max_value()), + 10 + )); + // fee will be proportional to what is the actual maximum weight in the runtime. + assert_eq!( + Balances::free_balance(&1), + (10000 - ::BlockWeights::get().max_block) as u64 + ); + }); + } + + #[test] + fn signed_extension_allows_free_transactions() { + ExtBuilder::default() + .base_weight(100) + .balance_factor(0) + .build() + .execute_with(|| { + // 1 ain't have a penny. + assert_eq!(Balances::free_balance(1), 0); + + let len = 100; + + // This is a completely free (and thus wholly insecure/DoS-ridden) transaction. + let operational_transaction = DispatchInfo { + weight: 0, + class: DispatchClass::Operational, + pays_fee: Pays::No, + }; + assert_ok!(ChargeTransactionPayment::::from(0).validate( + &1, + CALL, + &operational_transaction, + len + )); + + // like a InsecureFreeNormal + let free_transaction = + DispatchInfo { weight: 0, class: DispatchClass::Normal, pays_fee: Pays::Yes }; + assert_noop!( + ChargeTransactionPayment::::from(0).validate( + &1, + CALL, + &free_transaction, + len + ), + TransactionValidityError::Invalid(InvalidTransaction::Payment), + ); + }); + } + + #[test] + fn signed_ext_length_fee_is_also_updated_per_congestion() { + ExtBuilder::default() + .base_weight(5) + .balance_factor(10) + .build() + .execute_with(|| { + // all fees should be x1.5 + >::put(Multiplier::saturating_from_rational(3, 2)); + let len = 10; + + assert_ok!(ChargeTransactionPayment::::from(10) // tipped + .pre_dispatch(&1, CALL, &info_from_weight(3), len)); + assert_eq!( + Balances::free_balance(1), + 100 // original + - 10 // tip + - 5 // base + - 10 // len + - (3 * 3 / 2) // adjusted weight + ); + }) + } + + #[test] + fn query_info_and_fee_details_works() { + let call = Call::Balances(BalancesCall::transfer { dest: 2, value: 69 }); + let origin = 111111; + let extra = (); + let xt = TestXt::new(call.clone(), Some((origin, extra))); + let info = xt.get_dispatch_info(); + let ext = xt.encode(); + let len = ext.len() as u32; + + let unsigned_xt = TestXt::<_, ()>::new(call, None); + let unsigned_xt_info = unsigned_xt.get_dispatch_info(); + + ExtBuilder::default().base_weight(5).weight_fee(2).build().execute_with(|| { + // all fees should be x1.5 + >::put(Multiplier::saturating_from_rational(3, 2)); + + assert_eq!( + TransactionPayment::query_info(xt.clone(), len), + RuntimeDispatchInfo { + weight: info.weight, + class: info.class, + partial_fee: 5 * 2 /* base * weight_fee */ + + len as u64 /* len * 1 */ + + info.weight.min(BlockWeights::get().max_block) as u64 * 2 * 3 / 2 /* weight */ + }, + ); + + assert_eq!( + TransactionPayment::query_info(unsigned_xt.clone(), len), + RuntimeDispatchInfo { + weight: unsigned_xt_info.weight, + class: unsigned_xt_info.class, + partial_fee: 0, + }, + ); + + assert_eq!( + TransactionPayment::query_fee_details(xt, len), + FeeDetails { + inclusion_fee: Some(InclusionFee { + base_fee: 5 * 2, + len_fee: len as u64, + adjusted_weight_fee: info.weight.min(BlockWeights::get().max_block) as u64 * + 2 * 3 / 2 + }), + tip: 0, + }, + ); + + assert_eq!( + TransactionPayment::query_fee_details(unsigned_xt, len), + FeeDetails { inclusion_fee: None, tip: 0 }, + ); + }); + } + + #[test] + fn compute_fee_works_without_multiplier() { + ExtBuilder::default() + .base_weight(100) + .byte_fee(10) + .balance_factor(0) + .build() + .execute_with(|| { + // Next fee multiplier is zero + assert_eq!(>::get(), Multiplier::one()); + + // Tip only, no fees works + let dispatch_info = DispatchInfo { + weight: 0, + class: DispatchClass::Operational, + pays_fee: Pays::No, + }; + assert_eq!(Pallet::::compute_fee(0, &dispatch_info, 10), 10); + // No tip, only base fee works + let dispatch_info = DispatchInfo { + weight: 0, + class: DispatchClass::Operational, + pays_fee: Pays::Yes, + }; + assert_eq!(Pallet::::compute_fee(0, &dispatch_info, 0), 100); + // Tip + base fee works + assert_eq!(Pallet::::compute_fee(0, &dispatch_info, 69), 169); + // Len (byte fee) + base fee works + assert_eq!(Pallet::::compute_fee(42, &dispatch_info, 0), 520); + // Weight fee + base fee works + let dispatch_info = DispatchInfo { + weight: 1000, + class: DispatchClass::Operational, + pays_fee: Pays::Yes, + }; + assert_eq!(Pallet::::compute_fee(0, &dispatch_info, 0), 1100); + }); + } + + #[test] + fn compute_fee_works_with_multiplier() { + ExtBuilder::default() + .base_weight(100) + .byte_fee(10) + .balance_factor(0) + .build() + .execute_with(|| { + // Add a next fee multiplier. Fees will be x3/2. + >::put(Multiplier::saturating_from_rational(3, 2)); + // Base fee is unaffected by multiplier + let dispatch_info = DispatchInfo { + weight: 0, + class: DispatchClass::Operational, + pays_fee: Pays::Yes, + }; + assert_eq!(Pallet::::compute_fee(0, &dispatch_info, 0), 100); + + // Everything works together :) + let dispatch_info = DispatchInfo { + weight: 123, + class: DispatchClass::Operational, + pays_fee: Pays::Yes, + }; + // 123 weight, 456 length, 100 base + assert_eq!( + Pallet::::compute_fee(456, &dispatch_info, 789), + 100 + (3 * 123 / 2) + 4560 + 789, + ); + }); + } + + #[test] + fn compute_fee_works_with_negative_multiplier() { + ExtBuilder::default() + .base_weight(100) + .byte_fee(10) + .balance_factor(0) + .build() + .execute_with(|| { + // Add a next fee multiplier. All fees will be x1/2. + >::put(Multiplier::saturating_from_rational(1, 2)); + + // Base fee is unaffected by multiplier. + let dispatch_info = DispatchInfo { + weight: 0, + class: DispatchClass::Operational, + pays_fee: Pays::Yes, + }; + assert_eq!(Pallet::::compute_fee(0, &dispatch_info, 0), 100); + + // Everything works together. + let dispatch_info = DispatchInfo { + weight: 123, + class: DispatchClass::Operational, + pays_fee: Pays::Yes, + }; + // 123 weight, 456 length, 100 base + assert_eq!( + Pallet::::compute_fee(456, &dispatch_info, 789), + 100 + (123 / 2) + 4560 + 789, + ); + }); + } + + #[test] + fn compute_fee_does_not_overflow() { + ExtBuilder::default() + .base_weight(100) + .byte_fee(10) + .balance_factor(0) + .build() + .execute_with(|| { + // Overflow is handled + let dispatch_info = DispatchInfo { + weight: Weight::max_value(), + class: DispatchClass::Operational, + pays_fee: Pays::Yes, + }; + assert_eq!( + Pallet::::compute_fee(u32::MAX, &dispatch_info, u64::MAX), + u64::MAX + ); + }); + } + + #[test] + fn refund_does_not_recreate_account() { + ExtBuilder::default() + .balance_factor(10) + .base_weight(5) + .build() + .execute_with(|| { + // So events are emitted + System::set_block_number(10); + let len = 10; + let pre = ChargeTransactionPayment::::from(5 /* tipped */) + .pre_dispatch(&2, CALL, &info_from_weight(100), len) + .unwrap(); + assert_eq!(Balances::free_balance(2), 200 - 5 - 10 - 100 - 5); + + // kill the account between pre and post dispatch + assert_ok!(Balances::transfer(Some(2).into(), 3, Balances::free_balance(2))); + assert_eq!(Balances::free_balance(2), 0); + + assert_ok!(ChargeTransactionPayment::::post_dispatch( + Some(pre), + &info_from_weight(100), + &post_info_from_weight(50), + len, + &Ok(()) + )); + assert_eq!(Balances::free_balance(2), 0); + // Transfer Event + System::assert_has_event(Event::Balances(pallet_balances::Event::Transfer { + from: 2, + to: 3, + amount: 80, + })); + // Killed Event + System::assert_has_event(Event::System(system::Event::KilledAccount { + account: 2, + })); + }); + } + + #[test] + fn actual_weight_higher_than_max_refunds_nothing() { + ExtBuilder::default() + .balance_factor(10) + .base_weight(5) + .build() + .execute_with(|| { + let len = 10; + let pre = ChargeTransactionPayment::::from(5 /* tipped */) + .pre_dispatch(&2, CALL, &info_from_weight(100), len) + .unwrap(); + assert_eq!(Balances::free_balance(2), 200 - 5 - 10 - 100 - 5); + + assert_ok!(ChargeTransactionPayment::::post_dispatch( + Some(pre), + &info_from_weight(100), + &post_info_from_weight(101), + len, + &Ok(()) + )); + assert_eq!(Balances::free_balance(2), 200 - 5 - 10 - 100 - 5); + }); + } + + #[test] + fn zero_transfer_on_free_transaction() { + ExtBuilder::default() + .balance_factor(10) + .base_weight(5) + .build() + .execute_with(|| { + // So events are emitted + System::set_block_number(10); + let len = 10; + let dispatch_info = + DispatchInfo { weight: 100, pays_fee: Pays::No, class: DispatchClass::Normal }; + let user = 69; + let pre = ChargeTransactionPayment::::from(0) + .pre_dispatch(&user, CALL, &dispatch_info, len) + .unwrap(); + assert_eq!(Balances::total_balance(&user), 0); + assert_ok!(ChargeTransactionPayment::::post_dispatch( + Some(pre), + &dispatch_info, + &default_post_info(), + len, + &Ok(()) + )); + assert_eq!(Balances::total_balance(&user), 0); + // No events for such a scenario + assert_eq!(System::events().len(), 0); + }); + } + + #[test] + fn refund_consistent_with_actual_weight() { + ExtBuilder::default() + .balance_factor(10) + .base_weight(7) + .build() + .execute_with(|| { + let info = info_from_weight(100); + let post_info = post_info_from_weight(33); + let prev_balance = Balances::free_balance(2); + let len = 10; + let tip = 5; + + >::put(Multiplier::saturating_from_rational(5, 4)); + + let pre = ChargeTransactionPayment::::from(tip) + .pre_dispatch(&2, CALL, &info, len) + .unwrap(); + + ChargeTransactionPayment::::post_dispatch( + Some(pre), + &info, + &post_info, + len, + &Ok(()), + ) + .unwrap(); + + let refund_based_fee = prev_balance - Balances::free_balance(2); + let actual_fee = + Pallet::::compute_actual_fee(len as u32, &info, &post_info, tip); + + // 33 weight, 10 length, 7 base, 5 tip + assert_eq!(actual_fee, 7 + 10 + (33 * 5 / 4) + 5); + assert_eq!(refund_based_fee, actual_fee); + }); + } + + #[test] + fn should_alter_operational_priority() { + let tip = 5; + let len = 10; + + ExtBuilder::default().balance_factor(100).build().execute_with(|| { + let normal = + DispatchInfo { weight: 100, class: DispatchClass::Normal, pays_fee: Pays::Yes }; + let priority = ChargeTransactionPayment::(tip) + .validate(&2, CALL, &normal, len) + .unwrap() + .priority; + + assert_eq!(priority, 60); + + let priority = ChargeTransactionPayment::(2 * tip) + .validate(&2, CALL, &normal, len) + .unwrap() + .priority; + + assert_eq!(priority, 110); + }); + + ExtBuilder::default().balance_factor(100).build().execute_with(|| { + let op = DispatchInfo { + weight: 100, + class: DispatchClass::Operational, + pays_fee: Pays::Yes, + }; + let priority = ChargeTransactionPayment::(tip) + .validate(&2, CALL, &op, len) + .unwrap() + .priority; + assert_eq!(priority, 5810); + + let priority = ChargeTransactionPayment::(2 * tip) + .validate(&2, CALL, &op, len) + .unwrap() + .priority; + assert_eq!(priority, 6110); + }); + } + + #[test] + fn no_tip_has_some_priority() { + let tip = 0; + let len = 10; + + ExtBuilder::default().balance_factor(100).build().execute_with(|| { + let normal = + DispatchInfo { weight: 100, class: DispatchClass::Normal, pays_fee: Pays::Yes }; + let priority = ChargeTransactionPayment::(tip) + .validate(&2, CALL, &normal, len) + .unwrap() + .priority; + + assert_eq!(priority, 10); + }); + + ExtBuilder::default().balance_factor(100).build().execute_with(|| { + let op = DispatchInfo { + weight: 100, + class: DispatchClass::Operational, + pays_fee: Pays::Yes, + }; + let priority = ChargeTransactionPayment::(tip) + .validate(&2, CALL, &op, len) + .unwrap() + .priority; + assert_eq!(priority, 5510); + }); + } + + #[test] + fn higher_tip_have_higher_priority() { + let get_priorities = |tip: u64| { + let mut priority1 = 0; + let mut priority2 = 0; + let len = 10; + ExtBuilder::default().balance_factor(100).build().execute_with(|| { + let normal = + DispatchInfo { weight: 100, class: DispatchClass::Normal, pays_fee: Pays::Yes }; + priority1 = ChargeTransactionPayment::(tip) + .validate(&2, CALL, &normal, len) + .unwrap() + .priority; + }); + + ExtBuilder::default().balance_factor(100).build().execute_with(|| { + let op = DispatchInfo { + weight: 100, + class: DispatchClass::Operational, + pays_fee: Pays::Yes, + }; + priority2 = ChargeTransactionPayment::(tip) + .validate(&2, CALL, &op, len) + .unwrap() + .priority; + }); + + (priority1, priority2) + }; + + let mut prev_priorities = get_priorities(0); + + for tip in 1..3 { + let priorities = get_priorities(tip); + assert!(prev_priorities.0 < priorities.0); + assert!(prev_priorities.1 < priorities.1); + prev_priorities = priorities; + } + } + + #[test] + fn post_info_can_change_pays_fee() { + ExtBuilder::default() + .balance_factor(10) + .base_weight(7) + .build() + .execute_with(|| { + let info = info_from_weight(100); + let post_info = post_info_from_pays(Pays::No); + let prev_balance = Balances::free_balance(2); + let len = 10; + let tip = 5; + + >::put(Multiplier::saturating_from_rational(5, 4)); + + let pre = ChargeTransactionPayment::::from(tip) + .pre_dispatch(&2, CALL, &info, len) + .unwrap(); + + ChargeTransactionPayment::::post_dispatch( + Some(pre), + &info, + &post_info, + len, + &Ok(()), + ) + .unwrap(); + + let refund_based_fee = prev_balance - Balances::free_balance(2); + let actual_fee = + Pallet::::compute_actual_fee(len as u32, &info, &post_info, tip); + + // Only 5 tip is paid + assert_eq!(actual_fee, 5); + assert_eq!(refund_based_fee, actual_fee); + }); + } +} diff --git a/frame/transaction-payment-mangata/src/payment.rs b/frame/transaction-payment-mangata/src/payment.rs new file mode 100644 index 0000000000000..3a5fad0d66a52 --- /dev/null +++ b/frame/transaction-payment-mangata/src/payment.rs @@ -0,0 +1,148 @@ +/// ! Traits and default implementation for paying transaction fees. +use crate::Config; + +use codec::FullCodec; +use sp_runtime::{ + traits::{ + AtLeast32BitUnsigned, DispatchInfoOf, MaybeSerializeDeserialize, PostDispatchInfoOf, + Saturating, Zero, + }, + transaction_validity::InvalidTransaction, +}; +use sp_std::{fmt::Debug, marker::PhantomData}; + +use frame_support::{ + traits::{Currency, ExistenceRequirement, Imbalance, OnUnbalanced, WithdrawReasons}, + unsigned::TransactionValidityError, +}; + +type NegativeImbalanceOf = + ::AccountId>>::NegativeImbalance; + +/// Handle withdrawing, refunding and depositing of transaction fees. +pub trait OnChargeTransaction { + /// The underlying integer type in which fees are calculated. + type Balance: AtLeast32BitUnsigned + + FullCodec + + Copy + + MaybeSerializeDeserialize + + Debug + + Default + + scale_info::TypeInfo; + type LiquidityInfo: Default; + + /// Before the transaction is executed the payment of the transaction fees + /// need to be secured. + /// + /// Note: The `fee` already includes the `tip`. + fn withdraw_fee( + who: &T::AccountId, + call: &T::Call, + dispatch_info: &DispatchInfoOf, + fee: Self::Balance, + tip: Self::Balance, + ) -> Result; + + /// After the transaction was executed the actual fee can be calculated. + /// This function should refund any overpaid fees and optionally deposit + /// the corrected amount. + /// + /// Note: The `fee` already includes the `tip`. + fn correct_and_deposit_fee( + who: &T::AccountId, + dispatch_info: &DispatchInfoOf, + post_info: &PostDispatchInfoOf, + corrected_fee: Self::Balance, + tip: Self::Balance, + already_withdrawn: Self::LiquidityInfo, + ) -> Result<(), TransactionValidityError>; +} + +/// Implements the transaction payment for a pallet implementing the `Currency` +/// trait (eg. the pallet_balances) using an unbalance handler (implementing +/// `OnUnbalanced`). +/// +/// The unbalance handler is given 2 unbalanceds in [`OnUnbalanced::on_unbalanceds`]: fee and +/// then tip. +pub struct CurrencyAdapter(PhantomData<(C, OU)>); + +/// Default implementation for a Currency and an OnUnbalanced handler. +/// +/// The unbalance handler is given 2 unbalanceds in [`OnUnbalanced::on_unbalanceds`]: fee and +/// then tip. +impl OnChargeTransaction for CurrencyAdapter +where + T: Config, + C: Currency<::AccountId>, + C::PositiveImbalance: Imbalance< + ::AccountId>>::Balance, + Opposite = C::NegativeImbalance, + >, + C::NegativeImbalance: Imbalance< + ::AccountId>>::Balance, + Opposite = C::PositiveImbalance, + >, + OU: OnUnbalanced>, +{ + type LiquidityInfo = Option>; + type Balance = ::AccountId>>::Balance; + + /// Withdraw the predicted fee from the transaction origin. + /// + /// Note: The `fee` already includes the `tip`. + fn withdraw_fee( + who: &T::AccountId, + _call: &T::Call, + _info: &DispatchInfoOf, + fee: Self::Balance, + tip: Self::Balance, + ) -> Result { + if fee.is_zero() { + return Ok(None) + } + + let withdraw_reason = if tip.is_zero() { + WithdrawReasons::TRANSACTION_PAYMENT + } else { + WithdrawReasons::TRANSACTION_PAYMENT | WithdrawReasons::TIP + }; + + match C::withdraw(who, fee, withdraw_reason, ExistenceRequirement::KeepAlive) { + Ok(imbalance) => Ok(Some(imbalance)), + Err(_) => Err(InvalidTransaction::Payment.into()), + } + } + + /// Hand the fee and the tip over to the `[OnUnbalanced]` implementation. + /// Since the predicted fee might have been too high, parts of the fee may + /// be refunded. + /// + /// Note: The `corrected_fee` already includes the `tip`. + fn correct_and_deposit_fee( + who: &T::AccountId, + _dispatch_info: &DispatchInfoOf, + _post_info: &PostDispatchInfoOf, + corrected_fee: Self::Balance, + tip: Self::Balance, + already_withdrawn: Self::LiquidityInfo, + ) -> Result<(), TransactionValidityError> { + if let Some(paid) = already_withdrawn { + // Calculate how much refund we should return + let refund_amount = paid.peek().saturating_sub(corrected_fee); + // refund to the the account that paid the fees. If this fails, the + // account might have dropped below the existential balance. In + // that case we don't refund anything. + let refund_imbalance = C::deposit_into_existing(who, refund_amount) + .unwrap_or_else(|_| C::PositiveImbalance::zero()); + // merge the imbalance caused by paying the fees and refunding parts of it again. + let adjusted_paid = paid + .offset(refund_imbalance) + .same() + .map_err(|_| TransactionValidityError::Invalid(InvalidTransaction::Payment))?; + // Call someone else to handle the imbalance (fee and tip separately) + let (tip, fee) = adjusted_paid.split(tip); + OU::on_unbalanceds(Some(fee).into_iter().chain(Some(tip))); + } + Ok(()) + } +} diff --git a/frame/transaction-payment-mangata/src/types.rs b/frame/transaction-payment-mangata/src/types.rs new file mode 100644 index 0000000000000..f866c2069e019 --- /dev/null +++ b/frame/transaction-payment-mangata/src/types.rs @@ -0,0 +1,168 @@ +// This file is part of Substrate. + +// Copyright (C) 2021-2022 Parity Technologies (UK) Ltd. +// SPDX-License-Identifier: Apache-2.0 + +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +//! Types for transaction-payment-mangata RPC. + +use codec::{Decode, Encode}; +#[cfg(feature = "std")] +use serde::{Deserialize, Serialize}; + +use sp_runtime::traits::{AtLeast32BitUnsigned, Zero}; +use sp_std::prelude::*; + +use frame_support::weights::{DispatchClass, Weight}; + +/// The base fee and adjusted weight and length fees constitute the _inclusion fee_. +#[derive(Encode, Decode, Clone, Eq, PartialEq)] +#[cfg_attr(feature = "std", derive(Debug, Serialize, Deserialize))] +#[cfg_attr(feature = "std", serde(rename_all = "camelCase"))] +pub struct InclusionFee { + /// This is the minimum amount a user pays for a transaction. It is declared + /// as a base _weight_ in the runtime and converted to a fee using `WeightToFee`. + pub base_fee: Balance, + /// The length fee, the amount paid for the encoded length (in bytes) of the transaction. + pub len_fee: Balance, + /// + /// - `targeted_fee_adjustment`: This is a multiplier that can tune the final fee based on the + /// congestion of the network. + /// - `weight_fee`: This amount is computed based on the weight of the transaction. Weight + /// accounts for the execution time of a transaction. + /// + /// adjusted_weight_fee = targeted_fee_adjustment * weight_fee + pub adjusted_weight_fee: Balance, +} + +impl InclusionFee { + /// Returns the total of inclusion fee. + /// + /// ```ignore + /// inclusion_fee = base_fee + len_fee + adjusted_weight_fee + /// ``` + pub fn inclusion_fee(&self) -> Balance { + self.base_fee + .saturating_add(self.len_fee) + .saturating_add(self.adjusted_weight_fee) + } +} + +/// The `FeeDetails` is composed of: +/// - (Optional) `inclusion_fee`: Only the `Pays::Yes` transaction can have the inclusion fee. +/// - `tip`: If included in the transaction, the tip will be added on top. Only signed +/// transactions can have a tip. +#[derive(Encode, Decode, Clone, Eq, PartialEq)] +#[cfg_attr(feature = "std", derive(Debug, Serialize, Deserialize))] +#[cfg_attr(feature = "std", serde(rename_all = "camelCase"))] +pub struct FeeDetails { + /// The minimum fee for a transaction to be included in a block. + pub inclusion_fee: Option>, + // Do not serialize and deserialize `tip` as we actually can not pass any tip to the RPC. + #[cfg_attr(feature = "std", serde(skip))] + pub tip: Balance, +} + +impl FeeDetails { + /// Returns the final fee. + /// + /// ```ignore + /// final_fee = inclusion_fee + tip; + /// ``` + pub fn final_fee(&self) -> Balance { + self.inclusion_fee + .as_ref() + .map(|i| i.inclusion_fee()) + .unwrap_or_else(|| Zero::zero()) + .saturating_add(self.tip) + } +} + +/// Information related to a dispatchable's class, weight, and fee that can be queried from the +/// runtime. +#[derive(Eq, PartialEq, Encode, Decode, Default)] +#[cfg_attr(feature = "std", derive(Debug, Serialize, Deserialize))] +#[cfg_attr(feature = "std", serde(rename_all = "camelCase"))] +#[cfg_attr(feature = "std", serde(bound(serialize = "Balance: std::fmt::Display")))] +#[cfg_attr(feature = "std", serde(bound(deserialize = "Balance: std::str::FromStr")))] +pub struct RuntimeDispatchInfo { + /// Weight of this dispatch. + pub weight: Weight, + /// Class of this dispatch. + pub class: DispatchClass, + /// The inclusion fee of this dispatch. + /// + /// This does not include a tip or anything else that + /// depends on the signature (i.e. depends on a `SignedExtension`). + #[cfg_attr(feature = "std", serde(with = "serde_balance"))] + pub partial_fee: Balance, +} + +#[cfg(feature = "std")] +mod serde_balance { + use serde::{Deserialize, Deserializer, Serializer}; + + pub fn serialize( + t: &T, + serializer: S, + ) -> Result { + serializer.serialize_str(&t.to_string()) + } + + pub fn deserialize<'de, D: Deserializer<'de>, T: std::str::FromStr>( + deserializer: D, + ) -> Result { + let s = String::deserialize(deserializer)?; + s.parse::().map_err(|_| serde::de::Error::custom("Parse from string failed")) + } +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn should_serialize_and_deserialize_properly_with_string() { + let info = RuntimeDispatchInfo { + weight: 5, + class: DispatchClass::Normal, + partial_fee: 1_000_000_u64, + }; + + let json_str = r#"{"weight":5,"class":"normal","partialFee":"1000000"}"#; + + assert_eq!(serde_json::to_string(&info).unwrap(), json_str); + assert_eq!(serde_json::from_str::>(json_str).unwrap(), info); + + // should not panic + serde_json::to_value(&info).unwrap(); + } + + #[test] + fn should_serialize_and_deserialize_properly_large_value() { + let info = RuntimeDispatchInfo { + weight: 5, + class: DispatchClass::Normal, + partial_fee: u128::max_value(), + }; + + let json_str = r#"{"weight":5,"class":"normal","partialFee":"340282366920938463463374607431768211455"}"#; + + assert_eq!(serde_json::to_string(&info).unwrap(), json_str); + assert_eq!(serde_json::from_str::>(json_str).unwrap(), info); + + // should not panic + serde_json::to_value(&info).unwrap(); + } +}