diff --git a/.github/workflows/e2e.yml b/.github/workflows/e2e.yml index 65fb5fed57..a3c7ea5ad9 100644 --- a/.github/workflows/e2e.yml +++ b/.github/workflows/e2e.yml @@ -1,4 +1,15 @@ name: E2E Tests +concurrency: + group: e2e-${{ github.ref }} + cancel-in-progress: true + on: - workflow_dispatch: \ No newline at end of file + pull_request: + + workflow_dispatch: + inputs: + verbose: + description: "Output more information when triggered manually" + required: false + default: "" \ No newline at end of file diff --git a/Cargo.lock b/Cargo.lock index f936e40cf6..d19a613c22 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -54,7 +54,7 @@ checksum = "b169f7a6d4742236a0a00c541b845991d0ac43e546831af1249753ab4c3aa3a0" dependencies = [ "cfg-if", "cipher 0.4.4", - "cpufeatures", + "cpufeatures 0.2.17", ] [[package]] @@ -1056,7 +1056,7 @@ checksum = "9b34d609dfbaf33d6889b2b7106d3ca345eacad44200913df5ba02bfd31d2ba9" [[package]] name = "assets-common" version = "0.22.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "cumulus-primitives-core", "ethereum-standards", @@ -1435,7 +1435,7 @@ checksum = "55248b47b0caf0546f7988906588779981c43bb1bc9d0c44087278f80cdb44ba" [[package]] name = "binary-merkle-tree" version = "16.0.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "hash-db", "log", @@ -1704,7 +1704,7 @@ dependencies = [ [[package]] name = "bp-header-chain" version = "0.21.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "bp-runtime", "finality-grandpa", @@ -1721,7 +1721,7 @@ dependencies = [ [[package]] name = "bp-messages" version = "0.21.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "bp-header-chain", "bp-runtime", @@ -1737,7 +1737,7 @@ dependencies = [ [[package]] name = "bp-parachains" version = "0.21.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "bp-header-chain", "bp-polkadot-core", @@ -1754,7 +1754,7 @@ dependencies = [ [[package]] name = "bp-polkadot-core" version = "0.21.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "bp-messages", "bp-runtime", @@ -1770,7 +1770,7 @@ dependencies = [ [[package]] name = "bp-relayers" version = "0.21.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "bp-header-chain", "bp-messages", @@ -1788,7 +1788,7 @@ dependencies = [ [[package]] name = "bp-runtime" version = "0.21.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "frame-support", "frame-system", @@ -1811,7 +1811,7 @@ dependencies = [ [[package]] name = "bp-test-utils" version = "0.21.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "bp-header-chain", "bp-parachains", @@ -1831,7 +1831,7 @@ dependencies = [ [[package]] name = "bp-xcm-bridge-hub" version = "0.7.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "bp-messages", "bp-runtime", @@ -1848,7 +1848,7 @@ dependencies = [ [[package]] name = "bp-xcm-bridge-hub-router" version = "0.18.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "parity-scale-codec", "scale-info", @@ -1860,7 +1860,7 @@ dependencies = [ [[package]] name = "bridge-hub-common" version = "0.14.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "cumulus-primitives-core", "frame-support", @@ -1879,7 +1879,7 @@ dependencies = [ [[package]] name = "bridge-runtime-common" version = "0.22.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "bp-header-chain", "bp-messages", @@ -2095,7 +2095,18 @@ checksum = "c3613f74bd2eac03dad61bd53dbe620703d4371614fe0bc3b9f04dd36fe4e818" dependencies = [ "cfg-if", "cipher 0.4.4", - "cpufeatures", + "cpufeatures 0.2.17", +] + +[[package]] +name = "chacha20" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6f8d983286843e49675a4b7a2d174efe136dc93a18d69130dd18198a6c167601" +dependencies = [ + "cfg-if", + "cpufeatures 0.3.0", + "rand_core 0.10.0", ] [[package]] @@ -2105,7 +2116,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "10cd79432192d1c0f4e1a0fef9527696cc039165d729fb41b3f4f4f354c2dc35" dependencies = [ "aead", - "chacha20", + "chacha20 0.9.1", "cipher 0.4.4", "poly1305", "zeroize", @@ -2326,7 +2337,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b6407bff74dea37e0fa3dc1c1c974e5d46405f0c987bf9997a0762adce71eda6" dependencies = [ "cfg-if", - "cpufeatures", + "cpufeatures 0.2.17", "proptest", "serde_core", ] @@ -2352,7 +2363,7 @@ version = "0.1.16" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f9d839f2a20b0aee515dc581a6172f2321f96cab76c1a38a4c584a194955390e" dependencies = [ - "getrandom 0.2.16", + "getrandom 0.2.17", "once_cell", "tiny-keccak", ] @@ -2464,6 +2475,15 @@ dependencies = [ "libc", ] +[[package]] +name = "cpufeatures" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b2a41393f66f16b0823bb79094d54ac5fbd34ab292ddafb9a0456ac9f87d201" +dependencies = [ + "libc", +] + [[package]] name = "cranelift-bforest" version = "0.95.1" @@ -2558,7 +2578,7 @@ dependencies = [ "itertools 0.10.5", "log", "smallvec", - "wasmparser", + "wasmparser 0.102.0", "wasmtime-types", ] @@ -2711,7 +2731,7 @@ dependencies = [ [[package]] name = "cumulus-client-bootnodes" version = "0.2.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "array-bytes 6.2.3", "async-channel 1.9.0", @@ -2737,7 +2757,7 @@ dependencies = [ [[package]] name = "cumulus-client-cli" version = "0.24.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "clap", "parity-scale-codec", @@ -2754,7 +2774,7 @@ dependencies = [ [[package]] name = "cumulus-client-collator" version = "0.24.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "cumulus-client-consensus-common", "cumulus-client-network", @@ -2777,7 +2797,7 @@ dependencies = [ [[package]] name = "cumulus-client-consensus-aura" version = "0.24.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "async-trait", "cumulus-client-collator", @@ -2824,7 +2844,7 @@ dependencies = [ [[package]] name = "cumulus-client-consensus-common" version = "0.24.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "async-trait", "cumulus-client-pov-recovery", @@ -2856,7 +2876,7 @@ dependencies = [ [[package]] name = "cumulus-client-consensus-proposer" version = "0.20.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "anyhow", "async-trait", @@ -2871,7 +2891,7 @@ dependencies = [ [[package]] name = "cumulus-client-consensus-relay-chain" version = "0.24.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "async-trait", "cumulus-client-consensus-common", @@ -2894,7 +2914,7 @@ dependencies = [ [[package]] name = "cumulus-client-network" version = "0.24.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "async-trait", "cumulus-relay-chain-interface", @@ -2921,7 +2941,7 @@ dependencies = [ [[package]] name = "cumulus-client-parachain-inherent" version = "0.18.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "async-trait", "cumulus-primitives-core", @@ -2931,7 +2951,7 @@ dependencies = [ "parity-scale-codec", "sc-client-api", "sc-consensus-babe", - "sp-crypto-hashing 0.1.0 (git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8)", + "sp-crypto-hashing 0.1.0 (git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f)", "sp-inherents", "sp-runtime", "sp-state-machine", @@ -2942,7 +2962,7 @@ dependencies = [ [[package]] name = "cumulus-client-pov-recovery" version = "0.24.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "async-trait", "cumulus-primitives-core", @@ -2970,7 +2990,7 @@ dependencies = [ [[package]] name = "cumulus-client-service" version = "0.25.1" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "async-channel 1.9.0", "cumulus-client-cli", @@ -3010,7 +3030,7 @@ dependencies = [ [[package]] name = "cumulus-pallet-aura-ext" version = "0.21.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "cumulus-pallet-parachain-system", "frame-support", @@ -3027,7 +3047,7 @@ dependencies = [ [[package]] name = "cumulus-pallet-dmp-queue" version = "0.21.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "cumulus-primitives-core", "frame-benchmarking", @@ -3044,7 +3064,7 @@ dependencies = [ [[package]] name = "cumulus-pallet-parachain-system" version = "0.21.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "bytes", "cumulus-pallet-parachain-system-proc-macro", @@ -3081,7 +3101,7 @@ dependencies = [ [[package]] name = "cumulus-pallet-parachain-system-proc-macro" version = "0.6.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "proc-macro-crate 3.4.0", "proc-macro2", @@ -3092,7 +3112,7 @@ dependencies = [ [[package]] name = "cumulus-pallet-session-benchmarking" version = "22.0.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "frame-benchmarking", "frame-support", @@ -3105,7 +3125,7 @@ dependencies = [ [[package]] name = "cumulus-pallet-solo-to-para" version = "0.21.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "cumulus-pallet-parachain-system", "frame-support", @@ -3120,7 +3140,7 @@ dependencies = [ [[package]] name = "cumulus-pallet-weight-reclaim" version = "0.3.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "cumulus-primitives-storage-weight-reclaim", "derive-where", @@ -3139,7 +3159,7 @@ dependencies = [ [[package]] name = "cumulus-pallet-xcm" version = "0.20.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "cumulus-primitives-core", "frame-support", @@ -3154,7 +3174,7 @@ dependencies = [ [[package]] name = "cumulus-pallet-xcmp-queue" version = "0.21.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "approx", "bounded-collections 0.2.4", @@ -3179,7 +3199,7 @@ dependencies = [ [[package]] name = "cumulus-ping" version = "0.21.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "cumulus-pallet-xcm", "cumulus-primitives-core", @@ -3194,7 +3214,7 @@ dependencies = [ [[package]] name = "cumulus-primitives-aura" version = "0.18.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "sp-api", "sp-consensus-aura", @@ -3203,7 +3223,7 @@ dependencies = [ [[package]] name = "cumulus-primitives-core" version = "0.19.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "parity-scale-codec", "polkadot-core-primitives", @@ -3220,7 +3240,7 @@ dependencies = [ [[package]] name = "cumulus-primitives-parachain-inherent" version = "0.19.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "async-trait", "cumulus-primitives-core", @@ -3234,7 +3254,7 @@ dependencies = [ [[package]] name = "cumulus-primitives-proof-size-hostfunction" version = "0.13.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "sp-externalities", "sp-runtime-interface", @@ -3244,7 +3264,7 @@ dependencies = [ [[package]] name = "cumulus-primitives-storage-weight-reclaim" version = "12.0.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "cumulus-primitives-core", "cumulus-primitives-proof-size-hostfunction", @@ -3261,7 +3281,7 @@ dependencies = [ [[package]] name = "cumulus-primitives-utility" version = "0.21.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "cumulus-primitives-core", "frame-support", @@ -3278,7 +3298,7 @@ dependencies = [ [[package]] name = "cumulus-relay-chain-inprocess-interface" version = "0.25.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "async-channel 1.9.0", "async-trait", @@ -3306,7 +3326,7 @@ dependencies = [ [[package]] name = "cumulus-relay-chain-interface" version = "0.24.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "async-trait", "cumulus-primitives-core", @@ -3326,7 +3346,7 @@ dependencies = [ [[package]] name = "cumulus-relay-chain-minimal-node" version = "0.25.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "array-bytes 6.2.3", "async-channel 1.9.0", @@ -3362,7 +3382,7 @@ dependencies = [ [[package]] name = "cumulus-relay-chain-rpc-interface" version = "0.24.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "async-trait", "cumulus-primitives-core", @@ -3403,7 +3423,7 @@ dependencies = [ [[package]] name = "cumulus-relay-chain-streams" version = "0.2.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "cumulus-relay-chain-interface", "futures", @@ -3417,7 +3437,7 @@ dependencies = [ [[package]] name = "cumulus-test-relay-sproof-builder" version = "0.20.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "cumulus-primitives-core", "parity-scale-codec", @@ -3434,7 +3454,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "97fb8b7c4503de7d6ae7b42ab72a5a59857b4c937ec27a3d4539dba95b5ab2be" dependencies = [ "cfg-if", - "cpufeatures", + "cpufeatures 0.2.17", "curve25519-dalek-derive", "digest 0.10.7", "fiat-crypto", @@ -4198,7 +4218,7 @@ dependencies = [ [[package]] name = "ethereum-standards" version = "0.1.1" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "alloy-core", ] @@ -4415,7 +4435,7 @@ dependencies = [ [[package]] name = "fc-api" version = "1.0.0-dev" -source = "git+https://github.com/opentensor/frontier?rev=f12a1274f91442a564bb722a2b9547caba487fa0#f12a1274f91442a564bb722a2b9547caba487fa0" +source = "git+https://github.com/opentensor/frontier?rev=b4ee632bbc81321d3891c82dd2c4c01438625d83#b4ee632bbc81321d3891c82dd2c4c01438625d83" dependencies = [ "async-trait", "fp-storage", @@ -4427,7 +4447,7 @@ dependencies = [ [[package]] name = "fc-aura" version = "1.0.0-dev" -source = "git+https://github.com/opentensor/frontier?rev=f12a1274f91442a564bb722a2b9547caba487fa0#f12a1274f91442a564bb722a2b9547caba487fa0" +source = "git+https://github.com/opentensor/frontier?rev=b4ee632bbc81321d3891c82dd2c4c01438625d83#b4ee632bbc81321d3891c82dd2c4c01438625d83" dependencies = [ "fc-rpc", "fp-storage", @@ -4443,7 +4463,7 @@ dependencies = [ [[package]] name = "fc-babe" version = "1.0.0-dev" -source = "git+https://github.com/opentensor/frontier?rev=f12a1274f91442a564bb722a2b9547caba487fa0#f12a1274f91442a564bb722a2b9547caba487fa0" +source = "git+https://github.com/opentensor/frontier?rev=b4ee632bbc81321d3891c82dd2c4c01438625d83#b4ee632bbc81321d3891c82dd2c4c01438625d83" dependencies = [ "fc-rpc", "sc-client-api", @@ -4459,7 +4479,7 @@ dependencies = [ [[package]] name = "fc-consensus" version = "2.0.0-dev" -source = "git+https://github.com/opentensor/frontier?rev=f12a1274f91442a564bb722a2b9547caba487fa0#f12a1274f91442a564bb722a2b9547caba487fa0" +source = "git+https://github.com/opentensor/frontier?rev=b4ee632bbc81321d3891c82dd2c4c01438625d83#b4ee632bbc81321d3891c82dd2c4c01438625d83" dependencies = [ "async-trait", "fp-consensus", @@ -4475,7 +4495,7 @@ dependencies = [ [[package]] name = "fc-db" version = "2.0.0-dev" -source = "git+https://github.com/opentensor/frontier?rev=f12a1274f91442a564bb722a2b9547caba487fa0#f12a1274f91442a564bb722a2b9547caba487fa0" +source = "git+https://github.com/opentensor/frontier?rev=b4ee632bbc81321d3891c82dd2c4c01438625d83#b4ee632bbc81321d3891c82dd2c4c01438625d83" dependencies = [ "async-trait", "ethereum", @@ -4505,7 +4525,7 @@ dependencies = [ [[package]] name = "fc-mapping-sync" version = "2.0.0-dev" -source = "git+https://github.com/opentensor/frontier?rev=f12a1274f91442a564bb722a2b9547caba487fa0#f12a1274f91442a564bb722a2b9547caba487fa0" +source = "git+https://github.com/opentensor/frontier?rev=b4ee632bbc81321d3891c82dd2c4c01438625d83#b4ee632bbc81321d3891c82dd2c4c01438625d83" dependencies = [ "fc-db", "fc-storage", @@ -4528,7 +4548,7 @@ dependencies = [ [[package]] name = "fc-rpc" version = "2.0.0-dev" -source = "git+https://github.com/opentensor/frontier?rev=f12a1274f91442a564bb722a2b9547caba487fa0#f12a1274f91442a564bb722a2b9547caba487fa0" +source = "git+https://github.com/opentensor/frontier?rev=b4ee632bbc81321d3891c82dd2c4c01438625d83#b4ee632bbc81321d3891c82dd2c4c01438625d83" dependencies = [ "ethereum", "ethereum-types", @@ -4579,7 +4599,7 @@ dependencies = [ [[package]] name = "fc-rpc-core" version = "1.1.0-dev" -source = "git+https://github.com/opentensor/frontier?rev=f12a1274f91442a564bb722a2b9547caba487fa0#f12a1274f91442a564bb722a2b9547caba487fa0" +source = "git+https://github.com/opentensor/frontier?rev=b4ee632bbc81321d3891c82dd2c4c01438625d83#b4ee632bbc81321d3891c82dd2c4c01438625d83" dependencies = [ "ethereum", "ethereum-types", @@ -4588,13 +4608,13 @@ dependencies = [ "rustc-hex", "serde", "serde_json", - "sp-crypto-hashing 0.1.0 (git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8)", + "sp-crypto-hashing 0.1.0 (git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f)", ] [[package]] name = "fc-storage" version = "1.0.0-dev" -source = "git+https://github.com/opentensor/frontier?rev=f12a1274f91442a564bb722a2b9547caba487fa0#f12a1274f91442a564bb722a2b9547caba487fa0" +source = "git+https://github.com/opentensor/frontier?rev=b4ee632bbc81321d3891c82dd2c4c01438625d83#b4ee632bbc81321d3891c82dd2c4c01438625d83" dependencies = [ "ethereum", "ethereum-types", @@ -4759,7 +4779,7 @@ checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" [[package]] name = "fork-tree" version = "13.0.1" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "parity-scale-codec", ] @@ -4786,7 +4806,7 @@ dependencies = [ [[package]] name = "fp-account" version = "1.0.0-dev" -source = "git+https://github.com/opentensor/frontier?rev=f12a1274f91442a564bb722a2b9547caba487fa0#f12a1274f91442a564bb722a2b9547caba487fa0" +source = "git+https://github.com/opentensor/frontier?rev=b4ee632bbc81321d3891c82dd2c4c01438625d83#b4ee632bbc81321d3891c82dd2c4c01438625d83" dependencies = [ "hex", "impl-serde", @@ -4804,7 +4824,7 @@ dependencies = [ [[package]] name = "fp-consensus" version = "2.0.0-dev" -source = "git+https://github.com/opentensor/frontier?rev=f12a1274f91442a564bb722a2b9547caba487fa0#f12a1274f91442a564bb722a2b9547caba487fa0" +source = "git+https://github.com/opentensor/frontier?rev=b4ee632bbc81321d3891c82dd2c4c01438625d83#b4ee632bbc81321d3891c82dd2c4c01438625d83" dependencies = [ "ethereum", "parity-scale-codec", @@ -4815,7 +4835,7 @@ dependencies = [ [[package]] name = "fp-ethereum" version = "1.0.0-dev" -source = "git+https://github.com/opentensor/frontier?rev=f12a1274f91442a564bb722a2b9547caba487fa0#f12a1274f91442a564bb722a2b9547caba487fa0" +source = "git+https://github.com/opentensor/frontier?rev=b4ee632bbc81321d3891c82dd2c4c01438625d83#b4ee632bbc81321d3891c82dd2c4c01438625d83" dependencies = [ "ethereum", "ethereum-types", @@ -4827,7 +4847,7 @@ dependencies = [ [[package]] name = "fp-evm" version = "3.0.0-dev" -source = "git+https://github.com/opentensor/frontier?rev=f12a1274f91442a564bb722a2b9547caba487fa0#f12a1274f91442a564bb722a2b9547caba487fa0" +source = "git+https://github.com/opentensor/frontier?rev=b4ee632bbc81321d3891c82dd2c4c01438625d83#b4ee632bbc81321d3891c82dd2c4c01438625d83" dependencies = [ "environmental", "evm", @@ -4843,7 +4863,7 @@ dependencies = [ [[package]] name = "fp-rpc" version = "3.0.0-dev" -source = "git+https://github.com/opentensor/frontier?rev=f12a1274f91442a564bb722a2b9547caba487fa0#f12a1274f91442a564bb722a2b9547caba487fa0" +source = "git+https://github.com/opentensor/frontier?rev=b4ee632bbc81321d3891c82dd2c4c01438625d83#b4ee632bbc81321d3891c82dd2c4c01438625d83" dependencies = [ "ethereum", "ethereum-types", @@ -4859,7 +4879,7 @@ dependencies = [ [[package]] name = "fp-self-contained" version = "1.0.0-dev" -source = "git+https://github.com/opentensor/frontier?rev=f12a1274f91442a564bb722a2b9547caba487fa0#f12a1274f91442a564bb722a2b9547caba487fa0" +source = "git+https://github.com/opentensor/frontier?rev=b4ee632bbc81321d3891c82dd2c4c01438625d83#b4ee632bbc81321d3891c82dd2c4c01438625d83" dependencies = [ "frame-support", "parity-scale-codec", @@ -4871,7 +4891,7 @@ dependencies = [ [[package]] name = "fp-storage" version = "2.0.0" -source = "git+https://github.com/opentensor/frontier?rev=f12a1274f91442a564bb722a2b9547caba487fa0#f12a1274f91442a564bb722a2b9547caba487fa0" +source = "git+https://github.com/opentensor/frontier?rev=b4ee632bbc81321d3891c82dd2c4c01438625d83#b4ee632bbc81321d3891c82dd2c4c01438625d83" dependencies = [ "parity-scale-codec", "serde", @@ -4886,7 +4906,7 @@ checksum = "28dd6caf6059519a65843af8fe2a3ae298b14b80179855aeb4adc2c1934ee619" [[package]] name = "frame-benchmarking" version = "41.0.1" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "frame-support", "frame-support-procedural", @@ -4910,7 +4930,7 @@ dependencies = [ [[package]] name = "frame-benchmarking-cli" version = "49.1.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "Inflector", "array-bytes 6.2.3", @@ -4975,7 +4995,7 @@ dependencies = [ [[package]] name = "frame-benchmarking-pallet-pov" version = "31.0.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "frame-benchmarking", "frame-support", @@ -5003,7 +5023,7 @@ dependencies = [ [[package]] name = "frame-election-provider-solution-type" version = "16.1.1" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "proc-macro-crate 3.4.0", "proc-macro2", @@ -5014,7 +5034,7 @@ dependencies = [ [[package]] name = "frame-election-provider-support" version = "41.0.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "frame-election-provider-solution-type", "frame-support", @@ -5031,7 +5051,7 @@ dependencies = [ [[package]] name = "frame-executive" version = "41.0.1" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "aquamarine", "frame-support", @@ -5084,7 +5104,7 @@ dependencies = [ [[package]] name = "frame-metadata-hash-extension" version = "0.9.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "array-bytes 6.2.3", "const-hex", @@ -5100,7 +5120,7 @@ dependencies = [ [[package]] name = "frame-storage-access-test-runtime" version = "0.2.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "cumulus-pallet-parachain-system", "parity-scale-codec", @@ -5114,7 +5134,7 @@ dependencies = [ [[package]] name = "frame-support" version = "41.0.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "aquamarine", "array-bytes 6.2.3", @@ -5155,7 +5175,7 @@ dependencies = [ [[package]] name = "frame-support-procedural" version = "34.0.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "Inflector", "cfg-expr", @@ -5168,7 +5188,7 @@ dependencies = [ "proc-macro-warning", "proc-macro2", "quote", - "sp-crypto-hashing 0.1.0 (git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8)", + "sp-crypto-hashing 0.1.0 (git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f)", "syn 2.0.106", ] @@ -5188,7 +5208,7 @@ dependencies = [ [[package]] name = "frame-support-procedural-tools" version = "13.0.1" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "frame-support-procedural-tools-derive 12.0.0", "proc-macro-crate 3.4.0", @@ -5211,7 +5231,7 @@ dependencies = [ [[package]] name = "frame-support-procedural-tools-derive" version = "12.0.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "proc-macro2", "quote", @@ -5221,7 +5241,7 @@ dependencies = [ [[package]] name = "frame-system" version = "41.0.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "cfg-if", "docify", @@ -5240,7 +5260,7 @@ dependencies = [ [[package]] name = "frame-system-benchmarking" version = "41.0.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "frame-benchmarking", "frame-support", @@ -5254,7 +5274,7 @@ dependencies = [ [[package]] name = "frame-system-rpc-runtime-api" version = "37.0.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "docify", "parity-scale-codec", @@ -5264,7 +5284,7 @@ dependencies = [ [[package]] name = "frame-try-runtime" version = "0.47.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "frame-support", "parity-scale-codec", @@ -5504,9 +5524,9 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.2.16" +version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "335ff9f135e4384c8150d6f27c6daed433577f86b4750418338c01a1a2528592" +checksum = "ff2abc00be7fca6ebc474524697ae276ad847ad0a6b3faa4bcb027e9a4614ad0" dependencies = [ "cfg-if", "js-sys", @@ -5529,6 +5549,20 @@ dependencies = [ "wasm-bindgen", ] +[[package]] +name = "getrandom" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "139ef39800118c7683f2fd3c98c1b23c09ae076556b435f8e9064ae108aaeeec" +dependencies = [ + "cfg-if", + "libc", + "r-efi", + "rand_core 0.10.0", + "wasip2", + "wasip3", +] + [[package]] name = "getrandom_or_panic" version = "0.0.3" @@ -6225,6 +6259,12 @@ dependencies = [ "zerovec", ] +[[package]] +name = "id-arena" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d3067d79b975e8844ca9eb072e16b31c3c1c36928edf9c6789548c524d0d954" + [[package]] name = "ident_case" version = "1.0.1" @@ -6752,7 +6792,7 @@ version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ecc2af9a1119c51f12a14607e783cb977bde58bc069ff0c3da1095e635d70654" dependencies = [ - "cpufeatures", + "cpufeatures 0.2.17", ] [[package]] @@ -6850,6 +6890,12 @@ version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55" +[[package]] +name = "leb128fmt" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09edd9e8b54e49e587e4f6295a7d29c3ea94d469cb40ab8ca70b288248a81db2" + [[package]] name = "libc" version = "0.2.176" @@ -6882,7 +6928,7 @@ dependencies = [ "either", "futures", "futures-timer", - "getrandom 0.2.16", + "getrandom 0.2.17", "libp2p-allow-block-list", "libp2p-connection-limits", "libp2p-core", @@ -7808,20 +7854,21 @@ dependencies = [ [[package]] name = "ml-kem" -version = "0.2.1" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97befee0c869cb56f3118f49d0f9bb68c9e3f380dec23c1100aedc4ec3ba239a" +checksum = "dcaee19a45f916d98f24a551cc9a2cdae705a040e66f3cbc4f3a282ea6a2e982" dependencies = [ "hybrid-array", "kem", "rand_core 0.6.4", "sha3", + "zeroize", ] [[package]] name = "mmr-gadget" version = "46.0.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "futures", "log", @@ -7840,7 +7887,7 @@ dependencies = [ [[package]] name = "mmr-rpc" version = "41.0.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "jsonrpsee", "parity-scale-codec", @@ -8190,10 +8237,7 @@ checksum = "43794a0ace135be66a25d3ae77d41b91615fb68ae937f904090203e81f755b65" name = "node-subtensor" version = "4.0.0-dev" dependencies = [ - "anyhow", "async-trait", - "blake2 0.10.6", - "chacha20poly1305", "clap", "fc-api", "fc-aura", @@ -8213,11 +8257,9 @@ dependencies = [ "frame-system-rpc-runtime-api", "futures", "hex", - "hkdf", "jsonrpsee", "log", "memmap2 0.9.8", - "ml-kem", "node-subtensor-runtime", "num-traits", "pallet-commitments", @@ -8229,10 +8271,7 @@ dependencies = [ "pallet-transaction-payment", "pallet-transaction-payment-rpc", "pallet-transaction-payment-rpc-runtime-api", - "parity-scale-codec", "polkadot-sdk", - "rand 0.8.5", - "rand_core 0.9.3", "sc-basic-authorship", "sc-chain-spec", "sc-chain-spec-derive", @@ -8260,7 +8299,6 @@ dependencies = [ "sc-transaction-pool-api", "serde", "serde_json", - "sha2 0.10.9", "sp-api", "sp-block-builder", "sp-blockchain", @@ -8280,6 +8318,9 @@ dependencies = [ "sp-session", "sp-timestamp", "sp-transaction-pool", + "stc-shield", + "stp-io", + "stp-shield", "substrate-build-script-utils", "substrate-frame-rpc-system", "substrate-prometheus-endpoint", @@ -8288,7 +8329,6 @@ dependencies = [ "subtensor-macros", "subtensor-runtime-common", "tokio", - "x25519-dalek", ] [[package]] @@ -8311,7 +8351,6 @@ dependencies = [ "frame-system-benchmarking", "frame-system-rpc-runtime-api", "frame-try-runtime", - "getrandom 0.2.16", "hex", "log", "pallet-admin-utils", @@ -8323,7 +8362,7 @@ dependencies = [ "pallet-balances", "pallet-base-fee", "pallet-commitments", - "pallet-contracts 40.1.0", + "pallet-contracts", "pallet-crowdloan", "pallet-drand", "pallet-election-provider-multi-phase", @@ -8376,6 +8415,7 @@ dependencies = [ "sp-consensus-grandpa", "sp-consensus-slots", "sp-core", + "sp-debug-derive", "sp-genesis-builder", "sp-inherents", "sp-io", @@ -8389,6 +8429,8 @@ dependencies = [ "sp-tracing", "sp-transaction-pool", "sp-version", + "stp-io", + "stp-shield", "substrate-fixed", "substrate-wasm-builder", "subtensor-chain-extensions", @@ -8789,7 +8831,7 @@ dependencies = [ [[package]] name = "pallet-alliance" version = "40.0.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "array-bytes 6.2.3", "frame-benchmarking", @@ -8801,7 +8843,7 @@ dependencies = [ "parity-scale-codec", "scale-info", "sp-core", - "sp-crypto-hashing 0.1.0 (git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8)", + "sp-crypto-hashing 0.1.0 (git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f)", "sp-io", "sp-runtime", ] @@ -8809,7 +8851,7 @@ dependencies = [ [[package]] name = "pallet-asset-conversion" version = "23.0.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "frame-benchmarking", "frame-support", @@ -8827,7 +8869,7 @@ dependencies = [ [[package]] name = "pallet-asset-conversion-ops" version = "0.9.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "frame-benchmarking", "frame-support", @@ -8845,7 +8887,7 @@ dependencies = [ [[package]] name = "pallet-asset-conversion-tx-payment" version = "23.0.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "frame-benchmarking", "frame-support", @@ -8860,7 +8902,7 @@ dependencies = [ [[package]] name = "pallet-asset-rate" version = "20.0.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "frame-benchmarking", "frame-support", @@ -8874,7 +8916,7 @@ dependencies = [ [[package]] name = "pallet-asset-rewards" version = "0.3.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "frame-benchmarking", "frame-support", @@ -8892,7 +8934,7 @@ dependencies = [ [[package]] name = "pallet-asset-tx-payment" version = "41.0.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "frame-benchmarking", "frame-support", @@ -8908,7 +8950,7 @@ dependencies = [ [[package]] name = "pallet-assets" version = "43.0.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "ethereum-standards", "frame-benchmarking", @@ -8926,7 +8968,7 @@ dependencies = [ [[package]] name = "pallet-assets-freezer" version = "0.8.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "log", "pallet-assets", @@ -8938,7 +8980,7 @@ dependencies = [ [[package]] name = "pallet-assets-holder" version = "0.3.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "frame-benchmarking", "frame-support", @@ -8953,7 +8995,7 @@ dependencies = [ [[package]] name = "pallet-atomic-swap" version = "41.0.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "parity-scale-codec", "polkadot-sdk-frame", @@ -8963,7 +9005,7 @@ dependencies = [ [[package]] name = "pallet-aura" version = "40.0.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "frame-support", "frame-system", @@ -8979,7 +9021,7 @@ dependencies = [ [[package]] name = "pallet-authority-discovery" version = "41.0.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "frame-support", "frame-system", @@ -8994,7 +9036,7 @@ dependencies = [ [[package]] name = "pallet-authorship" version = "41.0.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "frame-support", "frame-system", @@ -9007,7 +9049,7 @@ dependencies = [ [[package]] name = "pallet-babe" version = "41.0.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "frame-benchmarking", "frame-support", @@ -9030,7 +9072,7 @@ dependencies = [ [[package]] name = "pallet-bags-list" version = "40.0.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "aquamarine", "docify", @@ -9051,7 +9093,7 @@ dependencies = [ [[package]] name = "pallet-balances" version = "42.0.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "docify", "frame-benchmarking", @@ -9067,7 +9109,7 @@ dependencies = [ [[package]] name = "pallet-base-fee" version = "1.0.0" -source = "git+https://github.com/opentensor/frontier?rev=f12a1274f91442a564bb722a2b9547caba487fa0#f12a1274f91442a564bb722a2b9547caba487fa0" +source = "git+https://github.com/opentensor/frontier?rev=b4ee632bbc81321d3891c82dd2c4c01438625d83#b4ee632bbc81321d3891c82dd2c4c01438625d83" dependencies = [ "fp-evm", "frame-support", @@ -9081,7 +9123,7 @@ dependencies = [ [[package]] name = "pallet-beefy" version = "42.0.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "frame-support", "frame-system", @@ -9100,7 +9142,7 @@ dependencies = [ [[package]] name = "pallet-beefy-mmr" version = "42.0.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "array-bytes 6.2.3", "binary-merkle-tree", @@ -9125,7 +9167,7 @@ dependencies = [ [[package]] name = "pallet-bounties" version = "40.0.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "frame-benchmarking", "frame-support", @@ -9142,7 +9184,7 @@ dependencies = [ [[package]] name = "pallet-bridge-grandpa" version = "0.21.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "bp-header-chain", "bp-runtime", @@ -9161,7 +9203,7 @@ dependencies = [ [[package]] name = "pallet-bridge-messages" version = "0.21.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "bp-header-chain", "bp-messages", @@ -9180,7 +9222,7 @@ dependencies = [ [[package]] name = "pallet-bridge-parachains" version = "0.21.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "bp-header-chain", "bp-parachains", @@ -9200,7 +9242,7 @@ dependencies = [ [[package]] name = "pallet-bridge-relayers" version = "0.21.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "bp-header-chain", "bp-messages", @@ -9223,7 +9265,7 @@ dependencies = [ [[package]] name = "pallet-broker" version = "0.20.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "bitvec", "frame-benchmarking", @@ -9241,7 +9283,7 @@ dependencies = [ [[package]] name = "pallet-child-bounties" version = "40.0.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "frame-benchmarking", "frame-support", @@ -9259,7 +9301,7 @@ dependencies = [ [[package]] name = "pallet-collator-selection" version = "22.0.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "frame-benchmarking", "frame-support", @@ -9278,7 +9320,7 @@ dependencies = [ [[package]] name = "pallet-collective" version = "41.0.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "docify", "frame-benchmarking", @@ -9295,7 +9337,7 @@ dependencies = [ [[package]] name = "pallet-collective-content" version = "0.19.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "frame-benchmarking", "frame-support", @@ -9333,41 +9375,10 @@ dependencies = [ "w3f-bls 0.1.3", ] -[[package]] -name = "pallet-contracts" -version = "40.1.0" -source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2503-6#598feddb893f5ad3923a62e41a2f179b6e10c30c" -dependencies = [ - "environmental", - "frame-benchmarking", - "frame-support", - "frame-system", - "impl-trait-for-tuples", - "log", - "pallet-balances", - "pallet-contracts-proc-macro 23.0.3 (git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2503-6)", - "pallet-contracts-uapi 14.0.0 (git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2503-6)", - "parity-scale-codec", - "paste", - "rand 0.8.5", - "rand_pcg", - "scale-info", - "serde", - "smallvec", - "sp-api", - "sp-core", - "sp-io", - "sp-runtime", - "staging-xcm", - "staging-xcm-builder", - "wasm-instrument", - "wasmi 0.32.3", -] - [[package]] name = "pallet-contracts" version = "41.0.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "environmental", "frame-benchmarking", @@ -9376,8 +9387,8 @@ dependencies = [ "impl-trait-for-tuples", "log", "pallet-balances", - "pallet-contracts-proc-macro 23.0.3 (git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8)", - "pallet-contracts-uapi 14.0.0 (git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8)", + "pallet-contracts-proc-macro", + "pallet-contracts-uapi", "parity-scale-codec", "paste", "rand 0.8.5", @@ -9398,14 +9409,14 @@ dependencies = [ [[package]] name = "pallet-contracts-mock-network" version = "18.0.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "frame-support", "frame-system", "pallet-assets", "pallet-balances", - "pallet-contracts 41.0.0", - "pallet-contracts-uapi 14.0.0 (git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8)", + "pallet-contracts", + "pallet-contracts-uapi", "pallet-message-queue", "pallet-timestamp", "pallet-xcm", @@ -9429,38 +9440,17 @@ dependencies = [ [[package]] name = "pallet-contracts-proc-macro" version = "23.0.3" -source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2503-6#598feddb893f5ad3923a62e41a2f179b6e10c30c" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "proc-macro2", "quote", "syn 2.0.106", ] -[[package]] -name = "pallet-contracts-proc-macro" -version = "23.0.3" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.106", -] - -[[package]] -name = "pallet-contracts-uapi" -version = "14.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2503-6#598feddb893f5ad3923a62e41a2f179b6e10c30c" -dependencies = [ - "bitflags 1.3.2", - "parity-scale-codec", - "paste", - "scale-info", -] - [[package]] name = "pallet-contracts-uapi" version = "14.0.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "bitflags 1.3.2", "parity-scale-codec", @@ -9471,7 +9461,7 @@ dependencies = [ [[package]] name = "pallet-conviction-voting" version = "41.0.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "assert_matches", "frame-benchmarking", @@ -9487,7 +9477,7 @@ dependencies = [ [[package]] name = "pallet-core-fellowship" version = "25.0.1" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "frame-benchmarking", "frame-support", @@ -9524,7 +9514,7 @@ dependencies = [ [[package]] name = "pallet-delegated-staking" version = "8.0.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "frame-support", "frame-system", @@ -9539,7 +9529,7 @@ dependencies = [ [[package]] name = "pallet-democracy" version = "41.0.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "frame-benchmarking", "frame-support", @@ -9556,7 +9546,7 @@ dependencies = [ [[package]] name = "pallet-dev-mode" version = "23.0.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "frame-support", "frame-system", @@ -9605,7 +9595,7 @@ dependencies = [ [[package]] name = "pallet-dummy-dim" version = "0.2.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "frame-benchmarking", "frame-support", @@ -9623,7 +9613,7 @@ dependencies = [ [[package]] name = "pallet-election-provider-multi-block" version = "0.2.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -9644,7 +9634,7 @@ dependencies = [ [[package]] name = "pallet-election-provider-multi-phase" version = "40.0.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -9665,7 +9655,7 @@ dependencies = [ [[package]] name = "pallet-election-provider-support-benchmarking" version = "40.0.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -9678,7 +9668,7 @@ dependencies = [ [[package]] name = "pallet-elections-phragmen" version = "42.0.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "frame-benchmarking", "frame-support", @@ -9696,7 +9686,7 @@ dependencies = [ [[package]] name = "pallet-ethereum" version = "4.0.0-dev" -source = "git+https://github.com/opentensor/frontier?rev=f12a1274f91442a564bb722a2b9547caba487fa0#f12a1274f91442a564bb722a2b9547caba487fa0" +source = "git+https://github.com/opentensor/frontier?rev=b4ee632bbc81321d3891c82dd2c4c01438625d83#b4ee632bbc81321d3891c82dd2c4c01438625d83" dependencies = [ "ethereum", "ethereum-types", @@ -9719,7 +9709,7 @@ dependencies = [ [[package]] name = "pallet-evm" version = "6.0.0-dev" -source = "git+https://github.com/opentensor/frontier?rev=f12a1274f91442a564bb722a2b9547caba487fa0#f12a1274f91442a564bb722a2b9547caba487fa0" +source = "git+https://github.com/opentensor/frontier?rev=b4ee632bbc81321d3891c82dd2c4c01438625d83#b4ee632bbc81321d3891c82dd2c4c01438625d83" dependencies = [ "cumulus-primitives-storage-weight-reclaim", "environmental", @@ -9744,7 +9734,7 @@ dependencies = [ [[package]] name = "pallet-evm-chain-id" version = "1.0.0-dev" -source = "git+https://github.com/opentensor/frontier?rev=f12a1274f91442a564bb722a2b9547caba487fa0#f12a1274f91442a564bb722a2b9547caba487fa0" +source = "git+https://github.com/opentensor/frontier?rev=b4ee632bbc81321d3891c82dd2c4c01438625d83#b4ee632bbc81321d3891c82dd2c4c01438625d83" dependencies = [ "frame-support", "frame-system", @@ -9755,7 +9745,7 @@ dependencies = [ [[package]] name = "pallet-evm-precompile-bn128" version = "2.0.0-dev" -source = "git+https://github.com/opentensor/frontier?rev=f12a1274f91442a564bb722a2b9547caba487fa0#f12a1274f91442a564bb722a2b9547caba487fa0" +source = "git+https://github.com/opentensor/frontier?rev=b4ee632bbc81321d3891c82dd2c4c01438625d83#b4ee632bbc81321d3891c82dd2c4c01438625d83" dependencies = [ "fp-evm", "sp-core", @@ -9765,7 +9755,7 @@ dependencies = [ [[package]] name = "pallet-evm-precompile-dispatch" version = "2.0.0-dev" -source = "git+https://github.com/opentensor/frontier?rev=f12a1274f91442a564bb722a2b9547caba487fa0#f12a1274f91442a564bb722a2b9547caba487fa0" +source = "git+https://github.com/opentensor/frontier?rev=b4ee632bbc81321d3891c82dd2c4c01438625d83#b4ee632bbc81321d3891c82dd2c4c01438625d83" dependencies = [ "fp-evm", "frame-support", @@ -9777,7 +9767,7 @@ dependencies = [ [[package]] name = "pallet-evm-precompile-modexp" version = "2.0.0-dev" -source = "git+https://github.com/opentensor/frontier?rev=f12a1274f91442a564bb722a2b9547caba487fa0#f12a1274f91442a564bb722a2b9547caba487fa0" +source = "git+https://github.com/opentensor/frontier?rev=b4ee632bbc81321d3891c82dd2c4c01438625d83#b4ee632bbc81321d3891c82dd2c4c01438625d83" dependencies = [ "fp-evm", "num", @@ -9786,7 +9776,7 @@ dependencies = [ [[package]] name = "pallet-evm-precompile-sha3fips" version = "2.0.0-dev" -source = "git+https://github.com/opentensor/frontier?rev=f12a1274f91442a564bb722a2b9547caba487fa0#f12a1274f91442a564bb722a2b9547caba487fa0" +source = "git+https://github.com/opentensor/frontier?rev=b4ee632bbc81321d3891c82dd2c4c01438625d83#b4ee632bbc81321d3891c82dd2c4c01438625d83" dependencies = [ "fp-evm", "tiny-keccak", @@ -9795,7 +9785,7 @@ dependencies = [ [[package]] name = "pallet-evm-precompile-simple" version = "2.0.0-dev" -source = "git+https://github.com/opentensor/frontier?rev=f12a1274f91442a564bb722a2b9547caba487fa0#f12a1274f91442a564bb722a2b9547caba487fa0" +source = "git+https://github.com/opentensor/frontier?rev=b4ee632bbc81321d3891c82dd2c4c01438625d83#b4ee632bbc81321d3891c82dd2c4c01438625d83" dependencies = [ "fp-evm", "ripemd", @@ -9805,7 +9795,7 @@ dependencies = [ [[package]] name = "pallet-fast-unstake" version = "40.0.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "docify", "frame-benchmarking", @@ -9823,7 +9813,7 @@ dependencies = [ [[package]] name = "pallet-glutton" version = "27.0.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "blake2 0.10.6", "frame-benchmarking", @@ -9841,7 +9831,7 @@ dependencies = [ [[package]] name = "pallet-grandpa" version = "41.0.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "frame-benchmarking", "frame-support", @@ -9863,7 +9853,7 @@ dependencies = [ [[package]] name = "pallet-hotfix-sufficients" version = "1.0.0" -source = "git+https://github.com/opentensor/frontier?rev=f12a1274f91442a564bb722a2b9547caba487fa0#f12a1274f91442a564bb722a2b9547caba487fa0" +source = "git+https://github.com/opentensor/frontier?rev=b4ee632bbc81321d3891c82dd2c4c01438625d83#b4ee632bbc81321d3891c82dd2c4c01438625d83" dependencies = [ "frame-benchmarking", "frame-support", @@ -9878,7 +9868,7 @@ dependencies = [ [[package]] name = "pallet-identity" version = "41.0.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "enumflags2", "frame-benchmarking", @@ -9894,7 +9884,7 @@ dependencies = [ [[package]] name = "pallet-im-online" version = "40.0.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "frame-benchmarking", "frame-support", @@ -9913,7 +9903,7 @@ dependencies = [ [[package]] name = "pallet-indices" version = "41.0.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "frame-benchmarking", "frame-support", @@ -9928,7 +9918,7 @@ dependencies = [ [[package]] name = "pallet-insecure-randomness-collective-flip" version = "29.0.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "parity-scale-codec", "polkadot-sdk-frame", @@ -9939,7 +9929,7 @@ dependencies = [ [[package]] name = "pallet-lottery" version = "41.0.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "frame-benchmarking", "frame-support", @@ -9952,7 +9942,7 @@ dependencies = [ [[package]] name = "pallet-membership" version = "41.0.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "frame-benchmarking", "frame-support", @@ -9968,7 +9958,7 @@ dependencies = [ [[package]] name = "pallet-message-queue" version = "44.0.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "environmental", "frame-benchmarking", @@ -9987,7 +9977,7 @@ dependencies = [ [[package]] name = "pallet-meta-tx" version = "0.3.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "docify", "frame-benchmarking", @@ -10005,7 +9995,7 @@ dependencies = [ [[package]] name = "pallet-migrations" version = "11.0.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "docify", "frame-benchmarking", @@ -10024,7 +10014,7 @@ dependencies = [ [[package]] name = "pallet-mixnet" version = "0.17.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "log", "parity-scale-codec", @@ -10038,7 +10028,7 @@ dependencies = [ [[package]] name = "pallet-mmr" version = "41.0.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "log", "parity-scale-codec", @@ -10050,7 +10040,7 @@ dependencies = [ [[package]] name = "pallet-multisig" version = "41.0.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "log", "parity-scale-codec", @@ -10061,7 +10051,7 @@ dependencies = [ [[package]] name = "pallet-nft-fractionalization" version = "24.0.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "log", "pallet-assets", @@ -10074,7 +10064,7 @@ dependencies = [ [[package]] name = "pallet-nfts" version = "35.0.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "enumflags2", "frame-benchmarking", @@ -10091,7 +10081,7 @@ dependencies = [ [[package]] name = "pallet-nis" version = "41.0.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "parity-scale-codec", "polkadot-sdk-frame", @@ -10101,7 +10091,7 @@ dependencies = [ [[package]] name = "pallet-node-authorization" version = "41.0.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "log", "parity-scale-codec", @@ -10112,7 +10102,7 @@ dependencies = [ [[package]] name = "pallet-nomination-pools" version = "39.0.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "frame-support", "frame-system", @@ -10130,7 +10120,7 @@ dependencies = [ [[package]] name = "pallet-nomination-pools-benchmarking" version = "39.0.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -10150,7 +10140,7 @@ dependencies = [ [[package]] name = "pallet-nomination-pools-runtime-api" version = "37.0.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "pallet-nomination-pools", "parity-scale-codec", @@ -10160,7 +10150,7 @@ dependencies = [ [[package]] name = "pallet-offences" version = "40.0.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "frame-support", "frame-system", @@ -10175,7 +10165,7 @@ dependencies = [ [[package]] name = "pallet-offences-benchmarking" version = "41.0.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -10198,7 +10188,7 @@ dependencies = [ [[package]] name = "pallet-origin-restriction" version = "0.2.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "frame-benchmarking", "frame-support", @@ -10216,7 +10206,7 @@ dependencies = [ [[package]] name = "pallet-paged-list" version = "0.19.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "docify", "parity-scale-codec", @@ -10227,7 +10217,7 @@ dependencies = [ [[package]] name = "pallet-parameters" version = "0.12.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "docify", "frame-benchmarking", @@ -10244,7 +10234,7 @@ dependencies = [ [[package]] name = "pallet-people" version = "0.2.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "frame-benchmarking", "frame-support", @@ -10262,7 +10252,7 @@ dependencies = [ [[package]] name = "pallet-preimage" version = "41.0.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "frame-benchmarking", "frame-support", @@ -10278,7 +10268,7 @@ dependencies = [ [[package]] name = "pallet-proxy" version = "41.0.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "parity-scale-codec", "polkadot-sdk-frame", @@ -10288,7 +10278,7 @@ dependencies = [ [[package]] name = "pallet-ranked-collective" version = "41.0.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "frame-benchmarking", "frame-support", @@ -10306,7 +10296,7 @@ dependencies = [ [[package]] name = "pallet-recovery" version = "41.0.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "parity-scale-codec", "polkadot-sdk-frame", @@ -10316,7 +10306,7 @@ dependencies = [ [[package]] name = "pallet-referenda" version = "41.0.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "assert_matches", "frame-benchmarking", @@ -10351,7 +10341,7 @@ dependencies = [ [[package]] name = "pallet-remark" version = "41.0.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "frame-benchmarking", "frame-support", @@ -10366,7 +10356,7 @@ dependencies = [ [[package]] name = "pallet-revive" version = "0.7.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "alloy-core", "derive_more 0.99.20", @@ -10412,7 +10402,7 @@ dependencies = [ [[package]] name = "pallet-revive-fixtures" version = "0.4.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "anyhow", "cargo_metadata", @@ -10426,7 +10416,7 @@ dependencies = [ [[package]] name = "pallet-revive-proc-macro" version = "0.3.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "proc-macro2", "quote", @@ -10436,7 +10426,7 @@ dependencies = [ [[package]] name = "pallet-revive-uapi" version = "0.5.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "bitflags 1.3.2", "pallet-revive-proc-macro", @@ -10448,7 +10438,7 @@ dependencies = [ [[package]] name = "pallet-root-offences" version = "38.0.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "frame-support", "frame-system", @@ -10464,7 +10454,7 @@ dependencies = [ [[package]] name = "pallet-root-testing" version = "17.0.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "frame-support", "frame-system", @@ -10477,7 +10467,7 @@ dependencies = [ [[package]] name = "pallet-safe-mode" version = "22.0.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "docify", "pallet-balances", @@ -10491,7 +10481,7 @@ dependencies = [ [[package]] name = "pallet-salary" version = "26.0.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "log", "pallet-ranked-collective", @@ -10503,7 +10493,7 @@ dependencies = [ [[package]] name = "pallet-scheduler" version = "42.0.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "docify", "frame-benchmarking", @@ -10520,7 +10510,7 @@ dependencies = [ [[package]] name = "pallet-scored-pool" version = "41.0.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "frame-support", "frame-system", @@ -10533,7 +10523,7 @@ dependencies = [ [[package]] name = "pallet-session" version = "41.0.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "frame-support", "frame-system", @@ -10554,7 +10544,7 @@ dependencies = [ [[package]] name = "pallet-session-benchmarking" version = "41.0.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "frame-benchmarking", "frame-support", @@ -10571,26 +10561,35 @@ dependencies = [ name = "pallet-shield" version = "0.0.1" dependencies = [ + "chacha20poly1305", "frame-benchmarking", "frame-support", "frame-system", + "log", + "ml-kem", "pallet-aura", - "pallet-timestamp", + "pallet-subtensor-utility", "parity-scale-codec", + "rand_chacha 0.3.1", "scale-info", "sp-consensus-aura", "sp-core", + "sp-inherents", "sp-io", "sp-runtime", "sp-std", "sp-weights", + "stc-shield", + "stp-io", + "stp-shield", "subtensor-macros", + "subtensor-runtime-common", ] [[package]] name = "pallet-skip-feeless-payment" version = "16.0.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "frame-support", "frame-system", @@ -10602,7 +10601,7 @@ dependencies = [ [[package]] name = "pallet-society" version = "41.0.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "frame-benchmarking", "frame-support", @@ -10619,7 +10618,7 @@ dependencies = [ [[package]] name = "pallet-staking" version = "41.0.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -10641,7 +10640,7 @@ dependencies = [ [[package]] name = "pallet-staking-async" version = "0.2.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -10664,7 +10663,7 @@ dependencies = [ [[package]] name = "pallet-staking-async-ah-client" version = "0.2.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "frame-support", "frame-system", @@ -10683,7 +10682,7 @@ dependencies = [ [[package]] name = "pallet-staking-async-rc-client" version = "0.2.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "frame-support", "frame-system", @@ -10700,7 +10699,7 @@ dependencies = [ [[package]] name = "pallet-staking-reward-curve" version = "12.0.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "proc-macro-crate 3.4.0", "proc-macro2", @@ -10711,7 +10710,7 @@ dependencies = [ [[package]] name = "pallet-staking-reward-fn" version = "23.0.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "log", "sp-arithmetic", @@ -10720,7 +10719,7 @@ dependencies = [ [[package]] name = "pallet-staking-runtime-api" version = "27.0.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "parity-scale-codec", "sp-api", @@ -10730,7 +10729,7 @@ dependencies = [ [[package]] name = "pallet-state-trie-migration" version = "46.0.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "frame-benchmarking", "frame-support", @@ -10746,7 +10745,7 @@ dependencies = [ [[package]] name = "pallet-statement" version = "23.0.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "frame-support", "frame-system", @@ -10781,13 +10780,14 @@ dependencies = [ "pallet-drand", "pallet-preimage", "pallet-scheduler", + "pallet-shield", "pallet-subtensor-proxy", "pallet-subtensor-swap", "pallet-subtensor-utility", "pallet-transaction-payment", "parity-scale-codec", "polkadot-runtime-common", - "rand 0.8.5", + "rand 0.10.0", "rand_chacha 0.3.1", "safe-math", "scale-info", @@ -10795,6 +10795,7 @@ dependencies = [ "serde_json", "sha2 0.10.9", "share-pool", + "sp-consensus-aura", "sp-core", "sp-io", "sp-keyring", @@ -10901,7 +10902,7 @@ dependencies = [ [[package]] name = "pallet-sudo" version = "41.0.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "docify", "frame-benchmarking", @@ -10916,7 +10917,7 @@ dependencies = [ [[package]] name = "pallet-timestamp" version = "40.0.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "docify", "frame-benchmarking", @@ -10934,7 +10935,7 @@ dependencies = [ [[package]] name = "pallet-tips" version = "40.0.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "frame-benchmarking", "frame-support", @@ -10952,7 +10953,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment" version = "41.0.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "frame-benchmarking", "frame-support", @@ -10967,7 +10968,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment-rpc" version = "44.0.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "jsonrpsee", "pallet-transaction-payment-rpc-runtime-api", @@ -10983,7 +10984,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment-rpc-runtime-api" version = "41.0.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "pallet-transaction-payment", "parity-scale-codec", @@ -10995,7 +10996,7 @@ dependencies = [ [[package]] name = "pallet-transaction-storage" version = "40.0.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "array-bytes 6.2.3", "frame-benchmarking", @@ -11014,7 +11015,7 @@ dependencies = [ [[package]] name = "pallet-treasury" version = "40.0.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "docify", "frame-benchmarking", @@ -11033,7 +11034,7 @@ dependencies = [ [[package]] name = "pallet-tx-pause" version = "22.0.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "docify", "parity-scale-codec", @@ -11044,7 +11045,7 @@ dependencies = [ [[package]] name = "pallet-uniques" version = "41.0.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "frame-benchmarking", "frame-support", @@ -11058,7 +11059,7 @@ dependencies = [ [[package]] name = "pallet-utility" version = "41.0.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "frame-benchmarking", "frame-support", @@ -11073,7 +11074,7 @@ dependencies = [ [[package]] name = "pallet-verify-signature" version = "0.4.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "frame-benchmarking", "frame-support", @@ -11088,7 +11089,7 @@ dependencies = [ [[package]] name = "pallet-vesting" version = "41.0.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "frame-benchmarking", "frame-support", @@ -11102,7 +11103,7 @@ dependencies = [ [[package]] name = "pallet-whitelist" version = "40.0.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "parity-scale-codec", "polkadot-sdk-frame", @@ -11112,7 +11113,7 @@ dependencies = [ [[package]] name = "pallet-xcm" version = "20.1.3" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "bounded-collections 0.2.4", "frame-benchmarking", @@ -11138,7 +11139,7 @@ dependencies = [ [[package]] name = "pallet-xcm-benchmarks" version = "21.0.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "frame-benchmarking", "frame-support", @@ -11155,7 +11156,7 @@ dependencies = [ [[package]] name = "pallet-xcm-bridge-hub" version = "0.17.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "bp-messages", "bp-runtime", @@ -11177,7 +11178,7 @@ dependencies = [ [[package]] name = "pallet-xcm-bridge-hub-router" version = "0.19.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "bp-xcm-bridge-hub-router", "frame-benchmarking", @@ -11197,7 +11198,7 @@ dependencies = [ [[package]] name = "parachains-common" version = "22.0.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "cumulus-primitives-core", "cumulus-primitives-utility", @@ -11536,7 +11537,7 @@ checksum = "7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c" [[package]] name = "polkadot-approval-distribution" version = "24.0.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "futures", "futures-timer", @@ -11554,7 +11555,7 @@ dependencies = [ [[package]] name = "polkadot-availability-bitfield-distribution" version = "24.0.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "futures", "futures-timer", @@ -11569,7 +11570,7 @@ dependencies = [ [[package]] name = "polkadot-availability-distribution" version = "24.0.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "fatality", "futures", @@ -11592,7 +11593,7 @@ dependencies = [ [[package]] name = "polkadot-availability-recovery" version = "24.0.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "async-trait", "fatality", @@ -11625,7 +11626,7 @@ dependencies = [ [[package]] name = "polkadot-cli" version = "25.0.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "clap", "frame-benchmarking-cli", @@ -11649,7 +11650,7 @@ dependencies = [ [[package]] name = "polkadot-collator-protocol" version = "24.0.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "bitvec", "fatality", @@ -11672,7 +11673,7 @@ dependencies = [ [[package]] name = "polkadot-core-primitives" version = "18.0.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "parity-scale-codec", "scale-info", @@ -11683,7 +11684,7 @@ dependencies = [ [[package]] name = "polkadot-dispute-distribution" version = "24.0.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "fatality", "futures", @@ -11705,7 +11706,7 @@ dependencies = [ [[package]] name = "polkadot-erasure-coding" version = "20.0.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "parity-scale-codec", "polkadot-node-primitives", @@ -11719,7 +11720,7 @@ dependencies = [ [[package]] name = "polkadot-gossip-support" version = "24.0.1" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "futures", "futures-timer", @@ -11732,7 +11733,7 @@ dependencies = [ "sc-network", "sp-application-crypto", "sp-core", - "sp-crypto-hashing 0.1.0 (git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8)", + "sp-crypto-hashing 0.1.0 (git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f)", "sp-keystore", "tracing-gum", ] @@ -11740,7 +11741,7 @@ dependencies = [ [[package]] name = "polkadot-network-bridge" version = "24.0.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "always-assert", "async-trait", @@ -11763,7 +11764,7 @@ dependencies = [ [[package]] name = "polkadot-node-collation-generation" version = "24.0.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "futures", "parity-scale-codec", @@ -11781,7 +11782,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-approval-voting" version = "24.0.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "async-trait", "bitvec", @@ -11813,7 +11814,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-approval-voting-parallel" version = "0.7.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "async-trait", "futures", @@ -11837,7 +11838,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-av-store" version = "24.0.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "bitvec", "futures", @@ -11856,7 +11857,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-backing" version = "24.0.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "bitvec", "fatality", @@ -11877,7 +11878,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-bitfield-signing" version = "24.0.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "futures", "polkadot-node-subsystem", @@ -11892,7 +11893,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-candidate-validation" version = "24.0.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "async-trait", "futures", @@ -11914,7 +11915,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-chain-api" version = "24.0.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "futures", "polkadot-node-metrics", @@ -11928,7 +11929,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-chain-selection" version = "24.0.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "futures", "futures-timer", @@ -11944,7 +11945,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-dispute-coordinator" version = "24.0.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "fatality", "futures", @@ -11962,7 +11963,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-parachains-inherent" version = "24.0.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "async-trait", "futures", @@ -11979,7 +11980,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-prospective-parachains" version = "23.0.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "fatality", "futures", @@ -11993,7 +11994,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-provisioner" version = "24.0.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "bitvec", "fatality", @@ -12010,7 +12011,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-pvf" version = "24.0.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "always-assert", "array-bytes 6.2.3", @@ -12038,7 +12039,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-pvf-checker" version = "24.0.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "futures", "polkadot-node-subsystem", @@ -12051,7 +12052,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-pvf-common" version = "20.0.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "cpu-time", "futures", @@ -12066,7 +12067,7 @@ dependencies = [ "sc-executor-wasmtime", "seccompiler", "sp-core", - "sp-crypto-hashing 0.1.0 (git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8)", + "sp-crypto-hashing 0.1.0 (git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f)", "sp-externalities", "sp-io", "sp-tracing", @@ -12077,7 +12078,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-runtime-api" version = "24.0.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "futures", "polkadot-node-metrics", @@ -12092,7 +12093,7 @@ dependencies = [ [[package]] name = "polkadot-node-metrics" version = "24.0.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "bs58", "futures", @@ -12109,7 +12110,7 @@ dependencies = [ [[package]] name = "polkadot-node-network-protocol" version = "24.0.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "async-channel 1.9.0", "async-trait", @@ -12134,7 +12135,7 @@ dependencies = [ [[package]] name = "polkadot-node-primitives" version = "20.0.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "bitvec", "bounded-vec", @@ -12158,7 +12159,7 @@ dependencies = [ [[package]] name = "polkadot-node-subsystem" version = "24.0.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "polkadot-node-subsystem-types", "polkadot-overseer", @@ -12167,7 +12168,7 @@ dependencies = [ [[package]] name = "polkadot-node-subsystem-types" version = "24.0.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "async-trait", "derive_more 0.99.20", @@ -12195,7 +12196,7 @@ dependencies = [ [[package]] name = "polkadot-node-subsystem-util" version = "24.0.1" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "fatality", "futures", @@ -12226,7 +12227,7 @@ dependencies = [ [[package]] name = "polkadot-omni-node-lib" version = "0.7.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "async-trait", "clap", @@ -12312,7 +12313,7 @@ dependencies = [ [[package]] name = "polkadot-overseer" version = "24.0.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "async-trait", "futures", @@ -12332,7 +12333,7 @@ dependencies = [ [[package]] name = "polkadot-parachain-primitives" version = "17.0.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "bounded-collections 0.2.4", "derive_more 0.99.20", @@ -12348,7 +12349,7 @@ dependencies = [ [[package]] name = "polkadot-primitives" version = "19.0.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "bitvec", "bounded-collections 0.2.4", @@ -12377,7 +12378,7 @@ dependencies = [ [[package]] name = "polkadot-rpc" version = "25.0.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "jsonrpsee", "mmr-rpc", @@ -12410,7 +12411,7 @@ dependencies = [ [[package]] name = "polkadot-runtime-common" version = "20.0.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "bitvec", "frame-benchmarking", @@ -12460,7 +12461,7 @@ dependencies = [ [[package]] name = "polkadot-runtime-metrics" version = "21.0.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "bs58", "frame-benchmarking", @@ -12472,7 +12473,7 @@ dependencies = [ [[package]] name = "polkadot-runtime-parachains" version = "20.0.2" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "bitflags 1.3.2", "bitvec", @@ -12520,7 +12521,7 @@ dependencies = [ [[package]] name = "polkadot-sdk" version = "2506.0.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "assets-common", "bridge-hub-common", @@ -12575,7 +12576,7 @@ dependencies = [ "pallet-collator-selection", "pallet-collective", "pallet-collective-content", - "pallet-contracts 41.0.0", + "pallet-contracts", "pallet-contracts-mock-network", "pallet-conviction-voting", "pallet-core-fellowship", @@ -12678,7 +12679,7 @@ dependencies = [ [[package]] name = "polkadot-sdk-frame" version = "0.10.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "docify", "frame-benchmarking", @@ -12713,7 +12714,7 @@ dependencies = [ [[package]] name = "polkadot-service" version = "25.0.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "async-trait", "frame-benchmarking", @@ -12821,7 +12822,7 @@ dependencies = [ [[package]] name = "polkadot-statement-distribution" version = "24.0.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "bitvec", "fatality", @@ -12841,7 +12842,7 @@ dependencies = [ [[package]] name = "polkadot-statement-table" version = "20.0.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "parity-scale-codec", "polkadot-primitives", @@ -13055,7 +13056,7 @@ version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8159bd90725d2df49889a078b54f4f79e87f1f8a8444194cdca81d38f5393abf" dependencies = [ - "cpufeatures", + "cpufeatures 0.2.17", "opaque-debug 0.3.1", "universal-hash", ] @@ -13067,7 +13068,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9d1fe60d06143b2430aa532c94cfe9e29783047f06c0d7fd359a9a51b729fa25" dependencies = [ "cfg-if", - "cpufeatures", + "cpufeatures 0.2.17", "opaque-debug 0.3.1", "universal-hash", ] @@ -13114,7 +13115,7 @@ dependencies = [ [[package]] name = "precompile-utils" version = "0.1.0" -source = "git+https://github.com/opentensor/frontier?rev=f12a1274f91442a564bb722a2b9547caba487fa0#f12a1274f91442a564bb722a2b9547caba487fa0" +source = "git+https://github.com/opentensor/frontier?rev=b4ee632bbc81321d3891c82dd2c4c01438625d83#b4ee632bbc81321d3891c82dd2c4c01438625d83" dependencies = [ "environmental", "evm", @@ -13138,14 +13139,14 @@ dependencies = [ [[package]] name = "precompile-utils-macro" version = "0.1.0" -source = "git+https://github.com/opentensor/frontier?rev=f12a1274f91442a564bb722a2b9547caba487fa0#f12a1274f91442a564bb722a2b9547caba487fa0" +source = "git+https://github.com/opentensor/frontier?rev=b4ee632bbc81321d3891c82dd2c4c01438625d83#b4ee632bbc81321d3891c82dd2c4c01438625d83" dependencies = [ "case", "num_enum", "prettyplease", "proc-macro2", "quote", - "sp-crypto-hashing 0.1.0 (git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8)", + "sp-crypto-hashing 0.1.0 (git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f)", "syn 2.0.106", ] @@ -13327,7 +13328,7 @@ dependencies = [ "proc-macro2", "quote", "regex", - "sp-crypto-hashing 0.1.0 (git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8)", + "sp-crypto-hashing 0.1.0 (git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f)", "syn 2.0.106", ] @@ -13614,6 +13615,17 @@ dependencies = [ "serde", ] +[[package]] +name = "rand" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc266eb313df6c5c09c1c7b1fbe2510961e5bcd3add930c1e31f7ed9da0feff8" +dependencies = [ + "chacha20 0.10.0", + "getrandom 0.4.1", + "rand_core 0.10.0", +] + [[package]] name = "rand_chacha" version = "0.3.1" @@ -13640,7 +13652,7 @@ version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" dependencies = [ - "getrandom 0.2.16", + "getrandom 0.2.17", ] [[package]] @@ -13653,6 +13665,12 @@ dependencies = [ "serde", ] +[[package]] +name = "rand_core" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c8d0fd677905edcbeedbf2edb6494d676f0e98d54d5cf9bda0b061cb8fb8aba" + [[package]] name = "rand_distr" version = "0.4.3" @@ -13752,7 +13770,7 @@ version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ba009ff324d1fc1b900bd1fdb31564febe58a8ccc8a6fdbb93b543d33b13ca43" dependencies = [ - "getrandom 0.2.16", + "getrandom 0.2.17", "libredox", "thiserror 1.0.69", ] @@ -13897,7 +13915,7 @@ checksum = "a4689e6c2294d81e88dc6261c768b63bc4fcdb852be6d1352498b114f61383b7" dependencies = [ "cc", "cfg-if", - "getrandom 0.2.16", + "getrandom 0.2.17", "libc", "untrusted 0.9.0", "windows-sys 0.52.0", @@ -13957,7 +13975,7 @@ dependencies = [ [[package]] name = "rococo-runtime" version = "24.0.1" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "binary-merkle-tree", "bitvec", @@ -14055,7 +14073,7 @@ dependencies = [ [[package]] name = "rococo-runtime-constants" version = "21.0.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "frame-support", "polkadot-primitives", @@ -14451,7 +14469,7 @@ dependencies = [ [[package]] name = "sc-allocator" version = "32.0.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "log", "sp-core", @@ -14462,7 +14480,7 @@ dependencies = [ [[package]] name = "sc-authority-discovery" version = "0.51.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "async-trait", "futures", @@ -14493,7 +14511,7 @@ dependencies = [ [[package]] name = "sc-basic-authorship" version = "0.50.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "futures", "log", @@ -14508,13 +14526,14 @@ dependencies = [ "sp-core", "sp-inherents", "sp-runtime", + "stp-shield", "substrate-prometheus-endpoint", ] [[package]] name = "sc-block-builder" version = "0.45.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "parity-scale-codec", "sp-api", @@ -14529,7 +14548,7 @@ dependencies = [ [[package]] name = "sc-chain-spec" version = "44.0.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "array-bytes 6.2.3", "clap", @@ -14545,7 +14564,7 @@ dependencies = [ "serde_json", "sp-blockchain", "sp-core", - "sp-crypto-hashing 0.1.0 (git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8)", + "sp-crypto-hashing 0.1.0 (git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f)", "sp-genesis-builder", "sp-io", "sp-runtime", @@ -14556,7 +14575,7 @@ dependencies = [ [[package]] name = "sc-chain-spec-derive" version = "12.0.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "proc-macro-crate 3.4.0", "proc-macro2", @@ -14567,7 +14586,7 @@ dependencies = [ [[package]] name = "sc-cli" version = "0.53.1" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "array-bytes 6.2.3", "chrono", @@ -14609,7 +14628,7 @@ dependencies = [ [[package]] name = "sc-client-api" version = "40.0.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "fnv", "futures", @@ -14635,7 +14654,7 @@ dependencies = [ [[package]] name = "sc-client-db" version = "0.47.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "hash-db", "kvdb", @@ -14663,7 +14682,7 @@ dependencies = [ [[package]] name = "sc-consensus" version = "0.50.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "async-trait", "futures", @@ -14686,7 +14705,7 @@ dependencies = [ [[package]] name = "sc-consensus-aura" version = "0.51.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "async-trait", "futures", @@ -14715,7 +14734,7 @@ dependencies = [ [[package]] name = "sc-consensus-babe" version = "0.51.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "async-trait", "fork-tree", @@ -14740,7 +14759,7 @@ dependencies = [ "sp-consensus-babe", "sp-consensus-slots", "sp-core", - "sp-crypto-hashing 0.1.0 (git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8)", + "sp-crypto-hashing 0.1.0 (git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f)", "sp-inherents", "sp-keystore", "sp-runtime", @@ -14751,7 +14770,7 @@ dependencies = [ [[package]] name = "sc-consensus-babe-rpc" version = "0.51.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "futures", "jsonrpsee", @@ -14773,7 +14792,7 @@ dependencies = [ [[package]] name = "sc-consensus-beefy" version = "30.0.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "array-bytes 6.2.3", "async-channel 1.9.0", @@ -14807,7 +14826,7 @@ dependencies = [ [[package]] name = "sc-consensus-beefy-rpc" version = "30.0.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "futures", "jsonrpsee", @@ -14827,7 +14846,7 @@ dependencies = [ [[package]] name = "sc-consensus-epochs" version = "0.50.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "fork-tree", "parity-scale-codec", @@ -14840,7 +14859,7 @@ dependencies = [ [[package]] name = "sc-consensus-grandpa" version = "0.36.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "ahash", "array-bytes 6.2.3", @@ -14874,7 +14893,7 @@ dependencies = [ "sp-consensus", "sp-consensus-grandpa", "sp-core", - "sp-crypto-hashing 0.1.0 (git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8)", + "sp-crypto-hashing 0.1.0 (git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f)", "sp-keystore", "sp-runtime", "substrate-prometheus-endpoint", @@ -14884,7 +14903,7 @@ dependencies = [ [[package]] name = "sc-consensus-grandpa-rpc" version = "0.36.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "finality-grandpa", "futures", @@ -14904,7 +14923,7 @@ dependencies = [ [[package]] name = "sc-consensus-manual-seal" version = "0.52.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "assert_matches", "async-trait", @@ -14939,7 +14958,7 @@ dependencies = [ [[package]] name = "sc-consensus-slots" version = "0.50.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "async-trait", "futures", @@ -14962,7 +14981,7 @@ dependencies = [ [[package]] name = "sc-executor" version = "0.43.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "parity-scale-codec", "parking_lot 0.12.5", @@ -14985,7 +15004,7 @@ dependencies = [ [[package]] name = "sc-executor-common" version = "0.39.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "polkavm 0.24.0", "sc-allocator", @@ -14998,7 +15017,7 @@ dependencies = [ [[package]] name = "sc-executor-polkavm" version = "0.36.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "log", "polkavm 0.24.0", @@ -15009,7 +15028,7 @@ dependencies = [ [[package]] name = "sc-executor-wasmtime" version = "0.39.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "anyhow", "log", @@ -15025,7 +15044,7 @@ dependencies = [ [[package]] name = "sc-informant" version = "0.50.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "console", "futures", @@ -15041,7 +15060,7 @@ dependencies = [ [[package]] name = "sc-keystore" version = "36.0.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "array-bytes 6.2.3", "parking_lot 0.12.5", @@ -15055,7 +15074,7 @@ dependencies = [ [[package]] name = "sc-mixnet" version = "0.21.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "array-bytes 6.2.3", "arrayvec 0.7.6", @@ -15083,7 +15102,7 @@ dependencies = [ [[package]] name = "sc-network" version = "0.51.1" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "array-bytes 6.2.3", "async-channel 1.9.0", @@ -15133,7 +15152,7 @@ dependencies = [ [[package]] name = "sc-network-common" version = "0.49.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "bitflags 1.3.2", "parity-scale-codec", @@ -15143,7 +15162,7 @@ dependencies = [ [[package]] name = "sc-network-gossip" version = "0.51.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "ahash", "futures", @@ -15162,7 +15181,7 @@ dependencies = [ [[package]] name = "sc-network-light" version = "0.50.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "array-bytes 6.2.3", "async-channel 1.9.0", @@ -15183,7 +15202,7 @@ dependencies = [ [[package]] name = "sc-network-statement" version = "0.33.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "array-bytes 6.2.3", "async-channel 1.9.0", @@ -15203,7 +15222,7 @@ dependencies = [ [[package]] name = "sc-network-sync" version = "0.50.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "array-bytes 6.2.3", "async-channel 1.9.0", @@ -15238,7 +15257,7 @@ dependencies = [ [[package]] name = "sc-network-transactions" version = "0.50.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "array-bytes 6.2.3", "futures", @@ -15257,7 +15276,7 @@ dependencies = [ [[package]] name = "sc-network-types" version = "0.17.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "bs58", "bytes", @@ -15278,7 +15297,7 @@ dependencies = [ [[package]] name = "sc-offchain" version = "46.0.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "bytes", "fnv", @@ -15312,7 +15331,7 @@ dependencies = [ [[package]] name = "sc-proposer-metrics" version = "0.20.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "log", "substrate-prometheus-endpoint", @@ -15321,7 +15340,7 @@ dependencies = [ [[package]] name = "sc-rpc" version = "46.0.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "futures", "jsonrpsee", @@ -15353,7 +15372,7 @@ dependencies = [ [[package]] name = "sc-rpc-api" version = "0.50.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "jsonrpsee", "parity-scale-codec", @@ -15373,7 +15392,7 @@ dependencies = [ [[package]] name = "sc-rpc-server" version = "23.0.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "dyn-clone", "forwarded-header-value", @@ -15397,7 +15416,7 @@ dependencies = [ [[package]] name = "sc-rpc-spec-v2" version = "0.51.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "array-bytes 6.2.3", "futures", @@ -15430,13 +15449,13 @@ dependencies = [ [[package]] name = "sc-runtime-utilities" version = "0.3.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "parity-scale-codec", "sc-executor", "sc-executor-common", "sp-core", - "sp-crypto-hashing 0.1.0 (git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8)", + "sp-crypto-hashing 0.1.0 (git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f)", "sp-state-machine", "sp-wasm-interface", "thiserror 1.0.69", @@ -15445,7 +15464,7 @@ dependencies = [ [[package]] name = "sc-service" version = "0.52.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "async-trait", "directories", @@ -15509,7 +15528,7 @@ dependencies = [ [[package]] name = "sc-state-db" version = "0.39.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "log", "parity-scale-codec", @@ -15520,7 +15539,7 @@ dependencies = [ [[package]] name = "sc-statement-store" version = "22.0.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "log", "parity-db", @@ -15539,7 +15558,7 @@ dependencies = [ [[package]] name = "sc-storage-monitor" version = "0.25.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "clap", "fs4", @@ -15552,7 +15571,7 @@ dependencies = [ [[package]] name = "sc-sync-state-rpc" version = "0.51.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "jsonrpsee", "parity-scale-codec", @@ -15571,7 +15590,7 @@ dependencies = [ [[package]] name = "sc-sysinfo" version = "43.0.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "derive_more 0.99.20", "futures", @@ -15584,14 +15603,14 @@ dependencies = [ "serde", "serde_json", "sp-core", - "sp-crypto-hashing 0.1.0 (git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8)", + "sp-crypto-hashing 0.1.0 (git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f)", "sp-io", ] [[package]] name = "sc-telemetry" version = "29.0.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "chrono", "futures", @@ -15610,7 +15629,7 @@ dependencies = [ [[package]] name = "sc-tracing" version = "40.0.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "chrono", "console", @@ -15638,7 +15657,7 @@ dependencies = [ [[package]] name = "sc-tracing-proc-macro" version = "11.1.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "proc-macro-crate 3.4.0", "proc-macro2", @@ -15649,7 +15668,7 @@ dependencies = [ [[package]] name = "sc-transaction-pool" version = "40.1.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "async-trait", "futures", @@ -15666,7 +15685,7 @@ dependencies = [ "sp-api", "sp-blockchain", "sp-core", - "sp-crypto-hashing 0.1.0 (git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8)", + "sp-crypto-hashing 0.1.0 (git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f)", "sp-runtime", "sp-tracing", "sp-transaction-pool", @@ -15680,7 +15699,7 @@ dependencies = [ [[package]] name = "sc-transaction-pool-api" version = "40.0.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "async-trait", "futures", @@ -15697,7 +15716,7 @@ dependencies = [ [[package]] name = "sc-utils" version = "19.0.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "async-channel 1.9.0", "futures", @@ -16237,7 +16256,7 @@ checksum = "99cd6713db3cf16b6c84e06321e049a9b9f699826e16096d23bbcc44d15d51a6" dependencies = [ "block-buffer 0.9.0", "cfg-if", - "cpufeatures", + "cpufeatures 0.2.17", "digest 0.9.0", "opaque-debug 0.3.1", ] @@ -16249,7 +16268,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba" dependencies = [ "cfg-if", - "cpufeatures", + "cpufeatures 0.2.17", "digest 0.10.7", ] @@ -16261,7 +16280,7 @@ checksum = "4d58a1e1bf39749807d89cf2d98ac2dfa0ff1cb3faa38fbb64dd88ac8013d800" dependencies = [ "block-buffer 0.9.0", "cfg-if", - "cpufeatures", + "cpufeatures 0.2.17", "digest 0.9.0", "opaque-debug 0.3.1", ] @@ -16273,7 +16292,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283" dependencies = [ "cfg-if", - "cpufeatures", + "cpufeatures 0.2.17", "digest 0.10.7", ] @@ -16395,7 +16414,7 @@ checksum = "826167069c09b99d56f31e9ae5c99049e932a98c9dc2dac47645b08dbbf76ba7" [[package]] name = "slot-range-helper" version = "18.0.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "enumn", "parity-scale-codec", @@ -16465,7 +16484,7 @@ dependencies = [ "bip39", "blake2-rfc", "bs58", - "chacha20", + "chacha20 0.9.1", "crossbeam-queue", "derive_more 0.99.20", "ed25519-zebra", @@ -16519,7 +16538,7 @@ dependencies = [ "bip39", "blake2-rfc", "bs58", - "chacha20", + "chacha20 0.9.1", "crossbeam-queue", "derive_more 0.99.20", "ed25519-zebra", @@ -16658,7 +16677,7 @@ dependencies = [ [[package]] name = "snowbridge-core" version = "0.14.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "bp-relayers", "frame-support", @@ -16742,7 +16761,7 @@ dependencies = [ [[package]] name = "sp-api" version = "37.0.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "docify", "hash-db", @@ -16764,7 +16783,7 @@ dependencies = [ [[package]] name = "sp-api-proc-macro" version = "23.0.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "Inflector", "blake2 0.10.6", @@ -16778,7 +16797,7 @@ dependencies = [ [[package]] name = "sp-application-crypto" version = "41.0.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "parity-scale-codec", "scale-info", @@ -16790,7 +16809,7 @@ dependencies = [ [[package]] name = "sp-arithmetic" version = "27.0.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "docify", "integer-sqrt", @@ -16804,7 +16823,7 @@ dependencies = [ [[package]] name = "sp-authority-discovery" version = "37.0.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "parity-scale-codec", "scale-info", @@ -16816,7 +16835,7 @@ dependencies = [ [[package]] name = "sp-block-builder" version = "37.0.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "sp-api", "sp-inherents", @@ -16826,7 +16845,7 @@ dependencies = [ [[package]] name = "sp-blockchain" version = "40.0.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "futures", "parity-scale-codec", @@ -16845,7 +16864,7 @@ dependencies = [ [[package]] name = "sp-consensus" version = "0.43.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "async-trait", "futures", @@ -16859,7 +16878,7 @@ dependencies = [ [[package]] name = "sp-consensus-aura" version = "0.43.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "async-trait", "parity-scale-codec", @@ -16875,7 +16894,7 @@ dependencies = [ [[package]] name = "sp-consensus-babe" version = "0.43.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "async-trait", "parity-scale-codec", @@ -16893,7 +16912,7 @@ dependencies = [ [[package]] name = "sp-consensus-beefy" version = "25.0.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "parity-scale-codec", "scale-info", @@ -16901,7 +16920,7 @@ dependencies = [ "sp-api", "sp-application-crypto", "sp-core", - "sp-crypto-hashing 0.1.0 (git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8)", + "sp-crypto-hashing 0.1.0 (git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f)", "sp-io", "sp-keystore", "sp-mmr-primitives", @@ -16913,7 +16932,7 @@ dependencies = [ [[package]] name = "sp-consensus-grandpa" version = "24.0.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "finality-grandpa", "log", @@ -16930,7 +16949,7 @@ dependencies = [ [[package]] name = "sp-consensus-slots" version = "0.43.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "parity-scale-codec", "scale-info", @@ -16941,7 +16960,7 @@ dependencies = [ [[package]] name = "sp-core" version = "37.0.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "ark-vrf", "array-bytes 6.2.3", @@ -16972,7 +16991,7 @@ dependencies = [ "secrecy 0.8.0", "serde", "sha2 0.10.9", - "sp-crypto-hashing 0.1.0 (git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8)", + "sp-crypto-hashing 0.1.0 (git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f)", "sp-debug-derive", "sp-externalities", "sp-runtime-interface", @@ -16989,7 +17008,7 @@ dependencies = [ [[package]] name = "sp-crypto-ec-utils" version = "0.16.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "ark-bls12-377", "ark-bls12-377-ext", @@ -17023,7 +17042,7 @@ dependencies = [ [[package]] name = "sp-crypto-hashing" version = "0.1.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "blake2b_simd", "byteorder", @@ -17036,17 +17055,17 @@ dependencies = [ [[package]] name = "sp-crypto-hashing-proc-macro" version = "0.1.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "quote", - "sp-crypto-hashing 0.1.0 (git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8)", + "sp-crypto-hashing 0.1.0 (git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f)", "syn 2.0.106", ] [[package]] name = "sp-database" version = "10.0.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "kvdb", "parking_lot 0.12.5", @@ -17055,7 +17074,7 @@ dependencies = [ [[package]] name = "sp-debug-derive" version = "14.0.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "proc-macro2", "quote", @@ -17065,7 +17084,7 @@ dependencies = [ [[package]] name = "sp-externalities" version = "0.30.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "environmental", "parity-scale-codec", @@ -17075,7 +17094,7 @@ dependencies = [ [[package]] name = "sp-genesis-builder" version = "0.18.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "parity-scale-codec", "scale-info", @@ -17087,7 +17106,7 @@ dependencies = [ [[package]] name = "sp-inherents" version = "37.0.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "async-trait", "impl-trait-for-tuples", @@ -17100,7 +17119,7 @@ dependencies = [ [[package]] name = "sp-io" version = "41.0.1" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "bytes", "docify", @@ -17112,7 +17131,7 @@ dependencies = [ "rustversion", "secp256k1 0.28.2", "sp-core", - "sp-crypto-hashing 0.1.0 (git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8)", + "sp-crypto-hashing 0.1.0 (git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f)", "sp-externalities", "sp-keystore", "sp-runtime-interface", @@ -17126,7 +17145,7 @@ dependencies = [ [[package]] name = "sp-keyring" version = "42.0.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "sp-core", "sp-runtime", @@ -17136,7 +17155,7 @@ dependencies = [ [[package]] name = "sp-keystore" version = "0.43.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "parity-scale-codec", "parking_lot 0.12.5", @@ -17147,7 +17166,7 @@ dependencies = [ [[package]] name = "sp-maybe-compressed-blob" version = "11.0.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "thiserror 1.0.69", "zstd 0.12.4", @@ -17156,7 +17175,7 @@ dependencies = [ [[package]] name = "sp-metadata-ir" version = "0.11.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "frame-metadata 23.0.0", "parity-scale-codec", @@ -17166,7 +17185,7 @@ dependencies = [ [[package]] name = "sp-mixnet" version = "0.15.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "parity-scale-codec", "scale-info", @@ -17177,7 +17196,7 @@ dependencies = [ [[package]] name = "sp-mmr-primitives" version = "37.0.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "log", "parity-scale-codec", @@ -17194,7 +17213,7 @@ dependencies = [ [[package]] name = "sp-npos-elections" version = "37.0.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "parity-scale-codec", "scale-info", @@ -17207,7 +17226,7 @@ dependencies = [ [[package]] name = "sp-offchain" version = "37.0.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "sp-api", "sp-core", @@ -17217,7 +17236,7 @@ dependencies = [ [[package]] name = "sp-panic-handler" version = "13.0.2" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "backtrace", "regex", @@ -17226,7 +17245,7 @@ dependencies = [ [[package]] name = "sp-rpc" version = "35.0.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "rustc-hash 1.1.0", "serde", @@ -17236,7 +17255,7 @@ dependencies = [ [[package]] name = "sp-runtime" version = "42.0.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "binary-merkle-tree", "docify", @@ -17265,7 +17284,7 @@ dependencies = [ [[package]] name = "sp-runtime-interface" version = "30.0.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "bytes", "impl-trait-for-tuples", @@ -17284,7 +17303,7 @@ dependencies = [ [[package]] name = "sp-runtime-interface-proc-macro" version = "19.0.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "Inflector", "expander", @@ -17297,7 +17316,7 @@ dependencies = [ [[package]] name = "sp-session" version = "39.0.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "parity-scale-codec", "scale-info", @@ -17311,7 +17330,7 @@ dependencies = [ [[package]] name = "sp-staking" version = "39.0.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "impl-trait-for-tuples", "parity-scale-codec", @@ -17324,7 +17343,7 @@ dependencies = [ [[package]] name = "sp-state-machine" version = "0.46.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "hash-db", "log", @@ -17344,7 +17363,7 @@ dependencies = [ [[package]] name = "sp-statement-store" version = "21.0.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "aes-gcm", "curve25519-dalek", @@ -17357,7 +17376,7 @@ dependencies = [ "sp-api", "sp-application-crypto", "sp-core", - "sp-crypto-hashing 0.1.0 (git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8)", + "sp-crypto-hashing 0.1.0 (git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f)", "sp-externalities", "sp-runtime", "sp-runtime-interface", @@ -17368,12 +17387,12 @@ dependencies = [ [[package]] name = "sp-std" version = "14.0.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" [[package]] name = "sp-storage" version = "22.0.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "impl-serde", "parity-scale-codec", @@ -17385,7 +17404,7 @@ dependencies = [ [[package]] name = "sp-timestamp" version = "37.0.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "async-trait", "parity-scale-codec", @@ -17397,7 +17416,7 @@ dependencies = [ [[package]] name = "sp-tracing" version = "17.1.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "parity-scale-codec", "tracing", @@ -17408,7 +17427,7 @@ dependencies = [ [[package]] name = "sp-transaction-pool" version = "37.0.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "sp-api", "sp-runtime", @@ -17417,7 +17436,7 @@ dependencies = [ [[package]] name = "sp-transaction-storage-proof" version = "37.0.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "async-trait", "parity-scale-codec", @@ -17431,7 +17450,7 @@ dependencies = [ [[package]] name = "sp-trie" version = "40.0.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "ahash", "foldhash 0.1.5", @@ -17456,7 +17475,7 @@ dependencies = [ [[package]] name = "sp-version" version = "40.0.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "impl-serde", "parity-scale-codec", @@ -17473,7 +17492,7 @@ dependencies = [ [[package]] name = "sp-version-proc-macro" version = "15.0.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "parity-scale-codec", "proc-macro-warning", @@ -17485,7 +17504,7 @@ dependencies = [ [[package]] name = "sp-wasm-interface" version = "22.0.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "anyhow", "impl-trait-for-tuples", @@ -17497,7 +17516,7 @@ dependencies = [ [[package]] name = "sp-weights" version = "32.0.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "bounded-collections 0.2.4", "parity-scale-codec", @@ -17671,7 +17690,7 @@ checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" [[package]] name = "staging-chain-spec-builder" version = "12.0.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "clap", "docify", @@ -17684,7 +17703,7 @@ dependencies = [ [[package]] name = "staging-node-inspect" version = "0.29.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "clap", "parity-scale-codec", @@ -17702,7 +17721,7 @@ dependencies = [ [[package]] name = "staging-parachain-info" version = "0.21.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "cumulus-primitives-core", "frame-support", @@ -17715,7 +17734,7 @@ dependencies = [ [[package]] name = "staging-xcm" version = "17.0.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "array-bytes 6.2.3", "bounded-collections 0.2.4", @@ -17736,7 +17755,7 @@ dependencies = [ [[package]] name = "staging-xcm-builder" version = "21.1.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "environmental", "frame-support", @@ -17760,7 +17779,7 @@ dependencies = [ [[package]] name = "staging-xcm-executor" version = "20.0.1" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "environmental", "frame-benchmarking", @@ -17811,6 +17830,51 @@ dependencies = [ "syn 1.0.109", ] +[[package]] +name = "stc-shield" +version = "0.1.0" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" +dependencies = [ + "anyhow", + "async-trait", + "chacha20poly1305", + "futures", + "hex", + "log", + "ml-kem", + "parity-scale-codec", + "rand 0.8.5", + "sc-client-api", + "sc-service", + "sp-consensus", + "sp-inherents", + "sp-runtime", + "stp-shield", +] + +[[package]] +name = "stp-io" +version = "0.1.0" +dependencies = [ + "parity-scale-codec", + "sp-externalities", + "sp-runtime-interface", + "stp-shield", +] + +[[package]] +name = "stp-shield" +version = "0.1.0" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" +dependencies = [ + "parity-scale-codec", + "scale-info", + "sp-api", + "sp-externalities", + "sp-inherents", + "sp-runtime", +] + [[package]] name = "string-interner" version = "0.17.0" @@ -17872,7 +17936,7 @@ dependencies = [ [[package]] name = "substrate-bip39" version = "0.6.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "hmac 0.12.1", "pbkdf2", @@ -17897,7 +17961,7 @@ dependencies = [ [[package]] name = "substrate-build-script-utils" version = "11.0.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" [[package]] name = "substrate-fixed" @@ -17913,7 +17977,7 @@ dependencies = [ [[package]] name = "substrate-frame-rpc-system" version = "45.0.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "docify", "frame-system-rpc-runtime-api", @@ -17933,7 +17997,7 @@ dependencies = [ [[package]] name = "substrate-prometheus-endpoint" version = "0.17.6" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "http-body-util", "hyper 1.7.0", @@ -17947,7 +18011,7 @@ dependencies = [ [[package]] name = "substrate-state-trie-migration-rpc" version = "44.0.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "jsonrpsee", "parity-scale-codec", @@ -17974,7 +18038,7 @@ dependencies = [ [[package]] name = "substrate-wasm-builder" version = "27.0.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "array-bytes 6.2.3", "build-helper", @@ -18022,7 +18086,7 @@ dependencies = [ "log", "num_enum", "pallet-balances", - "pallet-contracts 40.1.0", + "pallet-contracts", "pallet-crowdloan", "pallet-drand", "pallet-preimage", @@ -19003,7 +19067,7 @@ dependencies = [ [[package]] name = "tracing-gum" version = "20.0.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "coarsetime", "polkadot-primitives", @@ -19014,7 +19078,7 @@ dependencies = [ [[package]] name = "tracing-gum-proc-macro" version = "5.0.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "expander", "proc-macro-crate 3.4.0", @@ -19485,7 +19549,16 @@ version = "1.0.1+wasi-0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0562428422c63773dad2c345a1882263bbf4d65cf3f42e90921f787ef5ad58e7" dependencies = [ - "wit-bindgen", + "wit-bindgen 0.46.0", +] + +[[package]] +name = "wasip3" +version = "0.4.0+wasi-0.3.0-rc-2026-01-06" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5428f8bf88ea5ddc08faddef2ac4a67e390b88186c703ce6dbd955e1c145aca5" +dependencies = [ + "wit-bindgen 0.51.0", ] [[package]] @@ -19569,6 +19642,16 @@ dependencies = [ "unicode-ident", ] +[[package]] +name = "wasm-encoder" +version = "0.244.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "990065f2fe63003fe337b932cfb5e3b80e0b4d0f5ff650e6985b1048f62c8319" +dependencies = [ + "leb128fmt", + "wasmparser 0.244.0", +] + [[package]] name = "wasm-instrument" version = "0.4.0" @@ -19578,6 +19661,18 @@ dependencies = [ "parity-wasm", ] +[[package]] +name = "wasm-metadata" +version = "0.244.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb0e353e6a2fbdc176932bbaab493762eb1255a7900fe0fea1a2f96c296cc909" +dependencies = [ + "anyhow", + "indexmap 2.11.4", + "wasm-encoder", + "wasmparser 0.244.0", +] + [[package]] name = "wasm-opt" version = "0.116.1" @@ -19714,6 +19809,18 @@ dependencies = [ "url", ] +[[package]] +name = "wasmparser" +version = "0.244.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "47b807c72e1bac69382b3a6fb3dbe8ea4c0ed87ff5629b8685ae6b9a611028fe" +dependencies = [ + "bitflags 2.9.4", + "hashbrown 0.15.5", + "indexmap 2.11.4", + "semver 1.0.27", +] + [[package]] name = "wasmparser-nostd" version = "0.100.2" @@ -19742,7 +19849,7 @@ dependencies = [ "rayon", "serde", "target-lexicon", - "wasmparser", + "wasmparser 0.102.0", "wasmtime-cache", "wasmtime-cranelift", "wasmtime-environ", @@ -19797,7 +19904,7 @@ dependencies = [ "object 0.30.4", "target-lexicon", "thiserror 1.0.69", - "wasmparser", + "wasmparser 0.102.0", "wasmtime-cranelift-shared", "wasmtime-environ", ] @@ -19832,7 +19939,7 @@ dependencies = [ "serde", "target-lexicon", "thiserror 1.0.69", - "wasmparser", + "wasmparser 0.102.0", "wasmtime-types", ] @@ -19915,7 +20022,7 @@ dependencies = [ "cranelift-entity", "serde", "thiserror 1.0.69", - "wasmparser", + "wasmparser 0.102.0", ] [[package]] @@ -19965,7 +20072,7 @@ checksum = "5f20c57d8d7db6d3b86154206ae5d8fba62dd39573114de97c2cb0578251f8e1" [[package]] name = "westend-runtime" version = "24.0.1" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "binary-merkle-tree", "bitvec", @@ -20072,7 +20179,7 @@ dependencies = [ [[package]] name = "westend-runtime-constants" version = "21.0.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "frame-support", "polkadot-primitives", @@ -20561,6 +20668,94 @@ version = "0.46.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f17a85883d4e6d00e8a97c586de764dabcc06133f7f1d55dce5cdc070ad7fe59" +[[package]] +name = "wit-bindgen" +version = "0.51.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d7249219f66ced02969388cf2bb044a09756a083d0fab1e566056b04d9fbcaa5" +dependencies = [ + "wit-bindgen-rust-macro", +] + +[[package]] +name = "wit-bindgen-core" +version = "0.51.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ea61de684c3ea68cb082b7a88508a8b27fcc8b797d738bfc99a82facf1d752dc" +dependencies = [ + "anyhow", + "heck 0.5.0", + "wit-parser", +] + +[[package]] +name = "wit-bindgen-rust" +version = "0.51.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b7c566e0f4b284dd6561c786d9cb0142da491f46a9fbed79ea69cdad5db17f21" +dependencies = [ + "anyhow", + "heck 0.5.0", + "indexmap 2.11.4", + "prettyplease", + "syn 2.0.106", + "wasm-metadata", + "wit-bindgen-core", + "wit-component", +] + +[[package]] +name = "wit-bindgen-rust-macro" +version = "0.51.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c0f9bfd77e6a48eccf51359e3ae77140a7f50b1e2ebfe62422d8afdaffab17a" +dependencies = [ + "anyhow", + "prettyplease", + "proc-macro2", + "quote", + "syn 2.0.106", + "wit-bindgen-core", + "wit-bindgen-rust", +] + +[[package]] +name = "wit-component" +version = "0.244.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d66ea20e9553b30172b5e831994e35fbde2d165325bec84fc43dbf6f4eb9cb2" +dependencies = [ + "anyhow", + "bitflags 2.9.4", + "indexmap 2.11.4", + "log", + "serde", + "serde_derive", + "serde_json", + "wasm-encoder", + "wasm-metadata", + "wasmparser 0.244.0", + "wit-parser", +] + +[[package]] +name = "wit-parser" +version = "0.244.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ecc8ac4bc1dc3381b7f59c34f00b67e18f910c2c0f50015669dde7def656a736" +dependencies = [ + "anyhow", + "id-arena", + "indexmap 2.11.4", + "log", + "semver 1.0.27", + "serde", + "serde_derive", + "serde_json", + "unicode-xid", + "wasmparser 0.244.0", +] + [[package]] name = "writeable" version = "0.6.1" @@ -20625,7 +20820,7 @@ dependencies = [ [[package]] name = "xcm-procedural" version = "11.0.2" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "Inflector", "proc-macro2", @@ -20636,7 +20831,7 @@ dependencies = [ [[package]] name = "xcm-runtime-apis" version = "0.8.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "frame-support", "parity-scale-codec", @@ -20650,7 +20845,7 @@ dependencies = [ [[package]] name = "xcm-simulator" version = "21.0.0" -source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8#a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" +source = "git+https://github.com/opentensor/polkadot-sdk.git?rev=63332fd67a3e676b064b5ecde8ddad308714e42f#63332fd67a3e676b064b5ecde8ddad308714e42f" dependencies = [ "frame-support", "frame-system", diff --git a/Cargo.toml b/Cargo.toml index efc22431fa..f30c39133b 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -39,6 +39,9 @@ resolver = "2" [workspace.package] edition = "2024" +[workspace.lints.rust] +unexpected_cfgs = { level = "allow", check-cfg = ['cfg(substrate_runtime)'] } + [workspace.lints.clippy] arithmetic-side-effects = "deny" expect-used = "deny" @@ -70,6 +73,9 @@ subtensor-runtime-common = { default-features = false, path = "common" } subtensor-swap-interface = { default-features = false, path = "pallets/swap-interface" } subtensor-transaction-fee = { default-features = false, path = "pallets/transaction-fee" } subtensor-chain-extensions = { default-features = false, path = "chain-extensions" } +stp-io = { path = "primitives/io", default-features = false } +stp-shield = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "63332fd67a3e676b064b5ecde8ddad308714e42f", default-features = false } +stc-shield = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "63332fd67a3e676b064b5ecde8ddad308714e42f", default-features = false } ed25519-dalek = { version = "2.1.0", default-features = false } async-trait = "0.1" @@ -85,7 +91,7 @@ libsecp256k1 = { version = "0.7.2", default-features = false } log = { version = "0.4.21", default-features = false } memmap2 = "0.9.8" ndarray = { version = "0.16.1", default-features = false } -rand = "0.8.5" +rand = { version = "0.10.0", default-features = false } scale-info = { version = "2.11.2", default-features = false } serde = { version = "1.0.214", default-features = false } serde-tuple-vec-map = { version = "1.0.1", default-features = false } @@ -118,159 +124,160 @@ ahash = { version = "0.8", default-features = false } regex = { version = "1.11.1", default-features = false } ethereum = { version = "0.18.2", default-features = false } num_enum = { version = "0.7.4", default-features = false } +tokio = { version = "1.38", default-features = false } -frame = { package = "polkadot-sdk-frame", git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2503-6", default-features = false } -frame-benchmarking = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2503-6", default-features = false } -frame-benchmarking-cli = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2503-6", default-features = false } -frame-executive = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2503-6", default-features = false } -frame-metadata-hash-extension = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2503-6", default-features = false } -frame-support = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2503-6", default-features = false } -frame-system = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2503-6", default-features = false } -frame-system-benchmarking = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2503-6", default-features = false } -frame-system-rpc-runtime-api = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2503-6", default-features = false } -frame-try-runtime = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2503-6", default-features = false } +frame = { package = "polkadot-sdk-frame", git = "https://github.com/opentensor/polkadot-sdk.git", rev = "63332fd67a3e676b064b5ecde8ddad308714e42f", default-features = false } +frame-support = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "63332fd67a3e676b064b5ecde8ddad308714e42f", default-features = false } +frame-system = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "63332fd67a3e676b064b5ecde8ddad308714e42f", default-features = false } +frame-executive = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "63332fd67a3e676b064b5ecde8ddad308714e42f", default-features = false } +frame-system-rpc-runtime-api = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "63332fd67a3e676b064b5ecde8ddad308714e42f", default-features = false } +frame-system-benchmarking = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "63332fd67a3e676b064b5ecde8ddad308714e42f", default-features = false } +frame-try-runtime = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "63332fd67a3e676b064b5ecde8ddad308714e42f", default-features = false } +frame-benchmarking = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "63332fd67a3e676b064b5ecde8ddad308714e42f", default-features = false } +frame-benchmarking-cli = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "63332fd67a3e676b064b5ecde8ddad308714e42f", default-features = false } +frame-metadata-hash-extension = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "63332fd67a3e676b064b5ecde8ddad308714e42f", default-features = false } frame-metadata = { version = "23.0.0", default-features = false } pallet-subtensor-proxy = { path = "pallets/proxy", default-features = false } pallet-subtensor-utility = { path = "pallets/utility", default-features = false } -pallet-babe = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2503-6", default-features = false } -pallet-aura = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2503-6", default-features = false } -pallet-balances = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2503-6", default-features = false } -pallet-grandpa = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2503-6", default-features = false } -pallet-insecure-randomness-collective-flip = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2503-6", default-features = false } -pallet-multisig = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2503-6", default-features = false } -pallet-preimage = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2503-6", default-features = false } -pallet-safe-mode = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2503-6", default-features = false } -pallet-scheduler = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2503-6", default-features = false } -pallet-sudo = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2503-6", default-features = false } -pallet-timestamp = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2503-6", default-features = false } -pallet-transaction-payment = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2503-6", default-features = false } -pallet-transaction-payment-rpc = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2503-6", default-features = false } -pallet-transaction-payment-rpc-runtime-api = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2503-6", default-features = false } -pallet-root-testing = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2503-6", default-features = false } -pallet-contracts = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2503-6", default-features = false } +pallet-babe = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "63332fd67a3e676b064b5ecde8ddad308714e42f", default-features = false } +pallet-aura = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "63332fd67a3e676b064b5ecde8ddad308714e42f", default-features = false } +pallet-balances = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "63332fd67a3e676b064b5ecde8ddad308714e42f", default-features = false } +pallet-grandpa = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "63332fd67a3e676b064b5ecde8ddad308714e42f", default-features = false } +pallet-insecure-randomness-collective-flip = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "63332fd67a3e676b064b5ecde8ddad308714e42f", default-features = false } +pallet-multisig = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "63332fd67a3e676b064b5ecde8ddad308714e42f", default-features = false } +pallet-preimage = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "63332fd67a3e676b064b5ecde8ddad308714e42f", default-features = false } +pallet-safe-mode = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "63332fd67a3e676b064b5ecde8ddad308714e42f", default-features = false } +pallet-scheduler = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "63332fd67a3e676b064b5ecde8ddad308714e42f", default-features = false } +pallet-sudo = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "63332fd67a3e676b064b5ecde8ddad308714e42f", default-features = false } +pallet-timestamp = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "63332fd67a3e676b064b5ecde8ddad308714e42f", default-features = false } +pallet-transaction-payment = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "63332fd67a3e676b064b5ecde8ddad308714e42f", default-features = false } +pallet-transaction-payment-rpc = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "63332fd67a3e676b064b5ecde8ddad308714e42f", default-features = false } +pallet-transaction-payment-rpc-runtime-api = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "63332fd67a3e676b064b5ecde8ddad308714e42f", default-features = false } +pallet-root-testing = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "63332fd67a3e676b064b5ecde8ddad308714e42f", default-features = false } +pallet-contracts = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "63332fd67a3e676b064b5ecde8ddad308714e42f", default-features = false } # NPoS -frame-election-provider-support = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2503-6", default-features = false } -pallet-authority-discovery = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2503-6", default-features = false } -pallet-authorship = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2503-6", default-features = false } -pallet-bags-list = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2503-6", default-features = false } -pallet-election-provider-multi-phase = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2503-6", default-features = false } -pallet-fast-unstake = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2503-6", default-features = false } -pallet-nomination-pools = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2503-6", default-features = false } -pallet-nomination-pools-runtime-api = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2503-6", default-features = false } -pallet-session = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2503-6", default-features = false } -pallet-staking = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2503-6", default-features = false } -pallet-staking-runtime-api = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2503-6", default-features = false } -pallet-staking-reward-fn = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2503-6", default-features = false } -pallet-staking-reward-curve = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2503-6", default-features = false } -pallet-offences = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2503-6", default-features = false } +frame-election-provider-support = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "63332fd67a3e676b064b5ecde8ddad308714e42f", default-features = false } +pallet-authority-discovery = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "63332fd67a3e676b064b5ecde8ddad308714e42f", default-features = false } +pallet-authorship = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "63332fd67a3e676b064b5ecde8ddad308714e42f", default-features = false } +pallet-bags-list = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "63332fd67a3e676b064b5ecde8ddad308714e42f", default-features = false } +pallet-election-provider-multi-phase = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "63332fd67a3e676b064b5ecde8ddad308714e42f", default-features = false } +pallet-fast-unstake = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "63332fd67a3e676b064b5ecde8ddad308714e42f", default-features = false } +pallet-nomination-pools = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "63332fd67a3e676b064b5ecde8ddad308714e42f", default-features = false } +pallet-nomination-pools-runtime-api = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "63332fd67a3e676b064b5ecde8ddad308714e42f", default-features = false } +pallet-session = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "63332fd67a3e676b064b5ecde8ddad308714e42f", default-features = false } +pallet-staking = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "63332fd67a3e676b064b5ecde8ddad308714e42f", default-features = false } +pallet-staking-runtime-api = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "63332fd67a3e676b064b5ecde8ddad308714e42f", default-features = false } +pallet-staking-reward-fn = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "63332fd67a3e676b064b5ecde8ddad308714e42f", default-features = false } +pallet-staking-reward-curve = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "63332fd67a3e676b064b5ecde8ddad308714e42f", default-features = false } +pallet-offences = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "63332fd67a3e676b064b5ecde8ddad308714e42f", default-features = false } -sc-basic-authorship = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2503-6", default-features = false } -sc-cli = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2503-6", default-features = false } -sc-client-api = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2503-6", default-features = false } -sc-consensus = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2503-6", default-features = false } -sc-consensus-aura = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2503-6", default-features = false } -sc-consensus-babe = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2503-6", default-features = false } -sc-consensus-babe-rpc = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2503-6", default-features = false } -sc-consensus-grandpa = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2503-6", default-features = false } -sc-consensus-grandpa-rpc = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2503-6", default-features = false } -sc-consensus-epochs = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2503-6", default-features = false } -sc-chain-spec-derive = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2503-6", default-features = false } -sc-chain-spec = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2503-6", default-features = false } -sc-consensus-slots = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2503-6", default-features = false } -sc-executor = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2503-6", default-features = false } -sc-keystore = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2503-6", default-features = false } -sc-network = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2503-6", default-features = false } -sc-offchain = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2503-6", default-features = false } -sc-rpc = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2503-6", default-features = false } -sc-rpc-api = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2503-6", default-features = false } -sc-service = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2503-6", default-features = false } -sc-telemetry = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2503-6", default-features = false } -sc-transaction-pool = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2503-6", default-features = false } -sc-transaction-pool-api = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2503-6", default-features = false } -sc-consensus-manual-seal = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2503-6", default-features = false } -sc-network-sync = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2503-6", default-features = false } +sc-basic-authorship = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "63332fd67a3e676b064b5ecde8ddad308714e42f", default-features = false } +sc-cli = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "63332fd67a3e676b064b5ecde8ddad308714e42f", default-features = false } +sc-client-api = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "63332fd67a3e676b064b5ecde8ddad308714e42f", default-features = false } +sc-consensus = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "63332fd67a3e676b064b5ecde8ddad308714e42f", default-features = false } +sc-consensus-aura = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "63332fd67a3e676b064b5ecde8ddad308714e42f", default-features = false } +sc-consensus-babe = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "63332fd67a3e676b064b5ecde8ddad308714e42f", default-features = false } +sc-consensus-babe-rpc = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "63332fd67a3e676b064b5ecde8ddad308714e42f", default-features = false } +sc-consensus-grandpa = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "63332fd67a3e676b064b5ecde8ddad308714e42f", default-features = false } +sc-consensus-grandpa-rpc = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "63332fd67a3e676b064b5ecde8ddad308714e42f", default-features = false } +sc-consensus-epochs = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "63332fd67a3e676b064b5ecde8ddad308714e42f", default-features = false } +sc-chain-spec-derive = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "63332fd67a3e676b064b5ecde8ddad308714e42f", default-features = false } +sc-chain-spec = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "63332fd67a3e676b064b5ecde8ddad308714e42f", default-features = false } +sc-consensus-slots = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "63332fd67a3e676b064b5ecde8ddad308714e42f", default-features = false } +sc-executor = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "63332fd67a3e676b064b5ecde8ddad308714e42f", default-features = false } +sc-keystore = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "63332fd67a3e676b064b5ecde8ddad308714e42f", default-features = false } +sc-network = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "63332fd67a3e676b064b5ecde8ddad308714e42f", default-features = false } +sc-offchain = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "63332fd67a3e676b064b5ecde8ddad308714e42f", default-features = false } +sc-rpc = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "63332fd67a3e676b064b5ecde8ddad308714e42f", default-features = false } +sc-rpc-api = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "63332fd67a3e676b064b5ecde8ddad308714e42f", default-features = false } +sc-service = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "63332fd67a3e676b064b5ecde8ddad308714e42f", default-features = false } +sc-telemetry = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "63332fd67a3e676b064b5ecde8ddad308714e42f", default-features = false } +sc-transaction-pool = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "63332fd67a3e676b064b5ecde8ddad308714e42f", default-features = false } +sc-transaction-pool-api = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "63332fd67a3e676b064b5ecde8ddad308714e42f", default-features = false } +sc-consensus-manual-seal = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "63332fd67a3e676b064b5ecde8ddad308714e42f", default-features = false } +sc-network-sync = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "63332fd67a3e676b064b5ecde8ddad308714e42f", default-features = false } -sp-api = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2503-6", default-features = false } -sp-authority-discovery = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2503-6", default-features = false } -sp-arithmetic = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2503-6", default-features = false } -sp-block-builder = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2503-6", default-features = false } -sp-blockchain = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2503-6", default-features = false } -sp-staking = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2503-6", default-features = false } -sp-consensus = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2503-6", default-features = false } -sp-consensus-aura = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2503-6", default-features = false } -sp-consensus-babe = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2503-6", default-features = false } -sp-consensus-slots = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2503-6", default-features = false } -sp-npos-elections = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2503-6", default-features = false } -sp-consensus-grandpa = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2503-6", default-features = false } -sp-genesis-builder = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2503-6", default-features = false } -sp-core = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2503-6", default-features = false } -sp-inherents = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2503-6", default-features = false } -sp-io = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2503-6", default-features = false } -sp-keyring = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2503-6", default-features = false } -sp-offchain = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2503-6", default-features = false } -sp-rpc = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2503-6", default-features = false } -sp-runtime = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2503-6", default-features = false } -sp-session = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2503-6", default-features = false } -sp-std = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2503-6", default-features = false } -sp-storage = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2503-6", default-features = false } -sp-timestamp = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2503-6", default-features = false } -sp-tracing = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2503-6", default-features = false } -sp-transaction-pool = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2503-6", default-features = false } -sp-version = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2503-6", default-features = false } -sp-weights = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2503-6", default-features = false } -sp-crypto-hashing = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2503-6", default-features = false } -sp-application-crypto = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2503-6", default-features = false } +sp-api = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "63332fd67a3e676b064b5ecde8ddad308714e42f", default-features = false } +sp-authority-discovery = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "63332fd67a3e676b064b5ecde8ddad308714e42f", default-features = false } +sp-arithmetic = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "63332fd67a3e676b064b5ecde8ddad308714e42f", default-features = false } +sp-block-builder = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "63332fd67a3e676b064b5ecde8ddad308714e42f", default-features = false } +sp-blockchain = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "63332fd67a3e676b064b5ecde8ddad308714e42f", default-features = false } +sp-staking = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "63332fd67a3e676b064b5ecde8ddad308714e42f", default-features = false } +sp-consensus = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "63332fd67a3e676b064b5ecde8ddad308714e42f", default-features = false } +sp-consensus-aura = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "63332fd67a3e676b064b5ecde8ddad308714e42f", default-features = false } +sp-consensus-babe = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "63332fd67a3e676b064b5ecde8ddad308714e42f", default-features = false } +sp-consensus-slots = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "63332fd67a3e676b064b5ecde8ddad308714e42f", default-features = false } +sp-npos-elections = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "63332fd67a3e676b064b5ecde8ddad308714e42f", default-features = false } +sp-consensus-grandpa = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "63332fd67a3e676b064b5ecde8ddad308714e42f", default-features = false } +sp-genesis-builder = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "63332fd67a3e676b064b5ecde8ddad308714e42f", default-features = false } +sp-core = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "63332fd67a3e676b064b5ecde8ddad308714e42f", default-features = false } +sp-inherents = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "63332fd67a3e676b064b5ecde8ddad308714e42f", default-features = false } +sp-io = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "63332fd67a3e676b064b5ecde8ddad308714e42f", default-features = false } +sp-keyring = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "63332fd67a3e676b064b5ecde8ddad308714e42f", default-features = false } +sp-offchain = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "63332fd67a3e676b064b5ecde8ddad308714e42f", default-features = false } +sp-rpc = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "63332fd67a3e676b064b5ecde8ddad308714e42f", default-features = false } +sp-runtime = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "63332fd67a3e676b064b5ecde8ddad308714e42f", default-features = false } +sp-session = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "63332fd67a3e676b064b5ecde8ddad308714e42f", default-features = false } +sp-std = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "63332fd67a3e676b064b5ecde8ddad308714e42f", default-features = false } +sp-storage = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "63332fd67a3e676b064b5ecde8ddad308714e42f", default-features = false } +sp-timestamp = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "63332fd67a3e676b064b5ecde8ddad308714e42f", default-features = false } +sp-tracing = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "63332fd67a3e676b064b5ecde8ddad308714e42f", default-features = false } +sp-transaction-pool = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "63332fd67a3e676b064b5ecde8ddad308714e42f", default-features = false } +sp-version = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "63332fd67a3e676b064b5ecde8ddad308714e42f", default-features = false } +sp-weights = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "63332fd67a3e676b064b5ecde8ddad308714e42f", default-features = false } +sp-crypto-hashing = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "63332fd67a3e676b064b5ecde8ddad308714e42f", default-features = false } +sp-application-crypto = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "63332fd67a3e676b064b5ecde8ddad308714e42f", default-features = false } +sp-debug-derive = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "63332fd67a3e676b064b5ecde8ddad308714e42f", default-features = false } +sp-externalities = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "63332fd67a3e676b064b5ecde8ddad308714e42f", default-features = false } +sp-runtime-interface = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "63332fd67a3e676b064b5ecde8ddad308714e42f", default-features = false } -substrate-build-script-utils = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2503-6", default-features = false } +substrate-build-script-utils = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "63332fd67a3e676b064b5ecde8ddad308714e42f", default-features = false } substrate-fixed = { git = "https://github.com/encointer/substrate-fixed.git", tag = "v0.6.0", default-features = false } -substrate-frame-rpc-system = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2503-6", default-features = false } -substrate-wasm-builder = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2503-6", default-features = false } -substrate-prometheus-endpoint = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2503-6", default-features = false } +substrate-frame-rpc-system = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "63332fd67a3e676b064b5ecde8ddad308714e42f", default-features = false } +substrate-wasm-builder = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "63332fd67a3e676b064b5ecde8ddad308714e42f", default-features = false } +substrate-prometheus-endpoint = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "63332fd67a3e676b064b5ecde8ddad308714e42f", default-features = false } -polkadot-sdk = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2503-6", default-features = false } +polkadot-sdk = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "63332fd67a3e676b064b5ecde8ddad308714e42f", default-features = false } -runtime-common = { package = "polkadot-runtime-common", git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2503-6", default-features = false } +runtime-common = { package = "polkadot-runtime-common", git = "https://github.com/opentensor/polkadot-sdk.git", rev = "63332fd67a3e676b064b5ecde8ddad308714e42f", default-features = false } # Frontier -fp-evm = { git = "https://github.com/opentensor/frontier", rev = "f12a1274f91442a564bb722a2b9547caba487fa0", default-features = false } -fp-rpc = { git = "https://github.com/opentensor/frontier", rev = "f12a1274f91442a564bb722a2b9547caba487fa0", default-features = false } -fp-self-contained = { git = "https://github.com/opentensor/frontier", rev = "f12a1274f91442a564bb722a2b9547caba487fa0", default-features = false } -fp-account = { git = "https://github.com/opentensor/frontier", rev = "f12a1274f91442a564bb722a2b9547caba487fa0", default-features = false } -fc-storage = { git = "https://github.com/opentensor/frontier", rev = "f12a1274f91442a564bb722a2b9547caba487fa0", default-features = false } -fc-db = { git = "https://github.com/opentensor/frontier", rev = "f12a1274f91442a564bb722a2b9547caba487fa0", default-features = false } -fc-consensus = { git = "https://github.com/opentensor/frontier", rev = "f12a1274f91442a564bb722a2b9547caba487fa0", default-features = false } -fp-consensus = { git = "https://github.com/opentensor/frontier", rev = "f12a1274f91442a564bb722a2b9547caba487fa0", default-features = false } -fp-dynamic-fee = { git = "https://github.com/opentensor/frontier", rev = "f12a1274f91442a564bb722a2b9547caba487fa0", default-features = false } -fc-api = { git = "https://github.com/opentensor/frontier", rev = "f12a1274f91442a564bb722a2b9547caba487fa0", default-features = false } -fc-rpc = { git = "https://github.com/opentensor/frontier", rev = "f12a1274f91442a564bb722a2b9547caba487fa0", default-features = false } -fc-rpc-core = { git = "https://github.com/opentensor/frontier", rev = "f12a1274f91442a564bb722a2b9547caba487fa0", default-features = false } -fc-aura = { git = "https://github.com/opentensor/frontier", rev = "f12a1274f91442a564bb722a2b9547caba487fa0", default-features = false } -fc-babe = { git = "https://github.com/opentensor/frontier", rev = "f12a1274f91442a564bb722a2b9547caba487fa0", default-features = false } -fc-mapping-sync = { git = "https://github.com/opentensor/frontier", rev = "f12a1274f91442a564bb722a2b9547caba487fa0", default-features = false } -precompile-utils = { git = "https://github.com/opentensor/frontier", rev = "f12a1274f91442a564bb722a2b9547caba487fa0", default-features = false } +fp-evm = { git = "https://github.com/opentensor/frontier", rev = "b4ee632bbc81321d3891c82dd2c4c01438625d83", default-features = false } +fp-rpc = { git = "https://github.com/opentensor/frontier", rev = "b4ee632bbc81321d3891c82dd2c4c01438625d83", default-features = false } +fp-self-contained = { git = "https://github.com/opentensor/frontier", rev = "b4ee632bbc81321d3891c82dd2c4c01438625d83", default-features = false } +fp-account = { git = "https://github.com/opentensor/frontier", rev = "b4ee632bbc81321d3891c82dd2c4c01438625d83", default-features = false } +fc-storage = { git = "https://github.com/opentensor/frontier", rev = "b4ee632bbc81321d3891c82dd2c4c01438625d83", default-features = false } +fc-db = { git = "https://github.com/opentensor/frontier", rev = "b4ee632bbc81321d3891c82dd2c4c01438625d83", default-features = false } +fc-consensus = { git = "https://github.com/opentensor/frontier", rev = "b4ee632bbc81321d3891c82dd2c4c01438625d83", default-features = false } +fp-consensus = { git = "https://github.com/opentensor/frontier", rev = "b4ee632bbc81321d3891c82dd2c4c01438625d83", default-features = false } +fp-dynamic-fee = { git = "https://github.com/opentensor/frontier", rev = "b4ee632bbc81321d3891c82dd2c4c01438625d83", default-features = false } +fc-api = { git = "https://github.com/opentensor/frontier", rev = "b4ee632bbc81321d3891c82dd2c4c01438625d83", default-features = false } +fc-rpc = { git = "https://github.com/opentensor/frontier", rev = "b4ee632bbc81321d3891c82dd2c4c01438625d83", default-features = false } +fc-rpc-core = { git = "https://github.com/opentensor/frontier", rev = "b4ee632bbc81321d3891c82dd2c4c01438625d83", default-features = false } +fc-aura = { git = "https://github.com/opentensor/frontier", rev = "b4ee632bbc81321d3891c82dd2c4c01438625d83", default-features = false } +fc-babe = { git = "https://github.com/opentensor/frontier", rev = "b4ee632bbc81321d3891c82dd2c4c01438625d83", default-features = false } +fc-mapping-sync = { git = "https://github.com/opentensor/frontier", rev = "b4ee632bbc81321d3891c82dd2c4c01438625d83", default-features = false } +precompile-utils = { git = "https://github.com/opentensor/frontier", rev = "b4ee632bbc81321d3891c82dd2c4c01438625d83", default-features = false } # Frontier FRAME -pallet-base-fee = { git = "https://github.com/opentensor/frontier", rev = "f12a1274f91442a564bb722a2b9547caba487fa0", default-features = false } -pallet-dynamic-fee = { git = "https://github.com/opentensor/frontier", rev = "f12a1274f91442a564bb722a2b9547caba487fa0", default-features = false } -pallet-ethereum = { git = "https://github.com/opentensor/frontier", rev = "f12a1274f91442a564bb722a2b9547caba487fa0", default-features = false } -pallet-evm = { git = "https://github.com/opentensor/frontier", rev = "f12a1274f91442a564bb722a2b9547caba487fa0", default-features = false } -pallet-evm-precompile-dispatch = { git = "https://github.com/opentensor/frontier", rev = "f12a1274f91442a564bb722a2b9547caba487fa0", default-features = false } -pallet-evm-chain-id = { git = "https://github.com/opentensor/frontier", rev = "f12a1274f91442a564bb722a2b9547caba487fa0", default-features = false } -pallet-evm-precompile-modexp = { git = "https://github.com/opentensor/frontier", rev = "f12a1274f91442a564bb722a2b9547caba487fa0", default-features = false } -pallet-evm-precompile-sha3fips = { git = "https://github.com/opentensor/frontier", rev = "f12a1274f91442a564bb722a2b9547caba487fa0", default-features = false } -pallet-evm-precompile-simple = { git = "https://github.com/opentensor/frontier", rev = "f12a1274f91442a564bb722a2b9547caba487fa0", default-features = false } -pallet-evm-precompile-bn128 = { git = "https://github.com/opentensor/frontier", rev = "f12a1274f91442a564bb722a2b9547caba487fa0", default-features = false } -pallet-hotfix-sufficients = { git = "https://github.com/opentensor/frontier", rev = "f12a1274f91442a564bb722a2b9547caba487fa0", default-features = false } +pallet-base-fee = { git = "https://github.com/opentensor/frontier", rev = "b4ee632bbc81321d3891c82dd2c4c01438625d83", default-features = false } +pallet-dynamic-fee = { git = "https://github.com/opentensor/frontier", rev = "b4ee632bbc81321d3891c82dd2c4c01438625d83", default-features = false } +pallet-ethereum = { git = "https://github.com/opentensor/frontier", rev = "b4ee632bbc81321d3891c82dd2c4c01438625d83", default-features = false } +pallet-evm = { git = "https://github.com/opentensor/frontier", rev = "b4ee632bbc81321d3891c82dd2c4c01438625d83", default-features = false } +pallet-evm-precompile-dispatch = { git = "https://github.com/opentensor/frontier", rev = "b4ee632bbc81321d3891c82dd2c4c01438625d83", default-features = false } +pallet-evm-chain-id = { git = "https://github.com/opentensor/frontier", rev = "b4ee632bbc81321d3891c82dd2c4c01438625d83", default-features = false } +pallet-evm-precompile-modexp = { git = "https://github.com/opentensor/frontier", rev = "b4ee632bbc81321d3891c82dd2c4c01438625d83", default-features = false } +pallet-evm-precompile-sha3fips = { git = "https://github.com/opentensor/frontier", rev = "b4ee632bbc81321d3891c82dd2c4c01438625d83", default-features = false } +pallet-evm-precompile-simple = { git = "https://github.com/opentensor/frontier", rev = "b4ee632bbc81321d3891c82dd2c4c01438625d83", default-features = false } +pallet-evm-precompile-bn128 = { git = "https://github.com/opentensor/frontier", rev = "b4ee632bbc81321d3891c82dd2c4c01438625d83", default-features = false } +pallet-hotfix-sufficients = { git = "https://github.com/opentensor/frontier", rev = "b4ee632bbc81321d3891c82dd2c4c01438625d83", default-features = false } #DRAND pallet-drand = { path = "pallets/drand", default-features = false } -sp-crypto-ec-utils = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2503-6", default-features = false } -getrandom = { version = "0.2.15", default-features = false, features = [ - "custom", -] } -sp-keystore = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2503-6", default-features = false } +sp-crypto-ec-utils = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "63332fd67a3e676b064b5ecde8ddad308714e42f", default-features = false } +sp-keystore = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "63332fd67a3e676b064b5ecde8ddad308714e42f", default-features = false } w3f-bls = { git = "https://github.com/opentensor/bls", branch = "fix-no-std", default-features = false } ark-crypto-primitives = { version = "0.4.0", default-features = false } ark-scale = { version = "0.0.11", default-features = false } @@ -285,7 +292,9 @@ rand_chacha = { version = "0.3.1", default-features = false } tle = { git = "https://github.com/ideal-lab5/timelock", rev = "5416406cfd32799e31e1795393d4916894de4468", default-features = false } pallet-shield = { path = "pallets/shield", default-features = false } -ml-kem = { version = "0.2.0", default-features = true } +ml-kem = { version = "0.2.2", default-features = false } +chacha20poly1305 = { version = "0.10", default-features = false } +blake2 = "0.10.6" # Primitives @@ -306,202 +315,3 @@ pow-faucet = [] [patch.crates-io] w3f-bls = { git = "https://github.com/opentensor/bls", branch = "fix-no-std" } - -# Patches automatically generated with `diener`: -# `diener patch --target https://github.com/paritytech/polkadot-sdk --point-to-git https://github.com/opentensor/polkadot-sdk.git --point-to-git-commit 81fa2c54e94f824eba7dabe9dffd063481cb2d80 --crates-to-patch ../polkadot-sdk --ignore-unused` -# -# Using latest commit from `polkadot-stable2506-2-otf-patches`. -# -# View code changes here: -# -# -# NOTE: The Diener will patch unnecesarry crates while this is waiting to be merged: . -# You may install diener from `liamaharon:ignore-unused-flag` if you like in the meantime. -[patch."https://github.com/paritytech/polkadot-sdk"] -frame-support = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" } -binary-merkle-tree = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" } -sp-core = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" } -sp-crypto-hashing = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" } -sp-crypto-hashing-proc-macro = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" } -sp-debug-derive = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" } -sp-externalities = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" } -sp-storage = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" } -sp-runtime-interface = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" } -sp-runtime-interface-proc-macro = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" } -sp-std = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" } -sp-tracing = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" } -sp-wasm-interface = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" } -sp-io = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" } -sp-keystore = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" } -sp-state-machine = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" } -sp-panic-handler = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" } -sp-trie = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" } -sp-runtime = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" } -sp-application-crypto = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" } -sp-arithmetic = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" } -sp-weights = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" } -sp-api = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" } -sp-api-proc-macro = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" } -sp-metadata-ir = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" } -sp-version = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" } -sp-version-proc-macro = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" } -sc-block-builder = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" } -sp-block-builder = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" } -sp-inherents = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" } -sp-blockchain = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" } -sp-consensus = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" } -sp-database = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" } -sc-client-api = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" } -substrate-prometheus-endpoint = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" } -sc-executor = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" } -sc-executor-common = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" } -sc-allocator = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" } -sp-maybe-compressed-blob = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" } -sc-executor-polkavm = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" } -sc-executor-wasmtime = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" } -substrate-wasm-builder = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" } -sc-tracing = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" } -sc-tracing-proc-macro = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" } -sp-rpc = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" } -frame-executive = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" } -frame-system = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" } -frame-try-runtime = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" } -pallet-balances = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" } -frame-benchmarking = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" } -frame-support-procedural = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" } -frame-support-procedural-tools = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" } -frame-support-procedural-tools-derive = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" } -sc-client-db = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" } -sc-state-db = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" } -polkadot-sdk-frame = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" } -frame-system-benchmarking = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" } -frame-system-rpc-runtime-api = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" } -sp-consensus-aura = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" } -sp-consensus-slots = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" } -sp-timestamp = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" } -sp-consensus-grandpa = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" } -sp-genesis-builder = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" } -sp-keyring = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" } -sp-offchain = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" } -sp-session = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" } -sp-staking = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" } -sp-transaction-pool = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" } -polkadot-sdk = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" } -cumulus-primitives-core = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" } -polkadot-core-primitives = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" } -polkadot-parachain-primitives = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" } -polkadot-primitives = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" } -sp-authority-discovery = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" } -staging-xcm = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" } -xcm-procedural = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" } -cumulus-primitives-parachain-inherent = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" } -cumulus-primitives-proof-size-hostfunction = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" } -pallet-message-queue = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" } -polkadot-runtime-parachains = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" } -pallet-authority-discovery = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" } -pallet-session = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" } -pallet-timestamp = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" } -pallet-authorship = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" } -pallet-babe = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" } -sp-consensus-babe = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" } -frame-election-provider-support = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" } -frame-election-provider-solution-type = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" } -sp-npos-elections = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" } -pallet-offences = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" } -pallet-staking = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" } -pallet-bags-list = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" } -pallet-staking-reward-curve = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" } -pallet-broker = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" } -pallet-mmr = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" } -sp-mmr-primitives = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" } -polkadot-runtime-metrics = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" } -staging-xcm-executor = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" } -sc-keystore = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" } -staging-xcm-builder = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" } -pallet-asset-conversion = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" } -pallet-transaction-payment = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" } -pallet-grandpa = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" } -pallet-sudo = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" } -pallet-transaction-payment-rpc-runtime-api = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" } -pallet-vesting = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" } -polkadot-runtime-common = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" } -pallet-asset-rate = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" } -pallet-election-provider-multi-phase = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" } -pallet-election-provider-support-benchmarking = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" } -pallet-fast-unstake = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" } -pallet-identity = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" } -pallet-staking-reward-fn = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" } -pallet-treasury = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" } -pallet-utility = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" } -pallet-root-testing = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" } -slot-range-helper = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" } -cumulus-primitives-storage-weight-reclaim = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" } -pallet-aura = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" } -cumulus-test-relay-sproof-builder = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" } -sc-chain-spec = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" } -sc-chain-spec-derive = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" } -sc-network = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" } -sc-network-common = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" } -sc-network-types = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" } -sc-utils = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" } -sc-telemetry = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" } -sc-cli = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" } -sc-mixnet = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" } -sc-transaction-pool-api = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" } -sp-mixnet = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" } -sc-service = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" } -sc-consensus = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" } -sc-informant = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" } -sc-network-sync = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" } -fork-tree = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" } -sc-network-light = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" } -sc-network-transactions = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" } -sc-rpc = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" } -sc-rpc-api = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" } -sp-statement-store = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" } -sc-transaction-pool = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" } -sc-rpc-server = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" } -sc-rpc-spec-v2 = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" } -sc-sysinfo = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" } -sp-transaction-storage-proof = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" } -cumulus-relay-chain-interface = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" } -polkadot-overseer = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" } -tracing-gum = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" } -tracing-gum-proc-macro = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" } -polkadot-node-metrics = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" } -polkadot-node-primitives = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" } -polkadot-node-subsystem-types = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" } -polkadot-node-network-protocol = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" } -sc-authority-discovery = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" } -polkadot-statement-table = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" } -frame-benchmarking-cli = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" } -cumulus-client-parachain-inherent = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" } -sc-runtime-utilities = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" } -frame-metadata-hash-extension = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" } -pallet-nomination-pools = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" } -pallet-membership = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" } -pallet-multisig = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" } -pallet-nomination-pools-runtime-api = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" } -pallet-preimage = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" } -pallet-proxy = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" } -pallet-scheduler = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" } -pallet-staking-runtime-api = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" } -sc-offchain = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" } -sc-consensus-babe = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" } -sc-consensus-epochs = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" } -sc-consensus-slots = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" } -pallet-transaction-payment-rpc = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" } -sc-consensus-babe-rpc = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" } -sc-network-gossip = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" } -sc-consensus-grandpa = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" } -sc-consensus-grandpa-rpc = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" } -substrate-frame-rpc-system = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" } -sc-basic-authorship = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" } -sc-proposer-metrics = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" } -substrate-build-script-utils = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" } -sc-consensus-aura = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" } -pallet-insecure-randomness-collective-flip = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" } -pallet-safe-mode = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" } -sc-consensus-manual-seal = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" } -sp-crypto-ec-utils = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" } -substrate-bip39 = { git = "https://github.com/opentensor/polkadot-sdk.git", rev = "a584a577eeaf31e3f1a65e91b0e0b41f0356f7c8" } diff --git a/common/src/lib.rs b/common/src/lib.rs index 658f8b2e01..a1c181e5cd 100644 --- a/common/src/lib.rs +++ b/common/src/lib.rs @@ -15,8 +15,10 @@ use sp_runtime::{ use subtensor_macros::freeze_struct; pub use currency::*; +pub use transaction_error::*; mod currency; +mod transaction_error; /// Balance of an account. pub type Balance = u64; diff --git a/common/src/transaction_error.rs b/common/src/transaction_error.rs new file mode 100644 index 0000000000..b16d13daa1 --- /dev/null +++ b/common/src/transaction_error.rs @@ -0,0 +1,70 @@ +use sp_runtime::transaction_validity::{InvalidTransaction, TransactionValidityError}; + +#[derive(Debug, PartialEq)] +pub enum CustomTransactionError { + ColdkeyInSwapSchedule, + StakeAmountTooLow, + BalanceTooLow, + SubnetNotExists, + HotkeyAccountDoesntExist, + NotEnoughStakeToWithdraw, + RateLimitExceeded, + InsufficientLiquidity, + SlippageTooHigh, + TransferDisallowed, + HotKeyNotRegisteredInNetwork, + InvalidIpAddress, + ServingRateLimitExceeded, + InvalidPort, + BadRequest, + ZeroMaxAmount, + InvalidRevealRound, + CommitNotFound, + CommitBlockNotInRevealRange, + InputLengthsUnequal, + UidNotFound, + EvmKeyAssociateRateLimitExceeded, + ColdkeySwapDisputed, + InvalidRealAccount, + FailedShieldedTxParsing, + InvalidShieldedTxPubKeyHash, +} + +impl From for u8 { + fn from(variant: CustomTransactionError) -> u8 { + match variant { + CustomTransactionError::ColdkeyInSwapSchedule => 0, + CustomTransactionError::StakeAmountTooLow => 1, + CustomTransactionError::BalanceTooLow => 2, + CustomTransactionError::SubnetNotExists => 3, + CustomTransactionError::HotkeyAccountDoesntExist => 4, + CustomTransactionError::NotEnoughStakeToWithdraw => 5, + CustomTransactionError::RateLimitExceeded => 6, + CustomTransactionError::InsufficientLiquidity => 7, + CustomTransactionError::SlippageTooHigh => 8, + CustomTransactionError::TransferDisallowed => 9, + CustomTransactionError::HotKeyNotRegisteredInNetwork => 10, + CustomTransactionError::InvalidIpAddress => 11, + CustomTransactionError::ServingRateLimitExceeded => 12, + CustomTransactionError::InvalidPort => 13, + CustomTransactionError::BadRequest => 255, + CustomTransactionError::ZeroMaxAmount => 14, + CustomTransactionError::InvalidRevealRound => 15, + CustomTransactionError::CommitNotFound => 16, + CustomTransactionError::CommitBlockNotInRevealRange => 17, + CustomTransactionError::InputLengthsUnequal => 18, + CustomTransactionError::UidNotFound => 19, + CustomTransactionError::EvmKeyAssociateRateLimitExceeded => 20, + CustomTransactionError::ColdkeySwapDisputed => 21, + CustomTransactionError::InvalidRealAccount => 22, + CustomTransactionError::FailedShieldedTxParsing => 23, + CustomTransactionError::InvalidShieldedTxPubKeyHash => 24, + } + } +} + +impl From for TransactionValidityError { + fn from(variant: CustomTransactionError) -> Self { + TransactionValidityError::Invalid(InvalidTransaction::Custom(variant.into())) + } +} diff --git a/node/Cargo.toml b/node/Cargo.toml index 1d2351c265..e7cf0df1e2 100644 --- a/node/Cargo.toml +++ b/node/Cargo.toml @@ -26,6 +26,7 @@ clap = { workspace = true, features = ["derive"] } futures = { workspace = true, features = ["thread-pool"] } serde = { workspace = true, features = ["derive"] } hex.workspace = true +tokio = { workspace = true, features = ["time"] } # Storage import memmap2.workspace = true @@ -77,6 +78,7 @@ sp-keystore.workspace = true polkadot-sdk = { workspace = true, features = [ "cumulus-primitives-proof-size-hostfunction", ] } +stp-io.workspace = true # These dependencies are used for the subtensor's RPCs jsonrpsee = { workspace = true, features = ["server"] } @@ -94,6 +96,7 @@ pallet-transaction-payment-rpc-runtime-api.workspace = true # These dependencies are used for runtime benchmarking frame-benchmarking.workspace = true frame-benchmarking-cli.workspace = true +pallet-subtensor.workspace = true # Needed for Frontier fc-mapping-sync.workspace = true @@ -116,18 +119,8 @@ num-traits = { workspace = true, features = ["std"] } # Mev Shield pallet-shield.workspace = true -tokio = { version = "1.38", features = ["time"] } -x25519-dalek = "2" -hkdf = "0.12" -chacha20poly1305 = { version = "0.10", features = ["std"] } -codec.workspace = true -rand.workspace = true -sha2.workspace = true -anyhow.workspace = true -pallet-subtensor.workspace = true -ml-kem.workspace = true -rand_core = "0.9.3" -blake2 = "0.10.6" +stp-shield.workspace = true +stc-shield.workspace = true # Local Dependencies node-subtensor-runtime = { workspace = true, features = ["std"] } @@ -187,8 +180,8 @@ try-runtime = [ "pallet-commitments/try-runtime", "pallet-drand/try-runtime", "polkadot-sdk/try-runtime", - "pallet-shield/try-runtime", "pallet-subtensor/try-runtime", + "pallet-shield/try-runtime", ] metadata-hash = ["node-subtensor-runtime/metadata-hash"] diff --git a/node/src/benchmarking.rs b/node/src/benchmarking.rs index 5430a75d9e..5061b6d2a5 100644 --- a/node/src/benchmarking.rs +++ b/node/src/benchmarking.rs @@ -124,7 +124,7 @@ pub fn create_benchmark_extrinsic( .checked_next_power_of_two() .map(|c| c / 2) .unwrap_or(2) as u64; - let extra: runtime::TransactionExtensions = + let extra: runtime::TxExtension = ( ( frame_system::CheckNonZeroSender::::new(), frame_system::CheckSpecVersion::::new(), @@ -136,32 +136,33 @@ pub fn create_benchmark_extrinsic( )), check_nonce::CheckNonce::::from(nonce), frame_system::CheckWeight::::new(), - transaction_payment_wrapper::ChargeTransactionPaymentWrapper::new( - pallet_transaction_payment::ChargeTransactionPayment::::from(0), - ), + ), + ( + transaction_payment_wrapper::ChargeTransactionPaymentWrapper::new(0), sudo_wrapper::SudoTransactionExtension::::new(), + pallet_shield::CheckShieldedTxValidity::::new(), pallet_subtensor::transaction_extension::SubtensorTransactionExtension::< runtime::Runtime, >::new(), pallet_drand::drand_priority::DrandPriority::::new(), - frame_metadata_hash_extension::CheckMetadataHash::::new(true), - ); + ), + frame_metadata_hash_extension::CheckMetadataHash::::new(true), + ); let raw_payload = runtime::SignedPayload::from_raw( call.clone(), extra.clone(), ( - (), - runtime::VERSION.spec_version, - runtime::VERSION.transaction_version, - genesis_hash, - best_hash, - (), - (), - (), - (), - (), - (), + ( + (), + runtime::VERSION.spec_version, + runtime::VERSION.transaction_version, + genesis_hash, + best_hash, + (), + (), + ), + ((), (), (), (), ()), None, ), ); diff --git a/node/src/client.rs b/node/src/client.rs index e65683933b..94b0e90e15 100644 --- a/node/src/client.rs +++ b/node/src/client.rs @@ -16,5 +16,6 @@ pub type HostFunctions = ( frame_benchmarking::benchmarking::HostFunctions, sp_crypto_ec_utils::bls12_381::host_calls::HostFunctions, ProofSize, + stp_io::SubtensorHostFunctions, ); pub type RuntimeExecutor = WasmExecutor; diff --git a/node/src/consensus/aura_consensus.rs b/node/src/consensus/aura_consensus.rs index 16bdae6c01..ce34e8125a 100644 --- a/node/src/consensus/aura_consensus.rs +++ b/node/src/consensus/aura_consensus.rs @@ -28,7 +28,9 @@ use sp_inherents::CreateInherentDataProviders; use sp_keystore::KeystorePtr; use sp_runtime::traits::Block as BlockT; use sp_runtime::traits::NumberFor; +use stc_shield::InherentDataProvider as ShieldInherentDataProvider; use std::{error::Error, sync::Arc}; +use stp_shield::ShieldKeystorePtr; pub struct AuraConsensus; @@ -36,6 +38,7 @@ impl ConsensusMechanism for AuraConsensus { type InherentDataProviders = ( sp_consensus_aura::inherents::InherentDataProvider, sp_timestamp::InherentDataProvider, + stc_shield::InherentDataProvider, ); fn start_authoring( @@ -101,6 +104,7 @@ impl ConsensusMechanism for AuraConsensus { fn create_inherent_data_providers( slot_duration: SlotDuration, + shield_keystore: ShieldKeystorePtr, ) -> Result> { let timestamp = sp_timestamp::InherentDataProvider::from_system_time(); let slot = @@ -108,11 +112,13 @@ impl ConsensusMechanism for AuraConsensus { *timestamp, slot_duration, ); - Ok((slot, timestamp)) + let shield = ShieldInherentDataProvider::new(shield_keystore); + Ok((slot, timestamp, shield)) } fn pending_create_inherent_data_providers( slot_duration: SlotDuration, + shield_keystore: ShieldKeystorePtr, ) -> Result> { let current = sp_timestamp::InherentDataProvider::from_system_time(); let next_slot = current @@ -125,7 +131,8 @@ impl ConsensusMechanism for AuraConsensus { *timestamp, slot_duration, ); - Ok((slot, timestamp)) + let shield = stc_shield::InherentDataProvider::new(shield_keystore); + Ok((slot, timestamp, shield)) } fn new() -> Self { diff --git a/node/src/consensus/babe_consensus.rs b/node/src/consensus/babe_consensus.rs index 490a505f4d..4f84cbb87b 100644 --- a/node/src/consensus/babe_consensus.rs +++ b/node/src/consensus/babe_consensus.rs @@ -31,7 +31,9 @@ use sp_consensus_slots::SlotDuration; use sp_inherents::CreateInherentDataProviders; use sp_keystore::KeystorePtr; use sp_runtime::traits::NumberFor; +use stc_shield::InherentDataProvider as ShieldInherentDataProvider; use std::{error::Error, sync::Arc}; +use stp_shield::ShieldKeystorePtr; pub struct BabeConsensus { babe_link: Option>, @@ -42,6 +44,7 @@ impl ConsensusMechanism for BabeConsensus { type InherentDataProviders = ( sp_consensus_babe::inherents::InherentDataProvider, sp_timestamp::InherentDataProvider, + stc_shield::InherentDataProvider, ); #[allow(clippy::expect_used)] @@ -111,6 +114,7 @@ impl ConsensusMechanism for BabeConsensus { fn create_inherent_data_providers( slot_duration: SlotDuration, + shield_keystore: ShieldKeystorePtr, ) -> Result> { let timestamp = sp_timestamp::InherentDataProvider::from_system_time(); let slot = @@ -118,11 +122,13 @@ impl ConsensusMechanism for BabeConsensus { *timestamp, slot_duration, ); - Ok((slot, timestamp)) + let shield = stc_shield::InherentDataProvider::new(shield_keystore); + Ok((slot, timestamp, shield)) } fn pending_create_inherent_data_providers( slot_duration: SlotDuration, + shield_keystore: ShieldKeystorePtr, ) -> Result> { let current = sp_timestamp::InherentDataProvider::from_system_time(); let next_slot = current @@ -135,7 +141,8 @@ impl ConsensusMechanism for BabeConsensus { *timestamp, slot_duration, ); - Ok((slot, timestamp)) + let shield = ShieldInherentDataProvider::new(shield_keystore); + Ok((slot, timestamp, shield)) } fn new() -> Self { diff --git a/node/src/consensus/consensus_mechanism.rs b/node/src/consensus/consensus_mechanism.rs index b88e2d0462..9fd8cad63b 100644 --- a/node/src/consensus/consensus_mechanism.rs +++ b/node/src/consensus/consensus_mechanism.rs @@ -24,6 +24,7 @@ use sp_keystore::KeystorePtr; use sp_runtime::traits::NumberFor; use std::sync::Arc; use std::sync::atomic::AtomicBool; +use stp_shield::ShieldKeystorePtr; use crate::client::FullClient; use crate::service::BIQ; @@ -85,11 +86,13 @@ pub trait ConsensusMechanism { /// Creates IDPs for the consensus mechanism. fn create_inherent_data_providers( slot_duration: SlotDuration, + shield_keystore: ShieldKeystorePtr, ) -> Result>; /// Creates IDPs for the consensus mechanism for pending blocks. fn pending_create_inherent_data_providers( slot_duration: SlotDuration, + shield_keystore: ShieldKeystorePtr, ) -> Result>; /// Creates the frontier consensus data provider with this mechanism. diff --git a/node/src/lib.rs b/node/src/lib.rs index ab4a409e1b..c447a07309 100644 --- a/node/src/lib.rs +++ b/node/src/lib.rs @@ -4,6 +4,5 @@ pub mod client; pub mod conditional_evm_block_import; pub mod consensus; pub mod ethereum; -pub mod mev_shield; pub mod rpc; pub mod service; diff --git a/node/src/main.rs b/node/src/main.rs index 7adffa0ae9..64f25acc67 100644 --- a/node/src/main.rs +++ b/node/src/main.rs @@ -10,7 +10,6 @@ mod command; mod conditional_evm_block_import; mod consensus; mod ethereum; -mod mev_shield; mod rpc; mod service; diff --git a/node/src/mev_shield/author.rs b/node/src/mev_shield/author.rs deleted file mode 100644 index 8ac57b1d52..0000000000 --- a/node/src/mev_shield/author.rs +++ /dev/null @@ -1,473 +0,0 @@ -use chacha20poly1305::{ - KeyInit, XChaCha20Poly1305, XNonce, - aead::{Aead, Payload}, -}; -use frame_system_rpc_runtime_api::AccountNonceApi; -use ml_kem::{EncodedSizeUser, KemCore, MlKem768}; -use node_subtensor_runtime as runtime; -use rand::rngs::OsRng; -use sp_api::ProvideRuntimeApi; -use sp_core::blake2_256; -use sp_runtime::{AccountId32, KeyTypeId}; -use std::sync::{Arc, Mutex}; -use subtensor_macros::freeze_struct; -use tokio::time::sleep; - -/// Parameters controlling time windows inside the slot. -#[freeze_struct("5c7ce101b36950de")] -#[derive(Clone)] -pub struct TimeParams { - pub slot_ms: u64, - pub announce_at_ms: u64, - pub decrypt_window_ms: u64, -} - -/// Holds the current/next ML‑KEM keypairs and their 32‑byte fingerprints. -#[freeze_struct("5e3c8209248282c3")] -#[derive(Clone)] -pub struct ShieldKeys { - pub current_sk: Vec, // ML‑KEM secret key bytes (encoded form) - pub current_pk: Vec, // ML‑KEM public key bytes (encoded form) - pub current_fp: [u8; 32], // blake2_256(pk) - pub next_sk: Vec, - pub next_pk: Vec, - pub next_fp: [u8; 32], -} - -impl ShieldKeys { - pub fn new() -> Self { - let (sk, pk) = MlKem768::generate(&mut OsRng); - - let sk_bytes = sk.as_bytes(); - let pk_bytes = pk.as_bytes(); - let sk_slice: &[u8] = sk_bytes.as_ref(); - let pk_slice: &[u8] = pk_bytes.as_ref(); - - let current_sk = sk_slice.to_vec(); - let current_pk = pk_slice.to_vec(); - let current_fp = blake2_256(pk_slice); - - let (nsk, npk) = MlKem768::generate(&mut OsRng); - let nsk_bytes = nsk.as_bytes(); - let npk_bytes = npk.as_bytes(); - let nsk_slice: &[u8] = nsk_bytes.as_ref(); - let npk_slice: &[u8] = npk_bytes.as_ref(); - let next_sk = nsk_slice.to_vec(); - let next_pk = npk_slice.to_vec(); - let next_fp = blake2_256(npk_slice); - - Self { - current_sk, - current_pk, - current_fp, - next_sk, - next_pk, - next_fp, - } - } - - pub fn roll_for_next_slot(&mut self) { - // Move next -> current - self.current_sk = core::mem::take(&mut self.next_sk); - self.current_pk = core::mem::take(&mut self.next_pk); - self.current_fp = self.next_fp; - - // Generate fresh next - let (nsk, npk) = MlKem768::generate(&mut OsRng); - let nsk_bytes = nsk.as_bytes(); - let npk_bytes = npk.as_bytes(); - let nsk_slice: &[u8] = nsk_bytes.as_ref(); - let npk_slice: &[u8] = npk_bytes.as_ref(); - self.next_sk = nsk_slice.to_vec(); - self.next_pk = npk_slice.to_vec(); - self.next_fp = blake2_256(npk_slice); - } -} - -impl Default for ShieldKeys { - fn default() -> Self { - Self::new() - } -} - -/// Shared context state. -#[freeze_struct("245b565abca7d403")] -#[derive(Clone)] -pub struct ShieldContext { - pub keys: Arc>, -} - -/// Derive AEAD key directly from the 32‑byte ML‑KEM shared secret. -pub fn derive_aead_key(ss: &[u8]) -> [u8; 32] { - let mut key = [0u8; 32]; - let n = ss.len().min(32); - - if let (Some(dst), Some(src)) = (key.get_mut(..n), ss.get(..n)) { - dst.copy_from_slice(src); - } - key -} - -/// Plain XChaCha20-Poly1305 decrypt helper -pub fn aead_decrypt( - key: [u8; 32], - nonce24: [u8; 24], - ciphertext: &[u8], - aad: &[u8], -) -> Option> { - let aead = XChaCha20Poly1305::new((&key).into()); - aead.decrypt( - XNonce::from_slice(&nonce24), - Payload { - msg: ciphertext, - aad, - }, - ) - .ok() -} - -const AURA_KEY_TYPE: KeyTypeId = KeyTypeId(*b"aura"); - -/// Start background tasks: -/// - per-slot ML‑KEM key rotation -/// - at ~announce_at_ms announce the next key bytes on chain, -pub fn spawn_author_tasks( - task_spawner: &sc_service::SpawnTaskHandle, - client: Arc, - pool: Arc, - keystore: sp_keystore::KeystorePtr, - timing: TimeParams, -) -> ShieldContext -where - B: sp_runtime::traits::Block, - C: sc_client_api::HeaderBackend - + sc_client_api::BlockchainEvents - + ProvideRuntimeApi - + Send - + Sync - + 'static, - C::Api: AccountNonceApi, - Pool: sc_transaction_pool_api::TransactionPool + Send + Sync + 'static, - B::Extrinsic: From, -{ - let ctx = ShieldContext { - keys: Arc::new(Mutex::new(ShieldKeys::new())), - }; - - let aura_keys: Vec = keystore.sr25519_public_keys(AURA_KEY_TYPE); - - let local_aura_pub = match aura_keys.first().copied() { - Some(k) => k, - None => { - log::warn!( - target: "mev-shield", - "spawn_author_tasks: no local Aura sr25519 key in keystore; \ - this node will NOT announce MEV-Shield keys" - ); - return ctx; - } - }; - - let aura_account: AccountId32 = local_aura_pub.into(); - let ctx_clone = ctx.clone(); - let client_clone = client.clone(); - let pool_clone = pool.clone(); - let keystore_clone = keystore.clone(); - - // Slot tick / key-announce loop. - task_spawner.spawn( - "mev-shield-keys-and-announce", - None, - async move { - use futures::StreamExt; - use sp_consensus::BlockOrigin; - - let slot_ms = timing.slot_ms; - - // Clamp announce_at_ms so it never exceeds slot_ms. - let mut announce_at_ms = timing.announce_at_ms; - if announce_at_ms > slot_ms { - log::warn!( - target: "mev-shield", - "spawn_author_tasks: announce_at_ms ({announce_at_ms}) > slot_ms ({slot_ms}); clamping to slot_ms", - ); - announce_at_ms = slot_ms; - } - let tail_ms = slot_ms.saturating_sub(announce_at_ms); - - log::debug!( - target: "mev-shield", - "author timing: slot_ms={slot_ms} announce_at_ms={announce_at_ms} (effective) tail_ms={tail_ms}", - ); - - let mut import_stream = client_clone.import_notification_stream(); - - while let Some(notif) = import_stream.next().await { - // Only act on blocks that this node authored. - if notif.origin != BlockOrigin::Own { - continue; - } - - let (curr_pk_len, next_pk_len) = match ctx_clone.keys.lock() { - Ok(k) => (k.current_pk.len(), k.next_pk.len()), - Err(e) => { - log::debug!( - target: "mev-shield", - "spawn_author_tasks: failed to lock ShieldKeys (poisoned?): {e:?}", - ); - continue; - } - }; - - log::debug!( - target: "mev-shield", - "Slot start (local author): (pk sizes: curr={curr_pk_len}B, next={next_pk_len}B)", - ); - - // Wait until the announce window in this slot. - if announce_at_ms > 0 { - sleep(std::time::Duration::from_millis(announce_at_ms)).await; - } - - // Read the next key we intend to use for the following block. - let next_pk = match ctx_clone.keys.lock() { - Ok(k) => k.next_pk.clone(), - Err(e) => { - log::debug!( - target: "mev-shield", - "spawn_author_tasks: failed to lock ShieldKeys for next_pk: {e:?}", - ); - continue; - } - }; - - // 🔑 Fetch the current on-chain nonce for the Aura account using the best block hash. - let best_hash = client_clone.info().best_hash; - - let nonce: u32 = match client_clone - .runtime_api() - .account_nonce(best_hash, aura_account.clone()) - { - Ok(n) => n, - Err(e) => { - log::debug!( - target: "mev-shield", - "spawn_author_tasks: failed to fetch account nonce for MEV-Shield author: {e:?}", - ); - continue; - } - }; - - // Submit announce_next_key signed with the Aura key using the correct nonce. - if let Err(e) = submit_announce_extrinsic::( - client_clone.clone(), - pool_clone.clone(), - keystore_clone.clone(), - local_aura_pub, - next_pk.clone(), - nonce, - ) - .await - { - log::debug!( - target: "mev-shield", - "announce_next_key submit error (nonce={nonce:?}): {e:?}" - ); - } - - // Sleep the remainder of the slot (if any). - if tail_ms > 0 { - sleep(std::time::Duration::from_millis(tail_ms)).await; - } - - // Roll keys for the next block. - match ctx_clone.keys.lock() { - Ok(mut k) => { - k.roll_for_next_slot(); - log::debug!( - target: "mev-shield", - "Rolled ML-KEM key at slot boundary", - ); - } - Err(e) => { - log::debug!( - target: "mev-shield", - "spawn_author_tasks: failed to lock ShieldKeys for roll_for_next_slot: {e:?}", - ); - } - } - } - }, - ); - - ctx -} - -/// Build & submit the signed `announce_next_key` extrinsic OFF-CHAIN -pub async fn submit_announce_extrinsic( - client: Arc, - pool: Arc, - keystore: sp_keystore::KeystorePtr, - aura_pub: sp_core::sr25519::Public, - next_public_key: Vec, - nonce: u32, -) -> anyhow::Result<()> -where - B: sp_runtime::traits::Block, - C: sc_client_api::HeaderBackend + sp_api::ProvideRuntimeApi + Send + Sync + 'static, - C::Api: sp_api::Core, - Pool: sc_transaction_pool_api::TransactionPool + Send + Sync + 'static, - B::Extrinsic: From, - B::Hash: AsRef<[u8]>, -{ - use node_subtensor_runtime as runtime; - use runtime::{RuntimeCall, SignedPayload, UncheckedExtrinsic}; - - use sc_transaction_pool_api::TransactionSource; - use sp_api::Core as _; - use sp_core::H256; - use sp_runtime::codec::Encode; - use sp_runtime::{ - BoundedVec, MultiSignature, - generic::Era, - traits::{ConstU32, SaturatedConversion, TransactionExtension}, - }; - - fn to_h256>(h: H) -> H256 { - let bytes = h.as_ref(); - let mut out = [0u8; 32]; - - if bytes.is_empty() { - return H256(out); - } - - let n = bytes.len().min(32); - let src_start = bytes.len().saturating_sub(n); - let dst_start = 32usize.saturating_sub(n); - - let src_slice = bytes.get(src_start..).and_then(|s| s.get(..n)); - - if let (Some(dst), Some(src)) = (out.get_mut(dst_start..32), src_slice) { - dst.copy_from_slice(src); - H256(out) - } else { - // Extremely defensive fallback. - H256([0u8; 32]) - } - } - - type MaxPk = ConstU32<2048>; - let public_key: BoundedVec = BoundedVec::try_from(next_public_key) - .map_err(|_| anyhow::anyhow!("public key too long (>2048 bytes)"))?; - - // 1) Runtime call carrying the public key bytes. - let call = RuntimeCall::MevShield(pallet_shield::Call::announce_next_key { public_key }); - - // 2) Build the transaction extensions exactly like the runtime. - type Extra = runtime::TransactionExtensions; - - let info = client.info(); - let at_hash = info.best_hash; - let at_hash_h256: H256 = to_h256(at_hash); - let genesis_h256: H256 = to_h256(info.genesis_hash); - - const ERA_PERIOD: u64 = 12; - let current_block: u64 = info.best_number.saturated_into(); - let era = Era::mortal(ERA_PERIOD, current_block); - - let extra: Extra = - ( - frame_system::CheckNonZeroSender::::new(), - frame_system::CheckSpecVersion::::new(), - frame_system::CheckTxVersion::::new(), - frame_system::CheckGenesis::::new(), - frame_system::CheckEra::::from(era), - node_subtensor_runtime::check_nonce::CheckNonce::::from(nonce).into(), - frame_system::CheckWeight::::new(), - node_subtensor_runtime::transaction_payment_wrapper::ChargeTransactionPaymentWrapper::< - runtime::Runtime, - >::new(pallet_transaction_payment::ChargeTransactionPayment::< - runtime::Runtime, - >::from(0u64)), - node_subtensor_runtime::sudo_wrapper::SudoTransactionExtension::::new( - ), - pallet_subtensor::transaction_extension::SubtensorTransactionExtension::< - runtime::Runtime, - >::new(), - pallet_drand::drand_priority::DrandPriority::::new(), - frame_metadata_hash_extension::CheckMetadataHash::::new(false), - ); - - // 3) Manually construct the `Implicit` tuple that the runtime will also derive. - type Implicit = >::Implicit; - - // Try to get the *current* runtime version from on-chain WASM; if that fails, - // fall back to the compiled runtime::VERSION. - let (spec_version, tx_version) = match client.runtime_api().version(at_hash) { - Ok(v) => (v.spec_version, v.transaction_version), - Err(e) => { - log::debug!( - target: "mev-shield", - "runtime_api::version failed at_hash={at_hash:?}: {e:?}; \ - falling back to compiled runtime::VERSION", - ); - ( - runtime::VERSION.spec_version, - runtime::VERSION.transaction_version, - ) - } - }; - - let implicit: Implicit = ( - (), // CheckNonZeroSender - spec_version, // dynamic or fallback spec_version - tx_version, // dynamic or fallback transaction_version - genesis_h256, // CheckGenesis::Implicit = Hash - at_hash_h256, // CheckEra::Implicit = hash of the block the tx is created at - (), // CheckNonce::Implicit = () - (), // CheckWeight::Implicit = () - (), // ChargeTransactionPaymentWrapper::Implicit = () - (), // SudoTransactionExtension::Implicit = () - (), // SubtensorTransactionExtension::Implicit = () - (), // DrandPriority::Implicit = () - None, // CheckMetadataHash::Implicit = Option<[u8; 32]> - ); - - // 4) Build the exact signable payload from call + extra + implicit. - let payload: SignedPayload = SignedPayload::from_raw(call.clone(), extra.clone(), implicit); - - // 5) Sign with the local Aura key using the same SCALE bytes the runtime expects. - let sig_opt = payload - .using_encoded(|bytes| keystore.sr25519_sign(AURA_KEY_TYPE, &aura_pub, bytes)) - .map_err(|e| anyhow::anyhow!("keystore sr25519_sign error: {e:?}"))?; - - let sig = sig_opt - .ok_or_else(|| anyhow::anyhow!("keystore sr25519_sign returned None for Aura key"))?; - - let signature: MultiSignature = sig.into(); - - // 6) Sender address = AccountId32 derived from the Aura sr25519 public key. - let who: AccountId32 = aura_pub.into(); - let address = sp_runtime::MultiAddress::Id(who); - - // 7) Assemble the signed extrinsic and submit it to the pool. - let uxt: UncheckedExtrinsic = UncheckedExtrinsic::new_signed(call, address, signature, extra); - - let xt_bytes = uxt.encode(); - let xt_hash = sp_core::hashing::blake2_256(&xt_bytes); - let xt_hash_hex = hex::encode(xt_hash); - - let opaque: sp_runtime::OpaqueExtrinsic = uxt.into(); - let xt: ::Extrinsic = opaque.into(); - - pool.submit_one(at_hash, TransactionSource::Local, xt) - .await?; - - log::debug!( - target: "mev-shield", - "announce_next_key submitted: xt=0x{xt_hash_hex}, nonce={nonce:?}, \ - spec_version={spec_version}, tx_version={tx_version}, era={era:?}", - ); - - Ok(()) -} diff --git a/node/src/mev_shield/mod.rs b/node/src/mev_shield/mod.rs deleted file mode 100644 index 91817097bf..0000000000 --- a/node/src/mev_shield/mod.rs +++ /dev/null @@ -1,2 +0,0 @@ -pub mod author; -pub mod proposer; diff --git a/node/src/mev_shield/proposer.rs b/node/src/mev_shield/proposer.rs deleted file mode 100644 index a9a854e362..0000000000 --- a/node/src/mev_shield/proposer.rs +++ /dev/null @@ -1,847 +0,0 @@ -use super::author::ShieldContext; -use futures::StreamExt; -use ml_kem::kem::{Decapsulate, DecapsulationKey}; -use ml_kem::{Ciphertext, Encoded, EncodedSizeUser, MlKem768, MlKem768Params}; -use sc_service::SpawnTaskHandle; -use sc_transaction_pool_api::{TransactionPool, TransactionSource}; -use sp_core::H256; -use sp_runtime::traits::{Header, SaturatedConversion}; -use sp_runtime::{AccountId32, OpaqueExtrinsic}; -use std::{ - collections::HashMap, - sync::{Arc, Mutex}, -}; - -/// Truncate a UTF-8 string to at most `max_bytes` bytes without splitting codepoints. -fn truncate_utf8_to_bytes(s: &str, max_bytes: usize) -> String { - if s.len() <= max_bytes { - return s.to_string(); - } - - let mut end = max_bytes.min(s.len()); - - // Decrement until we find a valid UTF-8 boundary. - while end > 0 { - if let Some(prefix) = s.get(..end) { - return prefix.to_string(); - } - end = end.saturating_sub(1); - } - - // If max_bytes was 0 or we couldn't find a boundary (extremely defensive), return empty. - String::new() -} - -/// Helper to build a `mark_decryption_failed` runtime call with a bounded reason string. -fn create_failed_call(id: H256, reason: &str) -> node_subtensor_runtime::RuntimeCall { - use sp_runtime::BoundedVec; - - let reason_bytes = reason.as_bytes(); - let reason_bounded = BoundedVec::try_from(reason_bytes.to_vec()).unwrap_or_else(|_| { - // Fallback if the reason is too long for the bounded vector. - BoundedVec::try_from(b"Decryption failed".to_vec()).unwrap_or_default() - }); - - node_subtensor_runtime::RuntimeCall::MevShield(pallet_shield::Call::mark_decryption_failed { - id, - reason: reason_bounded, - }) -} - -/// Buffer of wrappers keyed by the block number in which they were included. -#[derive(Default, Clone)] -struct WrapperBuffer { - by_id: HashMap< - H256, - ( - Vec, // ciphertext blob - u64, // originating block number - AccountId32, // wrapper author - ), - >, -} - -impl WrapperBuffer { - fn upsert(&mut self, id: H256, block_number: u64, author: AccountId32, ciphertext: Vec) { - self.by_id.insert(id, (ciphertext, block_number, author)); - } - - /// Drain only wrappers whose `block_number` matches the given `block`. - /// - Wrappers with `block_number > block` are kept for future decrypt passes. - /// - Wrappers with `block_number < block` are considered stale and dropped, and - /// we emit `mark_decryption_failed` calls for them so they are visible on-chain. - fn drain_for_block( - &mut self, - block: u64, - failed_calls: &mut Vec<(H256, node_subtensor_runtime::RuntimeCall)>, - ) -> Vec<(H256, u64, sp_runtime::AccountId32, Vec)> { - let mut ready = Vec::new(); - let mut kept_future: usize = 0; - let mut dropped_past: usize = 0; - - self.by_id.retain(|id, (ct, block_number, who)| { - if *block_number == block { - // Ready to process now; remove from buffer. - ready.push((*id, *block_number, who.clone(), ct.clone())); - false - } else if *block_number > block { - // Not yet reveal time; keep for future blocks. - kept_future = kept_future.saturating_add(1); - true - } else { - // block_number < block => stale / missed decrypt opportunity; drop and mark failed. - dropped_past = dropped_past.saturating_add(1); - log::debug!( - target: "mev-shield", - "revealer: dropping stale wrapper id=0x{} block_number={} < block={}", - hex::encode(id.as_bytes()), - *block_number, - block - ); - - // Mark decryption failed on-chain so clients can observe the missed wrapper. - failed_calls.push(( - *id, - create_failed_call( - *id, - "missed decrypt window (wrapper submitted in an earlier block)", - ), - )); - - false - } - }); - - log::debug!( - target: "mev-shield", - "revealer: drain_for_block(block={}): ready={}, kept_future={}, dropped_past={}", - block, - ready.len(), - kept_future, - dropped_past - ); - - ready - } -} - -/// Start a background worker that: -/// • watches imported blocks and captures `MevShield::submit_encrypted` -/// • buffers those wrappers per originating block, -/// • on each **locally authored** block: decrypt & submit wrappers for that block. -/// -pub fn spawn_revealer( - task_spawner: &SpawnTaskHandle, - client: Arc, - pool: Arc, - ctx: ShieldContext, -) where - B: sp_runtime::traits::Block, - C: sc_client_api::HeaderBackend - + sc_client_api::BlockchainEvents - + sc_client_api::BlockBackend - + Send - + Sync - + 'static, - Pool: TransactionPool + Send + Sync + 'static, -{ - use codec::{Decode, Encode}; - - type Address = sp_runtime::MultiAddress; - type RUnchecked = node_subtensor_runtime::UncheckedExtrinsic; - - let buffer: Arc> = Arc::new(Mutex::new(WrapperBuffer::default())); - - { - let client = Arc::clone(&client); - let pool = Arc::clone(&pool); - let buffer = Arc::clone(&buffer); - let ctx = ctx.clone(); - - task_spawner.spawn( - "mev-shield-block-revealer", - None, - async move { - log::debug!(target: "mev-shield", "Revealer task started"); - let mut import_stream = client.import_notification_stream(); - - while let Some(notif) = import_stream.next().await { - - let at_hash = notif.hash; - let block_number_u64: u64 = (*notif.header.number()).saturated_into(); - - log::debug!( - target: "mev-shield", - "imported block hash={:?} number={} origin={:?}", - at_hash, - block_number_u64, - notif.origin - ); - - // ── 1) buffer wrappers from this (locally authored) block ─────────── - match client.block_body(at_hash) { - Ok(Some(body)) => { - log::debug!( - target: "mev-shield", - " block has {} extrinsics", - body.len() - ); - - for (idx, opaque_xt) in body.into_iter().enumerate() { - let encoded = opaque_xt.encode(); - log::debug!( - target: "mev-shield", - " [xt #{idx}] opaque len={} bytes", - encoded.len() - ); - - let uxt: RUnchecked = match RUnchecked::decode(&mut &encoded[..]) { - Ok(u) => u, - Err(e) => { - log::debug!( - target: "mev-shield", - " [xt #{idx}] failed to decode UncheckedExtrinsic: {e:?}", - ); - continue; - } - }; - - log::debug!( - target: "mev-shield", - " [xt #{idx}] decoded call: {:?}", - &uxt.0.function - ); - - let author_opt: Option = - match &uxt.0.preamble { - sp_runtime::generic::Preamble::Signed( - addr, - _sig, - _ext, - ) => match addr.clone() { - Address::Id(acc) => Some(acc), - Address::Address32(bytes) => { - Some(sp_runtime::AccountId32::new(bytes)) - } - _ => None, - }, - _ => None, - }; - - let Some(author) = author_opt else { - log::debug!( - target: "mev-shield", - " [xt #{idx}] not a Signed(AccountId32) extrinsic; skipping" - ); - continue; - }; - - if let node_subtensor_runtime::RuntimeCall::MevShield( - pallet_shield::Call::submit_encrypted { - commitment, - ciphertext, - }, - ) = &uxt.0.function - { - let payload = - (author.clone(), *commitment, ciphertext).encode(); - let id = H256(sp_core::hashing::blake2_256(&payload)); - - log::debug!( - target: "mev-shield", - " [xt #{idx}] buffered submit_encrypted: id=0x{}, block_number={}, author={}, ct_len={}, commitment={:?}", - hex::encode(id.as_bytes()), - block_number_u64, - author, - ciphertext.len(), - commitment - ); - - if let Ok(mut buf) = buffer.lock() { - buf.upsert( - id, - block_number_u64, - author, - ciphertext.to_vec(), - ); - } else { - log::debug!( - target: "mev-shield", - " [xt #{idx}] failed to lock WrapperBuffer; dropping wrapper" - ); - } - } - } - } - Ok(None) => log::debug!( - target: "mev-shield", - " block_body returned None for hash={at_hash:?}", - ), - Err(e) => log::debug!( - target: "mev-shield", - " block_body error for hash={at_hash:?}: {e:?}", - ), - } - - // ── 2) snapshot current ML‑KEM secret for this block ──────────────── - let snapshot_opt = match ctx.keys.lock() { - Ok(k) => { - let sk_hash = sp_core::hashing::blake2_256(&k.current_sk); - Some(( - k.current_sk.clone(), - k.current_pk.len(), - k.next_pk.len(), - sk_hash, - )) - } - Err(e) => { - log::debug!( - target: "mev-shield", - "revealer: failed to lock ShieldKeys (poisoned?): {e:?}", - ); - None - } - }; - - let (curr_sk_bytes, curr_pk_len, next_pk_len, sk_hash) = match snapshot_opt { - Some(v) => v, - None => { - log::debug!( - target: "mev-shield", - "revealer: Cannot snapshot key for this block", - ); - continue; - } - }; - - // Use this block as the reveal block. - let curr_block: u64 = block_number_u64; - - log::debug!( - target: "mev-shield", - "revealer: decrypt for block {}. sk_len={} sk_hash=0x{} curr_pk_len={} next_pk_len={}", - curr_block, - curr_sk_bytes.len(), - hex::encode(sk_hash), - curr_pk_len, - next_pk_len - ); - - // ── 3) drain & decrypt wrappers for this block ───────────────────── - let mut to_submit: Vec<(H256, node_subtensor_runtime::UncheckedExtrinsic)> = - Vec::new(); - let mut failed_calls: Vec<(H256, node_subtensor_runtime::RuntimeCall)> = - Vec::new(); - - // Only process wrappers whose originating block matches this block. - let drained: Vec<(H256, u64, sp_runtime::AccountId32, Vec)> = - match buffer.lock() { - Ok(mut buf) => buf.drain_for_block(curr_block, &mut failed_calls), - Err(e) => { - log::debug!( - target: "mev-shield", - "revealer: failed to lock WrapperBuffer for drain_for_block: {e:?}", - ); - Vec::new() - } - }; - - log::debug!( - target: "mev-shield", - "revealer: drained {} buffered wrappers for block={}", - drained.len(), - curr_block - ); - - for (id, block_number, author, blob) in drained.into_iter() { - log::debug!( - target: "mev-shield", - "revealer: candidate id=0x{} submitted_in={} (block={}) author={} blob_len={}", - hex::encode(id.as_bytes()), - block_number, - curr_block, - author, - blob.len() - ); - - // Safely parse blob: [u16 kem_len][kem_ct][nonce24][aead_ct] - if blob.len() < 2 { - let error_message = "blob too short to contain kem_len"; - log::debug!( - target: "mev-shield", - " id=0x{}: {}", - hex::encode(id.as_bytes()), - error_message - ); - failed_calls.push((id, create_failed_call(id, error_message))); - continue; - } - - let mut cursor: usize = 0; - - // 1) kem_len (u16 LE) - let kem_len_end = match cursor.checked_add(2usize) { - Some(e) => e, - None => { - let error_message = "kem_len range overflow"; - log::debug!( - target: "mev-shield", - " id=0x{}: {}", - hex::encode(id.as_bytes()), - error_message - ); - failed_calls.push((id, create_failed_call(id, error_message))); - continue; - } - }; - - let kem_len_slice = match blob.get(cursor..kem_len_end) { - Some(s) => s, - None => { - let error_message = "blob too short for kem_len bytes"; - log::debug!( - target: "mev-shield", - " id=0x{}: {} (cursor={} end={})", - hex::encode(id.as_bytes()), - error_message, - cursor, - kem_len_end - ); - failed_calls.push((id, create_failed_call(id, error_message))); - continue; - } - }; - - let kem_len_bytes: [u8; 2] = match kem_len_slice.try_into() { - Ok(arr) => arr, - Err(_) => { - let error_message = "kem_len slice not 2 bytes"; - log::debug!( - target: "mev-shield", - " id=0x{}: {}", - hex::encode(id.as_bytes()), - error_message - ); - failed_calls.push((id, create_failed_call(id, error_message))); - continue; - } - }; - - let kem_len = u16::from_le_bytes(kem_len_bytes) as usize; - cursor = kem_len_end; - - // 2) KEM ciphertext - let kem_ct_end = match cursor.checked_add(kem_len) { - Some(e) => e, - None => { - let error_message = "kem_ct range overflow"; - log::debug!( - target: "mev-shield", - " id=0x{}: {} (cursor={} kem_len={})", - hex::encode(id.as_bytes()), - error_message, - cursor, - kem_len - ); - failed_calls.push((id, create_failed_call(id, error_message))); - continue; - } - }; - - let kem_ct_bytes = match blob.get(cursor..kem_ct_end) { - Some(s) => s, - None => { - let error_message = "blob too short for kem_ct"; - log::debug!( - target: "mev-shield", - " id=0x{}: {} (cursor={} end={})", - hex::encode(id.as_bytes()), - error_message, - cursor, - kem_ct_end - ); - failed_calls.push((id, create_failed_call(id, error_message))); - continue; - } - }; - cursor = kem_ct_end; - - // 3) Nonce (24 bytes) - const NONCE_LEN: usize = 24; - let nonce_end = match cursor.checked_add(NONCE_LEN) { - Some(e) => e, - None => { - let error_message = "nonce range overflow"; - log::debug!( - target: "mev-shield", - " id=0x{}: {} (cursor={})", - hex::encode(id.as_bytes()), - error_message, - cursor - ); - failed_calls.push((id, create_failed_call(id, error_message))); - continue; - } - }; - - let nonce_bytes = match blob.get(cursor..nonce_end) { - Some(s) => s, - None => { - let error_message = "blob too short for nonce24"; - log::debug!( - target: "mev-shield", - " id=0x{}: {} (cursor={} end={})", - hex::encode(id.as_bytes()), - error_message, - cursor, - nonce_end - ); - failed_calls.push((id, create_failed_call(id, error_message))); - continue; - } - }; - cursor = nonce_end; - - // 4) AEAD body (rest) - let aead_body = match blob.get(cursor..) { - Some(s) => s, - None => { - let error_message = "blob too short for aead_body"; - log::debug!( - target: "mev-shield", - " id=0x{}: {} (cursor={})", - hex::encode(id.as_bytes()), - error_message, - cursor - ); - failed_calls.push((id, create_failed_call(id, error_message))); - continue; - } - }; - - let kem_ct_hash = sp_core::hashing::blake2_256(kem_ct_bytes); - let aead_body_hash = sp_core::hashing::blake2_256(aead_body); - - log::debug!( - target: "mev-shield", - " id=0x{}: kem_len={} kem_ct_hash=0x{} nonce=0x{} aead_body_len={} aead_body_hash=0x{}", - hex::encode(id.as_bytes()), - kem_len, - hex::encode(kem_ct_hash), - hex::encode(nonce_bytes), - aead_body.len(), - hex::encode(aead_body_hash), - ); - - // Rebuild DecapsulationKey and decapsulate. - let enc_sk = - match Encoded::>::try_from( - &curr_sk_bytes[..], - ) { - Ok(e) => e, - Err(e) => { - let error_message = "DecapsulationKey::try_from failed"; - log::debug!( - target: "mev-shield", - " id=0x{}: {} (len={}, err={:?})", - hex::encode(id.as_bytes()), - error_message, - curr_sk_bytes.len(), - e - ); - failed_calls.push((id, create_failed_call(id, error_message))); - continue; - } - }; - let sk = DecapsulationKey::::from_bytes(&enc_sk); - - let ct = match Ciphertext::::try_from(kem_ct_bytes) { - Ok(c) => c, - Err(e) => { - let error_message = "Ciphertext::try_from failed"; - log::debug!( - target: "mev-shield", - " id=0x{}: {}: {:?}", - hex::encode(id.as_bytes()), - error_message, - e - ); - failed_calls.push((id, create_failed_call(id, error_message))); - continue; - } - }; - - let ss = match sk.decapsulate(&ct) { - Ok(s) => s, - Err(_) => { - let error_message = "ML-KEM decapsulate failed"; - log::debug!( - target: "mev-shield", - " id=0x{}: {}", - hex::encode(id.as_bytes()), - error_message - ); - failed_calls.push((id, create_failed_call(id, error_message))); - continue; - } - }; - - let ss_bytes: &[u8] = ss.as_ref(); - if ss_bytes.len() != 32 { - let error_message = "shared secret length != 32"; - log::debug!( - target: "mev-shield", - " id=0x{}: {} (len={})", - hex::encode(id.as_bytes()), - error_message, - ss_bytes.len() - ); - failed_calls.push((id, create_failed_call(id, error_message))); - continue; - } - let mut ss32 = [0u8; 32]; - ss32.copy_from_slice(ss_bytes); - - let ss_hash = sp_core::hashing::blake2_256(&ss32); - let aead_key = crate::mev_shield::author::derive_aead_key(&ss32); - let key_hash_dbg = sp_core::hashing::blake2_256(&aead_key); - - log::debug!( - target: "mev-shield", - " id=0x{}: decapsulated shared_secret_len=32 shared_secret_hash=0x{}", - hex::encode(id.as_bytes()), - hex::encode(ss_hash) - ); - log::debug!( - target: "mev-shield", - " id=0x{}: derived AEAD key hash=0x{} (direct-from-ss)", - hex::encode(id.as_bytes()), - hex::encode(key_hash_dbg) - ); - - let mut nonce24 = [0u8; 24]; - nonce24.copy_from_slice(nonce_bytes); - - log::debug!( - target: "mev-shield", - " id=0x{}: attempting AEAD decrypt nonce=0x{} ct_len={}", - hex::encode(id.as_bytes()), - hex::encode(nonce24), - aead_body.len() - ); - - let plaintext = match crate::mev_shield::author::aead_decrypt( - aead_key, - nonce24, - aead_body, - &[], - ) { - Some(pt) => pt, - None => { - let error_message = "AEAD decrypt failed"; - log::debug!( - target: "mev-shield", - " id=0x{}: {}; ct_hash=0x{}", - hex::encode(id.as_bytes()), - error_message, - hex::encode(aead_body_hash), - ); - //failed_calls.push((id, create_failed_call(id, error_message))); - continue; - } - }; - - log::debug!( - target: "mev-shield", - " id=0x{}: AEAD decrypt OK, plaintext_len={}", - hex::encode(id.as_bytes()), - plaintext.len() - ); - - if plaintext.is_empty() { - let error_message = "plaintext too short"; - log::debug!( - target: "mev-shield", - " id=0x{}: {} (len={}, min={})", - hex::encode(id.as_bytes()), - error_message, - plaintext.len(), - 1 - ); - failed_calls.push((id, create_failed_call(id, error_message))); - continue; - } - - let signed_extrinsic_bytes = match plaintext.get(0..plaintext.len()) { - Some(s) if !s.is_empty() => s, - _ => { - let error_message = "missing signed extrinsic bytes"; - log::debug!( - target: "mev-shield", - " id=0x{}: {}", - hex::encode(id.as_bytes()), - error_message - ); - failed_calls.push((id, create_failed_call(id, error_message))); - continue; - } - }; - - let signed_extrinsic: node_subtensor_runtime::UncheckedExtrinsic = - match Decode::decode(&mut &signed_extrinsic_bytes[..]) { - Ok(c) => c, - Err(e) => { - let error_message = "failed to decode UncheckedExtrinsic"; - log::debug!( - target: "mev-shield", - " id=0x{}: {} (len={}): {:?}", - hex::encode(id.as_bytes()), - error_message, - signed_extrinsic_bytes.len(), - e - ); - failed_calls.push((id, create_failed_call(id, error_message))); - continue; - } - }; - - to_submit.push((id, signed_extrinsic)); - } - - // ── 4) submit decrypted extrinsics to pool ────────────────────────── - let at = client.info().best_hash; - log::debug!( - target: "mev-shield", - "revealer: submitting {} extrinsics to pool at best_hash={:?}", - to_submit.len(), - at - ); - - for (id, uxt) in to_submit.into_iter() { - let xt_bytes = uxt.encode(); - - log::debug!( - target: "mev-shield", - " id=0x{}: encoded UncheckedExtrinsic len={}", - hex::encode(id.as_bytes()), - xt_bytes.len() - ); - - match OpaqueExtrinsic::from_bytes(&xt_bytes) { - Ok(opaque) => { - match pool - .submit_one(at, TransactionSource::External, opaque) - .await - { - Ok(_) => { - let xt_hash = - sp_core::hashing::blake2_256(&xt_bytes); - log::debug!( - target: "mev-shield", - " id=0x{}: submit_one(...) OK, xt_hash=0x{}", - hex::encode(id.as_bytes()), - hex::encode(xt_hash) - ); - } - Err(e) => { - // Emit an on-chain failure event even when the *inner* - // transaction fails pre-dispatch validation in the pool. - let err_dbg = format!("{e:?}"); - let reason = truncate_utf8_to_bytes( - &format!( - "inner extrinsic rejected by tx-pool (pre-dispatch): {err_dbg}" - ), - 240, - ); - log::debug!( - target: "mev-shield", - " id=0x{}: submit_one(...) FAILED (will mark_decryption_failed): {:?}", - hex::encode(id.as_bytes()), - e - ); - failed_calls.push((id, create_failed_call(id, &reason))); - } - } - } - Err(e) => { - let err_dbg = format!("{e:?}"); - let reason = truncate_utf8_to_bytes( - &format!( - "invalid decrypted extrinsic bytes (OpaqueExtrinsic::from_bytes): {err_dbg}" - ), - 240, - ); - log::debug!( - target: "mev-shield", - " id=0x{}: OpaqueExtrinsic::from_bytes failed (will mark_decryption_failed): {:?}", - hex::encode(id.as_bytes()), - e - ); - failed_calls.push((id, create_failed_call(id, &reason))); - } - } - } - - // ── 5) submit decryption-failed markers ───────────────────────────── - if !failed_calls.is_empty() { - log::debug!( - target: "mev-shield", - "revealer: submitting {} mark_decryption_failed calls at best_hash={:?}", - failed_calls.len(), - at - ); - - for (id, call) in failed_calls.into_iter() { - let uxt: node_subtensor_runtime::UncheckedExtrinsic = - node_subtensor_runtime::UncheckedExtrinsic::new_bare(call); - let xt_bytes = uxt.encode(); - - log::debug!( - target: "mev-shield", - " id=0x{}: encoded mark_decryption_failed UncheckedExtrinsic len={}", - hex::encode(id.as_bytes()), - xt_bytes.len() - ); - - match OpaqueExtrinsic::from_bytes(&xt_bytes) { - Ok(opaque) => { - match pool - .submit_one(at, TransactionSource::Local, opaque) - .await - { - Ok(_) => { - let xt_hash = - sp_core::hashing::blake2_256(&xt_bytes); - log::debug!( - target: "mev-shield", - " id=0x{}: submit_one(mark_decryption_failed) OK, xt_hash=0x{}", - hex::encode(id.as_bytes()), - hex::encode(xt_hash) - ); - } - Err(e) => { - log::warn!( - target: "mev-shield", - " id=0x{}: submit_one(mark_decryption_failed) FAILED: {:?}", - hex::encode(id.as_bytes()), - e - ); - } - } - } - Err(e) => { - log::warn!( - target: "mev-shield", - " id=0x{}: OpaqueExtrinsic::from_bytes(mark_decryption_failed) failed: {:?}", - hex::encode(id.as_bytes()), - e - ); - } - } - } - } - } - }, - ); - } -} diff --git a/node/src/service.rs b/node/src/service.rs index 7b2ee0e75f..f33931d210 100644 --- a/node/src/service.rs +++ b/node/src/service.rs @@ -21,11 +21,13 @@ use sp_core::crypto::KeyTypeId; use sp_keystore::Keystore; use sp_runtime::key_types; use sp_runtime::traits::{Block as BlockT, NumberFor}; +use stc_shield::{self, MemoryShieldKeystore}; use std::collections::HashSet; use std::str::FromStr; use std::sync::atomic::AtomicBool; use std::{cell::RefCell, path::Path}; use std::{sync::Arc, time::Duration}; +use stp_shield::ShieldKeystorePtr; use substrate_prometheus_endpoint::Registry; use crate::cli::Sealing; @@ -34,7 +36,6 @@ use crate::ethereum::{ BackendType, EthConfiguration, FrontierBackend, FrontierPartialComponents, StorageOverride, StorageOverrideHandler, db_config_dir, new_frontier_partial, spawn_frontier_tasks, }; -use crate::mev_shield::{author, proposer}; const LOG_TARGET: &str = "node-service"; @@ -452,9 +453,12 @@ where prometheus_registry.clone(), )); + let shield_keystore = Arc::new(MemoryShieldKeystore::new()); let slot_duration = consensus_mechanism.slot_duration(&client)?; - let pending_create_inherent_data_providers = - move |_, ()| async move { CM::pending_create_inherent_data_providers(slot_duration) }; + let pending_create_inherent_data_providers = move |_, ()| { + let keystore = shield_keystore.clone(); + async move { CM::pending_create_inherent_data_providers(slot_duration, keystore) } + }; let rpc_methods = consensus_mechanism.rpc_methods( client.clone(), @@ -483,7 +487,8 @@ where fee_history_cache_limit, execute_gas_limit_multiplier, forced_parent_hashes: None, - pending_create_inherent_data_providers, + pending_create_inherent_data_providers: pending_create_inherent_data_providers + .clone(), }; let deps = crate::rpc::FullDeps { client: client.clone(), @@ -535,49 +540,9 @@ where ) .await; - // ==== MEV-SHIELD HOOKS ==== - let mut mev_timing: Option = None; - if role.is_authority() { - let slot_duration = consensus_mechanism.slot_duration(&client)?; - let slot_duration_ms: u64 = u64::try_from(slot_duration.as_millis()).unwrap_or(u64::MAX); - - // For 12s blocks: announce ≈ 7s, decrypt window ≈ 3s. - // For 250ms blocks: announce ≈ 145ms, decrypt window ≈ 62ms, etc. - let announce_at_ms_raw = slot_duration_ms.saturating_mul(7).saturating_div(12); - - let decrypt_window_ms = slot_duration_ms.saturating_mul(3).saturating_div(12); - - // Ensure announce_at_ms + decrypt_window_ms never exceeds slot_ms. - let max_announce = slot_duration_ms.saturating_sub(decrypt_window_ms); - let announce_at_ms = announce_at_ms_raw.min(max_announce); - - let timing = author::TimeParams { - slot_ms: slot_duration_ms, - announce_at_ms, - decrypt_window_ms, - }; - mev_timing = Some(timing.clone()); - - // Start author-side tasks with dynamic timing. - let mev_ctx = author::spawn_author_tasks::( - &task_manager.spawn_handle(), - client.clone(), - transaction_pool.clone(), - keystore_container.keystore(), - timing.clone(), - ); - - // Start last-portion-of-slot revealer (decrypt -> submit_one). - proposer::spawn_revealer::( - &task_manager.spawn_handle(), - client.clone(), - transaction_pool.clone(), - mev_ctx.clone(), - ); - } + let shield_keystore = Arc::new(MemoryShieldKeystore::new()); - if role.is_authority() { // manual-seal authorship if let Some(sealing) = sealing { run_manual_seal_authorship( @@ -590,43 +555,34 @@ where prometheus_registry.as_ref(), telemetry.as_ref(), commands_stream, + shield_keystore.clone(), )?; log::info!("Manual Seal Ready"); return Ok(task_manager); } + stc_shield::spawn_key_rotation_on_own_import( + &task_manager.spawn_handle(), + client.clone(), + shield_keystore.clone(), + ); + let proposer_factory = sc_basic_authorship::ProposerFactory::new( task_manager.spawn_handle(), client.clone(), transaction_pool.clone(), prometheus_registry.as_ref(), telemetry.as_ref().map(|x| x.handle()), + shield_keystore.clone(), ); let slot_duration = consensus_mechanism.slot_duration(&client)?; - let start_fraction: f32 = { - let (slot_ms, decrypt_ms) = mev_timing - .as_ref() - .map(|t| (t.slot_ms, t.decrypt_window_ms)) - .unwrap_or((slot_duration.as_millis(), 3_000)); - - let guard_ms: u64 = 200; // small cushion so reveals hit the pool first - let after_decrypt_ms = slot_ms.saturating_sub(decrypt_ms).saturating_add(guard_ms); - - let f_raw = if slot_ms > 0 { - (after_decrypt_ms as f32) / (slot_ms as f32) - } else { - // Extremely defensive fallback; should never happen in practice. - 0.75 - }; - - f_raw.clamp(0.50, 0.98) + let create_inherent_data_providers = move |_, ()| { + let keystore = shield_keystore.clone(); + async move { CM::create_inherent_data_providers(slot_duration, keystore) } }; - let create_inherent_data_providers = - move |_, ()| async move { CM::create_inherent_data_providers(slot_duration) }; - consensus_mechanism.start_authoring( &mut task_manager, crate::consensus::StartAuthoringParams { @@ -641,7 +597,7 @@ where force_authoring, backoff_authoring_blocks, keystore: keystore_container.keystore(), - block_proposal_slot_portion: SlotProportion::new(start_fraction), + block_proposal_slot_portion: SlotProportion::new(2f32 / 3f32), max_block_proposal_slot_portion: None, telemetry: telemetry.as_ref().map(|x| x.handle()), }, @@ -766,6 +722,7 @@ fn run_manual_seal_authorship( commands_stream: mpsc::Receiver< sc_consensus_manual_seal::rpc::EngineCommand<::Hash>, >, + shield_keystore: ShieldKeystorePtr, ) -> Result<(), ServiceError> { let proposer_factory = sc_basic_authorship::ProposerFactory::new( task_manager.spawn_handle(), @@ -773,6 +730,7 @@ fn run_manual_seal_authorship( transaction_pool.clone(), prometheus_registry, telemetry.as_ref().map(|x| x.handle()), + shield_keystore, ); thread_local!(static TIMESTAMP: RefCell = const { RefCell::new(0) }); diff --git a/pallets/shield/Cargo.toml b/pallets/shield/Cargo.toml index 1a0d9ef1f5..382e5f481e 100644 --- a/pallets/shield/Cargo.toml +++ b/pallets/shield/Cargo.toml @@ -15,8 +15,10 @@ targets = ["x86_64-unknown-linux-gnu"] [dependencies] codec = { workspace = true, features = ["derive", "max-encoded-len"] } scale-info = { workspace = true, features = ["derive"] } +log.workspace = true subtensor-macros.workspace = true +subtensor-runtime-common.workspace = true # FRAME core frame-support.workspace = true @@ -29,13 +31,25 @@ sp-runtime.workspace = true sp-io.workspace = true sp-std.workspace = true sp-weights.workspace = true +sp-inherents.workspace = true -# Pallets used in Config -pallet-timestamp.workspace = true -pallet-aura.workspace = true -sp-consensus-aura.workspace = true +# Subtensor primitives +stp-io.workspace = true +stp-shield.workspace = true + +# Benchmark-only (optional, activated by runtime-benchmarks feature) +pallet-aura = { workspace = true, optional = true } +sp-consensus-aura = { workspace = true, optional = true } +ml-kem = { workspace = true, optional = true } +chacha20poly1305 = { workspace = true, optional = true } +rand_chacha = { workspace = true, optional = true } [dev-dependencies] +stc-shield.workspace = true +ml-kem.workspace = true +chacha20poly1305.workspace = true +pallet-subtensor-utility.workspace = true +rand_chacha.workspace = true [features] default = ["std"] @@ -43,6 +57,7 @@ default = ["std"] std = [ "codec/std", "scale-info/std", + "log/std", "frame-support/std", "frame-system/std", "frame-benchmarking?/std", @@ -51,9 +66,17 @@ std = [ "sp-io/std", "sp-std/std", "sp-weights/std", - "pallet-timestamp/std", - "pallet-aura/std", - "sp-consensus-aura/std", + "sp-inherents/std", + "stp-io/std", + "stp-shield/std", + "pallet-aura?/std", + "sp-consensus-aura?/std", + "chacha20poly1305?/std", + "ml-kem?/std", + "rand_chacha?/std", + "pallet-subtensor-utility/std", + "stc-shield/std", + "subtensor-runtime-common/std", ] runtime-benchmarks = [ @@ -61,7 +84,12 @@ runtime-benchmarks = [ "frame-support/runtime-benchmarks", "frame-system/runtime-benchmarks", "sp-runtime/runtime-benchmarks", - "pallet-timestamp/runtime-benchmarks", + "pallet-subtensor-utility/runtime-benchmarks", + "chacha20poly1305", + "ml-kem", + "pallet-aura", + "sp-consensus-aura", + "rand_chacha", ] try-runtime = [ @@ -69,5 +97,5 @@ try-runtime = [ "frame-system/try-runtime", "sp-runtime/try-runtime", "pallet-aura/try-runtime", - "pallet-timestamp/try-runtime", + "pallet-subtensor-utility/try-runtime", ] diff --git a/pallets/shield/README.md b/pallets/shield/README.md new file mode 100644 index 0000000000..6ad5628cf1 --- /dev/null +++ b/pallets/shield/README.md @@ -0,0 +1,47 @@ +# pallet-shield + +FRAME pallet for opt-in, per-block ephemeral-key encrypted transactions (MEV shielding). + +## Overview + +Block authors rotate ML-KEM-768 key pairs every slot via a mandatory inherent. Users encrypt their extrinsics to the next block author's public key, preventing front-running and sandwich attacks. + +### Key rotation + +Each block includes an `announce_next_key` inherent that: + +1. Shifts `NextKey` into `CurrentKey` (so the previous key is still accepted during the transition). +2. Stores the current author's freshly generated public key in `AuthorKeys`. +3. Looks up the *next* author's key from `AuthorKeys` and exposes it as `NextKey`. + +### Encrypted transaction flow + +1. User reads `NextKey` from storage (ML-KEM-768 public key, 1184 bytes). +2. User encrypts a signed extrinsic with ML-KEM-768 + XChaCha20-Poly1305, producing: + + ``` + ciphertext = key_hash(16) || kem_len(2) || kem_ct || nonce(24) || aead_ct + ``` + +3. User submits `submit_encrypted(ciphertext)` signed with their account. +4. The block author decrypts and includes the inner extrinsic in the same block. + +### Transaction extension + +`CheckShieldedTxValidity` validates shielded transactions at two levels: + +- **Pool validation** — rejects malformed ciphertext (unparseable structure). +- **Block building** (`InBlock`) — additionally checks that `key_hash` matches either `CurrentKey` or `NextKey`, rejecting stale or tampered submissions. + +## Storage + +| Item | Description | +|------|-------------| +| `CurrentKey` | Previous block's `NextKey`, kept for one-block grace period | +| `NextKey` | Public key users should encrypt to | +| `AuthorKeys` | Per-authority latest announced public key | + +## Dependencies + +- [`stp-shield`](https://github.com/opentensor/polkadot-sdk) — shared types (`ShieldedTransaction`, `ShieldPublicKey`, `InherentType`) +- [`stp-io`](../../primitives/io) — host functions for ML-KEM decapsulation and AEAD decryption diff --git a/pallets/shield/src/benchmarking.rs b/pallets/shield/src/benchmarking.rs index 23c98685d8..1ce1c48b99 100644 --- a/pallets/shield/src/benchmarking.rs +++ b/pallets/shield/src/benchmarking.rs @@ -2,143 +2,179 @@ use super::*; use frame_benchmarking::v2::*; use frame_support::{BoundedVec, pallet_prelude::ConstU32}; -use frame_system::{RawOrigin, pallet_prelude::BlockNumberFor}; +use frame_system::RawOrigin; use sp_core::sr25519; -use sp_runtime::traits::Hash as HashT; -use sp_std::vec; - -// /// Helper to build bounded bytes (public key) of a given length. -// fn bounded_pk(len: usize) -> BoundedVec> { -// let v = vec![7u8; len]; -// BoundedVec::>::try_from(v).expect("within bound; qed") -// } - -/// Helper to build bounded bytes (ciphertext) of a given length. -// fn bounded_ct(len: usize) -> BoundedVec> { -// let v = vec![0u8; len]; -// BoundedVec::>::try_from(v).expect("within bound; qed") -// } - -// /// Seed Aura authorities so `EnsureAuraAuthority` passes for a given sr25519 pubkey. -// /// -// /// We avoid requiring `ByteArray` on `AuthorityId` by relying on: -// /// `::AuthorityId: From`. -// fn seed_aura_authority_from_sr25519(pubkey: &sr25519::Public) -// where -// T: pallet::Config + pallet_aura::Config, -// ::AuthorityId: From, -// { -// let auth_id: ::AuthorityId = (*pubkey).into(); -// pallet_aura::Authorities::::mutate(|auths| { -// let _ = auths.try_push(auth_id); -// }); -// } +use sp_std::{vec, vec::Vec}; + +use chacha20poly1305::{ + KeyInit, XChaCha20Poly1305, XNonce, + aead::{Aead, Payload}, +}; +use ml_kem::{ + Ciphertext, KemCore, MlKem768, MlKem768Params, + kem::{Decapsulate, DecapsulationKey, Encapsulate}, +}; +use rand_chacha::{ChaCha20Rng, rand_core::SeedableRng}; +use stp_shield::ShieldedTransaction; + +use codec::Encode; +use sp_consensus_aura::AURA_ENGINE_ID; +use sp_core::crypto::KeyTypeId; +use sp_io::crypto::sr25519_generate; + +/// Seed Aura authorities from sr25519 public keys. +fn seed_aura_authorities(pubkeys: &[sr25519::Public]) +where + T: pallet::Config + pallet_aura::Config, + ::AuthorityId: From, +{ + pallet_aura::Authorities::::mutate(|auths| { + for pk in pubkeys { + let auth_id: ::AuthorityId = (*pk).into(); + let _ = auths.try_push(auth_id); + } + }); +} + +/// Deposit an Aura pre-runtime digest for the given slot. +fn deposit_slot_digest(slot: u64) { + frame_system::Pallet::::deposit_log(sp_runtime::DigestItem::PreRuntime( + AURA_ENGINE_ID, + slot.encode(), + )); +} + +/// Build a real max-size encrypted ciphertext (8192 bytes wire format). +/// +/// Returns `(wire_ciphertext, dec_key)` so the benchmark can measure decryption. +fn build_max_encrypted_payload() -> (Vec, DecapsulationKey) { + let mut rng = ChaCha20Rng::from_seed([42u8; 32]); + let (dec_key, enc_key) = MlKem768::generate(&mut rng); + let (kem_ct, shared_secret) = enc_key.encapsulate(&mut rng).unwrap(); + + // Wire overhead: key_hash(16) + kem_ct_len(2) + kem_ct(1088) + nonce(24) = 1130. + // Max aead_ct = 8192 − 1130 = 7062. + // Poly1305 tag = 16 bytes ⇒ max plaintext = 7046. + let plaintext = vec![0x42u8; 7046]; + + let nonce = [0u8; 24]; + let cipher = XChaCha20Poly1305::new(shared_secret.as_slice().into()); + let aead_ct = cipher + .encrypt( + XNonce::from_slice(&nonce), + Payload { + msg: &plaintext, + aad: &[], + }, + ) + .expect("AEAD encryption must succeed in benchmark setup"); + + let kem_ct_bytes = kem_ct.as_slice(); + let key_hash = [0u8; 16]; + + let mut wire = Vec::with_capacity(8192); + wire.extend_from_slice(&key_hash); + wire.extend_from_slice(&(kem_ct_bytes.len() as u16).to_le_bytes()); + wire.extend_from_slice(kem_ct_bytes); + wire.extend_from_slice(&nonce); + wire.extend_from_slice(&aead_ct); + + debug_assert_eq!(wire.len(), 8192); + + (wire, dec_key) +} #[benchmarks( where - // Needed to build a concrete inner call and convert into T::RuntimeCall. - ::RuntimeCall: From>, - // Needed so we can seed Authorities from a dev sr25519 pubkey. + T: pallet_aura::Config, ::AuthorityId: From, + ::AuthorityId: From, )] mod benches { use super::*; - // We use the custom value for announce_next_key to charge a higher fee, not the benchmark result. - // /// Benchmark `announce_next_key`. - // #[benchmark] - // fn announce_next_key() { - // // Generate a deterministic dev key in the host keystore (for benchmarks). - // // Any 4-byte KeyTypeId works for generation; it does not affect AccountId derivation. - // const KT: KeyTypeId = KeyTypeId(*b"benc"); - // let alice_pub: sr25519::Public = sr25519_generate(KT, Some("//Alice".as_bytes().to_vec())); - // let alice_acc: AccountId32 = alice_pub.into(); - - // // Make this account an Aura authority for the generic runtime. - // seed_aura_authority_from_sr25519::(&alice_pub); - - // // Valid Kyber768 public key length per pallet check. - // const KYBER768_PK_LEN: usize = 1184; - // let public_key: BoundedVec> = bounded_pk::<2048>(KYBER768_PK_LEN); - - // // Measure: dispatch the extrinsic. - // #[extrinsic_call] - // announce_next_key(RawOrigin::Signed(alice_acc.clone()), public_key.clone()); - - // // Assert: NextKey should be set exactly. - // let stored = NextKey::::get().expect("must be set by announce_next_key"); - // assert_eq!(stored, public_key); - // } - - // Benchmark `submit_encrypted`. - // #[benchmark] - // fn submit_encrypted() { - // // Any whitelisted caller is fine (no authority requirement). - // let who: T::AccountId = whitelisted_caller(); - - // // Dummy commitment and ciphertext (bounded to 8192). - // let commitment: T::Hash = ::Hashing::hash(b"bench-commitment"); - // const CT_DEFAULT_LEN: usize = 256; - // let ciphertext: BoundedVec> = super::bounded_ct::<8192>(CT_DEFAULT_LEN); - - // // Pre-compute expected id to assert postconditions. - // let id: T::Hash = - // ::Hashing::hash_of(&(who.clone(), commitment, &ciphertext)); - - // // Measure: dispatch the extrinsic. - // #[extrinsic_call] - // submit_encrypted( - // RawOrigin::Signed(who.clone()), - // commitment, - // ciphertext.clone(), - // ); - - // // Assert: stored under expected id. - // let got = Submissions::::get(id).expect("submission must exist"); - // assert_eq!(got.author, who); - // assert_eq!( - // got.commitment, - // ::Hashing::hash(b"bench-commitment") - // ); - // assert_eq!(got.ciphertext.as_slice(), ciphertext.as_slice()); - // } - - /// Benchmark `mark_decryption_failed`. + /// Worst-case `announce_next_key`: both current and next author exist, + /// NextKey is populated (shift to CurrentKey), and the next author has a + /// stored key (triggers NextKey write). #[benchmark] - fn mark_decryption_failed() { - // Any account can be the author of the submission. - let who: T::AccountId = whitelisted_caller(); - let submitted_in: BlockNumberFor = frame_system::Pallet::::block_number(); - - // Build a dummy commitment and ciphertext. - let commitment: T::Hash = - ::Hashing::hash(b"bench-mark-decryption-failed"); - const CT_DEFAULT_LEN: usize = 32; - let ciphertext: BoundedVec> = - BoundedVec::truncate_from(vec![0u8; CT_DEFAULT_LEN]); - - // Compute the submission id exactly like `submit_encrypted` does. - let id: T::Hash = - ::Hashing::hash_of(&(who.clone(), commitment, &ciphertext)); - - // Seed Submissions with an entry for this id. - let sub = Submission::, ::Hash> { - author: who, - commitment, - ciphertext: ciphertext.clone(), - submitted_in, - }; - Submissions::::insert(id, sub); - - // Reason for failure. - let reason: BoundedVec> = - BoundedVec::truncate_from(b"benchmark-decryption-failed".to_vec()); - - // Measure: dispatch the unsigned extrinsic. + fn announce_next_key() { + let alice = sr25519_generate(KeyTypeId(*b"aura"), Some("//Alice".as_bytes().to_vec())); + let bob = sr25519_generate(KeyTypeId(*b"aura"), Some("//Bob".as_bytes().to_vec())); + + // Seed Aura with [alice, bob]. + seed_aura_authorities::(&[alice, bob]); + + // Slot 0 → current = authorities[0 % 2] = alice, + // next = authorities[1 % 2] = bob. + deposit_slot_digest::(0); + + // Pre-populate NextKey so the shift (CurrentKey ← NextKey) writes. + let old_next_key: ShieldPublicKey = BoundedVec::truncate_from(vec![0x99; MLKEM768_PK_LEN]); + NextKey::::put(old_next_key); + + // Pre-populate AuthorKeys for the next author (bob) so NextKey gets set. + let bob_key: ShieldPublicKey = BoundedVec::truncate_from(vec![0x77; MLKEM768_PK_LEN]); + let bob_id: ::AuthorityId = bob.into(); + AuthorKeys::::insert(&bob_id, bob_key); + + // Valid 1184-byte ML-KEM-768 public key. + let public_key: ShieldPublicKey = BoundedVec::truncate_from(vec![0x42; MLKEM768_PK_LEN]); + #[extrinsic_call] - mark_decryption_failed(RawOrigin::None, id, reason); + announce_next_key(RawOrigin::None, Some(public_key.clone())); + + // CurrentKey was shifted from old NextKey. + assert!(CurrentKey::::get().is_some()); + // NextKey was set from bob's AuthorKeys entry. + assert!(NextKey::::get().is_some()); + // Alice's AuthorKeys was updated. + let alice_id: ::AuthorityId = alice.into(); + assert_eq!(AuthorKeys::::get(&alice_id), Some(public_key)); + } + + /// Worst-case `submit_encrypted`: max-size ciphertext (8192 bytes) with + /// real ML-KEM-768 + XChaCha20-Poly1305 decryption to account for the + /// block proposer's off-chain decrypt cost. + #[benchmark] + fn submit_encrypted() { + let who: T::AccountId = whitelisted_caller(); - // Assert: submission is removed. - assert!(Submissions::::get(id).is_none()); + // Build a real max-size encrypted payload. + let (wire, dec_key) = build_max_encrypted_payload(); + let ciphertext: BoundedVec> = BoundedVec::truncate_from(wire); + + #[block] + { + // 1. On-chain dispatch (event deposit). + Pallet::::submit_encrypted( + RawOrigin::Signed(who.clone()).into(), + ciphertext.clone(), + ) + .expect("submit_encrypted dispatch must succeed"); + + // 2. Parse wire-format ciphertext (proposer decode). + let shielded_tx = + ShieldedTransaction::parse(&ciphertext).expect("wire format must be valid"); + + // 3. ML-KEM-768 decapsulate (proposer crypto). + let ct = Ciphertext::::try_from(shielded_tx.kem_ct.as_slice()) + .expect("kem_ct must be valid ML-KEM-768 ciphertext"); + let shared_secret = dec_key + .decapsulate(&ct) + .expect("decapsulation must succeed"); + let ss: [u8; 32] = shared_secret.into(); + + // 4. AEAD decrypt (proposer crypto). + let aead = XChaCha20Poly1305::new((&ss).into()); + let _plaintext = aead + .decrypt( + XNonce::from_slice(&shielded_tx.nonce), + Payload { + msg: &shielded_tx.aead_ct, + aad: &[], + }, + ) + .expect("AEAD decryption must succeed"); + } } } diff --git a/pallets/shield/src/extension.rs b/pallets/shield/src/extension.rs new file mode 100644 index 0000000000..e055444a56 --- /dev/null +++ b/pallets/shield/src/extension.rs @@ -0,0 +1,266 @@ +use crate::{Call, Config, CurrentKey, NextKey, ShieldedTransaction}; +use codec::{Decode, DecodeWithMemTracking, Encode}; +use frame_support::pallet_prelude::*; +use frame_support::traits::IsSubType; +use scale_info::TypeInfo; +use sp_io::hashing::twox_128; +use sp_runtime::impl_tx_ext_default; +use sp_runtime::traits::{ + AsSystemOriginSigner, DispatchInfoOf, Dispatchable, Implication, TransactionExtension, + ValidateResult, +}; +use sp_runtime::transaction_validity::{TransactionSource, ValidTransaction}; +use subtensor_macros::freeze_struct; +use subtensor_runtime_common::CustomTransactionError; + +#[freeze_struct("dabd89c6963de25d")] +#[derive(Default, Encode, Decode, DecodeWithMemTracking, Clone, Eq, PartialEq, TypeInfo)] +pub struct CheckShieldedTxValidity(PhantomData); + +impl CheckShieldedTxValidity { + pub fn new() -> Self { + Self(Default::default()) + } +} + +impl sp_std::fmt::Debug for CheckShieldedTxValidity { + fn fmt(&self, f: &mut sp_std::fmt::Formatter) -> sp_std::fmt::Result { + write!(f, "CheckShieldedTxValidity") + } +} + +impl + TransactionExtension<::RuntimeCall> for CheckShieldedTxValidity +where + ::RuntimeCall: Dispatchable + IsSubType>, + ::RuntimeOrigin: AsSystemOriginSigner, +{ + const IDENTIFIER: &'static str = "CheckShieldedTxValidity"; + + type Implicit = (); + type Val = (); + type Pre = (); + + impl_tx_ext_default!(::RuntimeCall; weight prepare); + + fn validate( + &self, + origin: ::RuntimeOrigin, + call: &::RuntimeCall, + _info: &DispatchInfoOf<::RuntimeCall>, + _len: usize, + _self_implicit: Self::Implicit, + _inherited_implication: &impl Implication, + source: TransactionSource, + ) -> ValidateResult::RuntimeCall> { + // Ensure the transaction is signed, else we just skip the extension. + let Some(_who) = origin.as_system_origin_signer() else { + return Ok((Default::default(), (), origin)); + }; + + // Ensure the transaction is a shielded transaction, else we just skip the extension. + let Some(Call::submit_encrypted { ciphertext }) = IsSubType::>::is_sub_type(call) + else { + return Ok((Default::default(), (), origin)); + }; + + // Reject malformed ciphertext regardless of source. + let Some(ShieldedTransaction { key_hash, .. }) = ShieldedTransaction::parse(ciphertext) + else { + return Err(CustomTransactionError::FailedShieldedTxParsing.into()); + }; + + // Only enforce the key_hash check during block building/import. + // The fork-aware tx pool validates against multiple views (recent block states), + // and stale views may not contain the key the tx was encrypted with, + // causing spurious rejections. Pool validation only checks structure above. + if source == TransactionSource::InBlock { + let matches_any = [CurrentKey::::get(), NextKey::::get()] + .iter() + .any(|k| k.as_ref().is_some_and(|k| twox_128(&k[..]) == key_hash)); + + if !matches_any { + return Err(CustomTransactionError::InvalidShieldedTxPubKeyHash.into()); + } + } + + // Shielded txs get a short longevity so they are evicted from the pool + // if not included within a few blocks. Keys rotate every block, so a tx + // encrypted against a key that has rotated out of the 2-key window + // (CurrentKey + NextKey) will never be included — without this it would + // stay in the pool indefinitely since pool revalidation skips the key check. + let validity = ValidTransaction { + longevity: 3, + ..Default::default() + }; + + Ok((validity, (), origin)) + } +} + +#[cfg(test)] +mod tests { + use super::*; + use crate::mock::*; + use frame_support::dispatch::GetDispatchInfo; + use frame_support::pallet_prelude::{BoundedVec, ConstU32}; + use sp_runtime::traits::TxBaseImplication; + use sp_runtime::transaction_validity::{TransactionValidityError, ValidTransaction}; + + /// Build wire-format ciphertext with a given key_hash. + /// Layout: key_hash(16) || kem_ct_len(2 LE) || kem_ct(N) || nonce(24) || aead_ct(rest) + fn build_ciphertext(key_hash: [u8; 16]) -> BoundedVec> { + let kem_ct = [0xAA; 4]; + let nonce = [0xBB; 24]; + let aead_ct = [0xDD; 16]; + + let mut buf = Vec::new(); + buf.extend_from_slice(&key_hash); + buf.extend_from_slice(&(kem_ct.len() as u16).to_le_bytes()); + buf.extend_from_slice(&kem_ct); + buf.extend_from_slice(&nonce); + buf.extend_from_slice(&aead_ct); + + BoundedVec::truncate_from(buf) + } + + fn make_submit_call(key_hash: [u8; 16]) -> RuntimeCall { + RuntimeCall::MevShield(crate::Call::submit_encrypted { + ciphertext: build_ciphertext(key_hash), + }) + } + + fn set_current_key(pk: &[u8]) { + CurrentKey::::put(BoundedVec::>::truncate_from(pk.to_vec())); + } + + fn set_next_key(pk: &[u8]) { + NextKey::::put(BoundedVec::>::truncate_from(pk.to_vec())); + } + + fn validate_ext( + who: Option, + call: &RuntimeCall, + source: TransactionSource, + ) -> Result { + let ext = CheckShieldedTxValidity::::new(); + let info = call.get_dispatch_info(); + let origin = match who { + Some(id) => RuntimeOrigin::signed(id), + None => RuntimeOrigin::none(), + }; + ext.validate(origin, call, &info, 0, (), &TxBaseImplication(call), source) + .map(|(validity, _, _)| validity) + } + + const PK_A: [u8; 32] = [0x11; 32]; + const PK_B: [u8; 32] = [0x22; 32]; + + #[test] + fn non_shield_call_passes_through() { + new_test_ext().execute_with(|| { + let call = RuntimeCall::System(frame_system::Call::remark { remark: vec![] }); + let validity = validate_ext(Some(1), &call, TransactionSource::InBlock).unwrap(); + // Non-shield calls get default (max) longevity. + assert_eq!(validity.longevity, u64::MAX); + }); + } + + #[test] + fn unsigned_origin_passes_through() { + new_test_ext().execute_with(|| { + let call = make_submit_call([0xFF; 16]); + let validity = validate_ext(None, &call, TransactionSource::InBlock).unwrap(); + assert_eq!(validity.longevity, u64::MAX); + }); + } + + #[test] + fn malformed_ciphertext_rejected_inblock() { + new_test_ext().execute_with(|| { + let call = RuntimeCall::MevShield(crate::Call::submit_encrypted { + ciphertext: BoundedVec::truncate_from(vec![0u8; 5]), + }); + assert_eq!( + validate_ext(Some(1), &call, TransactionSource::InBlock), + Err(CustomTransactionError::FailedShieldedTxParsing.into()) + ); + }); + } + + #[test] + fn malformed_ciphertext_rejected_from_pool() { + new_test_ext().execute_with(|| { + let call = RuntimeCall::MevShield(crate::Call::submit_encrypted { + ciphertext: BoundedVec::truncate_from(vec![0u8; 5]), + }); + assert_eq!( + validate_ext(Some(1), &call, TransactionSource::External), + Err(CustomTransactionError::FailedShieldedTxParsing.into()) + ); + }); + } + + #[test] + fn inblock_matches_current_key() { + new_test_ext().execute_with(|| { + set_current_key(&PK_A); + let call = make_submit_call(twox_128(&PK_A)); + let validity = validate_ext(Some(1), &call, TransactionSource::InBlock).unwrap(); + assert_eq!(validity.longevity, 3); + }); + } + + #[test] + fn inblock_matches_next_key() { + new_test_ext().execute_with(|| { + set_next_key(&PK_B); + let call = make_submit_call(twox_128(&PK_B)); + let validity = validate_ext(Some(1), &call, TransactionSource::InBlock).unwrap(); + assert_eq!(validity.longevity, 3); + }); + } + + #[test] + fn inblock_no_match_rejected() { + new_test_ext().execute_with(|| { + set_current_key(&PK_A); + set_next_key(&PK_B); + let call = make_submit_call([0xFF; 16]); + assert_eq!( + validate_ext(Some(1), &call, TransactionSource::InBlock), + Err(CustomTransactionError::InvalidShieldedTxPubKeyHash.into()) + ); + }); + } + + #[test] + fn inblock_no_keys_set_rejected() { + new_test_ext().execute_with(|| { + let call = make_submit_call(twox_128(&PK_A)); + assert_eq!( + validate_ext(Some(1), &call, TransactionSource::InBlock), + Err(CustomTransactionError::InvalidShieldedTxPubKeyHash.into()) + ); + }); + } + + #[test] + fn pool_local_skips_key_check() { + new_test_ext().execute_with(|| { + let call = make_submit_call([0xFF; 16]); + let validity = validate_ext(Some(1), &call, TransactionSource::Local).unwrap(); + // Pool sources skip key check but still get short longevity. + assert_eq!(validity.longevity, 3); + }); + } + + #[test] + fn pool_external_skips_key_check() { + new_test_ext().execute_with(|| { + let call = make_submit_call([0xFF; 16]); + let validity = validate_ext(Some(1), &call, TransactionSource::External).unwrap(); + assert_eq!(validity.longevity, 3); + }); + } +} diff --git a/pallets/shield/src/lib.rs b/pallets/shield/src/lib.rs index 6b1dc60304..2becd6d6f4 100644 --- a/pallets/shield/src/lib.rs +++ b/pallets/shield/src/lib.rs @@ -1,7 +1,19 @@ // pallets/mev-shield/src/lib.rs #![cfg_attr(not(feature = "std"), no_std)] +extern crate alloc; + +use frame_support::{pallet_prelude::*, traits::IsSubType}; +use frame_system::{ensure_none, ensure_signed, pallet_prelude::*}; +use sp_runtime::traits::{Applyable, Block as BlockT, Checkable, Hash}; +use stp_shield::{ + INHERENT_IDENTIFIER, InherentType, LOG_TARGET, ShieldPublicKey, ShieldedTransaction, +}; + +use alloc::vec; + pub use pallet::*; + #[cfg(feature = "runtime-benchmarks")] mod benchmarking; @@ -11,271 +23,137 @@ pub mod mock; #[cfg(test)] mod tests; -#[frame_support::pallet] -pub mod pallet { - use super::*; - use codec::Encode; - use frame_support::{ - dispatch::{DispatchInfo, GetDispatchInfo, PostDispatchInfo}, - pallet_prelude::*, - traits::ConstU32, - traits::IsSubType, - weights::Weight, - }; - use frame_system::pallet_prelude::*; - use sp_consensus_aura::sr25519::AuthorityId as AuraAuthorityId; - use sp_core::ByteArray; - use sp_runtime::{ - AccountId32, DispatchErrorWithPostInfo, RuntimeDebug, Saturating, - traits::{ - BadOrigin, DispatchInfoOf, DispatchOriginOf, Dispatchable, Hash, Implication, - TransactionExtension, - }, - transaction_validity::{InvalidTransaction, TransactionSource, ValidTransaction}, - }; - use sp_std::{marker::PhantomData, prelude::*}; - use subtensor_macros::freeze_struct; - - /// Origin helper: ensure the signer is an Aura authority (no session/authorship). - pub struct EnsureAuraAuthority(PhantomData); - - pub trait AuthorityOriginExt { - type AccountId; - - fn ensure_validator(origin: Origin) -> Result; - } - - impl AuthorityOriginExt> for EnsureAuraAuthority - where - T: frame_system::Config - + pallet_aura::Config, - { - type AccountId = AccountId32; - - fn ensure_validator(origin: OriginFor) -> Result { - let who: AccountId32 = frame_system::ensure_signed(origin)?; - - let aura_id = - ::from_slice(who.as_ref()).map_err(|_| BadOrigin)?; +mod extension; +mod migrations; +pub use extension::CheckShieldedTxValidity; - let is_validator = pallet_aura::Authorities::::get() - .into_iter() - .any(|id| id == aura_id); - - if is_validator { - Ok(who) - } else { - Err(BadOrigin) - } - } - } +type MigrationKeyMaxLen = ConstU32<128>; - // ----------------- Types ----------------- +type ExtrinsicOf = ::Extrinsic; +type CheckedOf = >::Checked; +type ApplyableCallOf = ::Call; - /// AEAD‑independent commitment over the revealed payload. - #[freeze_struct("66e393c88124f360")] - #[derive(Encode, Decode, Clone, PartialEq, Eq, RuntimeDebug, TypeInfo, MaxEncodedLen)] - pub struct Submission { - pub author: AccountId, - pub commitment: Hash, - pub ciphertext: BoundedVec>, - pub submitted_in: BlockNumber, - } +const MLKEM768_PK_LEN: usize = 1184; +const MAX_EXTRINSIC_DEPTH: u32 = 8; - // ----------------- Config ----------------- +#[frame_support::pallet] +pub mod pallet { + use super::*; #[pallet::config] - pub trait Config: - frame_system::Config>> - + pallet_timestamp::Config - + pallet_aura::Config - { - type RuntimeCall: Parameter - + sp_runtime::traits::Dispatchable< - RuntimeOrigin = Self::RuntimeOrigin, - PostInfo = PostDispatchInfo, - > + GetDispatchInfo; + pub trait Config: frame_system::Config { + /// The identifier type for an authority. + type AuthorityId: Member + Parameter + MaybeSerializeDeserialize + MaxEncodedLen; - type AuthorityOrigin: AuthorityOriginExt; + /// A way to find the current and next block author. + type FindAuthors: FindAuthors; } #[pallet::pallet] pub struct Pallet(_); - // ----------------- Storage ----------------- - - /// Current ML‑KEM‑768 public key bytes (encoded form). + // Current block author ML‑KEM‑768 public key bytes. + // + // Note: Do not use this to encrypt transactions as this + // is only used to validate transactions in the extension. + // Use `NextKey` instead. #[pallet::storage] - pub type CurrentKey = StorageValue<_, BoundedVec>, OptionQuery>; + pub type CurrentKey = StorageValue<_, ShieldPublicKey, OptionQuery>; - /// Next ML‑KEM‑768 public key bytes, announced by the block author. + // Next block author ML‑KEM‑768 public key bytes. + // + // This is the key that should be used to encrypt transactions. #[pallet::storage] - pub type NextKey = StorageValue<_, BoundedVec>, OptionQuery>; + pub type NextKey = StorageValue<_, ShieldPublicKey, OptionQuery>; - /// Buffered encrypted submissions, indexed by wrapper id. - #[pallet::storage] - pub type Submissions = StorageMap< - _, - Blake2_128Concat, - T::Hash, - Submission, T::Hash>, - OptionQuery, - >; - - /// Hash(CurrentKey) per block, used to bind `key_hash` to the epoch at submit time. + /// Latest announced ML‑KEM‑768 public key per block author. + /// This is the key the author will use for decapsulation in their next slot. #[pallet::storage] - pub type KeyHashByBlock = - StorageMap<_, Blake2_128Concat, BlockNumberFor, T::Hash, OptionQuery>; + pub type AuthorKeys = + StorageMap<_, Twox64Concat, T::AuthorityId, ShieldPublicKey, OptionQuery>; - /// How many recent blocks of key-epoch hashes we retain. - const KEY_EPOCH_HISTORY: u32 = 100; - - // ----------------- Events & Errors ----------------- + /// Stores whether some migration has been run. + #[pallet::storage] + pub type HasMigrationRun = + StorageMap<_, Identity, BoundedVec, bool, ValueQuery>; #[pallet::event] #[pallet::generate_deposit(pub(super) fn deposit_event)] pub enum Event { /// Encrypted wrapper accepted. EncryptedSubmitted { id: T::Hash, who: T::AccountId }, - /// Decrypted call executed. - DecryptedExecuted { id: T::Hash, signer: T::AccountId }, - /// Decrypted execution rejected. - DecryptedRejected { - id: T::Hash, - reason: DispatchErrorWithPostInfo, - }, - /// Decryption failed - validator could not decrypt the submission. - DecryptionFailed { - id: T::Hash, - reason: BoundedVec>, - }, } #[pallet::error] pub enum Error { - /// A submission with the same id already exists in `Submissions`. - SubmissionAlreadyExists, - /// The referenced submission id does not exist in `Submissions`. - MissingSubmission, - /// The recomputed commitment does not match the stored commitment. - CommitmentMismatch, - /// The provided signature over the payload is invalid. - SignatureInvalid, /// The announced ML‑KEM public key length is invalid. BadPublicKeyLen, - /// The MEV‑Shield key epoch for this submission has expired and is no longer accepted. - KeyExpired, - /// The provided `key_hash` does not match the expected epoch key hash. - KeyHashMismatch, - /// The shield is disabled while upgrading. - ShieldDisabledWhileUpgrading, + /// Unreachable. + Unreachable, } - // ----------------- Hooks ----------------- - #[pallet::hooks] impl Hooks> for Pallet { - fn on_initialize(n: BlockNumberFor) -> Weight { - let db_weight = T::DbWeight::get(); - let mut reads: u64 = 0; - let mut writes: u64 = 0; - - // 1) Roll NextKey -> CurrentKey if a next key is present. - reads = reads.saturating_add(1); - writes = writes.saturating_add(1); - let mut current_opt: Option>> = - if let Some(next) = NextKey::::take() { - CurrentKey::::put(&next); - writes = writes.saturating_add(1); - Some(next) - } else { - None - }; - - // 2) If we didn't roll, read the existing CurrentKey exactly once. - if current_opt.is_none() { - reads = reads.saturating_add(1); - current_opt = CurrentKey::::get(); - } - - // 3) Maintain KeyHashByBlock entry for this block: - match current_opt { - Some(current) => { - let epoch_hash: T::Hash = T::Hashing::hash(current.as_ref()); - KeyHashByBlock::::insert(n, epoch_hash); - writes = writes.saturating_add(1); - } - None => { - KeyHashByBlock::::remove(n); - writes = writes.saturating_add(1); - } - } - - // 4) Prune old epoch hashes with a sliding window of size KEY_EPOCH_HISTORY. - let depth: BlockNumberFor = KEY_EPOCH_HISTORY.into(); - if n >= depth { - let prune_bn = n.saturating_sub(depth); - KeyHashByBlock::::remove(prune_bn); - writes = writes.saturating_add(1); - } - - // 5) TTL-based pruning of stale submissions. - let ttl: BlockNumberFor = KEY_EPOCH_HISTORY.into(); - let threshold: BlockNumberFor = n.saturating_sub(ttl); - - let mut to_remove: Vec = Vec::new(); + fn on_runtime_upgrade() -> frame_support::weights::Weight { + let mut weight = frame_support::weights::Weight::from_parts(0, 0); - for (id, sub) in Submissions::::iter() { - reads = reads.saturating_add(1); - if sub.submitted_in < threshold { - to_remove.push(id); - } - } - - for id in to_remove { - Submissions::::remove(id); - writes = writes.saturating_add(1); - } + weight = weight.saturating_add( + migrations::migrate_clear_v1_storage::migrate_clear_v1_storage::(), + ); - db_weight.reads_writes(reads, writes) + weight } } - // ----------------- Calls ----------------- - #[pallet::call] impl Pallet { /// Announce the ML‑KEM public key that will become `CurrentKey` in - /// the following block. + /// the next block the current author will produce. + /// + /// Note: The public key can be `None` if the author failed to include the key in the + /// inherent data (which should never happen except node failure). In that case, we + /// store the next key as `None` to reflect that this author will not be able + /// handle encrypted transactions in his next block. #[pallet::call_index(0)] - #[pallet::weight(( - Weight::from_parts(20_999_999_999, 0) - .saturating_add(T::DbWeight::get().reads(1_u64)) - .saturating_add(T::DbWeight::get().writes(1_u64)), - DispatchClass::Operational, - Pays::Yes - ))] - #[allow(clippy::useless_conversion)] + #[pallet::weight(Weight::from_parts(23_190_000, 0) + .saturating_add(T::DbWeight::get().reads(2_u64)) + .saturating_add(T::DbWeight::get().writes(3_u64)))] pub fn announce_next_key( origin: OriginFor, - public_key: BoundedVec>, - ) -> DispatchResultWithPostInfo { - // Only a current Aura validator may call this (signed account ∈ Aura authorities) - T::AuthorityOrigin::ensure_validator(origin)?; - - const MAX_KYBER768_PK_LENGTH: usize = 1184; - ensure!( - public_key.len() == MAX_KYBER768_PK_LENGTH, - Error::::BadPublicKeyLen - ); + public_key: Option, + ) -> DispatchResult { + ensure_none(origin)?; + + let author = T::FindAuthors::find_current_author() + // This should never happen as we are in an inherent. + .ok_or(Error::::Unreachable)?; + + // Shift the key chain: Current ← NextKey. + // NextKey was set in the previous block to be the current author's key, + // so this naturally tracks the last 2 keys users may have encrypted with. + CurrentKey::::set(NextKey::::get()); + + if let Some(public_key) = &public_key { + ensure!( + public_key.len() == MLKEM768_PK_LEN, + Error::::BadPublicKeyLen + ); + AuthorKeys::::insert(&author, public_key.clone()); + } else { + // If the author did not announce a key, remove his old key from storage, + // he will not be able to accept shielded transactions in his next block. + AuthorKeys::::remove(&author); + } - NextKey::::put(public_key); + // Expose the next block author's key so users can encrypt for them. + NextKey::::kill(); + if let Some(next_author) = T::FindAuthors::find_next_author() + && let Some(key) = AuthorKeys::::get(&next_author) + { + NextKey::::put(key); + } - // Refund the fee on success by setting pays_fee = Pays::No - Ok(PostDispatchInfo { - actual_weight: None, - pays_fee: Pays::No, - }) + Ok(()) } /// Users submit an encrypted wrapper. @@ -285,179 +163,133 @@ pub mod pallet { /// 1. Read `NextKey` (ML‑KEM public key bytes) from storage. /// 2. Sign your extrinsic so that it can be executed when added to the pool, /// i.e. you may need to increment the nonce if you submit using the same account. - /// 3. `commitment = Hashing::hash(signed_extrinsic)`. - /// 4. Encrypt: + /// 3. Encrypt: /// /// plaintext = signed_extrinsic + /// key_hash = xxhash128(NextKey) + /// kem_len = Length of kem_ct in bytes (u16) + /// kem_ct = Ciphertext from ML‑KEM‑768 + /// nonce = Random 24 bytes used for XChaCha20‑Poly1305 + /// aead_ct = Ciphertext from XChaCha20‑Poly1305 /// /// with ML‑KEM‑768 + XChaCha20‑Poly1305, producing /// - /// ciphertext = [u16 kem_len] || kem_ct || nonce24 || aead_ct + /// ciphertext = key_hash || kem_len || kem_ct || nonce || aead_ct /// #[pallet::call_index(1)] - #[pallet::weight(( - Weight::from_parts(13_980_000, 0) - .saturating_add(T::DbWeight::get().reads(1_u64)) - .saturating_add(T::DbWeight::get().writes(1_u64)), - DispatchClass::Normal, - Pays::Yes, - ))] + #[pallet::weight(Weight::from_parts(207_500_000, 0) + .saturating_add(T::DbWeight::get().reads(0_u64)) + .saturating_add(T::DbWeight::get().writes(0_u64)))] pub fn submit_encrypted( - _origin: OriginFor, - _commitment: T::Hash, - _ciphertext: BoundedVec>, - ) -> DispatchResult { - Err(Error::::ShieldDisabledWhileUpgrading.into()) - } - - /// Marks a submission as failed to decrypt and removes it from storage. - /// - /// Called by the block author when decryption fails at any stage (e.g., ML-KEM decapsulate - /// failed, AEAD decrypt failed, invalid ciphertext format, etc.). This allows clients to be - /// notified of decryption failures through on-chain events. - /// - /// # Arguments - /// - /// * `id` - The wrapper id (hash of (author, commitment, ciphertext)) - /// * `reason` - Human-readable reason for the decryption failure (e.g., "ML-KEM decapsulate failed") - #[pallet::call_index(3)] - #[pallet::weight(( - Weight::from_parts(13_260_000, 0) - .saturating_add(T::DbWeight::get().reads(1_u64)) - .saturating_add(T::DbWeight::get().writes(1_u64)), - DispatchClass::Normal, - Pays::No - ))] - pub fn mark_decryption_failed( origin: OriginFor, - id: T::Hash, - reason: BoundedVec>, + ciphertext: BoundedVec>, ) -> DispatchResult { - // Unsigned: only the author node may inject this via ValidateUnsigned. - ensure_none(origin)?; - - // Load and consume the submission. - let Some(_sub) = Submissions::::take(id) else { - return Err(Error::::MissingSubmission.into()); - }; - - // Emit event to notify clients - Self::deposit_event(Event::DecryptionFailed { id, reason }); + let who = ensure_signed(origin)?; + let id: T::Hash = T::Hashing::hash_of(&(who.clone(), &ciphertext)); + Self::deposit_event(Event::EncryptedSubmitted { id, who }); Ok(()) } } - #[pallet::validate_unsigned] - impl ValidateUnsigned for Pallet { + #[pallet::inherent] + impl ProvideInherent for Pallet { type Call = Call; - - fn validate_unsigned(source: TransactionSource, call: &Self::Call) -> TransactionValidity { - match call { - Call::mark_decryption_failed { id, .. } => { - match source { - TransactionSource::Local | TransactionSource::InBlock => { - ValidTransaction::with_tag_prefix("mev-shield-failed") - .priority(1u64) - .longevity(64) // long because propagate(false) - .and_provides(id) // dedupe by wrapper id - .propagate(false) // CRITICAL: no gossip, stays on author node - .build() - } - _ => InvalidTransaction::Call.into(), - } - } - _ => InvalidTransaction::Call.into(), - } + type Error = sp_inherents::MakeFatalError<()>; + + const INHERENT_IDENTIFIER: InherentIdentifier = INHERENT_IDENTIFIER; + + fn create_inherent(data: &InherentData) -> Option { + let public_key = data + .get_data::(&INHERENT_IDENTIFIER) + .inspect_err( + |e| log::debug!(target: LOG_TARGET, "Failed to get shielded public key inherent data: {:?}", e), + ) + .ok()??; + Some(Call::announce_next_key { public_key }) } - } - - #[freeze_struct("51f74eb54f5ab1fe")] - #[derive(Default, Encode, Decode, DecodeWithMemTracking, Clone, Eq, PartialEq, TypeInfo)] - pub struct MevShieldDecryptionFilter(pub PhantomData); - - impl sp_std::fmt::Debug for MevShieldDecryptionFilter { - fn fmt(&self, f: &mut sp_std::fmt::Formatter) -> sp_std::fmt::Result { - write!(f, "MevShieldDecryptionFilter") - } - } - impl MevShieldDecryptionFilter { - pub fn new() -> Self { - Self(PhantomData) - } - - #[inline] - fn mev_failed_priority() -> TransactionPriority { - 1u64 + fn is_inherent(call: &Self::Call) -> bool { + matches!(call, Call::announce_next_key { .. }) } } +} - impl TransactionExtension> - for MevShieldDecryptionFilter +impl Pallet { + pub fn try_decode_shielded_tx( + uxt: ExtrinsicOf, + ) -> Option where - ::RuntimeCall: - Dispatchable, - ::RuntimeCall: IsSubType>, + Block::Extrinsic: Checkable, + CheckedOf: Applyable, + ApplyableCallOf>: IsSubType>, { - const IDENTIFIER: &'static str = "MevShieldDecryptionFilter"; - - type Implicit = (); - type Val = (); - type Pre = (); + // Prevent stack overflows by limiting the depth of the extrinsic. + let encoded = uxt.encode(); + let uxt = ::decode_all_with_depth_limit( + MAX_EXTRINSIC_DEPTH, + &mut &encoded[..], + ) + .inspect_err( + |e| log::debug!(target: LOG_TARGET, "Failed to decode shielded extrinsic: {:?}", e), + ) + .ok()?; + + // Verify that the signature is correct. + let xt = ExtrinsicOf::::check(uxt, &Context::default()) + .inspect_err( + |e| log::debug!(target: LOG_TARGET, "Failed to check shielded extrinsic: {:?}", e), + ) + .ok()?; + let call = xt.call(); + + let Some(Call::submit_encrypted { ciphertext }) = IsSubType::>::is_sub_type(call) + else { + return None; + }; + + ShieldedTransaction::parse(ciphertext) + } - fn weight(&self, _call: &RuntimeCallFor) -> Weight { - // Only does light pattern matching; treat as free. - Weight::zero() + pub fn try_unshield_tx( + shielded_tx: ShieldedTransaction, + ) -> Option<::Extrinsic> { + let mut shared_secret = [0u8; 32]; + stp_io::crypto::mlkem768_decapsulate(&shielded_tx.kem_ct, &mut shared_secret).inspect_err( + |e| log::debug!(target: LOG_TARGET, "Failed to decapsulate shielded transaction: {:?}", e), + ).ok()?; + + let plaintext = stp_io::crypto::aead_decrypt( + &shared_secret, + &shielded_tx.nonce, + &shielded_tx.aead_ct, + &[], + ) + .inspect_err( + |e| log::debug!(target: LOG_TARGET, "Failed to decrypt shielded transaction: {:?}", e), + ) + .ok()?; + + if plaintext.is_empty() { + return None; } - fn validate( - &self, - origin: DispatchOriginOf>, - call: &RuntimeCallFor, - _info: &DispatchInfoOf>, - _len: usize, - _self_implicit: Self::Implicit, - _inherited_implication: &impl Implication, - source: TransactionSource, - ) -> ValidateResult> { - match call.is_sub_type() { - Some(Call::mark_decryption_failed { id, .. }) => { - match source { - TransactionSource::Local | TransactionSource::InBlock => { - let validity_res = - ValidTransaction::with_tag_prefix("mev-shield-failed") - .priority(Self::mev_failed_priority()) - .longevity(64) - .and_provides(id) - .propagate(false) - .build(); - - match validity_res { - Ok(validity) => Ok((validity, (), origin)), - Err(e) => Err(e), - } - } - - // Anything coming from the outside world (including *signed* - // transactions) is rejected at the pool boundary. - _ => Err(InvalidTransaction::Call.into()), - } - } - - _ => Ok((Default::default(), (), origin)), - } - } + ExtrinsicOf::::decode(&mut &plaintext[..]).inspect_err( + |e| log::debug!(target: LOG_TARGET, "Failed to decode shielded transaction: {:?}", e), + ).ok() + } +} - fn prepare( - self, - _val: Self::Val, - _origin: &DispatchOriginOf>, - _call: &RuntimeCallFor, - _info: &DispatchInfoOf>, - _len: usize, - ) -> Result { - Ok(()) - } +pub trait FindAuthors { + fn find_current_author() -> Option; + fn find_next_author() -> Option; +} + +impl FindAuthors for () { + fn find_current_author() -> Option { + None + } + fn find_next_author() -> Option { + None } } diff --git a/pallets/shield/src/migrations/migrate_clear_v1_storage.rs b/pallets/shield/src/migrations/migrate_clear_v1_storage.rs new file mode 100644 index 0000000000..e3c55d8713 --- /dev/null +++ b/pallets/shield/src/migrations/migrate_clear_v1_storage.rs @@ -0,0 +1,49 @@ +use super::*; +use frame_support::storage::unhashed; +use scale_info::prelude::string::String; +use sp_io::hashing::twox_128; + +/// Clears removed v1 storage items (`Submissions`, `KeyHashByBlock`) and resets `CurrentKey`. +pub fn migrate_clear_v1_storage() -> Weight { + let migration_name = b"migrate_clear_v1_storage".to_vec(); + let bounded_name = BoundedVec::truncate_from(migration_name.clone()); + let mut weight = T::DbWeight::get().reads(1); + + if HasMigrationRun::::get(&bounded_name) { + log::info!( + "Migration '{:?}' has already run. Skipping.", + String::from_utf8_lossy(&migration_name) + ); + return weight; + } + + log::info!( + "Running migration '{}'", + String::from_utf8_lossy(&migration_name) + ); + + let pallet_prefix = twox_128("MevShield".as_bytes()); + + // Clear removed storage maps. + for name in ["Submissions", "KeyHashByBlock"] { + let prefix = [pallet_prefix.as_slice(), &twox_128(name.as_bytes())].concat(); + let result = unhashed::clear_prefix(&prefix, Some(u32::MAX), None); + weight = weight.saturating_add(T::DbWeight::get().writes(result.backend as u64)); + + log::info!("Removed {} entries from {name:?}.", result.backend,); + } + + // Reset current key. + CurrentKey::::kill(); + weight = weight.saturating_add(T::DbWeight::get().writes(1)); + + HasMigrationRun::::insert(&bounded_name, true); + weight = weight.saturating_add(T::DbWeight::get().writes(1)); + + log::info!( + "Migration '{}' completed successfully.", + String::from_utf8_lossy(&migration_name) + ); + + weight +} diff --git a/pallets/shield/src/migrations/mod.rs b/pallets/shield/src/migrations/mod.rs new file mode 100644 index 0000000000..1069de5297 --- /dev/null +++ b/pallets/shield/src/migrations/mod.rs @@ -0,0 +1,4 @@ +use crate::*; +use frame_support::{traits::Get, weights::Weight}; + +pub mod migrate_clear_v1_storage; diff --git a/pallets/shield/src/mock.rs b/pallets/shield/src/mock.rs index 0732670406..0188d081e4 100644 --- a/pallets/shield/src/mock.rs +++ b/pallets/shield/src/mock.rs @@ -1,145 +1,94 @@ -use crate as pallet_mev_shield; +use crate as pallet_shield; +use crate::MLKEM768_PK_LEN; -use frame_support::{construct_runtime, derive_impl, parameter_types, traits::Everything}; -use frame_system as system; +use frame_support::{BoundedVec, construct_runtime, derive_impl}; +use sp_runtime::{BuildStorage, generic, testing::TestSignature}; +use std::cell::RefCell; +use stp_shield::ShieldPublicKey; -use sp_consensus_aura::sr25519::AuthorityId as AuraId; -use sp_core::{ConstU32, H256}; -use sp_runtime::traits::BadOrigin; -use sp_runtime::{ - AccountId32, BuildStorage, - traits::{BlakeTwo256, IdentityLookup}, -}; +pub type Block = frame_system::mocking::MockBlock; -// ----------------------------------------------------------------------------- -// Mock runtime -// ----------------------------------------------------------------------------- - -pub type UncheckedExtrinsic = system::mocking::MockUncheckedExtrinsic; -pub type Block = system::mocking::MockBlock; +pub type DecodableExtrinsic = generic::UncheckedExtrinsic; +pub type DecodableBlock = + generic::Block, DecodableExtrinsic>; construct_runtime!( pub enum Test { System: frame_system = 0, - Timestamp: pallet_timestamp = 1, - Aura: pallet_aura = 2, - MevShield: pallet_mev_shield = 3, + MevShield: pallet_shield = 1, + Utility: pallet_subtensor_utility = 2, } ); -// A concrete nonce type used in tests. -pub type TestNonce = u64; - #[derive_impl(frame_system::config_preludes::TestDefaultConfig)] -impl system::Config for Test { - // Basic system config - type BaseCallFilter = Everything; - type BlockWeights = (); - type BlockLength = (); - type DbWeight = (); - - type RuntimeOrigin = RuntimeOrigin; - type RuntimeCall = RuntimeCall; - type RuntimeEvent = RuntimeEvent; - - type Nonce = TestNonce; - type Hash = H256; - type Hashing = BlakeTwo256; - - type AccountId = AccountId32; - type Lookup = IdentityLookup; +impl frame_system::Config for Test { type Block = Block; - - type BlockHashCount = (); - type Version = (); - type PalletInfo = PalletInfo; - - type AccountData = (); - type OnNewAccount = (); - type OnKilledAccount = (); - type SystemWeightInfo = (); - type SS58Prefix = (); - type OnSetCode = (); - - // Max number of consumer refs per account. - type MaxConsumers = ConstU32<16>; } -parameter_types! { - pub const MinimumPeriod: u64 = 1; -} - -impl pallet_timestamp::Config for Test { - type Moment = u64; - type OnTimestampSet = (); - type MinimumPeriod = MinimumPeriod; +impl pallet_subtensor_utility::Config for Test { + type RuntimeCall = RuntimeCall; + type PalletsOrigin = OriginCaller; type WeightInfo = (); } -// Aura mock configuration -parameter_types! { - pub const MaxAuthorities: u32 = 32; - pub const AllowMultipleBlocksPerSlot: bool = false; - pub const SlotDuration: u64 = 6000; -} - -impl pallet_aura::Config for Test { - type AuthorityId = AuraId; - // For tests we don't need dynamic disabling; just use unit type. - type DisabledValidators = (); - type MaxAuthorities = MaxAuthorities; - type AllowMultipleBlocksPerSlot = AllowMultipleBlocksPerSlot; - type SlotDuration = SlotDuration; +thread_local! { + pub static CURRENT_AUTHOR: RefCell> = const { RefCell::new(None) }; + pub static NEXT_AUTHOR: RefCell> = const { RefCell::new(None) }; } -// ----------------------------------------------------------------------------- -// Authority origin for tests – root-only -// ----------------------------------------------------------------------------- - -/// For tests, treat Root as the “validator set” and return a dummy AccountId. -pub struct TestAuthorityOrigin; - -impl pallet_mev_shield::AuthorityOriginExt for TestAuthorityOrigin { - type AccountId = AccountId32; - - fn ensure_validator(origin: RuntimeOrigin) -> Result { - // Must be a signed origin. - let who: AccountId32 = frame_system::ensure_signed(origin).map_err(|_| BadOrigin)?; +pub struct MockFindAuthors; - // Interpret the AccountId bytes as an AuraId, just like the real pallet. - let aura_id = - ::from_slice(who.as_ref()).map_err(|_| BadOrigin)?; - - // Check membership in the Aura validator set. - let is_validator = pallet_aura::Authorities::::get() - .into_iter() - .any(|id| id == aura_id); - - if is_validator { - Ok(who) - } else { - Err(BadOrigin) - } +impl pallet_shield::FindAuthors for MockFindAuthors { + fn find_current_author() -> Option { + CURRENT_AUTHOR.with(|a| *a.borrow()) + } + fn find_next_author() -> Option { + NEXT_AUTHOR.with(|a| *a.borrow()) } } -// ----------------------------------------------------------------------------- -// MevShield Config -// ----------------------------------------------------------------------------- - -impl pallet_mev_shield::Config for Test { - type RuntimeCall = RuntimeCall; - type AuthorityOrigin = TestAuthorityOrigin; +impl pallet_shield::Config for Test { + type AuthorityId = u64; + type FindAuthors = MockFindAuthors; } -// ----------------------------------------------------------------------------- -// new_test_ext -// ----------------------------------------------------------------------------- - pub fn new_test_ext() -> sp_io::TestExternalities { - // Use the construct_runtime!-generated genesis config. RuntimeGenesisConfig::default() .build_storage() - .expect("RuntimeGenesisConfig builds valid default genesis storage") + .expect("valid genesis") .into() } + +pub fn valid_pk() -> ShieldPublicKey { + BoundedVec::truncate_from(vec![0x42; MLKEM768_PK_LEN]) +} + +pub fn valid_pk_b() -> ShieldPublicKey { + BoundedVec::truncate_from(vec![0x99; MLKEM768_PK_LEN]) +} + +pub fn set_authors(current: Option, next: Option) { + CURRENT_AUTHOR.with(|a| *a.borrow_mut() = current); + NEXT_AUTHOR.with(|a| *a.borrow_mut() = next); +} + +pub fn nest_call(call: RuntimeCall, depth: usize) -> RuntimeCall { + (0..depth).fold(call, |inner, _| { + RuntimeCall::Utility(pallet_subtensor_utility::Call::batch { calls: vec![inner] }) + }) +} + +pub fn build_wire_ciphertext( + key_hash: &[u8; 16], + kem_ct: &[u8], + nonce: &[u8; 24], + aead_ct: &[u8], +) -> Vec { + let mut buf = Vec::new(); + buf.extend_from_slice(key_hash); + buf.extend_from_slice(&(kem_ct.len() as u16).to_le_bytes()); + buf.extend_from_slice(kem_ct); + buf.extend_from_slice(nonce); + buf.extend_from_slice(aead_ct); + buf +} diff --git a/pallets/shield/src/tests.rs b/pallets/shield/src/tests.rs index d438aeef8c..f18d4acd1f 100644 --- a/pallets/shield/src/tests.rs +++ b/pallets/shield/src/tests.rs @@ -1,440 +1,414 @@ -use crate as pallet_mev_shield; use crate::mock::*; - -use frame_support::{ - BoundedVec, assert_noop, assert_ok, - traits::{ConstU32 as FrameConstU32, Hooks}, +use crate::{AuthorKeys, CurrentKey, Error, HasMigrationRun, NextKey}; + +use codec::Encode; +use frame_support::{BoundedVec, assert_noop, assert_ok}; +use sp_runtime::BuildStorage; +use sp_runtime::testing::TestSignature; +use sp_runtime::traits::{Block as BlockT, Hash}; +use stp_shield::{ShieldKeystore, ShieldKeystoreExt, ShieldPublicKey, ShieldedTransaction}; + +use chacha20poly1305::{ + KeyInit, XChaCha20Poly1305, XNonce, + aead::{Aead, Payload}, }; -use frame_system::pallet_prelude::BlockNumberFor; -use pallet_mev_shield::{Call as MevShieldCall, CurrentKey, KeyHashByBlock, NextKey}; -use sp_core::{Pair, sr25519}; -use sp_runtime::{ - AccountId32, - traits::{Hash, SaturatedConversion}, +use ml_kem::{ + EncodedSizeUser, MlKem768Params, + kem::{Encapsulate, EncapsulationKey}, }; +use rand_chacha::{ChaChaRng, rand_core::SeedableRng}; +use stc_shield::MemoryShieldKeystore; +use std::sync::Arc; + +#[test] +fn announce_rejects_signed_origin() { + new_test_ext().execute_with(|| { + set_authors(Some(1), None); + assert_noop!( + MevShield::announce_next_key(RuntimeOrigin::signed(1), Some(valid_pk())), + sp_runtime::DispatchError::BadOrigin + ); + }); +} -// Type aliases for convenience in tests. -type TestHash = ::Hash; -type TestBlockNumber = BlockNumberFor; +#[test] +fn announce_shifts_next_into_current() { + new_test_ext().execute_with(|| { + set_authors(Some(1), Some(2)); -// ----------------------------------------------------------------------------- -// Helpers -// ----------------------------------------------------------------------------- + let old_next = valid_pk_b(); + NextKey::::put(old_next.clone()); -/// Deterministic sr25519 pair for tests (acts as "Alice"). -fn test_sr25519_pair() -> sr25519::Pair { - sr25519::Pair::from_seed(&[1u8; 32]) -} + assert_ok!(MevShield::announce_next_key( + RuntimeOrigin::none(), + Some(valid_pk()), + )); -// ----------------------------------------------------------------------------- -// Tests -// ----------------------------------------------------------------------------- + assert_eq!(CurrentKey::::get(), Some(old_next)); + }); +} #[test] -fn authority_can_announce_next_key_and_on_initialize_rolls_it_and_records_epoch_hash() { +fn announce_stores_key_in_author_keys() { new_test_ext().execute_with(|| { - const KYBER_PK_LEN: usize = 1184; - let pk_bytes = vec![7u8; KYBER_PK_LEN]; - let bounded_pk: BoundedVec> = - BoundedVec::truncate_from(pk_bytes.clone()); - - // Seed Aura authorities with a single validator and derive the matching account. - let validator_pair = test_sr25519_pair(); - let validator_account: AccountId32 = validator_pair.public().into(); - let validator_aura_id: ::AuthorityId = - validator_pair.public().into(); - - // Authorities storage expects a BoundedVec. - let authorities: BoundedVec< - ::AuthorityId, - ::MaxAuthorities, - > = BoundedVec::truncate_from(vec![validator_aura_id.clone()]); - pallet_aura::Authorities::::put(authorities); - - assert!(CurrentKey::::get().is_none()); - assert!(NextKey::::get().is_none()); + set_authors(Some(1), None); + let pk = valid_pk(); - // Signed by an Aura validator -> passes TestAuthorityOrigin::ensure_validator. assert_ok!(MevShield::announce_next_key( - RuntimeOrigin::signed(validator_account.clone()), - bounded_pk.clone(), + RuntimeOrigin::none(), + Some(pk.clone()), )); - // NextKey storage updated - let next = NextKey::::get().expect("NextKey should be set"); - assert_eq!(next, pk_bytes); + assert_eq!(AuthorKeys::::get(1u64), Some(pk)); + }); +} - // Simulate beginning of block #2. - let block_two: TestBlockNumber = 2u64.saturated_into(); - MevShield::on_initialize(block_two); +#[test] +fn announce_sets_next_key_from_next_author() { + new_test_ext().execute_with(|| { + set_authors(Some(1), Some(2)); - // CurrentKey should now equal the previously announced NextKey. - let curr = CurrentKey::::get().expect("CurrentKey should be set"); - assert_eq!(curr, pk_bytes); + let pk_b = valid_pk_b(); + AuthorKeys::::insert(2u64, pk_b.clone()); - // And NextKey cleared. - assert!(NextKey::::get().is_none()); + assert_ok!(MevShield::announce_next_key( + RuntimeOrigin::none(), + Some(valid_pk()), + )); - // Key hash for this block should be recorded and equal hash(CurrentKey_bytes). - let expected_hash: TestHash = ::Hashing::hash(curr.as_ref()); - let recorded = - KeyHashByBlock::::get(block_two).expect("epoch key hash must be recorded"); - assert_eq!(recorded, expected_hash); + assert_eq!(NextKey::::get(), Some(pk_b)); }); } #[test] -fn announce_next_key_rejects_non_validator_origins() { +fn announce_next_key_none_when_next_author_has_no_key() { new_test_ext().execute_with(|| { - const KYBER_PK_LEN: usize = 1184; - - // Validator account: bytes match the Aura authority we put into storage. - let validator_pair = test_sr25519_pair(); - let validator_account: AccountId32 = validator_pair.public().into(); - let validator_aura_id: ::AuthorityId = - validator_pair.public().into(); - - // Non‑validator is some other key (not in Aura::Authorities). - let non_validator_pair = sr25519::Pair::from_seed(&[2u8; 32]); - let non_validator: AccountId32 = non_validator_pair.public().into(); - - // Only the validator is in the Aura validator set. - let authorities: BoundedVec< - ::AuthorityId, - ::MaxAuthorities, - > = BoundedVec::truncate_from(vec![validator_aura_id.clone()]); - pallet_aura::Authorities::::put(authorities); - - let pk_bytes = vec![9u8; KYBER_PK_LEN]; - let bounded_pk: BoundedVec> = - BoundedVec::truncate_from(pk_bytes.clone()); - - // 1) Signed non‑validator origin must fail with BadOrigin. - assert_noop!( - MevShield::announce_next_key( - RuntimeOrigin::signed(non_validator.clone()), - bounded_pk.clone(), - ), - sp_runtime::DispatchError::BadOrigin - ); + set_authors(Some(1), Some(2)); - // 2) Unsigned origin must also fail with BadOrigin. - assert_noop!( - MevShield::announce_next_key(RuntimeOrigin::none(), bounded_pk.clone(),), - sp_runtime::DispatchError::BadOrigin - ); + assert_ok!(MevShield::announce_next_key( + RuntimeOrigin::none(), + Some(valid_pk()), + )); + + assert!(NextKey::::get().is_none()); + }); +} + +#[test] +fn announce_next_key_none_when_no_next_author() { + new_test_ext().execute_with(|| { + set_authors(Some(1), None); - // 3) Signed validator origin succeeds (sanity check). assert_ok!(MevShield::announce_next_key( - RuntimeOrigin::signed(validator_account.clone()), - bounded_pk.clone(), + RuntimeOrigin::none(), + Some(valid_pk()), )); - let next = NextKey::::get().expect("NextKey must be set by validator"); - assert_eq!(next, pk_bytes); + assert!(NextKey::::get().is_none()); }); } -// #[test] -// fn submit_encrypted_stores_submission_and_emits_event() { -// new_test_ext().execute_with(|| { -// let pair = test_sr25519_pair(); -// let who: AccountId32 = pair.public().into(); - -// System::set_block_number(10); - -// let commitment = -// ::Hashing::hash(b"test-mevshield-commitment"); -// let ciphertext_bytes = vec![1u8, 2, 3, 4]; -// let ciphertext: BoundedVec> = -// BoundedVec::truncate_from(ciphertext_bytes.clone()); - -// assert_ok!(MevShield::submit_encrypted( -// RuntimeOrigin::signed(who.clone()), -// commitment, -// ciphertext.clone(), -// )); - -// let id = ::Hashing::hash_of(&( -// who.clone(), -// commitment, -// &ciphertext, -// )); - -// let stored = Submissions::::get(id).expect("submission stored"); -// assert_eq!(stored.author, who); -// assert_eq!(stored.commitment, commitment); -// assert_eq!(stored.ciphertext.to_vec(), ciphertext_bytes); -// assert_eq!(stored.submitted_in, 10); - -// let events = System::events(); -// let last = events.last().expect("at least one event").event.clone(); - -// assert!( -// matches!( -// last, -// RuntimeEvent::MevShield( -// MevShieldEvent::::EncryptedSubmitted { id: ev_id, who: ev_who } -// ) -// if ev_id == id && ev_who == who -// ), -// "expected EncryptedSubmitted event with correct id & who", -// ); -// }); -// } +#[test] +fn announce_rejects_bad_pk_length() { + new_test_ext().execute_with(|| { + set_authors(Some(1), None); + let bad_pk: ShieldPublicKey = BoundedVec::truncate_from(vec![0x01; 100]); + + assert_noop!( + MevShield::announce_next_key(RuntimeOrigin::none(), Some(bad_pk)), + Error::::BadPublicKeyLen + ); + }); +} #[test] -fn key_hash_by_block_prunes_old_entries() { +fn announce_none_pk_removes_author_key() { new_test_ext().execute_with(|| { - // This must match the constant configured in the pallet. - const KEEP: u64 = 100; - const TOTAL: u64 = KEEP + 5; + set_authors(Some(1), None); + AuthorKeys::::insert(1u64, valid_pk()); - // For each block n, set a CurrentKey and call on_initialize(n), - // which will record KeyHashByBlock[n] and prune old entries. - for n in 1..=TOTAL { - let key_bytes = vec![n as u8; 32]; - let bounded: BoundedVec> = - BoundedVec::truncate_from(key_bytes.clone()); + assert_ok!(MevShield::announce_next_key(RuntimeOrigin::none(), None)); - CurrentKey::::put(bounded.clone()); + assert!(AuthorKeys::::get(1u64).is_none()); + }); +} - let bn: TestBlockNumber = n.saturated_into(); - MevShield::on_initialize(bn); - } +#[test] +fn announce_fails_when_no_current_author() { + new_test_ext().execute_with(|| { + set_authors(None, None); + + assert_noop!( + MevShield::announce_next_key(RuntimeOrigin::none(), Some(valid_pk())), + Error::::Unreachable + ); + }); +} - // The oldest block that should still be kept after TOTAL blocks. - let oldest_kept: u64 = if TOTAL > KEEP { TOTAL - KEEP + 1 } else { 1 }; +#[test] +fn submit_encrypted_emits_event() { + new_test_ext().execute_with(|| { + System::set_block_number(1); - // Blocks strictly before oldest_kept must be pruned. - for old in 0..oldest_kept { - let bn: TestBlockNumber = old.saturated_into(); - assert!( - KeyHashByBlock::::get(bn).is_none(), - "block {bn:?} should have been pruned" - ); - } + let ciphertext = BoundedVec::truncate_from(vec![0xAA; 64]); + let who: u64 = 1; - // Blocks from oldest_kept..=TOTAL must still have entries. - for recent in oldest_kept..=TOTAL { - let bn: TestBlockNumber = recent.saturated_into(); - assert!( - KeyHashByBlock::::get(bn).is_some(), - "block {bn:?} should be retained" - ); - } + assert_ok!(MevShield::submit_encrypted( + RuntimeOrigin::signed(who), + ciphertext.clone(), + )); - // Additionally, assert we never exceed the configured cap. - let mut count: u64 = 0; - for bn in 0..=TOTAL { - let bn_t: TestBlockNumber = bn.saturated_into(); - if KeyHashByBlock::::get(bn_t).is_some() { - count += 1; + let expected_id = ::Hashing::hash_of(&(who, &ciphertext)); + + System::assert_last_event( + crate::Event::::EncryptedSubmitted { + id: expected_id, + who, } - } - let expected = KEEP.min(TOTAL); - assert_eq!( - count, expected, - "expected at most {expected} entries in KeyHashByBlock after pruning, got {count}" + .into(), ); }); } -// #[test] -// fn submissions_pruned_after_ttl_window() { -// new_test_ext().execute_with(|| { -// // This must match KEY_EPOCH_HISTORY in the pallet. -// const KEEP: u64 = 100; -// const TOTAL: u64 = KEEP + 5; - -// let pair = test_sr25519_pair(); -// let who: AccountId32 = pair.public().into(); - -// // Helper: create a submission at a specific block with a tagged commitment. -// let make_submission = |block: u64, tag: &[u8]| -> TestHash { -// System::set_block_number(block); -// let commitment: TestHash = ::Hashing::hash(tag); -// let ciphertext_bytes = vec![block as u8; 4]; -// let ciphertext: BoundedVec> = -// BoundedVec::truncate_from(ciphertext_bytes); - -// assert_ok!(MevShield::submit_encrypted( -// RuntimeOrigin::signed(who.clone()), -// commitment, -// ciphertext.clone(), -// )); - -// ::Hashing::hash_of(&( -// who.clone(), -// commitment, -// &ciphertext, -// )) -// }; - -// // With n = TOTAL and depth = KEEP, prune_before = n - KEEP = 5. -// let stale_block1: u64 = 1; // < 5, should be pruned -// let stale_block2: u64 = 4; // < 5, should be pruned -// let keep_block1: u64 = 5; // == prune_before, should be kept -// let keep_block2: u64 = TOTAL; // latest, should be kept - -// let id_stale1 = make_submission(stale_block1, b"stale-1"); -// let id_stale2 = make_submission(stale_block2, b"stale-2"); -// let id_keep1 = make_submission(keep_block1, b"keep-1"); -// let id_keep2 = make_submission(keep_block2, b"keep-2"); - -// // Sanity: all are present before pruning. -// assert!(Submissions::::get(id_stale1).is_some()); -// assert!(Submissions::::get(id_stale2).is_some()); -// assert!(Submissions::::get(id_keep1).is_some()); -// assert!(Submissions::::get(id_keep2).is_some()); - -// // Run on_initialize at block TOTAL, triggering TTL pruning over Submissions. -// let n_final: TestBlockNumber = TOTAL.saturated_into(); -// MevShield::on_initialize(n_final); - -// // Submissions with submitted_in < prune_before (5) should be gone. -// assert!(Submissions::::get(id_stale1).is_none()); -// assert!(Submissions::::get(id_stale2).is_none()); - -// // Submissions at or after prune_before should remain. -// assert!(Submissions::::get(id_keep1).is_some()); -// assert!(Submissions::::get(id_keep2).is_some()); -// }); -// } - -// #[test] -// fn mark_decryption_failed_removes_submission_and_emits_event() { -// new_test_ext().execute_with(|| { -// System::set_block_number(42); -// let pair = test_sr25519_pair(); -// let who: AccountId32 = pair.public().into(); - -// let commitment: TestHash = -// ::Hashing::hash(b"failed-decryption-commitment"); -// let ciphertext_bytes = vec![5u8; 8]; -// let ciphertext: BoundedVec> = -// BoundedVec::truncate_from(ciphertext_bytes.clone()); - -// assert_ok!(MevShield::submit_encrypted( -// RuntimeOrigin::signed(who.clone()), -// commitment, -// ciphertext.clone(), -// )); - -// let id: TestHash = ::Hashing::hash_of(&( -// who.clone(), -// commitment, -// &ciphertext, -// )); - -// // Sanity: submission exists. -// assert!(Submissions::::get(id).is_some()); - -// // Reason we will pass into mark_decryption_failed. -// let reason_bytes = b"AEAD decrypt failed".to_vec(); -// let reason: BoundedVec> = -// BoundedVec::truncate_from(reason_bytes.clone()); - -// // Call mark_decryption_failed as unsigned (RuntimeOrigin::none()). -// assert_ok!(MevShield::mark_decryption_failed( -// RuntimeOrigin::none(), -// id, -// reason.clone(), -// )); - -// // Submission should be removed. -// assert!(Submissions::::get(id).is_none()); - -// // Last event should be DecryptionFailed with the correct id and reason. -// let events = System::events(); -// let last = events -// .last() -// .expect("an event should be emitted") -// .event -// .clone(); - -// assert!( -// matches!( -// last, -// RuntimeEvent::MevShield( -// MevShieldEvent::::DecryptionFailed { id: ev_id, reason: ev_reason } -// ) -// if ev_id == id && ev_reason.to_vec() == reason_bytes -// ), -// "expected DecryptionFailed event with correct id & reason" -// ); - -// // A second call with the same id should now fail with MissingSubmission. -// let res = MevShield::mark_decryption_failed(RuntimeOrigin::none(), id, reason); -// assert_noop!(res, pallet_mev_shield::Error::::MissingSubmission); -// }); -// } +#[test] +fn submit_encrypted_rejects_unsigned() { + new_test_ext().execute_with(|| { + let ciphertext = BoundedVec::truncate_from(vec![0xAA; 64]); + + assert_noop!( + MevShield::submit_encrypted(RuntimeOrigin::none(), ciphertext), + sp_runtime::DispatchError::BadOrigin + ); + }); +} #[test] -fn announce_next_key_charges_then_refunds_fee() { +fn try_decode_shielded_tx_parses_bare_submit_encrypted() { new_test_ext().execute_with(|| { - const KYBER_PK_LEN: usize = 1184; - - // --------------------------------------------------------------------- - // 1. Seed Aura authorities with a single validator and derive account. - // --------------------------------------------------------------------- - let validator_pair = test_sr25519_pair(); - let validator_account: AccountId32 = validator_pair.public().into(); - let validator_aura_id: ::AuthorityId = - validator_pair.public().into(); - - let authorities: BoundedVec< - ::AuthorityId, - ::MaxAuthorities, - > = BoundedVec::truncate_from(vec![validator_aura_id]); - pallet_aura::Authorities::::put(authorities); - - // --------------------------------------------------------------------- - // 2. Build a valid Kyber public key and the corresponding RuntimeCall. - // --------------------------------------------------------------------- - let pk_bytes = vec![42u8; KYBER_PK_LEN]; - let bounded_pk: BoundedVec> = - BoundedVec::truncate_from(pk_bytes.clone()); - - let runtime_call = RuntimeCall::MevShield(MevShieldCall::::announce_next_key { - public_key: bounded_pk.clone(), + let key_hash = [0xAB; 16]; + let kem_ct = vec![0xCC; 32]; + let nonce = [0xDD; 24]; + let aead_ct = vec![0xEE; 64]; + + let ciphertext = build_wire_ciphertext(&key_hash, &kem_ct, &nonce, &aead_ct); + let call = RuntimeCall::MevShield(crate::Call::submit_encrypted { + ciphertext: BoundedVec::truncate_from(ciphertext), }); + let uxt = DecodableExtrinsic::new_bare(call); + + let result = crate::Pallet::::try_decode_shielded_tx::< + DecodableBlock, + frame_system::ChainContext, + >(uxt); + assert!(result.is_some()); + + let shielded = result.unwrap(); + assert_eq!(shielded.key_hash, key_hash); + assert_eq!(shielded.kem_ct, kem_ct); + assert_eq!(shielded.nonce, nonce); + assert_eq!(shielded.aead_ct, aead_ct); + }); +} - // --------------------------------------------------------------------- - // 3. Pre-dispatch: DispatchInfo must say Pays::Yes. - // --------------------------------------------------------------------- - let pre_info = ::get_dispatch_info( - &runtime_call, - ); +#[test] +fn try_decode_shielded_tx_returns_none_for_non_shield_call() { + new_test_ext().execute_with(|| { + let call = RuntimeCall::System(frame_system::Call::remark { remark: vec![] }); + let uxt = DecodableExtrinsic::new_bare(call); + + let result = crate::Pallet::::try_decode_shielded_tx::< + DecodableBlock, + frame_system::ChainContext, + >(uxt); + assert!(result.is_none()); + }); +} - assert_eq!( - pre_info.pays_fee, - frame_support::dispatch::Pays::Yes, - "announce_next_key must be declared as fee-paying at pre-dispatch" - ); +#[test] +fn try_decode_shielded_tx_returns_none_for_bad_signature() { + new_test_ext().execute_with(|| { + let ciphertext = build_wire_ciphertext(&[0xAB; 16], &[0xCC; 32], &[0xDD; 24], &[0xEE; 64]); + let call = RuntimeCall::MevShield(crate::Call::submit_encrypted { + ciphertext: BoundedVec::truncate_from(ciphertext), + }); + let bad_sig = TestSignature(1, vec![0xFF; 32]); + let uxt = DecodableExtrinsic::new_signed(call, 1u64, bad_sig, ()); + + let result = crate::Pallet::::try_decode_shielded_tx::< + DecodableBlock, + frame_system::ChainContext, + >(uxt); + assert!(result.is_none()); + }); +} - // --------------------------------------------------------------------- - // 4. Dispatch via the pallet function. - // --------------------------------------------------------------------- - let post = MevShield::announce_next_key( - RuntimeOrigin::signed(validator_account.clone()), - bounded_pk.clone(), - ) - .expect("announce_next_key should succeed for an Aura validator"); +#[test] +fn try_decode_shielded_tx_returns_none_for_malformed_ciphertext() { + new_test_ext().execute_with(|| { + let call = RuntimeCall::MevShield(crate::Call::submit_encrypted { + ciphertext: BoundedVec::truncate_from(vec![0u8; 5]), + }); + let uxt = DecodableExtrinsic::new_bare(call); - // Post-dispatch info should switch pays_fee from Yes -> No (refund). - assert_eq!( - post.pays_fee, - frame_support::dispatch::Pays::No, - "announce_next_key must refund the previously chargeable fee" - ); + let result = crate::Pallet::::try_decode_shielded_tx::< + DecodableBlock, + frame_system::ChainContext, + >(uxt); + assert!(result.is_none()); + }); +} - // And we don't override the actual weight (None => use pre-dispatch weight). - assert!( - post.actual_weight.is_none(), - "announce_next_key should not override actual_weight in PostDispatchInfo" - ); - let next = NextKey::::get().expect("NextKey should be set by announce_next_key"); - assert_eq!(next, pk_bytes); +#[test] +fn try_decode_shielded_tx_returns_none_when_depth_exceeded() { + new_test_ext().execute_with(|| { + let ciphertext = build_wire_ciphertext(&[0xAB; 16], &[0xCC; 32], &[0xDD; 24], &[0xEE; 64]); + let inner = RuntimeCall::MevShield(crate::Call::submit_encrypted { + ciphertext: BoundedVec::truncate_from(ciphertext), + }); + let call = nest_call(inner, 8); + let uxt = DecodableExtrinsic::new_bare(call); + + let result = crate::Pallet::::try_decode_shielded_tx::< + DecodableBlock, + frame_system::ChainContext, + >(uxt); + assert!(result.is_none()); }); } + +#[test] +fn try_unshield_tx_decrypts_extrinsic() { + let mut rng = ChaChaRng::from_seed([42u8; 32]); + let keystore = Arc::new(MemoryShieldKeystore::new()); + + // Client side: read the announced public key and encapsulate. + let pk_bytes = keystore.next_public_key().unwrap(); + let enc_key = + EncapsulationKey::::from_bytes(pk_bytes.as_slice().try_into().unwrap()); + let (kem_ct, shared_secret) = enc_key.encapsulate(&mut rng).unwrap(); + + // Build the inner extrinsic that we'll encrypt. + let inner_call = RuntimeCall::System(frame_system::Call::remark { + remark: vec![1, 2, 3], + }); + let inner_uxt = ::Extrinsic::new_bare(inner_call); + let plaintext = inner_uxt.encode(); + + // AEAD encrypt the extrinsic bytes. + let nonce = [42u8; 24]; + let cipher = XChaCha20Poly1305::new(shared_secret.as_slice().into()); + let aead_ct = cipher + .encrypt( + XNonce::from_slice(&nonce), + Payload { + msg: &plaintext, + aad: &[], + }, + ) + .unwrap(); + + // Roll keystore so next -> current (author side). + keystore.roll_for_next_slot().unwrap(); + + let shielded_tx = ShieldedTransaction { + key_hash: [0u8; 16], + kem_ct: kem_ct.as_slice().to_vec(), + nonce, + aead_ct, + }; + + // Build externalities with ShieldKeystoreExt registered. + let storage = RuntimeGenesisConfig::default() + .build_storage() + .expect("valid genesis"); + let mut ext = sp_io::TestExternalities::new(storage); + ext.register_extension(ShieldKeystoreExt::from( + keystore as Arc, + )); + + ext.execute_with(|| { + let result = crate::Pallet::::try_unshield_tx::(shielded_tx); + assert!(result.is_some()); + + let decoded = result.unwrap(); + assert_eq!(decoded.encode(), inner_uxt.encode()); + }); +} + +// --------------------------------------------------------------------------- +// Migration tests +// --------------------------------------------------------------------------- + +mod migration_tests { + use super::*; + use crate::migrations::migrate_clear_v1_storage::migrate_clear_v1_storage; + use sp_io::hashing::twox_128; + + #[test] + fn migrate_clear_v1_storage_works() { + new_test_ext().execute_with(|| { + // Seed legacy storage that should be cleared. + seed_legacy_map("Submissions", 5); + seed_legacy_map("KeyHashByBlock", 3); + CurrentKey::::put(valid_pk()); + + // Current storage that must survive. + NextKey::::put(valid_pk()); + AuthorKeys::::insert(1u64, valid_pk_b()); + + // Sanity: legacy values exist. + assert_eq!(count_keys("Submissions"), 5); + assert_eq!(count_keys("KeyHashByBlock"), 3); + assert!(CurrentKey::::get().is_some()); + + migrate_clear_v1_storage::(); + + // Legacy storage cleared. + assert_eq!(count_keys("Submissions"), 0); + assert_eq!(count_keys("KeyHashByBlock"), 0); + assert!(CurrentKey::::get().is_none()); + + // Current storage untouched. + assert_eq!(NextKey::::get(), Some(valid_pk())); + assert_eq!(AuthorKeys::::get(1u64), Some(valid_pk_b())); + + // Migration was recorded. + let mig_key = BoundedVec::truncate_from(b"migrate_clear_v1_storage".to_vec()); + assert!(HasMigrationRun::::get(&mig_key)); + + // Idempotent: re-run doesn't touch new data. + CurrentKey::::put(valid_pk_b()); + migrate_clear_v1_storage::(); + assert_eq!(CurrentKey::::get(), Some(valid_pk_b())); + }); + } + + fn seed_legacy_map(storage_name: &str, count: u32) { + let mut prefix = Vec::new(); + prefix.extend_from_slice(&twox_128(b"MevShield")); + prefix.extend_from_slice(&twox_128(storage_name.as_bytes())); + + for i in 0..count { + let mut key = prefix.clone(); + key.extend_from_slice(&i.to_le_bytes()); + sp_io::storage::set(&key, &[1u8; 32]); + } + } + + fn count_keys(storage_name: &str) -> u32 { + let mut prefix = Vec::new(); + prefix.extend_from_slice(&twox_128(b"MevShield")); + prefix.extend_from_slice(&twox_128(storage_name.as_bytes())); + + let mut count = 0u32; + let mut next_key = sp_io::storage::next_key(&prefix); + while let Some(key) = next_key { + if !key.starts_with(&prefix) { + break; + } + count += 1; + next_key = sp_io::storage::next_key(&key); + } + count + } +} diff --git a/pallets/subtensor/Cargo.toml b/pallets/subtensor/Cargo.toml index 2e35a89d19..c8a4074a88 100644 --- a/pallets/subtensor/Cargo.toml +++ b/pallets/subtensor/Cargo.toml @@ -65,13 +65,15 @@ pallet-subtensor-swap.workspace = true sp-version.workspace = true # Substrate sp-tracing.workspace = true -rand.workspace = true +rand = { workspace = true, features = ["thread_rng"] } sp-core.workspace = true sp-std.workspace = true pallet-preimage.workspace = true tracing.workspace = true tracing-log.workspace = true tracing-subscriber = { workspace = true, features = ["fmt", "env-filter"] } +pallet-shield = { workspace = true, features = ["std"] } +sp-consensus-aura.workspace = true [features] try-runtime = [ @@ -87,7 +89,8 @@ try-runtime = [ "pallet-crowdloan/try-runtime", "pallet-drand/try-runtime", "pallet-subtensor-proxy/try-runtime", - "pallet-subtensor-utility/try-runtime" + "pallet-subtensor-utility/try-runtime", + "pallet-shield/try-runtime", ] default = ["std"] std = [ @@ -130,7 +133,10 @@ std = [ "scale-info/std", "serde/std", "serde_json/std", - "sha2/std" + "sha2/std", + "rand/std", + "pallet-shield/std", + "sp-consensus-aura/std", ] runtime-benchmarks = [ "frame-benchmarking/runtime-benchmarks", @@ -147,7 +153,8 @@ runtime-benchmarks = [ "pallet-drand/runtime-benchmarks", "pallet-subtensor-proxy/runtime-benchmarks", "pallet-subtensor-swap/runtime-benchmarks", - "pallet-subtensor-utility/runtime-benchmarks" + "pallet-subtensor-utility/runtime-benchmarks", + "pallet-shield/runtime-benchmarks" ] pow-faucet = [] fast-runtime = ["subtensor-runtime-common/fast-runtime"] diff --git a/pallets/subtensor/src/lib.rs b/pallets/subtensor/src/lib.rs index 6ae43ac384..cd295cb313 100644 --- a/pallets/subtensor/src/lib.rs +++ b/pallets/subtensor/src/lib.rs @@ -9,7 +9,6 @@ use frame_system::{self as system, ensure_signed}; pub use pallet::*; use codec::{Decode, Encode}; -use frame_support::sp_runtime::transaction_validity::InvalidTransaction; use frame_support::{ dispatch::{self, DispatchResult, DispatchResultWithPostInfo}, ensure, @@ -21,7 +20,7 @@ use pallet_balances::Call as BalancesCall; // use pallet_scheduler as Scheduler; use scale_info::TypeInfo; use sp_core::Get; -use sp_runtime::{DispatchError, transaction_validity::TransactionValidityError}; +use sp_runtime::DispatchError; use sp_std::marker::PhantomData; use subtensor_runtime_common::{AlphaCurrency, Currency, CurrencyReserve, NetUid, TaoCurrency}; @@ -2439,67 +2438,6 @@ pub mod pallet { } } -#[derive(Debug, PartialEq)] -pub enum CustomTransactionError { - ColdkeyInSwapSchedule, - StakeAmountTooLow, - BalanceTooLow, - SubnetNotExists, - HotkeyAccountDoesntExist, - NotEnoughStakeToWithdraw, - RateLimitExceeded, - InsufficientLiquidity, - SlippageTooHigh, - TransferDisallowed, - HotKeyNotRegisteredInNetwork, - InvalidIpAddress, - ServingRateLimitExceeded, - InvalidPort, - BadRequest, - ZeroMaxAmount, - InvalidRevealRound, - CommitNotFound, - CommitBlockNotInRevealRange, - InputLengthsUnequal, - UidNotFound, - EvmKeyAssociateRateLimitExceeded, -} - -impl From for u8 { - fn from(variant: CustomTransactionError) -> u8 { - match variant { - CustomTransactionError::ColdkeyInSwapSchedule => 0, - CustomTransactionError::StakeAmountTooLow => 1, - CustomTransactionError::BalanceTooLow => 2, - CustomTransactionError::SubnetNotExists => 3, - CustomTransactionError::HotkeyAccountDoesntExist => 4, - CustomTransactionError::NotEnoughStakeToWithdraw => 5, - CustomTransactionError::RateLimitExceeded => 6, - CustomTransactionError::InsufficientLiquidity => 7, - CustomTransactionError::SlippageTooHigh => 8, - CustomTransactionError::TransferDisallowed => 9, - CustomTransactionError::HotKeyNotRegisteredInNetwork => 10, - CustomTransactionError::InvalidIpAddress => 11, - CustomTransactionError::ServingRateLimitExceeded => 12, - CustomTransactionError::InvalidPort => 13, - CustomTransactionError::BadRequest => 255, - CustomTransactionError::ZeroMaxAmount => 14, - CustomTransactionError::InvalidRevealRound => 15, - CustomTransactionError::CommitNotFound => 16, - CustomTransactionError::CommitBlockNotInRevealRange => 17, - CustomTransactionError::InputLengthsUnequal => 18, - CustomTransactionError::UidNotFound => 19, - CustomTransactionError::EvmKeyAssociateRateLimitExceeded => 20, - } - } -} - -impl From for TransactionValidityError { - fn from(variant: CustomTransactionError) -> Self { - TransactionValidityError::Invalid(InvalidTransaction::Custom(variant.into())) - } -} - use sp_std::vec; // TODO: unravel this rats nest, for some reason rustc thinks this is unused even though it's diff --git a/pallets/subtensor/src/macros/dispatches.rs b/pallets/subtensor/src/macros/dispatches.rs index 5c5d5ed1a7..d4729b41ee 100644 --- a/pallets/subtensor/src/macros/dispatches.rs +++ b/pallets/subtensor/src/macros/dispatches.rs @@ -1083,8 +1083,8 @@ mod dispatches { /// Weight is calculated based on the number of database reads and writes. #[pallet::call_index(71)] #[pallet::weight(Weight::from_parts(161_700_000, 0) - .saturating_add(T::DbWeight::get().reads(16_u64)) - .saturating_add(T::DbWeight::get().writes(11_u64)))] + .saturating_add(T::DbWeight::get().reads(17_u64)) + .saturating_add(T::DbWeight::get().writes(10_u64)))] pub fn swap_coldkey( origin: OriginFor, old_coldkey: T::AccountId, diff --git a/pallets/subtensor/src/tests/consensus.rs b/pallets/subtensor/src/tests/consensus.rs index 454f41e2cf..dfa4e11f0e 100644 --- a/pallets/subtensor/src/tests/consensus.rs +++ b/pallets/subtensor/src/tests/consensus.rs @@ -9,7 +9,7 @@ use super::mock::*; use crate::*; use frame_support::assert_ok; -use rand::{Rng, SeedableRng, distributions::Uniform, rngs::StdRng, seq::SliceRandom, thread_rng}; +use rand::{RngExt, SeedableRng, distr::Uniform, rngs::StdRng, seq::SliceRandom}; use sp_core::U256; use std::time::Instant; use substrate_fixed::transcendental::{PI, cos, ln, sqrt}; @@ -111,7 +111,7 @@ fn distribute_nodes( } else if interleave == 2 { // random interleaving let mut permuted_uids: Vec = (0..network_n as u16).collect(); - permuted_uids.shuffle(&mut thread_rng()); + permuted_uids.shuffle(&mut rand::rng()); validators = permuted_uids[0..validators_n].into(); servers = permuted_uids[validators_n..network_n].into(); } @@ -207,7 +207,7 @@ fn init_run_epochs( // === Set weights let mut rng = StdRng::seed_from_u64(random_seed); // constant seed so weights over multiple runs are equal - let range = Uniform::new(0, u16::MAX); + let range = Uniform::new(0, u16::MAX).unwrap(); let mut weights: Vec = vec![u16::MAX / n; servers.len()]; for uid in validators { if random_weights { @@ -306,7 +306,7 @@ fn split_graph( let stddev: I32F32 = I32F32::from_num(0.3); let total_stake: I64F64 = I64F64::from_num(21_000_000_000_000_000_u64); let mut rng = StdRng::seed_from_u64(0); // constant seed so weights over multiple runs are equal - let dist = Uniform::new(0, u16::MAX); + let dist = Uniform::new(0, u16::MAX).unwrap(); let mut stake: Vec = vec![0; network_n]; let mut stake_fixed: Vec = vec![zero; network_n]; diff --git a/pallets/subtensor/src/tests/epoch.rs b/pallets/subtensor/src/tests/epoch.rs index 32f754f78d..c6312cc3ff 100644 --- a/pallets/subtensor/src/tests/epoch.rs +++ b/pallets/subtensor/src/tests/epoch.rs @@ -9,7 +9,7 @@ use std::time::Instant; use approx::assert_abs_diff_eq; use frame_support::{assert_err, assert_ok}; -use rand::{Rng, SeedableRng, distributions::Uniform, rngs::StdRng, seq::SliceRandom, thread_rng}; +use rand::{RngExt, SeedableRng, distr::Uniform, rngs::StdRng, seq::SliceRandom}; use sp_core::{Get, U256}; use substrate_fixed::types::I32F32; use subtensor_runtime_common::{AlphaCurrency, NetUidStorageIndex, TaoCurrency}; @@ -104,7 +104,7 @@ fn distribute_nodes( } else if interleave == 2 { // random interleaving let mut permuted_uids: Vec = (0..network_n as u16).collect(); - permuted_uids.shuffle(&mut thread_rng()); + permuted_uids.shuffle(&mut rand::rng()); validators = permuted_uids[0..validators_n].into(); servers = permuted_uids[validators_n..network_n].into(); } @@ -200,7 +200,7 @@ fn init_run_epochs( // === Set weights let mut rng = StdRng::seed_from_u64(random_seed); // constant seed so weights over multiple runs are equal - let range = Uniform::new(0, u16::MAX); + let range = Uniform::new(0, u16::MAX).unwrap(); let mut weights: Vec = vec![u16::MAX / n; servers.len()]; for uid in validators { if random_weights { diff --git a/pallets/subtensor/src/tests/evm.rs b/pallets/subtensor/src/tests/evm.rs index 6d668d738d..ae0acde27a 100644 --- a/pallets/subtensor/src/tests/evm.rs +++ b/pallets/subtensor/src/tests/evm.rs @@ -9,6 +9,7 @@ use super::mock::*; use crate::*; use frame_support::testing_prelude::*; use sp_core::{H160, Pair, U256, blake2_256, ecdsa, keccak_256}; +use std::convert::AsRef; fn public_to_evm_key(pubkey: &ecdsa::Public) -> H160 { use libsecp256k1::PublicKey; @@ -103,7 +104,11 @@ fn test_associate_evm_key_different_block_number_success() { let hashed_block_number = keccak_256(block_number.encode().as_ref()); let hotkey_bytes = hotkey.encode(); - let message = [hotkey_bytes.as_ref(), hashed_block_number.as_ref()].concat(); + let message = [ + hotkey_bytes.as_ref(), + <[u8; 32] as AsRef<[u8]>>::as_ref(&hashed_block_number), + ] + .concat(); let signature = sign_evm_message(&pair, message); assert_ok!(SubtensorModule::associate_evm_key( @@ -145,7 +150,11 @@ fn test_associate_evm_key_coldkey_does_not_own_hotkey() { let hashed_block_number = keccak_256(block_number.encode().as_ref()); let hotkey_bytes = hotkey.encode(); - let message = [hotkey_bytes.as_ref(), hashed_block_number.as_ref()].concat(); + let message = [ + hotkey_bytes.as_ref(), + <[u8; 32] as AsRef<[u8]>>::as_ref(&hashed_block_number), + ] + .concat(); let signature = sign_evm_message(&pair, message); assert_err!( @@ -182,7 +191,11 @@ fn test_associate_evm_key_hotkey_not_registered_in_subnet() { let hashed_block_number = keccak_256(block_number.encode().as_ref()); let hotkey_bytes = hotkey.encode(); - let message = [hotkey_bytes.as_ref(), hashed_block_number.as_ref()].concat(); + let message = [ + hotkey_bytes.as_ref(), + <[u8; 32] as AsRef<[u8]>>::as_ref(&hashed_block_number), + ] + .concat(); let signature = sign_evm_message(&pair, message); assert_err!( @@ -222,7 +235,11 @@ fn test_associate_evm_key_using_wrong_hash_function() { let hashed_block_number = keccak_256(block_number.encode().as_ref()); let hotkey_bytes = hotkey.encode(); - let message = [hotkey_bytes.as_ref(), hashed_block_number.as_ref()].concat(); + let message = [ + hotkey_bytes.as_ref(), + <[u8; 32] as AsRef<[u8]>>::as_ref(&hashed_block_number), + ] + .concat(); let hashed_message = blake2_256(message.as_ref()); let signature = pair.sign_prehashed(&hashed_message); @@ -262,7 +279,11 @@ fn test_associate_evm_key_rate_limit_exceeded() { let hashed_block_number = keccak_256(block_number.encode().as_ref()); let hotkey_bytes = hotkey.encode(); - let message = [hotkey_bytes.as_ref(), hashed_block_number.as_ref()].concat(); + let message = [ + hotkey_bytes.as_ref(), + <[u8; 32] as AsRef<[u8]>>::as_ref(&hashed_block_number), + ] + .concat(); let signature = sign_evm_message(&pair, message); // First association should succeed @@ -278,7 +299,11 @@ fn test_associate_evm_key_rate_limit_exceeded() { let block_number = frame_system::Pallet::::block_number(); let hashed_block_number = keccak_256(block_number.encode().as_ref()); let hotkey_bytes = hotkey.encode(); - let message = [hotkey_bytes.as_ref(), hashed_block_number.as_ref()].concat(); + let message = [ + hotkey_bytes.as_ref(), + <[u8; 32] as AsRef<[u8]>>::as_ref(&hashed_block_number), + ] + .concat(); let signature = sign_evm_message(&pair, message); // Second association should fail due to rate limit @@ -297,7 +322,11 @@ fn test_associate_evm_key_rate_limit_exceeded() { let block_number = frame_system::Pallet::::block_number(); let hashed_block_number = keccak_256(block_number.encode().as_ref()); let hotkey_bytes = hotkey.encode(); - let message = [hotkey_bytes.as_ref(), hashed_block_number.as_ref()].concat(); + let message = [ + hotkey_bytes.as_ref(), + <[u8; 32] as AsRef<[u8]>>::as_ref(&hashed_block_number), + ] + .concat(); let signature = sign_evm_message(&pair, message); assert_ok!(SubtensorModule::associate_evm_key( @@ -329,7 +358,11 @@ fn test_associate_evm_key_uid_not_found() { let hashed_block_number = keccak_256(block_number.encode().as_ref()); let hotkey_bytes = hotkey.encode(); - let message = [hotkey_bytes.as_ref(), hashed_block_number.as_ref()].concat(); + let message = [ + hotkey_bytes.as_ref(), + <[u8; 32] as AsRef<[u8]>>::as_ref(&hashed_block_number), + ] + .concat(); let signature = sign_evm_message(&pair, message); assert_noop!( diff --git a/pallets/subtensor/src/tests/math.rs b/pallets/subtensor/src/tests/math.rs index 6c6636ca68..6591d975b0 100644 --- a/pallets/subtensor/src/tests/math.rs +++ b/pallets/subtensor/src/tests/math.rs @@ -6,7 +6,7 @@ use substrate_fixed::types::{I32F32, I64F64}; use crate::epoch::math::*; -use rand::{Rng, seq::SliceRandom, thread_rng}; +use rand::{RngExt, seq::SliceRandom}; use substrate_fixed::{ transcendental::exp, types::{I96F32, I110F18}, @@ -1437,7 +1437,7 @@ fn test_math_col_clip_sparse() { #[test] fn test_math_weighted_median() { - let mut rng = thread_rng(); + let mut rng = rand::rng(); let zero: I32F32 = fixed(0.); let one: I32F32 = fixed(1.); for _ in 0..100 { @@ -1631,11 +1631,11 @@ fn test_math_weighted_median() { let mut last_score: I32F32 = zero; for i in 0..n { if allow_equal { - match rng.gen_range(0..2) { + match rng.random_range(0..2) { 1 => stake.push(one), _ => stake.push(zero), } - if rng.gen_range(0..2) == 1 { + if rng.random_range(0..2) == 1 { last_score += one } score.push(last_score); @@ -1681,7 +1681,7 @@ fn test_math_weighted_median() { assert!(medians.contains(&result)); for _ in 0..10 { let mut permuted_uids: Vec = (0..n).collect(); - permuted_uids.shuffle(&mut thread_rng()); + permuted_uids.shuffle(&mut rng); stake = permuted_uids.iter().map(|&i| stake[i]).collect(); score = permuted_uids.iter().map(|&i| score[i]).collect(); let result: I32F32 = diff --git a/pallets/subtensor/src/tests/registration.rs b/pallets/subtensor/src/tests/registration.rs index c82e173907..4719695199 100644 --- a/pallets/subtensor/src/tests/registration.rs +++ b/pallets/subtensor/src/tests/registration.rs @@ -9,12 +9,14 @@ use frame_support::{assert_err, assert_noop, assert_ok}; use frame_system::{Config, RawOrigin}; use sp_core::U256; use sp_runtime::traits::{DispatchInfoOf, TransactionExtension, TxBaseImplication}; -use subtensor_runtime_common::{AlphaCurrency, Currency as CurrencyT, NetUid, NetUidStorageIndex}; +use subtensor_runtime_common::{ + AlphaCurrency, Currency as CurrencyT, CustomTransactionError, NetUid, NetUidStorageIndex, +}; use super::mock; use super::mock::*; use crate::transaction_extension::SubtensorTransactionExtension; -use crate::{AxonInfoOf, CustomTransactionError, Error}; +use crate::{AxonInfoOf, Error}; /******************************************** subscribing::subscribe() tests diff --git a/pallets/subtensor/src/tests/serving.rs b/pallets/subtensor/src/tests/serving.rs index b52666bf26..ae29bd36f8 100644 --- a/pallets/subtensor/src/tests/serving.rs +++ b/pallets/subtensor/src/tests/serving.rs @@ -12,6 +12,7 @@ use frame_support::{ use frame_system::{Config, RawOrigin}; use sp_core::U256; use sp_runtime::traits::{DispatchInfoOf, TransactionExtension, TxBaseImplication}; +use subtensor_runtime_common::CustomTransactionError; mod test { use std::net::{Ipv4Addr, Ipv6Addr}; diff --git a/pallets/subtensor/src/tests/swap_coldkey.rs b/pallets/subtensor/src/tests/swap_coldkey.rs index 9d3bdbfc62..0702a64ee4 100644 --- a/pallets/subtensor/src/tests/swap_coldkey.rs +++ b/pallets/subtensor/src/tests/swap_coldkey.rs @@ -20,7 +20,9 @@ use sp_core::{Get, H256, U256}; use sp_runtime::traits::{DispatchInfoOf, TransactionExtension}; use sp_runtime::{DispatchError, traits::TxBaseImplication}; use substrate_fixed::types::U96F32; -use subtensor_runtime_common::{AlphaCurrency, Currency, SubnetInfo, TaoCurrency}; +use subtensor_runtime_common::{ + AlphaCurrency, Currency, CustomTransactionError, SubnetInfo, TaoCurrency, +}; use subtensor_swap_interface::{SwapEngine, SwapHandler}; use super::mock; diff --git a/pallets/subtensor/src/tests/weights.rs b/pallets/subtensor/src/tests/weights.rs index 20ace5ee0d..8d7a5d49c8 100644 --- a/pallets/subtensor/src/tests/weights.rs +++ b/pallets/subtensor/src/tests/weights.rs @@ -21,7 +21,7 @@ use sp_runtime::{ }; use sp_std::collections::vec_deque::VecDeque; use substrate_fixed::types::I32F32; -use subtensor_runtime_common::{NetUidStorageIndex, TaoCurrency}; +use subtensor_runtime_common::{CustomTransactionError, NetUidStorageIndex, TaoCurrency}; use subtensor_swap_interface::SwapHandler; use tle::{ curves::drand::TinyBLS381, diff --git a/pallets/subtensor/src/transaction_extension.rs b/pallets/subtensor/src/transaction_extension.rs index cf1d410ea9..d8ab764412 100644 --- a/pallets/subtensor/src/transaction_extension.rs +++ b/pallets/subtensor/src/transaction_extension.rs @@ -1,7 +1,4 @@ -use crate::{ - BalancesCall, Call, ColdkeySwapScheduled, Config, CustomTransactionError, Error, Pallet, - TransactionType, -}; +use crate::{BalancesCall, Call, ColdkeySwapScheduled, Config, Error, Pallet, TransactionType}; use codec::{Decode, DecodeWithMemTracking, Encode}; use frame_support::dispatch::{DispatchInfo, PostDispatchInfo}; use frame_support::pallet_prelude::Weight; @@ -17,7 +14,7 @@ use sp_runtime::transaction_validity::{ use sp_std::marker::PhantomData; use sp_std::vec::Vec; use subtensor_macros::freeze_struct; -use subtensor_runtime_common::{NetUid, NetUidStorageIndex}; +use subtensor_runtime_common::{CustomTransactionError, NetUid, NetUidStorageIndex}; #[freeze_struct("2e02eb32e5cb25d3")] #[derive(Default, Encode, Decode, DecodeWithMemTracking, Clone, Eq, PartialEq, TypeInfo)] diff --git a/pallets/subtensor/src/utils/evm.rs b/pallets/subtensor/src/utils/evm.rs index 88f856b25e..3363a9ade5 100644 --- a/pallets/subtensor/src/utils/evm.rs +++ b/pallets/subtensor/src/utils/evm.rs @@ -64,7 +64,11 @@ impl Pallet { Self::ensure_evm_key_associate_rate_limit(netuid, uid)?; let block_hash = keccak_256(block_number.encode().as_ref()); - let message = [hotkey.encode().as_ref(), block_hash.as_ref()].concat(); + let message = [ + hotkey.encode().as_ref(), + <[u8; 32] as AsRef<[u8]>>::as_ref(&block_hash), + ] + .concat(); let public = signature .recover_prehashed(&Self::hash_message_eip191(message)) .ok_or(Error::::InvalidIdentity)?; diff --git a/primitives/io/Cargo.toml b/primitives/io/Cargo.toml new file mode 100644 index 0000000000..d82921105c --- /dev/null +++ b/primitives/io/Cargo.toml @@ -0,0 +1,24 @@ +[package] +name = "stp-io" +description = "Subtensor runtime primitives for I/O" +version = "0.1.0" +edition.workspace = true + + +[dependencies] +codec.workspace = true +sp-runtime-interface.workspace = true +sp-externalities.workspace = true +stp-shield.workspace = true + +[lints] +workspace = true + +[features] +default = ["std"] +std = [ + "codec/std", + "sp-runtime-interface/std", + "sp-externalities/std", + "stp-shield/std", +] diff --git a/primitives/io/README.md b/primitives/io/README.md new file mode 100644 index 0000000000..84f28e3742 --- /dev/null +++ b/primitives/io/README.md @@ -0,0 +1,32 @@ +# stp-io + +`stp` = **Subtensor Primitive**. + +Host functions that allow the Subtensor runtime (Wasm) to call into the node's native code for operations that cannot run inside the sandbox. + +## Host functions + +### `crypto::mlkem768_decapsulate` + +Decapsulates an ML-KEM-768 ciphertext using the key material held in the node's `ShieldKeystore`. Writes the 32-byte shared secret into the caller-provided buffer. + +### `crypto::aead_decrypt` + +Decrypts an XChaCha20-Poly1305 ciphertext given a 32-byte key, 24-byte nonce, message, and optional AAD. Returns the plaintext bytes. + +## How it fits in + +The runtime cannot perform cryptographic operations directly because the secret keys live on the node side. `stp-io` bridges this gap: + +``` +Runtime (Wasm) Host (native) +───────────── ───────────── +pallet-shield ShieldKeystore + │ │ + ├─ mlkem768_decapsulate ─► ML-KEM decaps + └─ aead_decrypt ─────────► XChaCha20 decrypt +``` + +The host functions are registered via `SubtensorHostFunctions` and accessed through the `ShieldKeystoreExt` externalities extension from [`stp-shield`](https://github.com/opentensor/polkadot-sdk). + +`no_std`-compatible. diff --git a/primitives/io/src/lib.rs b/primitives/io/src/lib.rs new file mode 100644 index 0000000000..5cbdc8e7cc --- /dev/null +++ b/primitives/io/src/lib.rs @@ -0,0 +1,78 @@ +//! Subtensor Primitives for IO +//! +//! This crate contains interfaces for the runtime to communicate with the outside world, ergo `io`. +//! In other context, such interfaces are referred to as "**host functions**". +#![cfg_attr(not(feature = "std"), no_std)] + +extern crate alloc; + +use codec::{Decode, Encode}; +use sp_runtime_interface::{ + pass_by::{ + AllocateAndReturnByCodec, PassFatPointerAndRead, PassPointerAndRead, PassPointerAndWrite, + }, + runtime_interface, +}; +use stp_shield::ShieldKeystoreExt; + +use alloc::{ + string::{String, ToString}, + vec::Vec, +}; + +#[cfg(not(substrate_runtime))] +use sp_externalities::ExternalitiesExt; + +#[derive(Debug, Encode, Decode)] +pub enum Error { + Crypto(String), +} + +impl core::fmt::Display for Error { + fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result { + match self { + Error::Crypto(e) => write!(f, "Crypto error: {}", e), + } + } +} + +/// Interfaces for working with crypto withing the runtime. +#[runtime_interface] +pub trait Crypto { + /// Decapsulate a ciphertext using the ML-KEM-768 algorithm. + #[allow(clippy::expect_used)] + fn mlkem768_decapsulate( + &mut self, + ciphertext: PassFatPointerAndRead<&[u8]>, + buffer: PassPointerAndWrite<&mut [u8; 32], 32>, + ) -> AllocateAndReturnByCodec> { + let result = &self + .extension::() + .expect("No `shield keystore` associated for the current context!") + .mlkem768_decapsulate(ciphertext) + .map_err(|e| Error::Crypto(e.to_string()))?; + buffer.copy_from_slice(result); + Ok(()) + } + + /// Decrypt a ciphertext using the XChaCha20-Poly1305 AEAD scheme. + #[allow(clippy::expect_used)] + fn aead_decrypt( + &mut self, + key: PassPointerAndRead<&[u8; 32], 32>, + nonce: PassPointerAndRead<&[u8; 24], 24>, + msg: PassFatPointerAndRead<&[u8]>, + aad: PassFatPointerAndRead<&[u8]>, + ) -> AllocateAndReturnByCodec, Error>> { + self.extension::() + .expect("No `shield keystore` associated for the current context!") + .aead_decrypt(*key, *nonce, msg, aad) + .map_err(|e| Error::Crypto(e.to_string())) + } +} + +/// The host functions Subtensor provides for the Wasm runtime environment. +/// +/// All these host functions will be callable from inside the Wasm environment. +#[cfg(not(substrate_runtime))] +pub type SubtensorHostFunctions = (crypto::HostFunctions,); diff --git a/runtime/Cargo.toml b/runtime/Cargo.toml index b3aced2160..17061e3292 100644 --- a/runtime/Cargo.toml +++ b/runtime/Cargo.toml @@ -58,6 +58,8 @@ sp-version.workspace = true sp-authority-discovery.workspace = true subtensor-runtime-common.workspace = true subtensor-precompiles.workspace = true +sp-debug-derive = { workspace = true, features = [] } +stp-io.workspace = true # Temporary sudo pallet-sudo.workspace = true @@ -138,7 +140,6 @@ fp-account.workspace = true #drand pallet-drand.workspace = true -getrandom.workspace = true tle.workspace = true hex.workspace = true rand_chacha.workspace = true @@ -151,6 +152,7 @@ pallet-crowdloan.workspace = true # Mev Shield pallet-shield.workspace = true +stp-shield.workspace = true ethereum.workspace = true @@ -255,7 +257,6 @@ std = [ "pallet-hotfix-sufficients/std", "fp-account/std", "pallet-drand/std", - "getrandom/std", "tle/std", "ark-serialize/std", "hex/std", @@ -275,6 +276,9 @@ std = [ "subtensor-chain-extensions/std", "ethereum/std", "pallet-shield/std", + "stp-shield/std", + "stp-io/std", + "sp-debug-derive/std", ] runtime-benchmarks = [ "frame-benchmarking/runtime-benchmarks", diff --git a/runtime/src/lib.rs b/runtime/src/lib.rs index 0d046da5d7..ff293f0ac1 100644 --- a/runtime/src/lib.rs +++ b/runtime/src/lib.rs @@ -70,6 +70,7 @@ use sp_std::prelude::*; #[cfg(feature = "std")] use sp_version::NativeVersion; use sp_version::RuntimeVersion; +use stp_shield::ShieldedTransaction; use subtensor_precompiles::Precompiles; use subtensor_runtime_common::{AlphaCurrency, TaoCurrency, time::*, *}; use subtensor_swap_interface::{Order, SwapHandler}; @@ -123,9 +124,28 @@ impl frame_system::offchain::SigningTypes for Runtime { type Signature = Signature; } +pub struct FindAuraAuthors; +impl pallet_shield::FindAuthors for FindAuraAuthors { + fn find_current_author() -> Option { + let slot = Aura::current_slot_from_digests()?; + let authorities = pallet_aura::Authorities::::get().into_inner(); + let author_index = *slot % authorities.len() as u64; + + authorities.get(author_index as usize).cloned() + } + + fn find_next_author() -> Option { + let next_slot = Aura::current_slot_from_digests()?.checked_add(1)?; + let authorities = pallet_aura::Authorities::::get().into_inner(); + let next_author_index = next_slot % authorities.len() as u64; + + authorities.get(next_author_index as usize).cloned() + } +} + impl pallet_shield::Config for Runtime { - type RuntimeCall = RuntimeCall; - type AuthorityOrigin = pallet_shield::EnsureAuraAuthority; + type AuthorityId = AuraId; + type FindAuthors = FindAuraAuthors; } parameter_types! { @@ -165,21 +185,23 @@ impl frame_system::offchain::CreateSignedTransaction use sp_runtime::traits::StaticLookup; let address = ::Lookup::unlookup(account.clone()); - let extra: TransactionExtensions = ( - frame_system::CheckNonZeroSender::::new(), - frame_system::CheckSpecVersion::::new(), - frame_system::CheckTxVersion::::new(), - frame_system::CheckGenesis::::new(), - frame_system::CheckEra::::from(Era::Immortal), - check_nonce::CheckNonce::::from(nonce).into(), - frame_system::CheckWeight::::new(), - ChargeTransactionPaymentWrapper::new( - pallet_transaction_payment::ChargeTransactionPayment::::from(0), + let extra: TxExtension = ( + ( + frame_system::CheckNonZeroSender::::new(), + frame_system::CheckSpecVersion::::new(), + frame_system::CheckTxVersion::::new(), + frame_system::CheckGenesis::::new(), + frame_system::CheckEra::::from(Era::Immortal), + check_nonce::CheckNonce::::from(nonce).into(), + frame_system::CheckWeight::::new(), ), - SudoTransactionExtension::::new(), - pallet_subtensor::transaction_extension::SubtensorTransactionExtension::::new( + ( + ChargeTransactionPaymentWrapper::new(0), + SudoTransactionExtension::::new(), + pallet_shield::CheckShieldedTxValidity::::new(), + pallet_subtensor::transaction_extension::SubtensorTransactionExtension::::new(), + pallet_drand::drand_priority::DrandPriority::::new(), ), - pallet_drand::drand_priority::DrandPriority::::new(), frame_metadata_hash_extension::CheckMetadataHash::::new(true), ); @@ -241,7 +263,7 @@ pub const VERSION: RuntimeVersion = RuntimeVersion { // `spec_version`, and `authoring_version` are the same between Wasm and native. // This value is set to 100 to notify Polkadot-JS App (https://polkadot.js.org/apps) to use // the compatible custom types. - spec_version: 382, + spec_version: 383, impl_version: 1, apis: RUNTIME_API_VERSIONS, transaction_version: 1, @@ -1608,7 +1630,7 @@ pub type Header = generic::Header; // Block type as expected by this runtime. pub type Block = generic::Block; // The extensions to the basic transaction logic. -pub type TransactionExtensions = ( +pub type SystemTxExtension = ( frame_system::CheckNonZeroSender, frame_system::CheckSpecVersion, frame_system::CheckTxVersion, @@ -1616,10 +1638,17 @@ pub type TransactionExtensions = ( frame_system::CheckEra, check_nonce::CheckNonce, frame_system::CheckWeight, +); +pub type CustomTxExtension = ( ChargeTransactionPaymentWrapper, SudoTransactionExtension, + pallet_shield::CheckShieldedTxValidity, pallet_subtensor::transaction_extension::SubtensorTransactionExtension, pallet_drand::drand_priority::DrandPriority, +); +pub type TxExtension = ( + SystemTxExtension, + CustomTxExtension, frame_metadata_hash_extension::CheckMetadataHash, ); @@ -1633,19 +1662,22 @@ type Migrations = ( // Unchecked extrinsic type as expected by this runtime. pub type UncheckedExtrinsic = - fp_self_contained::UncheckedExtrinsic; + fp_self_contained::UncheckedExtrinsic; /// Extrinsic type that has already been checked. pub type CheckedExtrinsic = - fp_self_contained::CheckedExtrinsic; + fp_self_contained::CheckedExtrinsic; // The payload being signed in transactions. -pub type SignedPayload = generic::SignedPayload; +pub type SignedPayload = generic::SignedPayload; + +// Chain context for the executive. +pub type ChainContext = frame_system::ChainContext; // Executive: handles dispatch to the various modules. pub type Executive = frame_executive::Executive< Runtime, Block, - frame_system::ChainContext, + ChainContext, Runtime, AllPalletsWithSystem, Migrations, @@ -2551,6 +2583,16 @@ impl_runtime_apis! { ) } } + + impl stp_shield::ShieldApi for Runtime { + fn try_decode_shielded_tx(uxt: ::Extrinsic) -> Option { + MevShield::try_decode_shielded_tx::(uxt) + } + + fn try_unshield_tx(shielded_tx: ShieldedTransaction) -> Option<::Extrinsic> { + MevShield::try_unshield_tx::(shielded_tx) + } + } } #[test] diff --git a/runtime/src/transaction_payment_wrapper.rs b/runtime/src/transaction_payment_wrapper.rs index 96d7f3609b..c59e3dbba1 100644 --- a/runtime/src/transaction_payment_wrapper.rs +++ b/runtime/src/transaction_payment_wrapper.rs @@ -3,6 +3,7 @@ use codec::{Decode, DecodeWithMemTracking, Encode}; use frame_election_provider_support::private::sp_arithmetic::traits::SaturatedConversion; use frame_support::dispatch::{DispatchClass, DispatchInfo, PostDispatchInfo}; use frame_support::pallet_prelude::TypeInfo; +use pallet_transaction_payment::OnChargeTransaction; use pallet_transaction_payment::{ChargeTransactionPayment, Config, Pre, Val}; use sp_runtime::DispatchResult; use sp_runtime::traits::{ @@ -15,11 +16,13 @@ use sp_runtime::transaction_validity::{ use sp_std::vec::Vec; use subtensor_macros::freeze_struct; -#[freeze_struct("5f10cb9db06873c0")] +type BalanceOf = <::OnChargeTransaction as OnChargeTransaction>::Balance; + +#[freeze_struct("f003cde1f9da4a90")] #[derive(Encode, Decode, DecodeWithMemTracking, Clone, Eq, PartialEq, TypeInfo)] #[scale_info(skip_type_params(T))] pub struct ChargeTransactionPaymentWrapper { - charge_transaction_payment: ChargeTransactionPayment, + inner: ChargeTransactionPayment, } impl core::fmt::Debug for ChargeTransactionPaymentWrapper { @@ -33,11 +36,14 @@ impl core::fmt::Debug for ChargeTransactionPaymentWrapper { } } -impl ChargeTransactionPaymentWrapper { - pub fn new(charge_transaction_payment: ChargeTransactionPayment) -> Self { - Self { - charge_transaction_payment, - } +impl ChargeTransactionPaymentWrapper +where + T::RuntimeCall: Dispatchable, + BalanceOf: Send + Sync, +{ + pub fn new(fee: BalanceOf) -> Self { + let inner = ChargeTransactionPayment::::from(fee); + Self { inner } } } @@ -51,7 +57,7 @@ where type Pre = Pre; fn weight(&self, call: &T::RuntimeCall) -> Weight { - self.charge_transaction_payment.weight(call) + self.inner.weight(call) } fn validate( @@ -64,7 +70,7 @@ where inherited_implication: &impl Implication, source: TransactionSource, ) -> ValidateResult { - let inner_validate = self.charge_transaction_payment.validate( + let inner_validate = self.inner.validate( origin, call, info, @@ -101,8 +107,7 @@ where info: &DispatchInfoOf, len: usize, ) -> Result { - self.charge_transaction_payment - .prepare(val, origin, call, info, len) + self.inner.prepare(val, origin, call, info, len) } fn metadata() -> Vec { ChargeTransactionPayment::::metadata() diff --git a/scripts/fix_rust.sh b/scripts/fix_rust.sh index 08e983a432..811eb86bca 100755 --- a/scripts/fix_rust.sh +++ b/scripts/fix_rust.sh @@ -12,15 +12,15 @@ commit_if_changes() { } # Step 1: Run cargo check and commit changes to Cargo.lock if any -cargo check --workspace +SKIP_WASM_BUILD=1 cargo check --workspace commit_if_changes "commit Cargo.lock" # Step 2: Run cargo clippy with fixes and commit changes if any. -cargo clippy --fix --workspace --all-features --all-targets +SKIP_WASM_BUILD=1 cargo clippy --fix --workspace --all-features --all-targets commit_if_changes "cargo clippy" # Step 3: Run cargo fix and commit changes if any. -cargo fix --workspace --all-features --all-targets +SKIP_WASM_BUILD=1 cargo fix --workspace --all-features --all-targets commit_if_changes "cargo fix" # Step 4: Run cargo fmt and commit changes if any.