diff --git a/Cargo.lock b/Cargo.lock index b0ee0ea4c6fb..96ca31f11d59 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -138,9 +138,9 @@ dependencies = [ [[package]] name = "alloy-rlp" -version = "0.3.4" +version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d58d9f5da7b40e9bfff0b7e7816700be4019db97d4b6359fe7f94a9e22e42ac" +checksum = "b155716bab55763c95ba212806cf43d05bcc70e5f35b02bad20cf5ec7fe11fed" dependencies = [ "arrayvec 0.7.4", "bytes", @@ -156,9 +156,9 @@ dependencies = [ "dunce", "heck 0.4.1", "proc-macro-error", - "proc-macro2 1.0.82", + "proc-macro2 1.0.85", "quote 1.0.36", - "syn 2.0.61", + "syn 2.0.66", "syn-solidity", "tiny-keccak", ] @@ -262,9 +262,9 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.83" +version = "1.0.86" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25bdb32cbbdce2b519a9cd7df3a678443100e265d5e25ca763b7572a5104f5f3" +checksum = "b3d1d046238990b9cf5bcde22a3fb3584ee5cf65fb2765f454ed428c7a0063da" [[package]] name = "approx" @@ -284,9 +284,9 @@ dependencies = [ "include_dir", "itertools 0.10.5", "proc-macro-error", - "proc-macro2 1.0.82", + "proc-macro2 1.0.85", "quote 1.0.36", - "syn 2.0.61", + "syn 2.0.66", ] [[package]] @@ -515,7 +515,7 @@ checksum = "7abe79b0e4288889c4574159ab790824d0033b9fdcb2a112a3182fac2e514565" dependencies = [ "num-bigint", "num-traits", - "proc-macro2 1.0.82", + "proc-macro2 1.0.85", "quote 1.0.36", "syn 1.0.109", ] @@ -603,7 +603,7 @@ version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ae3281bc6d0fd7e549af32b52511e1302185bd688fd3359fa36423346ff682ea" dependencies = [ - "proc-macro2 1.0.82", + "proc-macro2 1.0.85", "quote 1.0.36", "syn 1.0.109", ] @@ -644,9 +644,9 @@ dependencies = [ [[package]] name = "array-bytes" -version = "6.2.2" +version = "6.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f840fb7195bcfc5e17ea40c26e5ce6d5b9ce5d584466e17703209657e459ae0" +checksum = "5d5dde061bd34119e902bbb2d9b90c5692635cf59fb91d582c2b68043f1b8293" [[package]] name = "arrayref" @@ -691,7 +691,7 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "726535892e8eae7e70657b4c8ea93d26b8553afb1ce617caee529ef96d7dee6c" dependencies = [ - "proc-macro2 1.0.82", + "proc-macro2 1.0.85", "quote 1.0.36", "syn 1.0.109", "synstructure", @@ -703,7 +703,7 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2777730b2039ac0f95f093556e61b6d26cebed5393ca6f152717777cec3a42ed" dependencies = [ - "proc-macro2 1.0.82", + "proc-macro2 1.0.85", "quote 1.0.36", "syn 1.0.109", ] @@ -1061,22 +1061,21 @@ dependencies = [ [[package]] name = "async-channel" -version = "2.2.1" +version = "2.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "136d4d23bcc79e27423727b36823d86233aad06dfea531837b038394d11e9928" +checksum = "89b47800b0be77592da0afd425cc03468052844aff33b84e33cc696f64e77b6a" dependencies = [ "concurrent-queue", - "event-listener 5.3.0", - "event-listener-strategy 0.5.2", + "event-listener-strategy", "futures-core", "pin-project-lite 0.2.14", ] [[package]] name = "async-executor" -version = "1.11.0" +version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b10202063978b3351199d68f8b22c4e47e4b1b822f8d43fd862d5ea8c006b29a" +checksum = "c8828ec6e544c02b0d6691d21ed9f9218d0384a82542855073c2a3f58304aaf0" dependencies = [ "async-task", "concurrent-queue", @@ -1103,10 +1102,10 @@ version = "2.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "05b1b633a2115cd122d73b955eadd9916c18c8f510ec9cd1686404c60ad1c29c" dependencies = [ - "async-channel 2.2.1", + "async-channel 2.3.1", "async-executor", - "async-io 2.3.2", - "async-lock 3.3.0", + "async-io 2.3.3", + "async-lock 3.4.0", "blocking", "futures-lite 2.3.0", "once_cell", @@ -1134,17 +1133,17 @@ dependencies = [ [[package]] name = "async-io" -version = "2.3.2" +version = "2.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dcccb0f599cfa2f8ace422d3555572f47424da5648a4382a9dd0310ff8210884" +checksum = "0d6baa8f0178795da0e71bc42c9e5d13261aac7ee549853162e66a241ba17964" dependencies = [ - "async-lock 3.3.0", + "async-lock 3.4.0", "cfg-if", "concurrent-queue", "futures-io", "futures-lite 2.3.0", "parking", - "polling 3.7.0", + "polling 3.7.1", "rustix 0.38.34", "slab", "tracing", @@ -1162,12 +1161,12 @@ dependencies = [ [[package]] name = "async-lock" -version = "3.3.0" +version = "3.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d034b430882f8381900d3fe6f0aaa3ad94f2cb4ac519b429692a1bc2dda4ae7b" +checksum = "ff6e472cdea888a4bd64f342f09b3f50e1886d32afe8df3d663c01140b811b18" dependencies = [ - "event-listener 4.0.3", - "event-listener-strategy 0.4.0", + "event-listener 5.3.1", + "event-listener-strategy", "pin-project-lite 0.2.14", ] @@ -1201,12 +1200,12 @@ dependencies = [ [[package]] name = "async-signal" -version = "0.2.6" +version = "0.2.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "afe66191c335039c7bb78f99dc7520b0cbb166b3a1cb33a03f53d8a1c6f2afda" +checksum = "329972aa325176e89114919f2a80fdae4f4c040f66a370b1a1159c6c0f94e7aa" dependencies = [ - "async-io 2.3.2", - "async-lock 3.3.0", + "async-io 2.3.3", + "async-lock 3.4.0", "atomic-waker", "cfg-if", "futures-core", @@ -1261,9 +1260,9 @@ version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "16e62a023e7c117e27523144c5d2459f4397fcc3cab0085af8e2224f643a0193" dependencies = [ - "proc-macro2 1.0.82", + "proc-macro2 1.0.85", "quote 1.0.36", - "syn 2.0.61", + "syn 2.0.66", ] [[package]] @@ -1278,9 +1277,9 @@ version = "0.1.80" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c6fa2087f2753a7da8cc1c0dbfcf89579dd57458e36769de5ac750b4671737ca" dependencies = [ - "proc-macro2 1.0.82", + "proc-macro2 1.0.85", "quote 1.0.36", - "syn 2.0.61", + "syn 2.0.66", ] [[package]] @@ -1325,9 +1324,9 @@ version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3c87f3f15e7794432337fc718554eaa4dc8f04c9677a950ffe366f20a162ae42" dependencies = [ - "proc-macro2 1.0.82", + "proc-macro2 1.0.85", "quote 1.0.36", - "syn 2.0.61", + "syn 2.0.66", ] [[package]] @@ -1464,12 +1463,12 @@ dependencies = [ "lazycell", "peeking_take_while", "prettyplease 0.2.20", - "proc-macro2 1.0.82", + "proc-macro2 1.0.85", "quote 1.0.36", "regex", "rustc-hash", "shlex", - "syn 2.0.61", + "syn 2.0.66", ] [[package]] @@ -1631,12 +1630,11 @@ dependencies = [ [[package]] name = "blocking" -version = "1.6.0" +version = "1.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "495f7104e962b7356f0aeb34247aca1fe7d2e783b346582db7f2904cb5717e88" +checksum = "703f41c54fc768e63e091340b424302bb1c29ef4aa0c7f10fe849dfb114d29ea" dependencies = [ - "async-channel 2.2.1", - "async-lock 3.3.0", + "async-channel 2.3.1", "async-task", "futures-io", "futures-lite 2.3.0", @@ -2391,9 +2389,9 @@ checksum = "e3b5ca7a04898ad4bcd41c90c5285445ff5b791899bb1b0abdd2a2aa791211d7" [[package]] name = "bytemuck" -version = "1.15.0" +version = "1.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d6d68c57235a3a081186990eca2867354726650f42f7516ca50c28d6281fd15" +checksum = "78834c15cb5d5efe3452d58b1e8ba890dd62d21907f867f383358198e56ebca5" [[package]] name = "byteorder" @@ -2430,9 +2428,9 @@ dependencies = [ [[package]] name = "camino" -version = "1.1.6" +version = "1.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c59e92b5a388f549b863a7bea62612c09f24c8393560709a54558a9abdfb3b9c" +checksum = "e0ec6b951b160caa93cc0c7b209e5a3bff7aae9062213451ac99493cd844c239" dependencies = [ "serde", ] @@ -2474,9 +2472,9 @@ checksum = "a2698f953def977c68f935bb0dfa959375ad4638570e969e2f1e9f433cbf1af6" [[package]] name = "cc" -version = "1.0.97" +version = "1.0.98" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "099a5357d84c4c61eb35fc8eafa9a79a902c2f76911e5747ced4e032edd8d9b4" +checksum = "41c270e7540d725e65ac7f1b212ac8ce349719624d7bcff99f8e2e488e8cf03f" dependencies = [ "jobserver", "libc", @@ -2645,9 +2643,9 @@ dependencies = [ [[package]] name = "clang-sys" -version = "1.7.0" +version = "1.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67523a3b4be3ce1989d607a828d036249522dd9c1c8de7f4dd2dae43a37369d1" +checksum = "0b023947811758c97c59bf9d1c188fd619ad4718dcaa767947df1cadb14f39f4" dependencies = [ "glob", "libc", @@ -2735,7 +2733,7 @@ checksum = "ae6371b8bdc8b7d3959e9cf7b22d4435ef3e79e138688421ec654acf8c81b008" dependencies = [ "heck 0.4.1", "proc-macro-error", - "proc-macro2 1.0.82", + "proc-macro2 1.0.85", "quote 1.0.36", "syn 1.0.109", ] @@ -2747,9 +2745,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "528131438037fd55894f62d6e9f068b8f45ac57ffa77517819645d10aed04f64" dependencies = [ "heck 0.5.0", - "proc-macro2 1.0.82", + "proc-macro2 1.0.85", "quote 1.0.36", - "syn 2.0.61", + "syn 2.0.66", ] [[package]] @@ -2936,9 +2934,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "77ff1a80c5f3cb1ca7c06ffdd71b6a6dd6d8f896c42141fbd43f50ed28dcdb93" dependencies = [ "nom", - "proc-macro2 1.0.82", + "proc-macro2 1.0.85", "quote 1.0.36", - "syn 2.0.61", + "syn 2.0.66", ] [[package]] @@ -2974,7 +2972,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b34115915337defe99b2aff5c2ce6771e5fbc4079f4b506301f5cf394c8452f7" dependencies = [ "strum 0.26.2", - "strum_macros 0.26.2", + "strum_macros 0.26.3", "unicode-width", ] @@ -3034,9 +3032,9 @@ dependencies = [ [[package]] name = "const-hex" -version = "1.11.3" +version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ba00838774b4ab0233e355d26710fbfc8327a05c017f6dc4873f876d1f79f78" +checksum = "94fb8a24a26d37e1ffd45343323dc9fe6654ceea44c12f2fcb3d7ac29e610bc6" dependencies = [ "cfg-if", "cpufeatures", @@ -3465,9 +3463,9 @@ checksum = "19d374276b40fb8bbdee95aef7c7fa6b5316ec764510eb64b8dd0e2ed0d7e7f5" [[package]] name = "crc32fast" -version = "1.4.0" +version = "1.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b3855a8a784b474f333699ef2bbca9db2c4a1f6d9088a90a2d25b1eb53111eaa" +checksum = "a97769d94ddab943e4510d138150169a2758b5ef3eb191a9ee688de3e23ef7b3" dependencies = [ "cfg-if", ] @@ -3540,9 +3538,9 @@ dependencies = [ [[package]] name = "crossbeam-utils" -version = "0.8.19" +version = "0.8.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "248e3bacc7dc6baa3b21e405ee045c3047101a49145e7e9eca583ab4c2ca5345" +checksum = "22ec99545bb0ed0ea7bb9b8e1e9122ea386ff8a48c0922e43f36d45ab09e0e80" [[package]] name = "crunchy" @@ -3631,7 +3629,7 @@ dependencies = [ "cumulus-test-runtime", "futures", "parity-scale-codec", - "parking_lot 0.12.2", + "parking_lot 0.12.3", "polkadot-node-primitives", "polkadot-node-subsystem", "polkadot-node-subsystem-test-helpers", @@ -3744,7 +3742,7 @@ dependencies = [ "cumulus-primitives-core", "cumulus-relay-chain-interface", "futures", - "parking_lot 0.12.2", + "parking_lot 0.12.3", "sc-consensus", "sp-api", "sp-block-builder", @@ -3769,7 +3767,7 @@ dependencies = [ "futures", "futures-timer", "parity-scale-codec", - "parking_lot 0.12.2", + "parking_lot 0.12.3", "polkadot-node-primitives", "polkadot-parachain-primitives", "polkadot-primitives", @@ -3967,9 +3965,9 @@ name = "cumulus-pallet-parachain-system-proc-macro" version = "0.6.0" dependencies = [ "proc-macro-crate 3.1.0", - "proc-macro2 1.0.82", + "proc-macro2 1.0.85", "quote 1.0.36", - "syn 2.0.61", + "syn 2.0.66", ] [[package]] @@ -4219,7 +4217,7 @@ dependencies = [ "cumulus-relay-chain-interface", "cumulus-relay-chain-rpc-interface", "futures", - "parking_lot 0.12.2", + "parking_lot 0.12.3", "polkadot-availability-recovery", "polkadot-collator-protocol", "polkadot-core-primitives", @@ -4528,9 +4526,9 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3" dependencies = [ - "proc-macro2 1.0.82", + "proc-macro2 1.0.85", "quote 1.0.36", - "syn 2.0.61", + "syn 2.0.66", ] [[package]] @@ -4567,10 +4565,10 @@ dependencies = [ "cc", "codespan-reporting", "once_cell", - "proc-macro2 1.0.82", + "proc-macro2 1.0.85", "quote 1.0.36", "scratch", - "syn 2.0.61", + "syn 2.0.66", ] [[package]] @@ -4585,9 +4583,9 @@ version = "1.0.122" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "928bc249a7e3cd554fd2e8e08a426e9670c50bbfc9a621653cfa9accc9641783" dependencies = [ - "proc-macro2 1.0.82", + "proc-macro2 1.0.85", "quote 1.0.36", - "syn 2.0.61", + "syn 2.0.66", ] [[package]] @@ -4677,7 +4675,7 @@ version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b" dependencies = [ - "proc-macro2 1.0.82", + "proc-macro2 1.0.85", "quote 1.0.36", "syn 1.0.109", ] @@ -4688,7 +4686,7 @@ version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e79116f119dd1dba1abf1f3405f03b9b0e79a27a3883864bfebded8a3dc768cd" dependencies = [ - "proc-macro2 1.0.82", + "proc-macro2 1.0.85", "quote 1.0.36", "syn 1.0.109", ] @@ -4699,9 +4697,9 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d65d7ce8132b7c0e54497a4d9a55a1c2a0912a0d786cf894472ba818fba45762" dependencies = [ - "proc-macro2 1.0.82", + "proc-macro2 1.0.85", "quote 1.0.36", - "syn 2.0.61", + "syn 2.0.66", ] [[package]] @@ -4711,7 +4709,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4fb810d30a7c1953f91334de7244731fc3f3c10d7fe163338a35b9f640960321" dependencies = [ "convert_case", - "proc-macro2 1.0.82", + "proc-macro2 1.0.85", "quote 1.0.36", "rustc_version 0.4.0", "syn 1.0.109", @@ -4807,9 +4805,9 @@ version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "487585f4d0c6655fe74905e2504d8ad6908e4db67f744eb140876906c2f3175d" dependencies = [ - "proc-macro2 1.0.82", + "proc-macro2 1.0.85", "quote 1.0.36", - "syn 2.0.61", + "syn 2.0.66", ] [[package]] @@ -4869,12 +4867,12 @@ dependencies = [ "common-path", "derive-syn-parse 0.2.0", "once_cell", - "proc-macro2 1.0.82", + "proc-macro2 1.0.85", "quote 1.0.36", "regex", - "syn 2.0.61", + "syn 2.0.66", "termcolor", - "toml 0.8.12", + "toml 0.8.13", "walkdir", ] @@ -4918,7 +4916,7 @@ version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "558e40ea573c374cf53507fd240b7ee2f5477df7cfebdb97323ec61c719399c5" dependencies = [ - "proc-macro2 1.0.82", + "proc-macro2 1.0.85", "quote 1.0.36", "syn 1.0.109", ] @@ -5009,9 +5007,9 @@ dependencies = [ [[package]] name = "either" -version = "1.11.0" +version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a47c1c47d2f5964e29c61246e81db715514cd532db6b5116a25ea3c03d6780a2" +checksum = "3dca9240753cf90908d7e4aac30f630662b02aebaa1b58a3cadabdb23385b58b" [[package]] name = "elliptic-curve" @@ -5087,7 +5085,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c9720bba047d567ffc8a3cba48bf19126600e249ab7f128e9233e6376976a116" dependencies = [ "heck 0.4.1", - "proc-macro2 1.0.82", + "proc-macro2 1.0.85", "quote 1.0.36", "syn 1.0.109", ] @@ -5099,9 +5097,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5ffccbb6966c05b32ef8fbac435df276c4ae4d3dc55a8cd0eb9745e6c12f546a" dependencies = [ "heck 0.4.1", - "proc-macro2 1.0.82", + "proc-macro2 1.0.85", "quote 1.0.36", - "syn 2.0.61", + "syn 2.0.66", ] [[package]] @@ -5119,9 +5117,9 @@ version = "0.7.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5c785274071b1b420972453b306eeca06acf4633829db4223b58a2a8c5953bc4" dependencies = [ - "proc-macro2 1.0.82", + "proc-macro2 1.0.85", "quote 1.0.36", - "syn 2.0.61", + "syn 2.0.66", ] [[package]] @@ -5130,9 +5128,9 @@ version = "0.1.13" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6fd000fd6988e73bbe993ea3db9b1aa64906ab88766d654973924340c8cddb42" dependencies = [ - "proc-macro2 1.0.82", + "proc-macro2 1.0.85", "quote 1.0.36", - "syn 2.0.61", + "syn 2.0.66", ] [[package]] @@ -5223,11 +5221,12 @@ dependencies = [ [[package]] name = "erased-serde" -version = "0.4.4" +version = "0.4.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b73807008a3c7f171cc40312f37d95ef0396e048b5848d775f54b1a4dd4a0d3" +checksum = "24e2389d65ab4fab27dc2a5de7b191e1f6617d1f1c8855c0dc569c94a4cbb18d" dependencies = [ "serde", + "typeid", ] [[package]] @@ -5242,9 +5241,9 @@ dependencies = [ [[package]] name = "errno" -version = "0.3.8" +version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a258e46cdc063eb8519c00b9fc845fc47bcfca4130e2f08e88665ceda8474245" +checksum = "534c5cf6194dfab3db3242765c03bbe257cf92f22b38f6bc0c58d59108a820ba" dependencies = [ "libc", "windows-sys 0.52.0", @@ -5310,43 +5309,22 @@ dependencies = [ [[package]] name = "event-listener" -version = "4.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67b215c49b2b248c855fb73579eb1f4f26c38ffdc12973e20e07b91d78d5646e" -dependencies = [ - "concurrent-queue", - "parking", - "pin-project-lite 0.2.14", -] - -[[package]] -name = "event-listener" -version = "5.3.0" +version = "5.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d9944b8ca13534cdfb2800775f8dd4902ff3fc75a50101466decadfdf322a24" +checksum = "6032be9bd27023a771701cc49f9f053c751055f71efb2e0ae5c15809093675ba" dependencies = [ "concurrent-queue", "parking", "pin-project-lite 0.2.14", ] -[[package]] -name = "event-listener-strategy" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "958e4d70b6d5e81971bebec42271ec641e7ff4e170a6fa605f2b8a8b65cb97d3" -dependencies = [ - "event-listener 4.0.3", - "pin-project-lite 0.2.14", -] - [[package]] name = "event-listener-strategy" version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0f214dc438f977e6d4e3500aaa277f5ad94ca83fbbd9b1a15713ce2344ccc5a1" dependencies = [ - "event-listener 5.3.0", + "event-listener 5.3.1", "pin-project-lite 0.2.14", ] @@ -5367,7 +5345,7 @@ checksum = "a718c0675c555c5f976fff4ea9e2c150fa06cefa201cadef87cfbf9324075881" dependencies = [ "blake3", "fs-err", - "proc-macro2 1.0.82", + "proc-macro2 1.0.85", "quote 1.0.36", ] @@ -5380,9 +5358,9 @@ dependencies = [ "blake2 0.10.6", "fs-err", "prettier-please", - "proc-macro2 1.0.82", + "proc-macro2 1.0.85", "quote 1.0.36", - "syn 2.0.61", + "syn 2.0.66", ] [[package]] @@ -5452,7 +5430,7 @@ dependencies = [ "expander 0.0.4", "indexmap 1.9.3", "proc-macro-crate 1.3.1", - "proc-macro2 1.0.82", + "proc-macro2 1.0.85", "quote 1.0.36", "syn 1.0.109", "thiserror", @@ -5509,9 +5487,9 @@ dependencies = [ [[package]] name = "fiat-crypto" -version = "0.2.8" +version = "0.2.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38793c55593b33412e3ae40c2c9781ffaa6f438f6f8c10f24e71846fbd7ae01e" +checksum = "28dea519a9695b9977216879a3ebfddf92f1c08c05d984f8996aecd6ecdc811d" [[package]] name = "file-per-thread-logger" @@ -5547,7 +5525,7 @@ dependencies = [ "log", "num-traits", "parity-scale-codec", - "parking_lot 0.12.2", + "parking_lot 0.12.3", "rand 0.8.5", "scale-info", ] @@ -5563,7 +5541,7 @@ dependencies = [ "futures", "log", "num-traits", - "parking_lot 0.12.2", + "parking_lot 0.12.3", "relay-utils", ] @@ -5778,11 +5756,11 @@ dependencies = [ "frame-support", "parity-scale-codec", "proc-macro-crate 3.1.0", - "proc-macro2 1.0.82", + "proc-macro2 1.0.85", "quote 1.0.36", "scale-info", "sp-arithmetic", - "syn 2.0.61", + "syn 2.0.66", "trybuild", ] @@ -5949,11 +5927,11 @@ dependencies = [ "itertools 0.11.0", "macro_magic", "proc-macro-warning", - "proc-macro2 1.0.82", + "proc-macro2 1.0.85", "quote 1.0.36", "regex", "sp-crypto-hashing", - "syn 2.0.61", + "syn 2.0.66", ] [[package]] @@ -5962,18 +5940,18 @@ version = "10.0.0" dependencies = [ "frame-support-procedural-tools-derive", "proc-macro-crate 3.1.0", - "proc-macro2 1.0.82", + "proc-macro2 1.0.85", "quote 1.0.36", - "syn 2.0.61", + "syn 2.0.66", ] [[package]] name = "frame-support-procedural-tools-derive" version = "11.0.0" dependencies = [ - "proc-macro2 1.0.82", + "proc-macro2 1.0.85", "quote 1.0.36", - "syn 2.0.61", + "syn 2.0.66", ] [[package]] @@ -6220,9 +6198,9 @@ version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac" dependencies = [ - "proc-macro2 1.0.82", + "proc-macro2 1.0.85", "quote 1.0.36", - "syn 2.0.61", + "syn 2.0.66", ] [[package]] @@ -6463,7 +6441,7 @@ dependencies = [ "futures-timer", "no-std-compat", "nonzero_ext", - "parking_lot 0.12.2", + "parking_lot 0.12.3", "portable-atomic", "quanta", "rand 0.8.5", @@ -6622,9 +6600,9 @@ checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" [[package]] name = "hex-conservative" -version = "0.1.1" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30ed443af458ccb6d81c1e7e661545f94d3176752fb1df2f543b902a1e0f51e2" +checksum = "212ab92002354b4819390025006c897e8140934349e8635c9b077f47b4dcbd20" [[package]] name = "hex-literal" @@ -6682,13 +6660,13 @@ dependencies = [ [[package]] name = "honggfuzz" -version = "0.5.55" +version = "0.5.56" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "848e9c511092e0daa0a35a63e8e6e475a3e8f870741448b9f6028d69b142f18e" +checksum = "7c76b6234c13c9ea73946d1379d33186151148e0da231506b964b44f3d023505" dependencies = [ "arbitrary", "lazy_static", - "memmap2 0.5.10", + "memmap2 0.9.4", "rustc_version 0.4.0", ] @@ -6859,7 +6837,7 @@ version = "3.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d6b0422c86d7ce0e97169cc42e04ae643caf278874a7a3c87b8150a220dc7e1e" dependencies = [ - "async-io 2.3.2", + "async-io 2.3.3", "core-foundation", "fnv", "futures", @@ -6916,7 +6894,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "11d7a9f6330b71fea57921c9b61c47ee6e84f72d394754eff6163ae67e7395eb" dependencies = [ - "proc-macro2 1.0.82", + "proc-macro2 1.0.85", "quote 1.0.36", "syn 1.0.109", ] @@ -6936,7 +6914,7 @@ version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b139284b5cf57ecfa712bcc66950bb635b31aff41c188e8a4cfc758eca374a3f" dependencies = [ - "proc-macro2 1.0.82", + "proc-macro2 1.0.85", "quote 1.0.36", ] @@ -6997,9 +6975,9 @@ dependencies = [ [[package]] name = "instant" -version = "0.1.12" +version = "0.1.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c" +checksum = "e0242819d153cba4b4b05a5a8f2a7e9bbf97b6055b2a002b395c96b5ff3c0222" dependencies = [ "cfg-if", ] @@ -7225,7 +7203,7 @@ dependencies = [ "futures-util", "hyper", "jsonrpsee-types", - "parking_lot 0.12.2", + "parking_lot 0.12.3", "pin-project", "rand 0.8.5", "rustc-hash", @@ -7265,9 +7243,9 @@ checksum = "7d0bb047e79a143b32ea03974a6bf59b62c2a4c5f5d42a381c907a8bbb3f75c0" dependencies = [ "heck 0.4.1", "proc-macro-crate 3.1.0", - "proc-macro2 1.0.82", + "proc-macro2 1.0.85", "quote 1.0.36", - "syn 2.0.61", + "syn 2.0.66", ] [[package]] @@ -7511,7 +7489,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bf7a85fe66f9ff9cd74e169fdd2c94c6e1e74c412c99a73b4df3200b5d3760b2" dependencies = [ "kvdb", - "parking_lot 0.12.2", + "parking_lot 0.12.3", ] [[package]] @@ -7522,7 +7500,7 @@ checksum = "b644c70b92285f66bfc2032922a79000ea30af7bc2ab31902992a5dcb9b434f6" dependencies = [ "kvdb", "num_cpus", - "parking_lot 0.12.2", + "parking_lot 0.12.3", "regex", "rocksdb", "smallvec", @@ -7568,9 +7546,9 @@ checksum = "884e2677b40cc8c339eaefcb701c32ef1fd2493d71118dc0ca4b6a736c93bd67" [[package]] name = "libc" -version = "0.2.154" +version = "0.2.155" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae743338b92ff9146ce83992f766a31066a91a8c84a45e0e9f21e7cf6de6d346" +checksum = "97b3888a4aecf77e811145cadf6eef5901f4782c53886191b2f693f24761847c" [[package]] name = "libflate" @@ -7703,7 +7681,7 @@ dependencies = [ "multihash 0.17.0", "multistream-select", "once_cell", - "parking_lot 0.12.2", + "parking_lot 0.12.3", "pin-project", "quick-protobuf", "rand 0.8.5", @@ -7723,7 +7701,7 @@ dependencies = [ "futures", "libp2p-core", "log", - "parking_lot 0.12.2", + "parking_lot 0.12.3", "smallvec", "trust-dns-resolver 0.22.0", ] @@ -7885,7 +7863,7 @@ dependencies = [ "libp2p-identity", "libp2p-tls", "log", - "parking_lot 0.12.2", + "parking_lot 0.12.3", "quinn-proto", "rand 0.8.5", "rustls 0.20.9", @@ -8001,7 +7979,7 @@ dependencies = [ "futures-rustls", "libp2p-core", "log", - "parking_lot 0.12.2", + "parking_lot 0.12.3", "quicksink", "rw-stream-sink", "soketto", @@ -8097,9 +8075,9 @@ dependencies = [ [[package]] name = "libz-sys" -version = "1.1.16" +version = "1.1.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e143b5e666b2695d28f6bca6497720813f699c9602dd7f5cac91008b8ada7f9" +checksum = "c15da26e5af7e25c90b37a2d75cdbf940cf4a55316de9d84c679c9b8bfabf82e" dependencies = [ "cc", "libc", @@ -8154,9 +8132,9 @@ checksum = "ef53942eb7bf7ff43a617b3e2c1c4a5ecf5944a7c1bc12d7ee39bbb15e5c1519" [[package]] name = "linux-raw-sys" -version = "0.4.13" +version = "0.4.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01cda141df6706de531b6c46c3a33ecca755538219bd484262fa09410c13539c" +checksum = "78b3ae25bc7c8c38cec158d1f2757ee79e9b3740fbc7ccf0e59e4b08d793fa89" [[package]] name = "lioness" @@ -8208,7 +8186,7 @@ dependencies = [ "multihash 0.17.0", "network-interface", "nohash-hasher", - "parking_lot 0.12.2", + "parking_lot 0.12.3", "pin-project", "prost 0.11.9", "prost-build 0.11.9", @@ -8333,7 +8311,7 @@ dependencies = [ "macro_magic_core", "macro_magic_macros", "quote 1.0.36", - "syn 2.0.61", + "syn 2.0.66", ] [[package]] @@ -8345,9 +8323,9 @@ dependencies = [ "const-random", "derive-syn-parse 0.1.5", "macro_magic_core_macros", - "proc-macro2 1.0.82", + "proc-macro2 1.0.85", "quote 1.0.36", - "syn 2.0.61", + "syn 2.0.66", ] [[package]] @@ -8356,9 +8334,9 @@ version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9ea73aa640dc01d62a590d48c0c3521ed739d53b27f919b25c3551e233481654" dependencies = [ - "proc-macro2 1.0.82", + "proc-macro2 1.0.85", "quote 1.0.36", - "syn 2.0.61", + "syn 2.0.66", ] [[package]] @@ -8369,7 +8347,7 @@ checksum = "ef9d79ae96aaba821963320eb2b6e34d17df1e5a83d8a1985c29cc5be59577b3" dependencies = [ "macro_magic_core", "quote 1.0.36", - "syn 2.0.61", + "syn 2.0.66", ] [[package]] @@ -8485,7 +8463,7 @@ dependencies = [ "hex", "log", "num-traits", - "parking_lot 0.12.2", + "parking_lot 0.12.3", "relay-utils", "sp-arithmetic", ] @@ -8581,9 +8559,9 @@ dependencies = [ [[package]] name = "miniz_oxide" -version = "0.7.2" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d811f3e15f28568be3407c8e7fdb6514c1cda3cb30683f15b6a1a1dc4ea14a7" +checksum = "87dfd01fe195c66b572b37921ad8803d010623c0aca821bea2302239d155cdae" dependencies = [ "adler", ] @@ -8615,7 +8593,7 @@ dependencies = [ "hashlink", "lioness", "log", - "parking_lot 0.12.2", + "parking_lot 0.12.3", "rand 0.8.5", "rand_chacha 0.3.1", "rand_distr", @@ -8631,7 +8609,7 @@ dependencies = [ "futures", "log", "parity-scale-codec", - "parking_lot 0.12.2", + "parking_lot 0.12.3", "sc-block-builder", "sc-client-api", "sc-offchain", @@ -8684,7 +8662,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "22ce75669015c4f47b289fd4d4f56e894e4c96003ffdf3ac51313126f94c6cbb" dependencies = [ "cfg-if", - "proc-macro2 1.0.82", + "proc-macro2 1.0.85", "quote 1.0.36", "syn 1.0.109", ] @@ -8791,7 +8769,7 @@ checksum = "fc076939022111618a5026d3be019fd8b366e76314538ff9a1b59ffbcbf98bcd" dependencies = [ "proc-macro-crate 1.3.1", "proc-macro-error", - "proc-macro2 1.0.82", + "proc-macro2 1.0.85", "quote 1.0.36", "syn 1.0.109", "synstructure", @@ -8816,7 +8794,7 @@ checksum = "d38685e08adb338659871ecfc6ee47ba9b22dcc8abcf6975d379cc49145c3040" dependencies = [ "proc-macro-crate 1.3.1", "proc-macro-error", - "proc-macro2 1.0.82", + "proc-macro2 1.0.85", "quote 1.0.36", "syn 1.0.109", "synstructure", @@ -8870,7 +8848,7 @@ version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "91761aed67d03ad966ef783ae962ef9bbaca728d2dd7ceb7939ec110fffad998" dependencies = [ - "proc-macro2 1.0.82", + "proc-macro2 1.0.85", "quote 1.0.36", "syn 1.0.109", ] @@ -9214,9 +9192,9 @@ dependencies = [ [[package]] name = "num" -version = "0.4.2" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3135b08af27d103b0a51f2ae0f8632117b7b185ccf931445affa8df530576a41" +checksum = "35bd024e8b2ff75562e5f34e7f4905839deb4b22955ef5e73d2fea1b9813cb23" dependencies = [ "num-bigint", "num-complex", @@ -9402,9 +9380,9 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" dependencies = [ - "proc-macro2 1.0.82", + "proc-macro2 1.0.85", "quote 1.0.36", - "syn 2.0.61", + "syn 2.0.66", ] [[package]] @@ -9415,9 +9393,9 @@ checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" [[package]] name = "openssl-src" -version = "300.2.3+3.2.1" +version = "300.3.0+3.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5cff92b6f71555b61bb9315f7c64da3ca43d87531622120fea0195fc761b4843" +checksum = "eba8804a1c5765b18c4b3f907e6897ebabeedebc9830e1a0046c4a4cf44663e1" dependencies = [ "cc", ] @@ -9469,7 +9447,7 @@ dependencies = [ "itertools 0.11.0", "petgraph", "proc-macro-crate 3.1.0", - "proc-macro2 1.0.82", + "proc-macro2 1.0.85", "quote 1.0.36", "syn 1.0.109", ] @@ -10131,7 +10109,7 @@ dependencies = [ "polkavm-linker", "sp-runtime", "tempfile", - "toml 0.8.12", + "toml 0.8.13", "twox-hash", ] @@ -10177,9 +10155,9 @@ dependencies = [ name = "pallet-contracts-proc-macro" version = "18.0.0" dependencies = [ - "proc-macro2 1.0.82", + "proc-macro2 1.0.85", "quote 1.0.36", - "syn 2.0.61", + "syn 2.0.66", ] [[package]] @@ -10297,7 +10275,7 @@ dependencies = [ "pallet-staking", "pallet-timestamp", "parity-scale-codec", - "parking_lot 0.12.2", + "parking_lot 0.12.3", "scale-info", "sp-core", "sp-io", @@ -10320,7 +10298,7 @@ dependencies = [ "pallet-balances", "pallet-election-provider-support-benchmarking", "parity-scale-codec", - "parking_lot 0.12.2", + "parking_lot 0.12.3", "rand 0.8.5", "scale-info", "sp-arithmetic", @@ -11392,7 +11370,6 @@ dependencies = [ "frame-election-provider-support", "frame-support", "frame-system", - "log", "pallet-bags-list", "pallet-balances", "parity-scale-codec", @@ -11443,10 +11420,10 @@ name = "pallet-staking-reward-curve" version = "11.0.0" dependencies = [ "proc-macro-crate 3.1.0", - "proc-macro2 1.0.82", + "proc-macro2 1.0.85", "quote 1.0.36", "sp-runtime", - "syn 2.0.61", + "syn 2.0.66", ] [[package]] @@ -11477,7 +11454,7 @@ dependencies = [ "log", "pallet-balances", "parity-scale-codec", - "parking_lot 0.12.2", + "parking_lot 0.12.3", "scale-info", "serde", "sp-core", @@ -12075,7 +12052,7 @@ dependencies = [ "log", "lz4", "memmap2 0.5.10", - "parking_lot 0.12.2", + "parking_lot 0.12.3", "rand 0.8.5", "siphasher", "snap", @@ -12104,7 +12081,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d830939c76d294956402033aee57a6da7b438f2294eb94864c37b0569053a42c" dependencies = [ "proc-macro-crate 3.1.0", - "proc-macro2 1.0.82", + "proc-macro2 1.0.85", "quote 1.0.36", "syn 1.0.109", ] @@ -12127,7 +12104,7 @@ dependencies = [ "impl-trait-for-tuples", "lru 0.8.1", "parity-util-mem-derive", - "parking_lot 0.12.2", + "parking_lot 0.12.3", "primitive-types", "smallvec", "winapi", @@ -12139,7 +12116,7 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f557c32c6d268a07c921471619c0295f5efad3a0e76d4f97a05c091a51d110b2" dependencies = [ - "proc-macro2 1.0.82", + "proc-macro2 1.0.85", "syn 1.0.109", "synstructure", ] @@ -12169,9 +12146,9 @@ dependencies = [ [[package]] name = "parking_lot" -version = "0.12.2" +version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e4af0ca4f6caed20e900d564c242b8e5d4903fdacf31d3daf527b66fe6f42fb" +checksum = "f1bf18183cf54e8d6059647fc3063646a1801cf30896933ec2311622cc4b9a27" dependencies = [ "lock_api", "parking_lot_core 0.9.10", @@ -12562,9 +12539,9 @@ checksum = "3ec22af7d3fb470a85dd2ca96b7c577a1eb4ef6f1683a9fe9a8c16e136c04687" dependencies = [ "pest", "pest_meta", - "proc-macro2 1.0.82", + "proc-macro2 1.0.85", "quote 1.0.36", - "syn 2.0.61", + "syn 2.0.66", ] [[package]] @@ -12603,9 +12580,9 @@ version = "1.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2f38a4412a78282e09a2cf38d195ea5420d15ba0602cb375210efbc877243965" dependencies = [ - "proc-macro2 1.0.82", + "proc-macro2 1.0.85", "quote 1.0.36", - "syn 2.0.61", + "syn 2.0.66", ] [[package]] @@ -12628,9 +12605,9 @@ checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" [[package]] name = "piper" -version = "0.2.1" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "668d31b1c4eba19242f2088b2bf3316b82ca31082a8335764db4e083db7485d4" +checksum = "ae1d5c74c9876f070d3e8fd503d748c7d974c3e48da8f41350fa5222ef9b4391" dependencies = [ "atomic-waker", "fastrand 2.1.0", @@ -12661,9 +12638,9 @@ checksum = "db23d408679286588f4d4644f965003d056e3dd5abcaaa938116871d7ce2fee7" [[package]] name = "plotters" -version = "0.3.5" +version = "0.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2c224ba00d7cadd4d5c660deaf2098e5e80e07846537c51f9cfa4be50c1fd45" +checksum = "a15b6eccb8484002195a3e44fe65a4ce8e93a625797a063735536fd59cb01cf3" dependencies = [ "num-traits", "plotters-backend", @@ -12674,15 +12651,15 @@ dependencies = [ [[package]] name = "plotters-backend" -version = "0.3.5" +version = "0.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e76628b4d3a7581389a35d5b6e2139607ad7c75b17aed325f210aa91f4a9609" +checksum = "414cec62c6634ae900ea1c56128dfe87cf63e7caece0852ec76aba307cebadb7" [[package]] name = "plotters-svg" -version = "0.3.5" +version = "0.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38f6d39893cca0701371e3c27294f09797214b86f1fb951b89ade8ec04e2abab" +checksum = "81b30686a7d9c3e010b84284bdd26a29f2138574f52f5eb6f794fc0ad924e705" dependencies = [ "plotters-backend", ] @@ -12952,7 +12929,7 @@ dependencies = [ "futures", "futures-timer", "lazy_static", - "parking_lot 0.12.2", + "parking_lot 0.12.3", "polkadot-node-network-protocol", "polkadot-node-subsystem", "polkadot-node-subsystem-test-helpers", @@ -12986,7 +12963,7 @@ dependencies = [ "futures", "futures-timer", "parity-scale-codec", - "parking_lot 0.12.2", + "parking_lot 0.12.3", "polkadot-node-metrics", "polkadot-node-network-protocol", "polkadot-node-subsystem", @@ -13042,7 +13019,7 @@ dependencies = [ "log", "merlin", "parity-scale-codec", - "parking_lot 0.12.2", + "parking_lot 0.12.3", "polkadot-node-jaeger", "polkadot-node-primitives", "polkadot-node-subsystem", @@ -13083,7 +13060,7 @@ dependencies = [ "kvdb-memorydb", "log", "parity-scale-codec", - "parking_lot 0.12.2", + "parking_lot 0.12.3", "polkadot-erasure-coding", "polkadot-node-jaeger", "polkadot-node-primitives", @@ -13199,7 +13176,7 @@ dependencies = [ "kvdb", "kvdb-memorydb", "parity-scale-codec", - "parking_lot 0.12.2", + "parking_lot 0.12.3", "polkadot-node-primitives", "polkadot-node-subsystem", "polkadot-node-subsystem-test-helpers", @@ -13462,7 +13439,7 @@ dependencies = [ "log", "mick-jaeger", "parity-scale-codec", - "parking_lot 0.12.2", + "parking_lot 0.12.3", "polkadot-node-primitives", "polkadot-primitives", "sc-network", @@ -13562,7 +13539,7 @@ version = "1.0.0" dependencies = [ "async-trait", "futures", - "parking_lot 0.12.2", + "parking_lot 0.12.3", "polkadot-erasure-coding", "polkadot-node-primitives", "polkadot-node-subsystem", @@ -13624,7 +13601,7 @@ dependencies = [ "log", "parity-db", "parity-scale-codec", - "parking_lot 0.12.2", + "parking_lot 0.12.3", "pin-project", "polkadot-node-jaeger", "polkadot-node-metrics", @@ -13658,7 +13635,7 @@ dependencies = [ "futures", "futures-timer", "orchestra", - "parking_lot 0.12.2", + "parking_lot 0.12.3", "polkadot-node-metrics", "polkadot-node-network-protocol", "polkadot-node-primitives", @@ -14113,7 +14090,7 @@ dependencies = [ "pallet-transaction-payment-rpc-runtime-api", "parity-db", "parity-scale-codec", - "parking_lot 0.12.2", + "parking_lot 0.12.3", "polkadot-approval-distribution", "polkadot-availability-bitfield-distribution", "polkadot-availability-distribution", @@ -14558,9 +14535,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5c4fdfc49717fb9a196e74a5d28e0bc764eb394a2c803eb11133a31ac996c60c" dependencies = [ "polkavm-common", - "proc-macro2 1.0.82", + "proc-macro2 1.0.85", "quote 1.0.36", - "syn 2.0.61", + "syn 2.0.66", ] [[package]] @@ -14570,7 +14547,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8ba81f7b5faac81e528eb6158a6f3c9e0bb1008e0ffa19653bc8dea925ecb429" dependencies = [ "polkavm-derive-impl", - "syn 2.0.61", + "syn 2.0.66", ] [[package]] @@ -14612,9 +14589,9 @@ dependencies = [ [[package]] name = "polling" -version = "3.7.0" +version = "3.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "645493cf344456ef24219d02a768cf1fb92ddf8c92161679ae3d91b91a637be3" +checksum = "5e6a007746f34ed64099e88783b0ae369eaa3da6392868ba262e2af9b8fbaea1" dependencies = [ "cfg-if", "concurrent-queue", @@ -14682,7 +14659,7 @@ dependencies = [ "log", "nix 0.26.4", "once_cell", - "parking_lot 0.12.2", + "parking_lot 0.12.3", "smallvec", "symbolic-demangle", "tempfile", @@ -14742,8 +14719,8 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "22020dfcf177fcc7bf5deaf7440af371400c67c0de14c399938d8ed4fb4645d3" dependencies = [ - "proc-macro2 1.0.82", - "syn 2.0.61", + "proc-macro2 1.0.85", + "syn 2.0.66", ] [[package]] @@ -14762,7 +14739,7 @@ version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f28f53e8b192565862cf99343194579a022eb9c7dd3a8d03134734803c7b3125" dependencies = [ - "proc-macro2 1.0.82", + "proc-macro2 1.0.85", "syn 1.0.109", ] @@ -14772,8 +14749,8 @@ version = "0.2.20" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5f12335488a2f3b0a83b14edad48dca9879ce89b2edd10e80237e4e852dd645e" dependencies = [ - "proc-macro2 1.0.82", - "syn 2.0.61", + "proc-macro2 1.0.85", + "syn 2.0.66", ] [[package]] @@ -14833,7 +14810,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" dependencies = [ "proc-macro-error-attr", - "proc-macro2 1.0.82", + "proc-macro2 1.0.85", "quote 1.0.36", "syn 1.0.109", "version_check", @@ -14845,7 +14822,7 @@ version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" dependencies = [ - "proc-macro2 1.0.82", + "proc-macro2 1.0.85", "quote 1.0.36", "version_check", ] @@ -14856,9 +14833,9 @@ version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "834da187cfe638ae8abb0203f0b33e5ccdb02a28e7199f2f47b3e2754f50edca" dependencies = [ - "proc-macro2 1.0.82", + "proc-macro2 1.0.85", "quote 1.0.36", - "syn 2.0.61", + "syn 2.0.66", ] [[package]] @@ -14872,9 +14849,9 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.82" +version = "1.0.85" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ad3d49ab951a01fbaafe34f2ec74122942fe18a3f9814c3268f1bb72042131b" +checksum = "22244ce15aa966053a896d1accb3a6e68469b97c7f33f284b99f0d576879fc23" dependencies = [ "unicode-ident", ] @@ -14915,7 +14892,7 @@ dependencies = [ "fnv", "lazy_static", "memchr", - "parking_lot 0.12.2", + "parking_lot 0.12.3", "thiserror", ] @@ -14927,7 +14904,7 @@ checksum = "5d6fa99d535dd930d1249e6c79cb3c2915f9172a540fe2b02a4c8f9ca954721e" dependencies = [ "dtoa", "itoa", - "parking_lot 0.12.2", + "parking_lot 0.12.3", "prometheus-client-derive-encode", ] @@ -14937,9 +14914,9 @@ version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "440f724eba9f6996b75d63681b0a92b06947f1457076d503a4d2e2c8f56442b8" dependencies = [ - "proc-macro2 1.0.82", + "proc-macro2 1.0.85", "quote 1.0.36", - "syn 2.0.61", + "syn 2.0.66", ] [[package]] @@ -14986,12 +14963,12 @@ dependencies = [ [[package]] name = "prost" -version = "0.12.4" +version = "0.12.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0f5d036824e4761737860779c906171497f6d55681139d8312388f8fe398922" +checksum = "deb1435c188b76130da55f17a466d252ff7b1418b2ad3e037d127b94e3411f29" dependencies = [ "bytes", - "prost-derive 0.12.4", + "prost-derive 0.12.6", ] [[package]] @@ -15018,9 +14995,9 @@ dependencies = [ [[package]] name = "prost-build" -version = "0.12.4" +version = "0.12.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "80b776a1b2dc779f5ee0641f8ade0125bc1298dd41a9a0c16d8bd57b42d222b1" +checksum = "22505a5c94da8e3b7c2996394d1c933236c4d743e81a410bcca4e6989fc066a4" dependencies = [ "bytes", "heck 0.5.0", @@ -15030,10 +15007,10 @@ dependencies = [ "once_cell", "petgraph", "prettyplease 0.2.20", - "prost 0.12.4", - "prost-types 0.12.4", + "prost 0.12.6", + "prost-types 0.12.6", "regex", - "syn 2.0.61", + "syn 2.0.66", "tempfile", ] @@ -15045,22 +15022,22 @@ checksum = "e5d2d8d10f3c6ded6da8b05b5fb3b8a5082514344d56c9f871412d29b4e075b4" dependencies = [ "anyhow", "itertools 0.10.5", - "proc-macro2 1.0.82", + "proc-macro2 1.0.85", "quote 1.0.36", "syn 1.0.109", ] [[package]] name = "prost-derive" -version = "0.12.4" +version = "0.12.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19de2de2a00075bf566bee3bd4db014b11587e84184d3f7a791bc17f1a8e9e48" +checksum = "81bddcdb20abf9501610992b6759a4c888aef7d1a7247ef75e2404275ac24af1" dependencies = [ "anyhow", "itertools 0.12.1", - "proc-macro2 1.0.82", + "proc-macro2 1.0.85", "quote 1.0.36", - "syn 2.0.61", + "syn 2.0.66", ] [[package]] @@ -15074,11 +15051,11 @@ dependencies = [ [[package]] name = "prost-types" -version = "0.12.4" +version = "0.12.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3235c33eb02c1f1e212abdbe34c78b264b038fb58ca612664343271e36e55ffe" +checksum = "9091c90b0a32608e984ff2fa4091273cbdd755d54935c51d520887f4a1dbd5b0" dependencies = [ - "prost 0.12.4", + "prost 0.12.6", ] [[package]] @@ -15249,7 +15226,7 @@ version = "1.0.36" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7" dependencies = [ - "proc-macro2 1.0.82", + "proc-macro2 1.0.85", ] [[package]] @@ -15489,9 +15466,9 @@ version = "1.0.23" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bcc303e793d3734489387d205e9b186fac9c6cfacedd98cbb2e8a5943595f3e6" dependencies = [ - "proc-macro2 1.0.82", + "proc-macro2 1.0.85", "quote 1.0.36", - "syn 2.0.61", + "syn 2.0.66", ] [[package]] @@ -16044,12 +16021,12 @@ checksum = "d428f8247852f894ee1be110b375111b586d4fa431f6c46e64ba5a0dcccbe605" dependencies = [ "cfg-if", "glob", - "proc-macro2 1.0.82", + "proc-macro2 1.0.85", "quote 1.0.36", "regex", "relative-path", "rustc_version 0.4.0", - "syn 2.0.61", + "syn 2.0.66", "unicode-ident", ] @@ -16199,7 +16176,7 @@ dependencies = [ "bitflags 2.5.0", "errno", "libc", - "linux-raw-sys 0.4.13", + "linux-raw-sys 0.4.14", "windows-sys 0.52.0", ] @@ -16236,7 +16213,7 @@ dependencies = [ "log", "ring 0.17.8", "rustls-pki-types", - "rustls-webpki 0.102.3", + "rustls-webpki 0.102.4", "subtle 2.5.0", "zeroize", ] @@ -16303,9 +16280,9 @@ dependencies = [ [[package]] name = "rustls-webpki" -version = "0.102.3" +version = "0.102.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3bce581c0dd41bce533ce695a1437fa16a7ab5ac3ccfa99fe1a620a7885eabf" +checksum = "ff448f7e92e913c4b7d4c6d8e4540a1724b319b4152b8aef6d4cf8339712b33e" dependencies = [ "ring 0.17.8", "rustls-pki-types", @@ -16314,9 +16291,9 @@ dependencies = [ [[package]] name = "rustversion" -version = "1.0.16" +version = "1.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "092474d1a01ea8278f69e6a358998405fae5b8b963ddaeb2b0b04a128bf1dfb0" +checksum = "955d28af4278de8121b7ebeb796b6a45735dc01436d898801014aced2773a3d6" [[package]] name = "rusty-fork" @@ -16409,8 +16386,8 @@ dependencies = [ "multihash 0.17.0", "multihash-codetable", "parity-scale-codec", - "prost 0.12.4", - "prost-build 0.12.4", + "prost 0.12.6", + "prost-build 0.12.6", "quickcheck", "rand 0.8.5", "sc-client-api", @@ -16436,7 +16413,7 @@ dependencies = [ "futures-timer", "log", "parity-scale-codec", - "parking_lot 0.12.2", + "parking_lot 0.12.3", "sc-block-builder", "sc-client-api", "sc-proposer-metrics", @@ -16504,9 +16481,9 @@ name = "sc-chain-spec-derive" version = "11.0.0" dependencies = [ "proc-macro-crate 3.1.0", - "proc-macro2 1.0.82", + "proc-macro2 1.0.85", "quote 1.0.36", - "syn 2.0.61", + "syn 2.0.66", ] [[package]] @@ -16560,7 +16537,7 @@ dependencies = [ "futures", "log", "parity-scale-codec", - "parking_lot 0.12.2", + "parking_lot 0.12.3", "sc-executor", "sc-transaction-pool-api", "sc-utils", @@ -16596,7 +16573,7 @@ dependencies = [ "log", "parity-db", "parity-scale-codec", - "parking_lot 0.12.2", + "parking_lot 0.12.3", "quickcheck", "rand 0.8.5", "sc-client-api", @@ -16623,7 +16600,7 @@ dependencies = [ "futures-timer", "log", "mockall", - "parking_lot 0.12.2", + "parking_lot 0.12.3", "sc-client-api", "sc-network-types", "sc-utils", @@ -16647,7 +16624,7 @@ dependencies = [ "futures", "log", "parity-scale-codec", - "parking_lot 0.12.2", + "parking_lot 0.12.3", "sc-block-builder", "sc-client-api", "sc-consensus", @@ -16689,7 +16666,7 @@ dependencies = [ "num-rational", "num-traits", "parity-scale-codec", - "parking_lot 0.12.2", + "parking_lot 0.12.3", "sc-block-builder", "sc-client-api", "sc-consensus", @@ -16758,7 +16735,7 @@ dependencies = [ "futures", "log", "parity-scale-codec", - "parking_lot 0.12.2", + "parking_lot 0.12.3", "sc-block-builder", "sc-client-api", "sc-consensus", @@ -16799,7 +16776,7 @@ dependencies = [ "jsonrpsee", "log", "parity-scale-codec", - "parking_lot 0.12.2", + "parking_lot 0.12.3", "sc-consensus-beefy", "sc-rpc", "serde", @@ -16839,7 +16816,7 @@ dependencies = [ "futures-timer", "log", "parity-scale-codec", - "parking_lot 0.12.2", + "parking_lot 0.12.3", "rand 0.8.5", "sc-block-builder", "sc-chain-spec", @@ -16945,7 +16922,7 @@ dependencies = [ "futures-timer", "log", "parity-scale-codec", - "parking_lot 0.12.2", + "parking_lot 0.12.3", "sc-client-api", "sc-consensus", "sp-api", @@ -16993,7 +16970,7 @@ dependencies = [ "env_logger 0.11.3", "num_cpus", "parity-scale-codec", - "parking_lot 0.12.2", + "parking_lot 0.12.3", "paste", "regex", "sc-executor-common", @@ -17055,7 +17032,7 @@ dependencies = [ "libc", "log", "parity-scale-codec", - "parking_lot 0.12.2", + "parking_lot 0.12.3", "paste", "rustix 0.36.17", "sc-allocator", @@ -17090,7 +17067,7 @@ name = "sc-keystore" version = "25.0.0" dependencies = [ "array-bytes", - "parking_lot 0.12.2", + "parking_lot 0.12.3", "serde_json", "sp-application-crypto", "sp-core", @@ -17113,7 +17090,7 @@ dependencies = [ "mixnet", "multiaddr", "parity-scale-codec", - "parking_lot 0.12.2", + "parking_lot 0.12.3", "sc-client-api", "sc-network", "sc-network-types", @@ -17151,11 +17128,11 @@ dependencies = [ "multistream-select", "once_cell", "parity-scale-codec", - "parking_lot 0.12.2", + "parking_lot 0.12.3", "partial_sort", "pin-project", - "prost 0.12.4", - "prost-build 0.12.4", + "prost 0.12.6", + "prost-build 0.12.6", "rand 0.8.5", "sc-block-builder", "sc-client-api", @@ -17200,7 +17177,7 @@ dependencies = [ "futures", "libp2p-identity", "parity-scale-codec", - "prost-build 0.12.4", + "prost-build 0.12.6", "sc-consensus", "sc-network-types", "sp-consensus", @@ -17242,8 +17219,8 @@ dependencies = [ "futures", "log", "parity-scale-codec", - "prost 0.12.4", - "prost-build 0.12.4", + "prost 0.12.6", + "prost-build 0.12.6", "sc-client-api", "sc-network", "sc-network-types", @@ -17287,8 +17264,8 @@ dependencies = [ "log", "mockall", "parity-scale-codec", - "prost 0.12.4", - "prost-build 0.12.4", + "prost 0.12.6", + "prost-build 0.12.6", "quickcheck", "sc-block-builder", "sc-client-api", @@ -17323,7 +17300,7 @@ dependencies = [ "futures-timer", "libp2p", "log", - "parking_lot 0.12.2", + "parking_lot 0.12.3", "rand 0.8.5", "sc-block-builder", "sc-client-api", @@ -17395,7 +17372,7 @@ dependencies = [ "num_cpus", "once_cell", "parity-scale-codec", - "parking_lot 0.12.2", + "parking_lot 0.12.3", "rand 0.8.5", "sc-block-builder", "sc-client-api", @@ -17438,7 +17415,7 @@ dependencies = [ "jsonrpsee", "log", "parity-scale-codec", - "parking_lot 0.12.2", + "parking_lot 0.12.3", "pretty_assertions", "sc-block-builder", "sc-chain-spec", @@ -17520,7 +17497,7 @@ dependencies = [ "jsonrpsee", "log", "parity-scale-codec", - "parking_lot 0.12.2", + "parking_lot 0.12.3", "pretty_assertions", "rand 0.8.5", "sc-block-builder", @@ -17575,7 +17552,7 @@ dependencies = [ "jsonrpsee", "log", "parity-scale-codec", - "parking_lot 0.12.2", + "parking_lot 0.12.3", "pin-project", "rand 0.8.5", "sc-chain-spec", @@ -17638,7 +17615,7 @@ dependencies = [ "futures", "log", "parity-scale-codec", - "parking_lot 0.12.2", + "parking_lot 0.12.3", "sc-block-builder", "sc-client-api", "sc-client-db", @@ -17670,7 +17647,7 @@ version = "0.30.0" dependencies = [ "log", "parity-scale-codec", - "parking_lot 0.12.2", + "parking_lot 0.12.3", "sp-core", ] @@ -17681,7 +17658,7 @@ dependencies = [ "env_logger 0.11.3", "log", "parity-db", - "parking_lot 0.12.2", + "parking_lot 0.12.3", "sc-client-api", "sc-keystore", "sp-api", @@ -17753,7 +17730,7 @@ dependencies = [ "futures", "libp2p", "log", - "parking_lot 0.12.2", + "parking_lot 0.12.3", "pin-project", "rand 0.8.5", "sc-network", @@ -17776,7 +17753,7 @@ dependencies = [ "libc", "log", "parity-scale-codec", - "parking_lot 0.12.2", + "parking_lot 0.12.3", "regex", "rustc-hash", "sc-client-api", @@ -17799,9 +17776,9 @@ name = "sc-tracing-proc-macro" version = "11.0.0" dependencies = [ "proc-macro-crate 3.1.0", - "proc-macro2 1.0.82", + "proc-macro2 1.0.85", "quote 1.0.36", - "syn 2.0.61", + "syn 2.0.66", ] [[package]] @@ -17817,7 +17794,7 @@ dependencies = [ "linked-hash-map", "log", "parity-scale-codec", - "parking_lot 0.12.2", + "parking_lot 0.12.3", "sc-block-builder", "sc-client-api", "sc-transaction-pool-api", @@ -17863,7 +17840,7 @@ dependencies = [ "futures-timer", "lazy_static", "log", - "parking_lot 0.12.2", + "parking_lot 0.12.3", "prometheus", "sp-arithmetic", "tokio-test", @@ -17890,7 +17867,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2d35494501194174bda522a32605929eefc9ecf7e0a326c26db1fdd85881eb62" dependencies = [ "proc-macro-crate 3.1.0", - "proc-macro2 1.0.82", + "proc-macro2 1.0.85", "quote 1.0.36", "syn 1.0.109", ] @@ -17906,9 +17883,9 @@ dependencies = [ [[package]] name = "schemars" -version = "0.8.19" +version = "0.8.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc6e7ed6919cb46507fb01ff1654309219f62b4d603822501b0b80d42f6f21ef" +checksum = "09c024468a378b7e36765cd36702b7a90cc3cba11654f6685c8f233408e89e92" dependencies = [ "dyn-clone", "schemars_derive", @@ -17918,21 +17895,21 @@ dependencies = [ [[package]] name = "schemars_derive" -version = "0.8.19" +version = "0.8.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "185f2b7aa7e02d418e453790dde16890256bbd2bcd04b7dc5348811052b53f49" +checksum = "b1eee588578aff73f856ab961cd2f79e36bc45d7ded33a7562adba4667aecc0e" dependencies = [ - "proc-macro2 1.0.82", + "proc-macro2 1.0.85", "quote 1.0.36", "serde_derive_internals", - "syn 2.0.61", + "syn 2.0.66", ] [[package]] name = "schnellru" -version = "0.2.2" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b0cf7da6fc4477944d5529807234f66802fcb618fc62b9c05bedca7f9be6c43" +checksum = "c9a8ef13a93c54d20580de1e5c413e624e53121d42fc7e2c11d10ef7f8b02367" dependencies = [ "ahash 0.8.11", "cfg-if", @@ -18185,9 +18162,9 @@ checksum = "f97841a747eef040fcd2e7b3b9a220a7205926e60488e673d9e4926d27772ce5" [[package]] name = "serde" -version = "1.0.201" +version = "1.0.203" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "780f1cebed1629e4753a1a38a3c72d30b97ec044f0aef68cb26650a3c5cf363c" +checksum = "7253ab4de971e72fb7be983802300c30b5a7f0c2e56fab8abfc6a214307c0094" dependencies = [ "serde_derive", ] @@ -18212,24 +18189,24 @@ dependencies = [ [[package]] name = "serde_derive" -version = "1.0.201" +version = "1.0.203" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c5e405930b9796f1c00bee880d03fc7e0bb4b9a11afc776885ffe84320da2865" +checksum = "500cbc0ebeb6f46627f50f3f5811ccf6bf00643be300b4c3eabc0ef55dc5b5ba" dependencies = [ - "proc-macro2 1.0.82", + "proc-macro2 1.0.85", "quote 1.0.36", - "syn 2.0.61", + "syn 2.0.66", ] [[package]] name = "serde_derive_internals" -version = "0.29.0" +version = "0.29.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "330f01ce65a3a5fe59a60c82f3c9a024b573b8a6e875bd233fe5f934e71d54e3" +checksum = "18d26a20a969b9e3fdf2fc2d9f21eda6c40e2de84c9408bb5d3b05d499aae711" dependencies = [ - "proc-macro2 1.0.82", + "proc-macro2 1.0.85", "quote 1.0.36", - "syn 2.0.61", + "syn 2.0.66", ] [[package]] @@ -18255,9 +18232,9 @@ dependencies = [ [[package]] name = "serde_spanned" -version = "0.6.5" +version = "0.6.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb3622f419d1296904700073ea6cc23ad690adbd66f13ea683df73298736f0c1" +checksum = "79e674e01f999af37c49f70a6ede167a8a60b2503e56c5599532a65baa5969a0" dependencies = [ "serde", ] @@ -18307,7 +18284,7 @@ dependencies = [ "futures", "lazy_static", "log", - "parking_lot 0.12.2", + "parking_lot 0.12.3", "serial_test_derive", ] @@ -18317,9 +18294,9 @@ version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "91d129178576168c589c9ec973feedf7d3126c01ac2bf08795109aa35b69fb8f" dependencies = [ - "proc-macro2 1.0.82", + "proc-macro2 1.0.85", "quote 1.0.36", - "syn 2.0.61", + "syn 2.0.66", ] [[package]] @@ -18658,7 +18635,7 @@ dependencies = [ "log", "lru 0.11.1", "no-std-net", - "parking_lot 0.12.2", + "parking_lot 0.12.3", "pin-project", "rand 0.8.5", "rand_chacha 0.3.1", @@ -19163,9 +19140,9 @@ dependencies = [ "blake2 0.10.6", "expander 2.1.0", "proc-macro-crate 3.1.0", - "proc-macro2 1.0.82", + "proc-macro2 1.0.85", "quote 1.0.36", - "syn 2.0.61", + "syn 2.0.66", ] [[package]] @@ -19288,7 +19265,7 @@ dependencies = [ "futures", "log", "parity-scale-codec", - "parking_lot 0.12.2", + "parking_lot 0.12.3", "schnellru", "sp-api", "sp-consensus", @@ -19441,7 +19418,7 @@ dependencies = [ "merlin", "parity-bip39", "parity-scale-codec", - "parking_lot 0.12.2", + "parking_lot 0.12.3", "paste", "primitive-types", "rand 0.8.5", @@ -19512,7 +19489,7 @@ dependencies = [ [[package]] name = "sp-crypto-ec-utils" version = "0.10.0" -source = "git+https://github.com/paritytech/polkadot-sdk#37b1544b51aeba183350d4c8d76987c32e6c9ca7" +source = "git+https://github.com/paritytech/polkadot-sdk#f66e693a6befef0956a3129254fbe568247c9c57" dependencies = [ "ark-bls12-377", "ark-bls12-377-ext", @@ -19549,7 +19526,7 @@ version = "0.1.0" dependencies = [ "quote 1.0.36", "sp-crypto-hashing", - "syn 2.0.61", + "syn 2.0.66", ] [[package]] @@ -19557,26 +19534,26 @@ name = "sp-database" version = "10.0.0" dependencies = [ "kvdb", - "parking_lot 0.12.2", + "parking_lot 0.12.3", ] [[package]] name = "sp-debug-derive" version = "14.0.0" dependencies = [ - "proc-macro2 1.0.82", + "proc-macro2 1.0.85", "quote 1.0.36", - "syn 2.0.61", + "syn 2.0.66", ] [[package]] name = "sp-debug-derive" version = "14.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk#37b1544b51aeba183350d4c8d76987c32e6c9ca7" +source = "git+https://github.com/paritytech/polkadot-sdk#f66e693a6befef0956a3129254fbe568247c9c57" dependencies = [ - "proc-macro2 1.0.82", + "proc-macro2 1.0.85", "quote 1.0.36", - "syn 2.0.61", + "syn 2.0.66", ] [[package]] @@ -19591,7 +19568,7 @@ dependencies = [ [[package]] name = "sp-externalities" version = "0.25.0" -source = "git+https://github.com/paritytech/polkadot-sdk#37b1544b51aeba183350d4c8d76987c32e6c9ca7" +source = "git+https://github.com/paritytech/polkadot-sdk#f66e693a6befef0956a3129254fbe568247c9c57" dependencies = [ "environmental", "parity-scale-codec", @@ -19661,7 +19638,7 @@ name = "sp-keystore" version = "0.34.0" dependencies = [ "parity-scale-codec", - "parking_lot 0.12.2", + "parking_lot 0.12.3", "rand 0.8.5", "rand_chacha 0.3.1", "sp-core", @@ -19822,7 +19799,7 @@ dependencies = [ [[package]] name = "sp-runtime-interface" version = "24.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk#37b1544b51aeba183350d4c8d76987c32e6c9ca7" +source = "git+https://github.com/paritytech/polkadot-sdk#f66e693a6befef0956a3129254fbe568247c9c57" dependencies = [ "bytes", "impl-trait-for-tuples", @@ -19845,22 +19822,22 @@ dependencies = [ "Inflector", "expander 2.1.0", "proc-macro-crate 3.1.0", - "proc-macro2 1.0.82", + "proc-macro2 1.0.85", "quote 1.0.36", - "syn 2.0.61", + "syn 2.0.66", ] [[package]] name = "sp-runtime-interface-proc-macro" version = "17.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk#37b1544b51aeba183350d4c8d76987c32e6c9ca7" +source = "git+https://github.com/paritytech/polkadot-sdk#f66e693a6befef0956a3129254fbe568247c9c57" dependencies = [ "Inflector", "expander 2.1.0", "proc-macro-crate 3.1.0", - "proc-macro2 1.0.82", + "proc-macro2 1.0.85", "quote 1.0.36", - "syn 2.0.61", + "syn 2.0.66", ] [[package]] @@ -19935,7 +19912,7 @@ dependencies = [ "hash-db", "log", "parity-scale-codec", - "parking_lot 0.12.2", + "parking_lot 0.12.3", "pretty_assertions", "rand 0.8.5", "smallvec", @@ -19979,7 +19956,7 @@ version = "14.0.0" [[package]] name = "sp-std" version = "14.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk#37b1544b51aeba183350d4c8d76987c32e6c9ca7" +source = "git+https://github.com/paritytech/polkadot-sdk#f66e693a6befef0956a3129254fbe568247c9c57" [[package]] name = "sp-storage" @@ -19995,7 +19972,7 @@ dependencies = [ [[package]] name = "sp-storage" version = "19.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk#37b1544b51aeba183350d4c8d76987c32e6c9ca7" +source = "git+https://github.com/paritytech/polkadot-sdk#f66e693a6befef0956a3129254fbe568247c9c57" dependencies = [ "impl-serde", "parity-scale-codec", @@ -20040,7 +20017,7 @@ dependencies = [ [[package]] name = "sp-tracing" version = "16.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk#37b1544b51aeba183350d4c8d76987c32e6c9ca7" +source = "git+https://github.com/paritytech/polkadot-sdk#f66e693a6befef0956a3129254fbe568247c9c57" dependencies = [ "parity-scale-codec", "tracing", @@ -20081,7 +20058,7 @@ dependencies = [ "memory-db", "nohash-hasher", "parity-scale-codec", - "parking_lot 0.12.2", + "parking_lot 0.12.3", "rand 0.8.5", "scale-info", "schnellru", @@ -20117,10 +20094,10 @@ name = "sp-version-proc-macro" version = "13.0.0" dependencies = [ "parity-scale-codec", - "proc-macro2 1.0.82", + "proc-macro2 1.0.85", "quote 1.0.36", "sp-version", - "syn 2.0.61", + "syn 2.0.66", ] [[package]] @@ -20137,7 +20114,7 @@ dependencies = [ [[package]] name = "sp-wasm-interface" version = "20.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk#37b1544b51aeba183350d4c8d76987c32e6c9ca7" +source = "git+https://github.com/paritytech/polkadot-sdk#f66e693a6befef0956a3129254fbe568247c9c57" dependencies = [ "impl-trait-for-tuples", "log", @@ -20208,7 +20185,7 @@ checksum = "4743ce898933fbff7bbf414f497c459a782d496269644b3d650a398ae6a487ba" dependencies = [ "Inflector", "num-format", - "proc-macro2 1.0.82", + "proc-macro2 1.0.85", "quote 1.0.36", "serde", "serde_json", @@ -20233,7 +20210,7 @@ version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f07d54c4d01a1713eb363b55ba51595da15f6f1211435b71466460da022aa140" dependencies = [ - "proc-macro2 1.0.82", + "proc-macro2 1.0.85", "quote 1.0.36", "syn 1.0.109", ] @@ -20501,7 +20478,7 @@ checksum = "70a2595fc3aa78f2d0e45dd425b22282dd863273761cc77780914b2cf3003acf" dependencies = [ "cfg_aliases", "memchr", - "proc-macro2 1.0.82", + "proc-macro2 1.0.85", "quote 1.0.36", "syn 1.0.109", ] @@ -20576,7 +20553,7 @@ checksum = "dcb5ae327f9cc13b68763b5749770cb9e048a99bd9dfdfa58d0cf05d5f64afe0" dependencies = [ "heck 0.3.3", "proc-macro-error", - "proc-macro2 1.0.82", + "proc-macro2 1.0.85", "quote 1.0.36", "syn 1.0.109", ] @@ -20596,7 +20573,7 @@ version = "0.26.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5d8cec3501a5194c432b2b7976db6b7d10ec95c253208b45f83f7136aa985e29" dependencies = [ - "strum_macros 0.26.2", + "strum_macros 0.26.3", ] [[package]] @@ -20606,7 +20583,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1e385be0d24f186b4ce2f9982191e7101bb737312ad61c1f2f984f34bcf85d59" dependencies = [ "heck 0.4.1", - "proc-macro2 1.0.82", + "proc-macro2 1.0.85", "quote 1.0.36", "rustversion", "syn 1.0.109", @@ -20614,15 +20591,15 @@ dependencies = [ [[package]] name = "strum_macros" -version = "0.26.2" +version = "0.26.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c6cf59daf282c0a494ba14fd21610a0325f9f90ec9d1231dea26bcb1d696c946" +checksum = "f7993a8e3a9e88a00351486baae9522c91b123a088f76469e5bd5cc17198ea87" dependencies = [ - "heck 0.4.1", - "proc-macro2 1.0.82", + "heck 0.5.0", + "proc-macro2 1.0.85", "quote 1.0.36", "rustversion", - "syn 2.0.61", + "syn 2.0.66", ] [[package]] @@ -20904,7 +20881,7 @@ version = "2.0.0" dependencies = [ "futures", "parity-scale-codec", - "parking_lot 0.12.2", + "parking_lot 0.12.3", "sc-transaction-pool", "sc-transaction-pool-api", "sp-blockchain", @@ -20936,7 +20913,7 @@ dependencies = [ "sp-maybe-compressed-blob", "strum 0.26.2", "tempfile", - "toml 0.8.12", + "toml 0.8.13", "walkdir", "wasm-opt", ] @@ -21077,18 +21054,18 @@ version = "1.0.109" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" dependencies = [ - "proc-macro2 1.0.82", + "proc-macro2 1.0.85", "quote 1.0.36", "unicode-ident", ] [[package]] name = "syn" -version = "2.0.61" +version = "2.0.66" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c993ed8ccba56ae856363b1845da7266a7cb78e1d146c8a32d54b45a8b831fc9" +checksum = "c42f3f41a2de00b01c0aaad383c5a45241efc8b2d1eda5661812fda5f3cdcff5" dependencies = [ - "proc-macro2 1.0.82", + "proc-macro2 1.0.85", "quote 1.0.36", "unicode-ident", ] @@ -21100,9 +21077,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "86b837ef12ab88835251726eb12237655e61ec8dc8a280085d1961cdc3dfd047" dependencies = [ "paste", - "proc-macro2 1.0.82", + "proc-macro2 1.0.85", "quote 1.0.36", - "syn 2.0.61", + "syn 2.0.66", ] [[package]] @@ -21117,7 +21094,7 @@ version = "0.12.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f36bdaa60a83aca3921b5259d5400cbf5e90fc51931376a9bd4a0eb79aa7210f" dependencies = [ - "proc-macro2 1.0.82", + "proc-macro2 1.0.85", "quote 1.0.36", "syn 1.0.109", "unicode-xid 0.2.4", @@ -21358,9 +21335,9 @@ checksum = "23d434d3f8967a09480fb04132ebe0a3e088c173e6d0ee7897abbdf4eab0f8b9" [[package]] name = "thiserror" -version = "1.0.60" +version = "1.0.61" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "579e9083ca58dd9dcf91a9923bb9054071b9ebbd800b342194c9feb0ee89fc18" +checksum = "c546c80d6be4bc6a00c0f01730c08df82eaa7a7a61f11d656526506112cc1709" dependencies = [ "thiserror-impl", ] @@ -21380,20 +21357,20 @@ version = "1.0.50" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e4c60d69f36615a077cc7663b9cb8e42275722d23e58a7fa3d2c7f2915d09d04" dependencies = [ - "proc-macro2 1.0.82", + "proc-macro2 1.0.85", "quote 1.0.36", - "syn 2.0.61", + "syn 2.0.66", ] [[package]] name = "thiserror-impl" -version = "1.0.60" +version = "1.0.61" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2470041c06ec3ac1ab38d0356a6119054dedaea53e12fbefc0de730a1c08524" +checksum = "46c3384250002a6d5af4d114f2845d37b57521033f30d5c3f46c4d70e1197533" dependencies = [ - "proc-macro2 1.0.82", + "proc-macro2 1.0.85", "quote 1.0.36", - "syn 2.0.61", + "syn 2.0.66", ] [[package]] @@ -21534,16 +21511,16 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.37.0" +version = "1.38.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1adbebffeca75fcfd058afa480fb6c0b81e165a0323f9c9d39c9697e37c46787" +checksum = "ba4f4a02a7a80d6f274636f0aa95c7e383b912d41fe721a31f29e29698585a4a" dependencies = [ "backtrace", "bytes", "libc", "mio", "num_cpus", - "parking_lot 0.12.2", + "parking_lot 0.12.3", "pin-project-lite 0.2.14", "signal-hook-registry", "socket2 0.5.7", @@ -21553,13 +21530,13 @@ dependencies = [ [[package]] name = "tokio-macros" -version = "2.2.0" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b8a1e28f2deaa14e508979454cb3a223b10b938b45af148bc0986de36f1923b" +checksum = "5f5ae998a069d4b5aba8ee9dad856af7d520c3699e6159b185c2acd48155d39a" dependencies = [ - "proc-macro2 1.0.82", + "proc-macro2 1.0.85", "quote 1.0.36", - "syn 2.0.61", + "syn 2.0.66", ] [[package]] @@ -21659,21 +21636,21 @@ dependencies = [ [[package]] name = "toml" -version = "0.8.12" +version = "0.8.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e9dd1545e8208b4a5af1aa9bbd0b4cf7e9ea08fabc5d0a5c67fcaafa17433aa3" +checksum = "a4e43f8cc456c9704c851ae29c67e17ef65d2c30017c17a9765b89c382dc8bba" dependencies = [ "serde", "serde_spanned", "toml_datetime", - "toml_edit 0.22.12", + "toml_edit 0.22.13", ] [[package]] name = "toml_datetime" -version = "0.6.5" +version = "0.6.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3550f4e9685620ac18a50ed434eb3aec30db8ba93b0287467bca5826ea25baf1" +checksum = "4badfd56924ae69bcc9039335b2e017639ce3f9b001c393c1b2d1ef846ce2cbf" dependencies = [ "serde", ] @@ -21702,15 +21679,15 @@ dependencies = [ [[package]] name = "toml_edit" -version = "0.22.12" +version = "0.22.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3328d4f68a705b2a4498da1d580585d39a6510f98318a2cec3018a7ec61ddef" +checksum = "c127785850e8c20836d49732ae6abfa47616e60bf9d9f57c43c250361a9db96c" dependencies = [ "indexmap 2.2.6", "serde", "serde_spanned", "toml_datetime", - "winnow 0.6.8", + "winnow 0.6.9", ] [[package]] @@ -21776,9 +21753,9 @@ version = "0.1.27" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" dependencies = [ - "proc-macro2 1.0.82", + "proc-macro2 1.0.85", "quote 1.0.36", - "syn 2.0.61", + "syn 2.0.66", ] [[package]] @@ -21818,9 +21795,9 @@ dependencies = [ "assert_matches", "expander 2.1.0", "proc-macro-crate 3.1.0", - "proc-macro2 1.0.82", + "proc-macro2 1.0.85", "quote 1.0.36", - "syn 2.0.61", + "syn 2.0.66", ] [[package]] @@ -21844,7 +21821,7 @@ dependencies = [ "matchers", "nu-ansi-term", "once_cell", - "parking_lot 0.12.2", + "parking_lot 0.12.3", "regex", "sharded-slab", "smallvec", @@ -21872,9 +21849,9 @@ dependencies = [ [[package]] name = "trie-db" -version = "0.29.0" +version = "0.29.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "65ed83be775d85ebb0e272914fff6462c39b3ddd6dc67b5c1c41271aad280c69" +checksum = "0c992b4f40c234a074d48a757efeabb1a6be88af84c0c23f7ca158950cb0ae7f" dependencies = [ "hash-db", "log", @@ -21963,7 +21940,7 @@ dependencies = [ "ipconfig", "lazy_static", "lru-cache", - "parking_lot 0.12.2", + "parking_lot 0.12.3", "resolv-conf", "smallvec", "thiserror", @@ -21983,7 +21960,7 @@ dependencies = [ "ipconfig", "lru-cache", "once_cell", - "parking_lot 0.12.2", + "parking_lot 0.12.3", "rand 0.8.5", "resolv-conf", "smallvec", @@ -22001,9 +21978,9 @@ checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" [[package]] name = "trybuild" -version = "1.0.94" +version = "1.0.96" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfe21c256d6fba8499cf9d9b1c24971bec43a369d81c52e024adc7670cf112df" +checksum = "33a5f13f11071020bb12de7a16b925d2d58636175c20c11dc5f96cb64bb6c9b3" dependencies = [ "dissimilar", "glob", @@ -22011,7 +21988,7 @@ dependencies = [ "serde_derive", "serde_json", "termcolor", - "toml 0.8.12", + "toml 0.8.13", ] [[package]] @@ -22058,6 +22035,12 @@ dependencies = [ "static_assertions", ] +[[package]] +name = "typeid" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "059d83cc991e7a42fc37bd50941885db0888e34209f8cfd9aab07ddec03bc9cf" + [[package]] name = "typenum" version = "1.17.0" @@ -22271,9 +22254,9 @@ checksum = "6a02e4885ed3bc0f2de90ea6dd45ebcbb66dacffe03547fadbb0eeae2770887d" [[package]] name = "w3f-bls" -version = "0.1.3" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7335e4c132c28cc43caef6adb339789e599e39adbe78da0c4d547fad48cbc331" +checksum = "9c5da5fa2c6afa2c9158eaa7cd9aee249765eb32b5fb0c63ad8b9e79336a47ec" dependencies = [ "ark-bls12-377", "ark-bls12-381", @@ -22304,9 +22287,9 @@ dependencies = [ [[package]] name = "waker-fn" -version = "1.1.1" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3c4517f54858c779bbcbf228f4fca63d121bf85fbecb2dc578cdf4a39395690" +checksum = "317211a0dc0ceedd78fb2ca9a44aed3d7b9b26f81870d485c07122b4350673b7" [[package]] name = "walkdir" @@ -22369,9 +22352,9 @@ dependencies = [ "bumpalo", "log", "once_cell", - "proc-macro2 1.0.82", + "proc-macro2 1.0.85", "quote 1.0.36", - "syn 2.0.61", + "syn 2.0.66", "wasm-bindgen-shared", ] @@ -22403,9 +22386,9 @@ version = "0.2.92" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e94f17b526d0a461a191c78ea52bbce64071ed5c04c9ffe424dcb38f74171bb7" dependencies = [ - "proc-macro2 1.0.82", + "proc-macro2 1.0.85", "quote 1.0.36", - "syn 2.0.61", + "syn 2.0.66", "wasm-bindgen-backend", "wasm-bindgen-shared", ] @@ -22436,16 +22419,16 @@ version = "0.3.42" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b7f89739351a2e03cb94beb799d47fb2cac01759b40ec441f7de39b00cbf7ef0" dependencies = [ - "proc-macro2 1.0.82", + "proc-macro2 1.0.85", "quote 1.0.36", - "syn 2.0.61", + "syn 2.0.66", ] [[package]] name = "wasm-encoder" -version = "0.207.0" +version = "0.209.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d996306fb3aeaee0d9157adbe2f670df0236caf19f6728b221e92d0f27b3fe17" +checksum = "7b4a05336882dae732ce6bd48b7e11fe597293cb72c13da4f35d7d5f8d53b2a7" dependencies = [ "leb128", ] @@ -22761,9 +22744,9 @@ dependencies = [ [[package]] name = "wast" -version = "207.0.0" +version = "209.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e40be9fd494bfa501309487d2dc0b3f229be6842464ecbdc54eac2679c84c93" +checksum = "8fffef2ff6147e4d12e972765fd75332c6a11c722571d4ab7a780d81ffc8f0a4" dependencies = [ "bumpalo", "leb128", @@ -22774,9 +22757,9 @@ dependencies = [ [[package]] name = "wat" -version = "1.207.0" +version = "1.209.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8eb2b15e2d5f300f5e1209e7dc237f2549edbd4203655b6c6cab5cf180561ee7" +checksum = "42203ec0271d113f8eb1f77ebc624886530cecb35915a7f63a497131f16e4d24" dependencies = [ "wast", ] @@ -22990,9 +22973,9 @@ dependencies = [ [[package]] name = "wide" -version = "0.7.17" +version = "0.7.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f0e39d2c603fdc0504b12b458cf1f34e0b937ed2f4f2dc20796e3e86f34e11f" +checksum = "cd8dc749a1b03f3c255a3064a4f5c0ee5ed09b7c6bc6d4525d31f779cd74d7fc" dependencies = [ "bytemuck", "safe_arch", @@ -23304,9 +23287,9 @@ dependencies = [ [[package]] name = "winnow" -version = "0.6.8" +version = "0.6.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3c52e9c97a68071b23e836c9380edae937f17b9c4667bd021973efc689f618d" +checksum = "86c949fede1d13936a99f14fafd3e76fd642b556dd2ce96287fbe2e0151bfac6" dependencies = [ "memchr", ] @@ -23395,7 +23378,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8da84f1a25939b27f6820d92aed108f83ff920fdf11a7b19366c27c4cda81d4f" dependencies = [ "libc", - "linux-raw-sys 0.4.13", + "linux-raw-sys 0.4.14", "rustix 0.38.34", ] @@ -23485,10 +23468,10 @@ name = "xcm-procedural" version = "7.0.0" dependencies = [ "Inflector", - "proc-macro2 1.0.82", + "proc-macro2 1.0.85", "quote 1.0.36", "staging-xcm", - "syn 2.0.61", + "syn 2.0.66", "trybuild", ] @@ -23573,7 +23556,7 @@ dependencies = [ "futures", "log", "nohash-hasher", - "parking_lot 0.12.2", + "parking_lot 0.12.3", "rand 0.8.5", "static_assertions", ] @@ -23608,16 +23591,16 @@ version = "0.7.34" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "15e934569e47891f7d9411f1a451d947a60e000ab3bd24fbb970f000387d1b3b" dependencies = [ - "proc-macro2 1.0.82", + "proc-macro2 1.0.85", "quote 1.0.36", - "syn 2.0.61", + "syn 2.0.66", ] [[package]] name = "zeroize" -version = "1.7.0" +version = "1.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "525b4ec142c6b68a2d10f01f7bbf6755599ca3f81ea53b8431b7dd348f5fdb2d" +checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde" dependencies = [ "zeroize_derive", ] @@ -23628,9 +23611,9 @@ version = "1.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" dependencies = [ - "proc-macro2 1.0.82", + "proc-macro2 1.0.85", "quote 1.0.36", - "syn 2.0.61", + "syn 2.0.66", ] [[package]] diff --git a/polkadot/runtime/westend/src/lib.rs b/polkadot/runtime/westend/src/lib.rs index 283aa9c5be69..578f822352d5 100644 --- a/polkadot/runtime/westend/src/lib.rs +++ b/polkadot/runtime/westend/src/lib.rs @@ -583,7 +583,7 @@ parameter_types! { pub const VoterBagThresholds: &'static [u64] = &bag_thresholds::VOTER_THRESHOLDS; pub const TargetBagThresholds: &'static [u128] = &bag_thresholds::TARGET_THRESHOLDS; - pub const VoterUpdateMode: pallet_stake_tracker::VoterUpdateMode = pallet_stake_tracker::VoterUpdateMode::Strict; + pub const VoterUpdateMode: pallet_stake_tracker::VoterUpdateMode = pallet_stake_tracker::VoterUpdateMode::Lazy; } type VoterBagsListInstance = pallet_bags_list::Instance1; @@ -1685,8 +1685,7 @@ pub mod migrations { } /// Unreleased migrations. Add new ones here: - pub type Unreleased = - (pallet_staking::migrations::single_block::v15::MigrateV14ToV15,); + pub type Unreleased = (); } /// Unchecked extrinsic type as expected by this runtime. diff --git a/polkadot/runtime/westend/src/weights/pallet_staking.rs b/polkadot/runtime/westend/src/weights/pallet_staking.rs index 0db16d5d47db..5914b2667cb8 100644 --- a/polkadot/runtime/westend/src/weights/pallet_staking.rs +++ b/polkadot/runtime/westend/src/weights/pallet_staking.rs @@ -17,9 +17,9 @@ //! Autogenerated weights for `pallet_staking` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 32.0.0 -//! DATE: 2024-03-27, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: 2024-06-01, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` //! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `runner-h2rr8wx7-project-674-concurrent-0`, CPU: `Intel(R) Xeon(R) CPU @ 2.60GHz` +//! HOSTNAME: `runner-1pho9goo-project-674-concurrent-0`, CPU: `Intel(R) Xeon(R) CPU @ 2.60GHz` //! WASM-EXECUTION: `Compiled`, CHAIN: `Some("westend-dev")`, DB CACHE: 1024 // Executed Command: @@ -52,43 +52,57 @@ impl pallet_staking::WeightInfo for WeightInfo { /// Proof: `Staking::Bonded` (`max_values`: None, `max_size`: Some(72), added: 2547, mode: `MaxEncodedLen`) /// Storage: `Staking::Ledger` (r:1 w:1) /// Proof: `Staking::Ledger` (`max_values`: None, `max_size`: Some(1091), added: 3566, mode: `MaxEncodedLen`) + /// Storage: `Staking::VirtualStakers` (r:1 w:0) + /// Proof: `Staking::VirtualStakers` (`max_values`: None, `max_size`: Some(40), added: 2515, mode: `MaxEncodedLen`) /// Storage: `Balances::Locks` (r:1 w:1) /// Proof: `Balances::Locks` (`max_values`: None, `max_size`: Some(1299), added: 3774, mode: `MaxEncodedLen`) /// Storage: `Balances::Freezes` (r:1 w:0) /// Proof: `Balances::Freezes` (`max_values`: None, `max_size`: Some(67), added: 2542, mode: `MaxEncodedLen`) + /// Storage: `Staking::Validators` (r:1 w:0) + /// Proof: `Staking::Validators` (`max_values`: None, `max_size`: Some(45), added: 2520, mode: `MaxEncodedLen`) + /// Storage: `Staking::Nominators` (r:1 w:0) + /// Proof: `Staking::Nominators` (`max_values`: None, `max_size`: Some(558), added: 3033, mode: `MaxEncodedLen`) /// Storage: `Staking::Payee` (r:0 w:1) /// Proof: `Staking::Payee` (`max_values`: None, `max_size`: Some(73), added: 2548, mode: `MaxEncodedLen`) fn bond() -> Weight { // Proof Size summary in bytes: - // Measured: `1009` + // Measured: `1068` // Estimated: `4764` - // Minimum execution time: 40_585_000 picoseconds. - Weight::from_parts(41_800_000, 0) + // Minimum execution time: 54_643_000 picoseconds. + Weight::from_parts(55_847_000, 0) .saturating_add(Weight::from_parts(0, 4764)) - .saturating_add(T::DbWeight::get().reads(4)) + .saturating_add(T::DbWeight::get().reads(7)) .saturating_add(T::DbWeight::get().writes(4)) } /// Storage: `Staking::Bonded` (r:1 w:0) /// Proof: `Staking::Bonded` (`max_values`: None, `max_size`: Some(72), added: 2547, mode: `MaxEncodedLen`) /// Storage: `Staking::Ledger` (r:1 w:1) /// Proof: `Staking::Ledger` (`max_values`: None, `max_size`: Some(1091), added: 3566, mode: `MaxEncodedLen`) + /// Storage: `Staking::VirtualStakers` (r:1 w:0) + /// Proof: `Staking::VirtualStakers` (`max_values`: None, `max_size`: Some(40), added: 2515, mode: `MaxEncodedLen`) /// Storage: `Balances::Locks` (r:1 w:1) /// Proof: `Balances::Locks` (`max_values`: None, `max_size`: Some(1299), added: 3774, mode: `MaxEncodedLen`) /// Storage: `Balances::Freezes` (r:1 w:0) /// Proof: `Balances::Freezes` (`max_values`: None, `max_size`: Some(67), added: 2542, mode: `MaxEncodedLen`) + /// Storage: `Staking::Validators` (r:1 w:0) + /// Proof: `Staking::Validators` (`max_values`: None, `max_size`: Some(45), added: 2520, mode: `MaxEncodedLen`) + /// Storage: `Staking::Nominators` (r:1 w:0) + /// Proof: `Staking::Nominators` (`max_values`: None, `max_size`: Some(558), added: 3033, mode: `MaxEncodedLen`) /// Storage: `VoterList::ListNodes` (r:3 w:3) /// Proof: `VoterList::ListNodes` (`max_values`: None, `max_size`: Some(154), added: 2629, mode: `MaxEncodedLen`) /// Storage: `VoterList::ListBags` (r:2 w:2) /// Proof: `VoterList::ListBags` (`max_values`: None, `max_size`: Some(82), added: 2557, mode: `MaxEncodedLen`) + /// Storage: `TargetList::ListNodes` (r:1 w:1) + /// Proof: `TargetList::ListNodes` (`max_values`: None, `max_size`: Some(170), added: 2645, mode: `MaxEncodedLen`) fn bond_extra() -> Weight { // Proof Size summary in bytes: - // Measured: `1921` + // Measured: `2596` // Estimated: `8877` - // Minimum execution time: 81_809_000 picoseconds. - Weight::from_parts(84_387_000, 0) + // Minimum execution time: 122_367_000 picoseconds. + Weight::from_parts(125_973_000, 0) .saturating_add(Weight::from_parts(0, 8877)) - .saturating_add(T::DbWeight::get().reads(9)) - .saturating_add(T::DbWeight::get().writes(7)) + .saturating_add(T::DbWeight::get().reads(13)) + .saturating_add(T::DbWeight::get().writes(8)) } /// Storage: `Staking::Ledger` (r:1 w:1) /// Proof: `Staking::Ledger` (`max_values`: None, `max_size`: Some(1091), added: 3566, mode: `MaxEncodedLen`) @@ -100,23 +114,29 @@ impl pallet_staking::WeightInfo for WeightInfo { /// Proof: `Staking::MinNominatorBond` (`max_values`: Some(1), `max_size`: Some(16), added: 511, mode: `MaxEncodedLen`) /// Storage: `Staking::CurrentEra` (r:1 w:0) /// Proof: `Staking::CurrentEra` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) + /// Storage: `Staking::VirtualStakers` (r:1 w:0) + /// Proof: `Staking::VirtualStakers` (`max_values`: None, `max_size`: Some(40), added: 2515, mode: `MaxEncodedLen`) /// Storage: `Balances::Locks` (r:1 w:1) /// Proof: `Balances::Locks` (`max_values`: None, `max_size`: Some(1299), added: 3774, mode: `MaxEncodedLen`) /// Storage: `Balances::Freezes` (r:1 w:0) /// Proof: `Balances::Freezes` (`max_values`: None, `max_size`: Some(67), added: 2542, mode: `MaxEncodedLen`) + /// Storage: `Staking::Validators` (r:1 w:0) + /// Proof: `Staking::Validators` (`max_values`: None, `max_size`: Some(45), added: 2520, mode: `MaxEncodedLen`) /// Storage: `VoterList::ListNodes` (r:3 w:3) /// Proof: `VoterList::ListNodes` (`max_values`: None, `max_size`: Some(154), added: 2629, mode: `MaxEncodedLen`) /// Storage: `VoterList::ListBags` (r:2 w:2) /// Proof: `VoterList::ListBags` (`max_values`: None, `max_size`: Some(82), added: 2557, mode: `MaxEncodedLen`) + /// Storage: `TargetList::ListNodes` (r:1 w:1) + /// Proof: `TargetList::ListNodes` (`max_values`: None, `max_size`: Some(170), added: 2645, mode: `MaxEncodedLen`) fn unbond() -> Weight { // Proof Size summary in bytes: - // Measured: `2128` + // Measured: `2634` // Estimated: `8877` - // Minimum execution time: 89_419_000 picoseconds. - Weight::from_parts(91_237_000, 0) + // Minimum execution time: 121_036_000 picoseconds. + Weight::from_parts(123_470_000, 0) .saturating_add(Weight::from_parts(0, 8877)) - .saturating_add(T::DbWeight::get().reads(12)) - .saturating_add(T::DbWeight::get().writes(7)) + .saturating_add(T::DbWeight::get().reads(15)) + .saturating_add(T::DbWeight::get().writes(8)) } /// Storage: `Staking::Ledger` (r:1 w:1) /// Proof: `Staking::Ledger` (`max_values`: None, `max_size`: Some(1091), added: 3566, mode: `MaxEncodedLen`) @@ -124,23 +144,29 @@ impl pallet_staking::WeightInfo for WeightInfo { /// Proof: `Staking::Bonded` (`max_values`: None, `max_size`: Some(72), added: 2547, mode: `MaxEncodedLen`) /// Storage: `Staking::CurrentEra` (r:1 w:0) /// Proof: `Staking::CurrentEra` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) + /// Storage: `Staking::VirtualStakers` (r:1 w:0) + /// Proof: `Staking::VirtualStakers` (`max_values`: None, `max_size`: Some(40), added: 2515, mode: `MaxEncodedLen`) /// Storage: `Balances::Locks` (r:1 w:1) /// Proof: `Balances::Locks` (`max_values`: None, `max_size`: Some(1299), added: 3774, mode: `MaxEncodedLen`) /// Storage: `Balances::Freezes` (r:1 w:0) /// Proof: `Balances::Freezes` (`max_values`: None, `max_size`: Some(67), added: 2542, mode: `MaxEncodedLen`) + /// Storage: `Staking::Validators` (r:1 w:0) + /// Proof: `Staking::Validators` (`max_values`: None, `max_size`: Some(45), added: 2520, mode: `MaxEncodedLen`) + /// Storage: `Staking::Nominators` (r:1 w:0) + /// Proof: `Staking::Nominators` (`max_values`: None, `max_size`: Some(558), added: 3033, mode: `MaxEncodedLen`) /// Storage: `NominationPools::ReversePoolIdLookup` (r:1 w:0) /// Proof: `NominationPools::ReversePoolIdLookup` (`max_values`: None, `max_size`: Some(44), added: 2519, mode: `MaxEncodedLen`) /// The range of component `s` is `[0, 100]`. fn withdraw_unbonded_update(s: u32, ) -> Weight { // Proof Size summary in bytes: - // Measured: `1223` + // Measured: `1342` // Estimated: `4764` - // Minimum execution time: 45_152_000 picoseconds. - Weight::from_parts(46_460_819, 0) + // Minimum execution time: 56_542_000 picoseconds. + Weight::from_parts(58_269_306, 0) .saturating_add(Weight::from_parts(0, 4764)) - // Standard Error: 972 - .saturating_add(Weight::from_parts(55_473, 0).saturating_mul(s.into())) - .saturating_add(T::DbWeight::get().reads(6)) + // Standard Error: 1_008 + .saturating_add(Weight::from_parts(56_385, 0).saturating_mul(s.into())) + .saturating_add(T::DbWeight::get().reads(9)) .saturating_add(T::DbWeight::get().writes(2)) } /// Storage: `Staking::Ledger` (r:1 w:1) @@ -151,22 +177,28 @@ impl pallet_staking::WeightInfo for WeightInfo { /// Proof: `Staking::CurrentEra` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) /// Storage: `Staking::SlashingSpans` (r:1 w:1) /// Proof: `Staking::SlashingSpans` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `Balances::Locks` (r:1 w:1) - /// Proof: `Balances::Locks` (`max_values`: None, `max_size`: Some(1299), added: 3774, mode: `MaxEncodedLen`) - /// Storage: `Balances::Freezes` (r:1 w:0) - /// Proof: `Balances::Freezes` (`max_values`: None, `max_size`: Some(67), added: 2542, mode: `MaxEncodedLen`) /// Storage: `Staking::Validators` (r:1 w:0) /// Proof: `Staking::Validators` (`max_values`: None, `max_size`: Some(45), added: 2520, mode: `MaxEncodedLen`) /// Storage: `Staking::Nominators` (r:1 w:1) /// Proof: `Staking::Nominators` (`max_values`: None, `max_size`: Some(558), added: 3033, mode: `MaxEncodedLen`) /// Storage: `Staking::CounterForNominators` (r:1 w:1) /// Proof: `Staking::CounterForNominators` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) + /// Storage: `TargetList::ListNodes` (r:1 w:1) + /// Proof: `TargetList::ListNodes` (`max_values`: None, `max_size`: Some(170), added: 2645, mode: `MaxEncodedLen`) + /// Storage: `TargetList::ListBags` (r:2 w:2) + /// Proof: `TargetList::ListBags` (`max_values`: None, `max_size`: Some(90), added: 2565, mode: `MaxEncodedLen`) /// Storage: `VoterList::ListNodes` (r:2 w:2) /// Proof: `VoterList::ListNodes` (`max_values`: None, `max_size`: Some(154), added: 2629, mode: `MaxEncodedLen`) /// Storage: `VoterList::ListBags` (r:1 w:1) /// Proof: `VoterList::ListBags` (`max_values`: None, `max_size`: Some(82), added: 2557, mode: `MaxEncodedLen`) /// Storage: `VoterList::CounterForListNodes` (r:1 w:1) /// Proof: `VoterList::CounterForListNodes` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) + /// Storage: `Staking::VirtualStakers` (r:1 w:1) + /// Proof: `Staking::VirtualStakers` (`max_values`: None, `max_size`: Some(40), added: 2515, mode: `MaxEncodedLen`) + /// Storage: `Balances::Locks` (r:1 w:1) + /// Proof: `Balances::Locks` (`max_values`: None, `max_size`: Some(1299), added: 3774, mode: `MaxEncodedLen`) + /// Storage: `Balances::Freezes` (r:1 w:0) + /// Proof: `Balances::Freezes` (`max_values`: None, `max_size`: Some(67), added: 2542, mode: `MaxEncodedLen`) /// Storage: `Staking::Payee` (r:0 w:1) /// Proof: `Staking::Payee` (`max_values`: None, `max_size`: Some(73), added: 2548, mode: `MaxEncodedLen`) /// Storage: `Staking::SpanSlash` (r:0 w:100) @@ -174,15 +206,15 @@ impl pallet_staking::WeightInfo for WeightInfo { /// The range of component `s` is `[0, 100]`. fn withdraw_unbonded_kill(s: u32, ) -> Weight { // Proof Size summary in bytes: - // Measured: `2127 + s * (4 ±0)` + // Measured: `2753 + s * (4 ±0)` // Estimated: `6248 + s * (4 ±0)` - // Minimum execution time: 82_762_000 picoseconds. - Weight::from_parts(91_035_077, 0) + // Minimum execution time: 123_405_000 picoseconds. + Weight::from_parts(135_753_362, 0) .saturating_add(Weight::from_parts(0, 6248)) - // Standard Error: 3_771 - .saturating_add(Weight::from_parts(1_217_871, 0).saturating_mul(s.into())) - .saturating_add(T::DbWeight::get().reads(13)) - .saturating_add(T::DbWeight::get().writes(11)) + // Standard Error: 5_266 + .saturating_add(Weight::from_parts(1_333_676, 0).saturating_mul(s.into())) + .saturating_add(T::DbWeight::get().reads(17)) + .saturating_add(T::DbWeight::get().writes(15)) .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(s.into()))) .saturating_add(Weight::from_parts(0, 4).saturating_mul(s.into())) } @@ -198,8 +230,14 @@ impl pallet_staking::WeightInfo for WeightInfo { /// Proof: `Staking::Validators` (`max_values`: None, `max_size`: Some(45), added: 2520, mode: `MaxEncodedLen`) /// Storage: `Staking::MaxValidatorsCount` (r:1 w:0) /// Proof: `Staking::MaxValidatorsCount` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) - /// Storage: `Staking::Nominators` (r:1 w:0) + /// Storage: `Staking::Nominators` (r:1 w:1) /// Proof: `Staking::Nominators` (`max_values`: None, `max_size`: Some(558), added: 3033, mode: `MaxEncodedLen`) + /// Storage: `TargetList::ListNodes` (r:1 w:1) + /// Proof: `TargetList::ListNodes` (`max_values`: None, `max_size`: Some(170), added: 2645, mode: `MaxEncodedLen`) + /// Storage: `TargetList::ListBags` (r:1 w:1) + /// Proof: `TargetList::ListBags` (`max_values`: None, `max_size`: Some(90), added: 2565, mode: `MaxEncodedLen`) + /// Storage: `TargetList::CounterForListNodes` (r:1 w:1) + /// Proof: `TargetList::CounterForListNodes` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) /// Storage: `VoterList::ListNodes` (r:1 w:1) /// Proof: `VoterList::ListNodes` (`max_values`: None, `max_size`: Some(154), added: 2629, mode: `MaxEncodedLen`) /// Storage: `VoterList::ListBags` (r:1 w:1) @@ -210,42 +248,49 @@ impl pallet_staking::WeightInfo for WeightInfo { /// Proof: `Staking::CounterForValidators` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) fn validate() -> Weight { // Proof Size summary in bytes: - // Measured: `1301` + // Measured: `1536` // Estimated: `4556` - // Minimum execution time: 50_555_000 picoseconds. - Weight::from_parts(52_052_000, 0) + // Minimum execution time: 73_988_000 picoseconds. + Weight::from_parts(76_337_000, 0) .saturating_add(Weight::from_parts(0, 4556)) - .saturating_add(T::DbWeight::get().reads(11)) - .saturating_add(T::DbWeight::get().writes(5)) + .saturating_add(T::DbWeight::get().reads(14)) + .saturating_add(T::DbWeight::get().writes(9)) } - /// Storage: `Staking::Ledger` (r:1 w:0) + /// Storage: `Staking::Ledger` (r:129 w:0) /// Proof: `Staking::Ledger` (`max_values`: None, `max_size`: Some(1091), added: 3566, mode: `MaxEncodedLen`) - /// Storage: `Staking::Bonded` (r:1 w:0) + /// Storage: `Staking::Bonded` (r:129 w:0) /// Proof: `Staking::Bonded` (`max_values`: None, `max_size`: Some(72), added: 2547, mode: `MaxEncodedLen`) /// Storage: `Staking::Nominators` (r:128 w:128) /// Proof: `Staking::Nominators` (`max_values`: None, `max_size`: Some(558), added: 3033, mode: `MaxEncodedLen`) + /// Storage: `Staking::Validators` (r:128 w:0) + /// Proof: `Staking::Validators` (`max_values`: None, `max_size`: Some(45), added: 2520, mode: `MaxEncodedLen`) + /// Storage: `TargetList::ListNodes` (r:2 w:2) + /// Proof: `TargetList::ListNodes` (`max_values`: None, `max_size`: Some(170), added: 2645, mode: `MaxEncodedLen`) + /// Storage: `TargetList::ListBags` (r:34 w:34) + /// Proof: `TargetList::ListBags` (`max_values`: None, `max_size`: Some(90), added: 2565, mode: `MaxEncodedLen`) /// The range of component `k` is `[1, 128]`. fn kick(k: u32, ) -> Weight { // Proof Size summary in bytes: - // Measured: `1778 + k * (572 ±0)` - // Estimated: `4556 + k * (3033 ±0)` - // Minimum execution time: 35_037_000 picoseconds. - Weight::from_parts(35_081_878, 0) - .saturating_add(Weight::from_parts(0, 4556)) - // Standard Error: 5_473 - .saturating_add(Weight::from_parts(6_667_924, 0).saturating_mul(k.into())) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(k.into()))) + // Measured: `3558 + k * (747 ±0)` + // Estimated: `33341 + k * (3566 ±0)` + // Minimum execution time: 95_021_000 picoseconds. + Weight::from_parts(123_030_564, 0) + .saturating_add(Weight::from_parts(0, 33341)) + // Standard Error: 35_124 + .saturating_add(Weight::from_parts(36_381_254, 0).saturating_mul(k.into())) + .saturating_add(T::DbWeight::get().reads(17)) + .saturating_add(T::DbWeight::get().reads((4_u64).saturating_mul(k.into()))) + .saturating_add(T::DbWeight::get().writes(15)) .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(k.into()))) - .saturating_add(Weight::from_parts(0, 3033).saturating_mul(k.into())) + .saturating_add(Weight::from_parts(0, 3566).saturating_mul(k.into())) } /// Storage: `Staking::Ledger` (r:1 w:0) /// Proof: `Staking::Ledger` (`max_values`: None, `max_size`: Some(1091), added: 3566, mode: `MaxEncodedLen`) - /// Storage: `Staking::Bonded` (r:1 w:0) + /// Storage: `Staking::Bonded` (r:17 w:0) /// Proof: `Staking::Bonded` (`max_values`: None, `max_size`: Some(72), added: 2547, mode: `MaxEncodedLen`) /// Storage: `Staking::MinNominatorBond` (r:1 w:0) /// Proof: `Staking::MinNominatorBond` (`max_values`: Some(1), `max_size`: Some(16), added: 511, mode: `MaxEncodedLen`) - /// Storage: `Staking::Nominators` (r:1 w:1) + /// Storage: `Staking::Nominators` (r:17 w:1) /// Proof: `Staking::Nominators` (`max_values`: None, `max_size`: Some(558), added: 3033, mode: `MaxEncodedLen`) /// Storage: `Staking::MaxNominatorsCount` (r:1 w:0) /// Proof: `Staking::MaxNominatorsCount` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) @@ -253,28 +298,33 @@ impl pallet_staking::WeightInfo for WeightInfo { /// Proof: `Staking::Validators` (`max_values`: None, `max_size`: Some(45), added: 2520, mode: `MaxEncodedLen`) /// Storage: `Staking::CurrentEra` (r:1 w:0) /// Proof: `Staking::CurrentEra` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) + /// Storage: `Staking::CounterForNominators` (r:1 w:1) + /// Proof: `Staking::CounterForNominators` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) /// Storage: `VoterList::ListNodes` (r:2 w:2) /// Proof: `VoterList::ListNodes` (`max_values`: None, `max_size`: Some(154), added: 2629, mode: `MaxEncodedLen`) /// Storage: `VoterList::ListBags` (r:1 w:1) /// Proof: `VoterList::ListBags` (`max_values`: None, `max_size`: Some(82), added: 2557, mode: `MaxEncodedLen`) /// Storage: `VoterList::CounterForListNodes` (r:1 w:1) /// Proof: `VoterList::CounterForListNodes` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) - /// Storage: `Staking::CounterForNominators` (r:1 w:1) - /// Proof: `Staking::CounterForNominators` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) + /// Storage: `TargetList::ListNodes` (r:16 w:16) + /// Proof: `TargetList::ListNodes` (`max_values`: None, `max_size`: Some(170), added: 2645, mode: `MaxEncodedLen`) + /// Storage: `TargetList::ListBags` (r:2 w:2) + /// Proof: `TargetList::ListBags` (`max_values`: None, `max_size`: Some(90), added: 2565, mode: `MaxEncodedLen`) /// The range of component `n` is `[1, 16]`. fn nominate(n: u32, ) -> Weight { // Proof Size summary in bytes: - // Measured: `1797 + n * (102 ±0)` - // Estimated: `6248 + n * (2520 ±0)` - // Minimum execution time: 62_098_000 picoseconds. - Weight::from_parts(60_154_061, 0) + // Measured: `2281 + n * (348 ±0)` + // Estimated: `6248 + n * (3033 ±0)` + // Minimum execution time: 105_592_000 picoseconds. + Weight::from_parts(81_899_502, 0) .saturating_add(Weight::from_parts(0, 6248)) - // Standard Error: 19_257 - .saturating_add(Weight::from_parts(3_839_855, 0).saturating_mul(n.into())) - .saturating_add(T::DbWeight::get().reads(12)) - .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(n.into()))) - .saturating_add(T::DbWeight::get().writes(6)) - .saturating_add(Weight::from_parts(0, 2520).saturating_mul(n.into())) + // Standard Error: 35_783 + .saturating_add(Weight::from_parts(32_338_384, 0).saturating_mul(n.into())) + .saturating_add(T::DbWeight::get().reads(14)) + .saturating_add(T::DbWeight::get().reads((4_u64).saturating_mul(n.into()))) + .saturating_add(T::DbWeight::get().writes(8)) + .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(n.into()))) + .saturating_add(Weight::from_parts(0, 3033).saturating_mul(n.into())) } /// Storage: `Staking::Ledger` (r:1 w:0) /// Proof: `Staking::Ledger` (`max_values`: None, `max_size`: Some(1091), added: 3566, mode: `MaxEncodedLen`) @@ -286,6 +336,10 @@ impl pallet_staking::WeightInfo for WeightInfo { /// Proof: `Staking::Nominators` (`max_values`: None, `max_size`: Some(558), added: 3033, mode: `MaxEncodedLen`) /// Storage: `Staking::CounterForNominators` (r:1 w:1) /// Proof: `Staking::CounterForNominators` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) + /// Storage: `TargetList::ListNodes` (r:1 w:1) + /// Proof: `TargetList::ListNodes` (`max_values`: None, `max_size`: Some(170), added: 2645, mode: `MaxEncodedLen`) + /// Storage: `TargetList::ListBags` (r:2 w:2) + /// Proof: `TargetList::ListBags` (`max_values`: None, `max_size`: Some(90), added: 2565, mode: `MaxEncodedLen`) /// Storage: `VoterList::ListNodes` (r:2 w:2) /// Proof: `VoterList::ListNodes` (`max_values`: None, `max_size`: Some(154), added: 2629, mode: `MaxEncodedLen`) /// Storage: `VoterList::ListBags` (r:1 w:1) @@ -294,13 +348,13 @@ impl pallet_staking::WeightInfo for WeightInfo { /// Proof: `VoterList::CounterForListNodes` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) fn chill() -> Weight { // Proof Size summary in bytes: - // Measured: `1747` + // Measured: `2340` // Estimated: `6248` - // Minimum execution time: 54_993_000 picoseconds. - Weight::from_parts(56_698_000, 0) + // Minimum execution time: 88_979_000 picoseconds. + Weight::from_parts(90_225_000, 0) .saturating_add(Weight::from_parts(0, 6248)) - .saturating_add(T::DbWeight::get().reads(9)) - .saturating_add(T::DbWeight::get().writes(6)) + .saturating_add(T::DbWeight::get().reads(12)) + .saturating_add(T::DbWeight::get().writes(9)) } /// Storage: `Staking::Ledger` (r:1 w:0) /// Proof: `Staking::Ledger` (`max_values`: None, `max_size`: Some(1091), added: 3566, mode: `MaxEncodedLen`) @@ -312,8 +366,8 @@ impl pallet_staking::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `865` // Estimated: `4556` - // Minimum execution time: 18_100_000 picoseconds. - Weight::from_parts(18_547_000, 0) + // Minimum execution time: 18_741_000 picoseconds. + Weight::from_parts(19_262_000, 0) .saturating_add(Weight::from_parts(0, 4556)) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(1)) @@ -328,8 +382,8 @@ impl pallet_staking::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `932` // Estimated: `4556` - // Minimum execution time: 23_428_000 picoseconds. - Weight::from_parts(24_080_000, 0) + // Minimum execution time: 24_413_000 picoseconds. + Weight::from_parts(25_222_000, 0) .saturating_add(Weight::from_parts(0, 4556)) .saturating_add(T::DbWeight::get().reads(3)) .saturating_add(T::DbWeight::get().writes(1)) @@ -342,8 +396,8 @@ impl pallet_staking::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `865` // Estimated: `8122` - // Minimum execution time: 21_159_000 picoseconds. - Weight::from_parts(21_706_000, 0) + // Minimum execution time: 21_348_000 picoseconds. + Weight::from_parts(22_182_000, 0) .saturating_add(Weight::from_parts(0, 8122)) .saturating_add(T::DbWeight::get().reads(3)) .saturating_add(T::DbWeight::get().writes(3)) @@ -354,8 +408,8 @@ impl pallet_staking::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 1_910_000 picoseconds. - Weight::from_parts(2_003_000, 0) + // Minimum execution time: 1_730_000 picoseconds. + Weight::from_parts(1_934_000, 0) .saturating_add(Weight::from_parts(0, 0)) .saturating_add(T::DbWeight::get().writes(1)) } @@ -365,8 +419,8 @@ impl pallet_staking::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 7_076_000 picoseconds. - Weight::from_parts(7_349_000, 0) + // Minimum execution time: 6_704_000 picoseconds. + Weight::from_parts(7_205_000, 0) .saturating_add(Weight::from_parts(0, 0)) .saturating_add(T::DbWeight::get().writes(1)) } @@ -376,8 +430,8 @@ impl pallet_staking::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 7_067_000 picoseconds. - Weight::from_parts(7_389_000, 0) + // Minimum execution time: 6_636_000 picoseconds. + Weight::from_parts(6_955_000, 0) .saturating_add(Weight::from_parts(0, 0)) .saturating_add(T::DbWeight::get().writes(1)) } @@ -387,8 +441,8 @@ impl pallet_staking::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 7_148_000 picoseconds. - Weight::from_parts(7_446_000, 0) + // Minimum execution time: 6_667_000 picoseconds. + Weight::from_parts(7_129_000, 0) .saturating_add(Weight::from_parts(0, 0)) .saturating_add(T::DbWeight::get().writes(1)) } @@ -399,11 +453,11 @@ impl pallet_staking::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 2_025_000 picoseconds. - Weight::from_parts(2_229_953, 0) + // Minimum execution time: 2_039_000 picoseconds. + Weight::from_parts(2_276_512, 0) .saturating_add(Weight::from_parts(0, 0)) - // Standard Error: 67 - .saturating_add(Weight::from_parts(11_785, 0).saturating_mul(v.into())) + // Standard Error: 75 + .saturating_add(Weight::from_parts(12_036, 0).saturating_mul(v.into())) .saturating_add(T::DbWeight::get().writes(1)) } /// Storage: `Staking::Ledger` (r:1502 w:1502) @@ -417,11 +471,11 @@ impl pallet_staking::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `680 + i * (227 ±0)` // Estimated: `990 + i * (7132 ±0)` - // Minimum execution time: 4_321_000 picoseconds. - Weight::from_parts(4_407_000, 0) + // Minimum execution time: 4_163_000 picoseconds. + Weight::from_parts(4_245_000, 0) .saturating_add(Weight::from_parts(0, 990)) - // Standard Error: 37_239 - .saturating_add(Weight::from_parts(21_300_598, 0).saturating_mul(i.into())) + // Standard Error: 37_120 + .saturating_add(Weight::from_parts(21_925_265, 0).saturating_mul(i.into())) .saturating_add(T::DbWeight::get().reads((4_u64).saturating_mul(i.into()))) .saturating_add(T::DbWeight::get().writes((3_u64).saturating_mul(i.into()))) .saturating_add(Weight::from_parts(0, 7132).saturating_mul(i.into())) @@ -430,26 +484,32 @@ impl pallet_staking::WeightInfo for WeightInfo { /// Proof: `Staking::SlashingSpans` (`max_values`: None, `max_size`: None, mode: `Measured`) /// Storage: `Staking::Bonded` (r:1 w:1) /// Proof: `Staking::Bonded` (`max_values`: None, `max_size`: Some(72), added: 2547, mode: `MaxEncodedLen`) - /// Storage: `Staking::Ledger` (r:1 w:1) - /// Proof: `Staking::Ledger` (`max_values`: None, `max_size`: Some(1091), added: 3566, mode: `MaxEncodedLen`) - /// Storage: `Balances::Locks` (r:1 w:1) - /// Proof: `Balances::Locks` (`max_values`: None, `max_size`: Some(1299), added: 3774, mode: `MaxEncodedLen`) - /// Storage: `Balances::Freezes` (r:1 w:0) - /// Proof: `Balances::Freezes` (`max_values`: None, `max_size`: Some(67), added: 2542, mode: `MaxEncodedLen`) - /// Storage: `System::Account` (r:1 w:1) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) /// Storage: `Staking::Validators` (r:1 w:0) /// Proof: `Staking::Validators` (`max_values`: None, `max_size`: Some(45), added: 2520, mode: `MaxEncodedLen`) /// Storage: `Staking::Nominators` (r:1 w:1) /// Proof: `Staking::Nominators` (`max_values`: None, `max_size`: Some(558), added: 3033, mode: `MaxEncodedLen`) /// Storage: `Staking::CounterForNominators` (r:1 w:1) /// Proof: `Staking::CounterForNominators` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) + /// Storage: `Staking::Ledger` (r:1 w:1) + /// Proof: `Staking::Ledger` (`max_values`: None, `max_size`: Some(1091), added: 3566, mode: `MaxEncodedLen`) + /// Storage: `TargetList::ListNodes` (r:1 w:1) + /// Proof: `TargetList::ListNodes` (`max_values`: None, `max_size`: Some(170), added: 2645, mode: `MaxEncodedLen`) + /// Storage: `TargetList::ListBags` (r:2 w:2) + /// Proof: `TargetList::ListBags` (`max_values`: None, `max_size`: Some(90), added: 2565, mode: `MaxEncodedLen`) /// Storage: `VoterList::ListNodes` (r:2 w:2) /// Proof: `VoterList::ListNodes` (`max_values`: None, `max_size`: Some(154), added: 2629, mode: `MaxEncodedLen`) /// Storage: `VoterList::ListBags` (r:1 w:1) /// Proof: `VoterList::ListBags` (`max_values`: None, `max_size`: Some(82), added: 2557, mode: `MaxEncodedLen`) /// Storage: `VoterList::CounterForListNodes` (r:1 w:1) /// Proof: `VoterList::CounterForListNodes` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) + /// Storage: `Staking::VirtualStakers` (r:1 w:1) + /// Proof: `Staking::VirtualStakers` (`max_values`: None, `max_size`: Some(40), added: 2515, mode: `MaxEncodedLen`) + /// Storage: `Balances::Locks` (r:1 w:1) + /// Proof: `Balances::Locks` (`max_values`: None, `max_size`: Some(1299), added: 3774, mode: `MaxEncodedLen`) + /// Storage: `Balances::Freezes` (r:1 w:0) + /// Proof: `Balances::Freezes` (`max_values`: None, `max_size`: Some(67), added: 2542, mode: `MaxEncodedLen`) + /// Storage: `System::Account` (r:1 w:1) + /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) /// Storage: `Staking::Payee` (r:0 w:1) /// Proof: `Staking::Payee` (`max_values`: None, `max_size`: Some(73), added: 2548, mode: `MaxEncodedLen`) /// Storage: `Staking::SpanSlash` (r:0 w:100) @@ -457,15 +517,15 @@ impl pallet_staking::WeightInfo for WeightInfo { /// The range of component `s` is `[0, 100]`. fn force_unstake(s: u32, ) -> Weight { // Proof Size summary in bytes: - // Measured: `2127 + s * (4 ±0)` + // Measured: `2753 + s * (4 ±0)` // Estimated: `6248 + s * (4 ±0)` - // Minimum execution time: 78_908_000 picoseconds. - Weight::from_parts(84_886_373, 0) + // Minimum execution time: 120_134_000 picoseconds. + Weight::from_parts(131_611_869, 0) .saturating_add(Weight::from_parts(0, 6248)) - // Standard Error: 3_376 - .saturating_add(Weight::from_parts(1_217_850, 0).saturating_mul(s.into())) - .saturating_add(T::DbWeight::get().reads(13)) - .saturating_add(T::DbWeight::get().writes(12)) + // Standard Error: 5_038 + .saturating_add(Weight::from_parts(1_335_951, 0).saturating_mul(s.into())) + .saturating_add(T::DbWeight::get().reads(17)) + .saturating_add(T::DbWeight::get().writes(16)) .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(s.into()))) .saturating_add(Weight::from_parts(0, 4).saturating_mul(s.into())) } @@ -476,11 +536,11 @@ impl pallet_staking::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `66639` // Estimated: `70104` - // Minimum execution time: 136_389_000 picoseconds. - Weight::from_parts(1_207_241_524, 0) + // Minimum execution time: 125_461_000 picoseconds. + Weight::from_parts(927_976_913, 0) .saturating_add(Weight::from_parts(0, 70104)) - // Standard Error: 77_138 - .saturating_add(Weight::from_parts(6_443_948, 0).saturating_mul(s.into())) + // Standard Error: 57_690 + .saturating_add(Weight::from_parts(4_831_497, 0).saturating_mul(s.into())) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } @@ -498,83 +558,111 @@ impl pallet_staking::WeightInfo for WeightInfo { /// Proof: `Staking::CurrentEra` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) /// Storage: `Staking::ErasValidatorReward` (r:1 w:0) /// Proof: `Staking::ErasValidatorReward` (`max_values`: None, `max_size`: Some(28), added: 2503, mode: `MaxEncodedLen`) + /// Storage: `Staking::ErasStakersPaged` (r:1 w:0) + /// Proof: `Staking::ErasStakersPaged` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `Staking::VirtualStakers` (r:65 w:0) + /// Proof: `Staking::VirtualStakers` (`max_values`: None, `max_size`: Some(40), added: 2515, mode: `MaxEncodedLen`) /// Storage: `Balances::Locks` (r:65 w:65) /// Proof: `Balances::Locks` (`max_values`: None, `max_size`: Some(1299), added: 3774, mode: `MaxEncodedLen`) /// Storage: `Balances::Freezes` (r:65 w:0) /// Proof: `Balances::Freezes` (`max_values`: None, `max_size`: Some(67), added: 2542, mode: `MaxEncodedLen`) /// Storage: `System::Account` (r:65 w:65) /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - /// Storage: `Staking::ErasStakersPaged` (r:1 w:0) - /// Proof: `Staking::ErasStakersPaged` (`max_values`: None, `max_size`: None, mode: `Measured`) /// Storage: `Staking::ErasRewardPoints` (r:1 w:0) /// Proof: `Staking::ErasRewardPoints` (`max_values`: None, `max_size`: None, mode: `Measured`) /// Storage: `Staking::ErasValidatorPrefs` (r:1 w:0) /// Proof: `Staking::ErasValidatorPrefs` (`max_values`: None, `max_size`: Some(57), added: 2532, mode: `MaxEncodedLen`) /// Storage: `Staking::Payee` (r:65 w:0) /// Proof: `Staking::Payee` (`max_values`: None, `max_size`: Some(73), added: 2548, mode: `MaxEncodedLen`) + /// Storage: `Staking::Validators` (r:65 w:0) + /// Proof: `Staking::Validators` (`max_values`: None, `max_size`: Some(45), added: 2520, mode: `MaxEncodedLen`) + /// Storage: `Staking::Nominators` (r:65 w:0) + /// Proof: `Staking::Nominators` (`max_values`: None, `max_size`: Some(558), added: 3033, mode: `MaxEncodedLen`) + /// Storage: `TargetList::ListNodes` (r:1 w:1) + /// Proof: `TargetList::ListNodes` (`max_values`: None, `max_size`: Some(170), added: 2645, mode: `MaxEncodedLen`) + /// Storage: `TargetList::ListBags` (r:8 w:8) + /// Proof: `TargetList::ListBags` (`max_values`: None, `max_size`: Some(90), added: 2565, mode: `MaxEncodedLen`) + /// Storage: `VoterList::ListNodes` (r:65 w:65) + /// Proof: `VoterList::ListNodes` (`max_values`: None, `max_size`: Some(154), added: 2629, mode: `MaxEncodedLen`) + /// Storage: `VoterList::ListBags` (r:3 w:3) + /// Proof: `VoterList::ListBags` (`max_values`: None, `max_size`: Some(82), added: 2557, mode: `MaxEncodedLen`) /// The range of component `n` is `[0, 64]`. fn payout_stakers_alive_staked(n: u32, ) -> Weight { // Proof Size summary in bytes: - // Measured: `8249 + n * (396 ±0)` - // Estimated: `10779 + n * (3774 ±0)` - // Minimum execution time: 130_222_000 picoseconds. - Weight::from_parts(167_236_150, 0) - .saturating_add(Weight::from_parts(0, 10779)) - // Standard Error: 34_051 - .saturating_add(Weight::from_parts(39_899_917, 0).saturating_mul(n.into())) - .saturating_add(T::DbWeight::get().reads(14)) - .saturating_add(T::DbWeight::get().reads((6_u64).saturating_mul(n.into()))) - .saturating_add(T::DbWeight::get().writes(4)) - .saturating_add(T::DbWeight::get().writes((3_u64).saturating_mul(n.into()))) + // Measured: `8999 + n * (645 ±0)` + // Estimated: `17769 + n * (3774 ±3)` + // Minimum execution time: 210_946_000 picoseconds. + Weight::from_parts(255_089_468, 0) + .saturating_add(Weight::from_parts(0, 17769)) + // Standard Error: 45_994 + .saturating_add(Weight::from_parts(89_944_022, 0).saturating_mul(n.into())) + .saturating_add(T::DbWeight::get().reads(28)) + .saturating_add(T::DbWeight::get().reads((10_u64).saturating_mul(n.into()))) + .saturating_add(T::DbWeight::get().writes(15)) + .saturating_add(T::DbWeight::get().writes((4_u64).saturating_mul(n.into()))) .saturating_add(Weight::from_parts(0, 3774).saturating_mul(n.into())) } /// Storage: `Staking::Ledger` (r:1 w:1) /// Proof: `Staking::Ledger` (`max_values`: None, `max_size`: Some(1091), added: 3566, mode: `MaxEncodedLen`) /// Storage: `Staking::Bonded` (r:1 w:0) /// Proof: `Staking::Bonded` (`max_values`: None, `max_size`: Some(72), added: 2547, mode: `MaxEncodedLen`) + /// Storage: `Staking::VirtualStakers` (r:1 w:0) + /// Proof: `Staking::VirtualStakers` (`max_values`: None, `max_size`: Some(40), added: 2515, mode: `MaxEncodedLen`) /// Storage: `Balances::Locks` (r:1 w:1) /// Proof: `Balances::Locks` (`max_values`: None, `max_size`: Some(1299), added: 3774, mode: `MaxEncodedLen`) /// Storage: `Balances::Freezes` (r:1 w:0) /// Proof: `Balances::Freezes` (`max_values`: None, `max_size`: Some(67), added: 2542, mode: `MaxEncodedLen`) + /// Storage: `Staking::Validators` (r:1 w:0) + /// Proof: `Staking::Validators` (`max_values`: None, `max_size`: Some(45), added: 2520, mode: `MaxEncodedLen`) + /// Storage: `Staking::Nominators` (r:1 w:0) + /// Proof: `Staking::Nominators` (`max_values`: None, `max_size`: Some(558), added: 3033, mode: `MaxEncodedLen`) /// Storage: `VoterList::ListNodes` (r:3 w:3) /// Proof: `VoterList::ListNodes` (`max_values`: None, `max_size`: Some(154), added: 2629, mode: `MaxEncodedLen`) /// Storage: `VoterList::ListBags` (r:2 w:2) /// Proof: `VoterList::ListBags` (`max_values`: None, `max_size`: Some(82), added: 2557, mode: `MaxEncodedLen`) + /// Storage: `TargetList::ListNodes` (r:1 w:1) + /// Proof: `TargetList::ListNodes` (`max_values`: None, `max_size`: Some(170), added: 2645, mode: `MaxEncodedLen`) /// The range of component `l` is `[1, 32]`. fn rebond(l: u32, ) -> Weight { // Proof Size summary in bytes: - // Measured: `1922 + l * (5 ±0)` + // Measured: `2597 + l * (5 ±0)` // Estimated: `8877` - // Minimum execution time: 79_136_000 picoseconds. - Weight::from_parts(82_129_497, 0) + // Minimum execution time: 119_360_000 picoseconds. + Weight::from_parts(123_258_796, 0) .saturating_add(Weight::from_parts(0, 8877)) - // Standard Error: 3_867 - .saturating_add(Weight::from_parts(75_156, 0).saturating_mul(l.into())) - .saturating_add(T::DbWeight::get().reads(9)) - .saturating_add(T::DbWeight::get().writes(7)) + // Standard Error: 4_980 + .saturating_add(Weight::from_parts(83_927, 0).saturating_mul(l.into())) + .saturating_add(T::DbWeight::get().reads(13)) + .saturating_add(T::DbWeight::get().writes(8)) } + /// Storage: `Staking::VirtualStakers` (r:1 w:1) + /// Proof: `Staking::VirtualStakers` (`max_values`: None, `max_size`: Some(40), added: 2515, mode: `MaxEncodedLen`) /// Storage: `Staking::Bonded` (r:1 w:1) /// Proof: `Staking::Bonded` (`max_values`: None, `max_size`: Some(72), added: 2547, mode: `MaxEncodedLen`) /// Storage: `Staking::Ledger` (r:1 w:1) /// Proof: `Staking::Ledger` (`max_values`: None, `max_size`: Some(1091), added: 3566, mode: `MaxEncodedLen`) /// Storage: `Staking::SlashingSpans` (r:1 w:1) /// Proof: `Staking::SlashingSpans` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `Balances::Locks` (r:1 w:1) - /// Proof: `Balances::Locks` (`max_values`: None, `max_size`: Some(1299), added: 3774, mode: `MaxEncodedLen`) - /// Storage: `Balances::Freezes` (r:1 w:0) - /// Proof: `Balances::Freezes` (`max_values`: None, `max_size`: Some(67), added: 2542, mode: `MaxEncodedLen`) /// Storage: `Staking::Validators` (r:1 w:0) /// Proof: `Staking::Validators` (`max_values`: None, `max_size`: Some(45), added: 2520, mode: `MaxEncodedLen`) /// Storage: `Staking::Nominators` (r:1 w:1) /// Proof: `Staking::Nominators` (`max_values`: None, `max_size`: Some(558), added: 3033, mode: `MaxEncodedLen`) /// Storage: `Staking::CounterForNominators` (r:1 w:1) /// Proof: `Staking::CounterForNominators` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) + /// Storage: `TargetList::ListNodes` (r:1 w:1) + /// Proof: `TargetList::ListNodes` (`max_values`: None, `max_size`: Some(170), added: 2645, mode: `MaxEncodedLen`) + /// Storage: `TargetList::ListBags` (r:2 w:2) + /// Proof: `TargetList::ListBags` (`max_values`: None, `max_size`: Some(90), added: 2565, mode: `MaxEncodedLen`) /// Storage: `VoterList::ListNodes` (r:2 w:2) /// Proof: `VoterList::ListNodes` (`max_values`: None, `max_size`: Some(154), added: 2629, mode: `MaxEncodedLen`) /// Storage: `VoterList::ListBags` (r:1 w:1) /// Proof: `VoterList::ListBags` (`max_values`: None, `max_size`: Some(82), added: 2557, mode: `MaxEncodedLen`) /// Storage: `VoterList::CounterForListNodes` (r:1 w:1) /// Proof: `VoterList::CounterForListNodes` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) + /// Storage: `Balances::Locks` (r:1 w:1) + /// Proof: `Balances::Locks` (`max_values`: None, `max_size`: Some(1299), added: 3774, mode: `MaxEncodedLen`) + /// Storage: `Balances::Freezes` (r:1 w:0) + /// Proof: `Balances::Freezes` (`max_values`: None, `max_size`: Some(67), added: 2542, mode: `MaxEncodedLen`) /// Storage: `Staking::Payee` (r:0 w:1) /// Proof: `Staking::Payee` (`max_values`: None, `max_size`: Some(73), added: 2548, mode: `MaxEncodedLen`) /// Storage: `Staking::SpanSlash` (r:0 w:100) @@ -582,15 +670,15 @@ impl pallet_staking::WeightInfo for WeightInfo { /// The range of component `s` is `[1, 100]`. fn reap_stash(s: u32, ) -> Weight { // Proof Size summary in bytes: - // Measured: `2127 + s * (4 ±0)` + // Measured: `2753 + s * (4 ±0)` // Estimated: `6248 + s * (4 ±0)` - // Minimum execution time: 89_375_000 picoseconds. - Weight::from_parts(91_224_907, 0) + // Minimum execution time: 134_590_000 picoseconds. + Weight::from_parts(137_403_871, 0) .saturating_add(Weight::from_parts(0, 6248)) - // Standard Error: 3_424 - .saturating_add(Weight::from_parts(1_219_542, 0).saturating_mul(s.into())) - .saturating_add(T::DbWeight::get().reads(12)) - .saturating_add(T::DbWeight::get().writes(11)) + // Standard Error: 4_133 + .saturating_add(Weight::from_parts(1_322_316, 0).saturating_mul(s.into())) + .saturating_add(T::DbWeight::get().reads(16)) + .saturating_add(T::DbWeight::get().writes(15)) .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(s.into()))) .saturating_add(Weight::from_parts(0, 4).saturating_mul(s.into())) } @@ -600,16 +688,20 @@ impl pallet_staking::WeightInfo for WeightInfo { /// Proof: `VoterList::ListBags` (`max_values`: None, `max_size`: Some(82), added: 2557, mode: `MaxEncodedLen`) /// Storage: `VoterList::ListNodes` (r:110 w:0) /// Proof: `VoterList::ListNodes` (`max_values`: None, `max_size`: Some(154), added: 2629, mode: `MaxEncodedLen`) - /// Storage: `Staking::Bonded` (r:110 w:0) + /// Storage: `Staking::Bonded` (r:111 w:0) /// Proof: `Staking::Bonded` (`max_values`: None, `max_size`: Some(72), added: 2547, mode: `MaxEncodedLen`) /// Storage: `Staking::Ledger` (r:110 w:0) /// Proof: `Staking::Ledger` (`max_values`: None, `max_size`: Some(1091), added: 3566, mode: `MaxEncodedLen`) - /// Storage: `Staking::Nominators` (r:110 w:0) + /// Storage: `Staking::Nominators` (r:111 w:0) /// Proof: `Staking::Nominators` (`max_values`: None, `max_size`: Some(558), added: 3033, mode: `MaxEncodedLen`) /// Storage: `Staking::Validators` (r:11 w:0) /// Proof: `Staking::Validators` (`max_values`: None, `max_size`: Some(45), added: 2520, mode: `MaxEncodedLen`) - /// Storage: `Staking::CounterForValidators` (r:1 w:0) - /// Proof: `Staking::CounterForValidators` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) + /// Storage: `TargetList::CounterForListNodes` (r:1 w:0) + /// Proof: `TargetList::CounterForListNodes` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) + /// Storage: `TargetList::ListBags` (r:201 w:0) + /// Proof: `TargetList::ListBags` (`max_values`: None, `max_size`: Some(90), added: 2565, mode: `MaxEncodedLen`) + /// Storage: `TargetList::ListNodes` (r:11 w:0) + /// Proof: `TargetList::ListNodes` (`max_values`: None, `max_size`: Some(170), added: 2645, mode: `MaxEncodedLen`) /// Storage: `Staking::ValidatorCount` (r:1 w:0) /// Proof: `Staking::ValidatorCount` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) /// Storage: `Staking::MinimumValidatorCount` (r:1 w:0) @@ -632,17 +724,17 @@ impl pallet_staking::WeightInfo for WeightInfo { /// The range of component `n` is `[0, 100]`. fn new_era(v: u32, n: u32, ) -> Weight { // Proof Size summary in bytes: - // Measured: `0 + n * (716 ±0) + v * (3594 ±0)` - // Estimated: `456136 + n * (3566 ±4) + v * (3566 ±0)` - // Minimum execution time: 520_905_000 picoseconds. - Weight::from_parts(523_771_000, 0) - .saturating_add(Weight::from_parts(0, 456136)) - // Standard Error: 2_142_714 - .saturating_add(Weight::from_parts(68_631_588, 0).saturating_mul(v.into())) - // Standard Error: 213_509 - .saturating_add(Weight::from_parts(19_343_025, 0).saturating_mul(n.into())) - .saturating_add(T::DbWeight::get().reads(184)) - .saturating_add(T::DbWeight::get().reads((5_u64).saturating_mul(v.into()))) + // Measured: `0 + n * (716 ±0) + v * (3772 ±0)` + // Estimated: `516555 + n * (3566 ±0) + v * (3566 ±0)` + // Minimum execution time: 869_142_000 picoseconds. + Weight::from_parts(874_703_000, 0) + .saturating_add(Weight::from_parts(0, 516555)) + // Standard Error: 1_916_556 + .saturating_add(Weight::from_parts(60_523_432, 0).saturating_mul(v.into())) + // Standard Error: 190_974 + .saturating_add(Weight::from_parts(18_981_553, 0).saturating_mul(n.into())) + .saturating_add(T::DbWeight::get().reads(388)) + .saturating_add(T::DbWeight::get().reads((6_u64).saturating_mul(v.into()))) .saturating_add(T::DbWeight::get().reads((4_u64).saturating_mul(n.into()))) .saturating_add(T::DbWeight::get().writes(8)) .saturating_add(T::DbWeight::get().writes((3_u64).saturating_mul(v.into()))) @@ -669,15 +761,15 @@ impl pallet_staking::WeightInfo for WeightInfo { /// The range of component `n` is `[500, 1000]`. fn get_npos_voters(v: u32, n: u32, ) -> Weight { // Proof Size summary in bytes: - // Measured: `3108 + n * (907 ±0) + v * (391 ±0)` + // Measured: `3142 + n * (907 ±0) + v * (391 ±0)` // Estimated: `456136 + n * (3566 ±0) + v * (3566 ±0)` - // Minimum execution time: 36_848_619_000 picoseconds. - Weight::from_parts(37_362_442_000, 0) + // Minimum execution time: 36_931_542_000 picoseconds. + Weight::from_parts(37_274_119_000, 0) .saturating_add(Weight::from_parts(0, 456136)) - // Standard Error: 415_031 - .saturating_add(Weight::from_parts(5_204_987, 0).saturating_mul(v.into())) - // Standard Error: 415_031 - .saturating_add(Weight::from_parts(4_132_636, 0).saturating_mul(n.into())) + // Standard Error: 377_146 + .saturating_add(Weight::from_parts(3_948_980, 0).saturating_mul(v.into())) + // Standard Error: 377_146 + .saturating_add(Weight::from_parts(4_835_554, 0).saturating_mul(n.into())) .saturating_add(T::DbWeight::get().reads(179)) .saturating_add(T::DbWeight::get().reads((5_u64).saturating_mul(v.into()))) .saturating_add(T::DbWeight::get().reads((4_u64).saturating_mul(n.into()))) @@ -685,23 +777,31 @@ impl pallet_staking::WeightInfo for WeightInfo { .saturating_add(Weight::from_parts(0, 3566).saturating_mul(n.into())) .saturating_add(Weight::from_parts(0, 3566).saturating_mul(v.into())) } - /// Storage: `Staking::CounterForValidators` (r:1 w:0) - /// Proof: `Staking::CounterForValidators` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) + /// Storage: `TargetList::CounterForListNodes` (r:1 w:0) + /// Proof: `TargetList::CounterForListNodes` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) + /// Storage: `TargetList::ListBags` (r:201 w:0) + /// Proof: `TargetList::ListBags` (`max_values`: None, `max_size`: Some(90), added: 2565, mode: `MaxEncodedLen`) + /// Storage: `TargetList::ListNodes` (r:1001 w:0) + /// Proof: `TargetList::ListNodes` (`max_values`: None, `max_size`: Some(170), added: 2645, mode: `MaxEncodedLen`) + /// Storage: `Staking::Bonded` (r:1001 w:0) + /// Proof: `Staking::Bonded` (`max_values`: None, `max_size`: Some(72), added: 2547, mode: `MaxEncodedLen`) /// Storage: `Staking::Validators` (r:1001 w:0) /// Proof: `Staking::Validators` (`max_values`: None, `max_size`: Some(45), added: 2520, mode: `MaxEncodedLen`) + /// Storage: `Staking::Nominators` (r:1001 w:0) + /// Proof: `Staking::Nominators` (`max_values`: None, `max_size`: Some(558), added: 3033, mode: `MaxEncodedLen`) /// The range of component `v` is `[500, 1000]`. fn get_npos_targets(v: u32, ) -> Weight { // Proof Size summary in bytes: - // Measured: `946 + v * (50 ±0)` - // Estimated: `3510 + v * (2520 ±0)` - // Minimum execution time: 2_512_817_000 picoseconds. - Weight::from_parts(119_401_374, 0) - .saturating_add(Weight::from_parts(0, 3510)) - // Standard Error: 8_463 - .saturating_add(Weight::from_parts(4_860_364, 0).saturating_mul(v.into())) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(v.into()))) - .saturating_add(Weight::from_parts(0, 2520).saturating_mul(v.into())) + // Measured: `58105 + v * (323 ±0)` + // Estimated: `516555 + v * (3033 ±0)` + // Minimum execution time: 9_187_779_000 picoseconds. + Weight::from_parts(9_238_084_000, 0) + .saturating_add(Weight::from_parts(0, 516555)) + // Standard Error: 111_859 + .saturating_add(Weight::from_parts(7_084_998, 0).saturating_mul(v.into())) + .saturating_add(T::DbWeight::get().reads(206)) + .saturating_add(T::DbWeight::get().reads((4_u64).saturating_mul(v.into()))) + .saturating_add(Weight::from_parts(0, 3033).saturating_mul(v.into())) } /// Storage: `Staking::MinCommission` (r:0 w:1) /// Proof: `Staking::MinCommission` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) @@ -721,8 +821,8 @@ impl pallet_staking::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 3_686_000 picoseconds. - Weight::from_parts(3_881_000, 0) + // Minimum execution time: 3_607_000 picoseconds. + Weight::from_parts(3_819_000, 0) .saturating_add(Weight::from_parts(0, 0)) .saturating_add(T::DbWeight::get().writes(7)) } @@ -744,8 +844,8 @@ impl pallet_staking::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 3_143_000 picoseconds. - Weight::from_parts(3_424_000, 0) + // Minimum execution time: 3_221_000 picoseconds. + Weight::from_parts(3_406_000, 0) .saturating_add(Weight::from_parts(0, 0)) .saturating_add(T::DbWeight::get().writes(7)) } @@ -765,6 +865,10 @@ impl pallet_staking::WeightInfo for WeightInfo { /// Proof: `Staking::MinNominatorBond` (`max_values`: Some(1), `max_size`: Some(16), added: 511, mode: `MaxEncodedLen`) /// Storage: `Staking::Validators` (r:1 w:0) /// Proof: `Staking::Validators` (`max_values`: None, `max_size`: Some(45), added: 2520, mode: `MaxEncodedLen`) + /// Storage: `TargetList::ListNodes` (r:1 w:1) + /// Proof: `TargetList::ListNodes` (`max_values`: None, `max_size`: Some(170), added: 2645, mode: `MaxEncodedLen`) + /// Storage: `TargetList::ListBags` (r:2 w:2) + /// Proof: `TargetList::ListBags` (`max_values`: None, `max_size`: Some(90), added: 2565, mode: `MaxEncodedLen`) /// Storage: `VoterList::ListNodes` (r:2 w:2) /// Proof: `VoterList::ListNodes` (`max_values`: None, `max_size`: Some(154), added: 2629, mode: `MaxEncodedLen`) /// Storage: `VoterList::ListBags` (r:1 w:1) @@ -773,13 +877,13 @@ impl pallet_staking::WeightInfo for WeightInfo { /// Proof: `VoterList::CounterForListNodes` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) fn chill_other() -> Weight { // Proof Size summary in bytes: - // Measured: `1870` + // Measured: `2455` // Estimated: `6248` - // Minimum execution time: 66_946_000 picoseconds. - Weight::from_parts(69_382_000, 0) + // Minimum execution time: 99_926_000 picoseconds. + Weight::from_parts(102_789_000, 0) .saturating_add(Weight::from_parts(0, 6248)) - .saturating_add(T::DbWeight::get().reads(12)) - .saturating_add(T::DbWeight::get().writes(6)) + .saturating_add(T::DbWeight::get().reads(15)) + .saturating_add(T::DbWeight::get().writes(9)) } /// Storage: `Staking::MinCommission` (r:1 w:0) /// Proof: `Staking::MinCommission` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) @@ -789,8 +893,8 @@ impl pallet_staking::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `658` // Estimated: `3510` - // Minimum execution time: 11_278_000 picoseconds. - Weight::from_parts(11_603_000, 0) + // Minimum execution time: 11_542_000 picoseconds. + Weight::from_parts(11_866_000, 0) .saturating_add(Weight::from_parts(0, 3510)) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(1)) @@ -801,11 +905,13 @@ impl pallet_staking::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 1_963_000 picoseconds. - Weight::from_parts(2_077_000, 0) + // Minimum execution time: 1_860_000 picoseconds. + Weight::from_parts(1_982_000, 0) .saturating_add(Weight::from_parts(0, 0)) .saturating_add(T::DbWeight::get().writes(1)) } + /// Storage: `Staking::VirtualStakers` (r:1 w:0) + /// Proof: `Staking::VirtualStakers` (`max_values`: None, `max_size`: Some(40), added: 2515, mode: `MaxEncodedLen`) /// Storage: `Balances::Locks` (r:1 w:1) /// Proof: `Balances::Locks` (`max_values`: None, `max_size`: Some(1299), added: 3774, mode: `MaxEncodedLen`) /// Storage: `System::Account` (r:1 w:1) @@ -816,23 +922,70 @@ impl pallet_staking::WeightInfo for WeightInfo { /// Proof: `Staking::Ledger` (`max_values`: None, `max_size`: Some(1091), added: 3566, mode: `MaxEncodedLen`) /// Storage: `Balances::Freezes` (r:1 w:0) /// Proof: `Balances::Freezes` (`max_values`: None, `max_size`: Some(67), added: 2542, mode: `MaxEncodedLen`) + /// Storage: `Staking::Validators` (r:1 w:0) + /// Proof: `Staking::Validators` (`max_values`: None, `max_size`: Some(45), added: 2520, mode: `MaxEncodedLen`) + /// Storage: `Staking::Nominators` (r:1 w:0) + /// Proof: `Staking::Nominators` (`max_values`: None, `max_size`: Some(558), added: 3033, mode: `MaxEncodedLen`) fn restore_ledger() -> Weight { // Proof Size summary in bytes: - // Measured: `1014` + // Measured: `1099` // Estimated: `4764` - // Minimum execution time: 40_258_000 picoseconds. - Weight::from_parts(41_210_000, 0) + // Minimum execution time: 53_417_000 picoseconds. + Weight::from_parts(54_329_000, 0) .saturating_add(Weight::from_parts(0, 4764)) - .saturating_add(T::DbWeight::get().reads(5)) + .saturating_add(T::DbWeight::get().reads(8)) .saturating_add(T::DbWeight::get().writes(4)) } - - // TODO: run CI bot benchmarks + /// Storage: `Staking::Bonded` (r:3 w:0) + /// Proof: `Staking::Bonded` (`max_values`: None, `max_size`: Some(72), added: 2547, mode: `MaxEncodedLen`) + /// Storage: `TargetList::ListNodes` (r:1 w:1) + /// Proof: `TargetList::ListNodes` (`max_values`: None, `max_size`: Some(170), added: 2645, mode: `MaxEncodedLen`) + /// Storage: `Staking::Validators` (r:2 w:0) + /// Proof: `Staking::Validators` (`max_values`: None, `max_size`: Some(45), added: 2520, mode: `MaxEncodedLen`) + /// Storage: `Staking::Nominators` (r:2 w:1) + /// Proof: `Staking::Nominators` (`max_values`: None, `max_size`: Some(558), added: 3033, mode: `MaxEncodedLen`) + /// Storage: `Staking::Ledger` (r:1 w:0) + /// Proof: `Staking::Ledger` (`max_values`: None, `max_size`: Some(1091), added: 3566, mode: `MaxEncodedLen`) + /// Storage: `Staking::MinNominatorBond` (r:1 w:0) + /// Proof: `Staking::MinNominatorBond` (`max_values`: Some(1), `max_size`: Some(16), added: 511, mode: `MaxEncodedLen`) + /// Storage: `Staking::CurrentEra` (r:1 w:0) + /// Proof: `Staking::CurrentEra` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) + /// Storage: `TargetList::ListBags` (r:1 w:1) + /// Proof: `TargetList::ListBags` (`max_values`: None, `max_size`: Some(90), added: 2565, mode: `MaxEncodedLen`) + /// Storage: `TargetList::CounterForListNodes` (r:1 w:1) + /// Proof: `TargetList::CounterForListNodes` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) fn drop_dangling_nomination() -> Weight { - Weight::default() + // Proof Size summary in bytes: + // Measured: `1758` + // Estimated: `8631` + // Minimum execution time: 84_706_000 picoseconds. + Weight::from_parts(86_977_000, 0) + .saturating_add(Weight::from_parts(0, 8631)) + .saturating_add(T::DbWeight::get().reads(13)) + .saturating_add(T::DbWeight::get().writes(4)) } - + /// Storage: `Staking::Nominators` (r:84 w:0) + /// Proof: `Staking::Nominators` (`max_values`: None, `max_size`: Some(558), added: 3033, mode: `MaxEncodedLen`) + /// Storage: `Staking::Bonded` (r:83 w:0) + /// Proof: `Staking::Bonded` (`max_values`: None, `max_size`: Some(72), added: 2547, mode: `MaxEncodedLen`) + /// Storage: `Staking::Ledger` (r:21 w:0) + /// Proof: `Staking::Ledger` (`max_values`: None, `max_size`: Some(1091), added: 3566, mode: `MaxEncodedLen`) + /// Storage: `Staking::Validators` (r:1006 w:0) + /// Proof: `Staking::Validators` (`max_values`: None, `max_size`: Some(45), added: 2520, mode: `MaxEncodedLen`) + /// Storage: `TargetList::ListNodes` (r:1000 w:78) + /// Proof: `TargetList::ListNodes` (`max_values`: None, `max_size`: Some(170), added: 2645, mode: `MaxEncodedLen`) + /// Storage: `TargetList::ListBags` (r:4 w:4) + /// Proof: `TargetList::ListBags` (`max_values`: None, `max_size`: Some(90), added: 2565, mode: `MaxEncodedLen`) + /// Storage: `TargetList::CounterForListNodes` (r:1 w:1) + /// Proof: `TargetList::CounterForListNodes` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) fn v13_mmb_step() -> Weight { - Weight::default() + // Proof Size summary in bytes: + // Measured: `167489` + // Estimated: `2645990` + // Minimum execution time: 10_465_670_000 picoseconds. + Weight::from_parts(10_570_173_000, 0) + .saturating_add(Weight::from_parts(0, 2645990)) + .saturating_add(T::DbWeight::get().reads(2199)) + .saturating_add(T::DbWeight::get().writes(83)) } } diff --git a/substrate/bin/node/runtime/src/lib.rs b/substrate/bin/node/runtime/src/lib.rs index f5385403c0e3..7c6c29f2614a 100644 --- a/substrate/bin/node/runtime/src/lib.rs +++ b/substrate/bin/node/runtime/src/lib.rs @@ -704,7 +704,7 @@ impl pallet_staking::Config for Runtime { } parameter_types! { - pub const VoterUpdateMode: pallet_stake_tracker::VoterUpdateMode = pallet_stake_tracker::VoterUpdateMode::Strict; + pub const VoterUpdateMode: pallet_stake_tracker::VoterUpdateMode = pallet_stake_tracker::VoterUpdateMode::Lazy; } impl pallet_stake_tracker::Config for Runtime { diff --git a/substrate/frame/election-provider-multi-phase/test-staking-e2e/src/mock.rs b/substrate/frame/election-provider-multi-phase/test-staking-e2e/src/mock.rs index 50c266d4dba8..3bdd9be17bdf 100644 --- a/substrate/frame/election-provider-multi-phase/test-staking-e2e/src/mock.rs +++ b/substrate/frame/election-provider-multi-phase/test-staking-e2e/src/mock.rs @@ -263,7 +263,7 @@ impl pallet_bags_list::Config for Runtime { } parameter_types! { - pub static UpdateMode: VoterUpdateMode = VoterUpdateMode::Strict; + pub static UpdateMode: VoterUpdateMode = VoterUpdateMode::Lazy; } impl pallet_stake_tracker::Config for Runtime { diff --git a/substrate/frame/staking/Cargo.toml b/substrate/frame/staking/Cargo.toml index 63774dc18dcf..ec19f4303f9f 100644 --- a/substrate/frame/staking/Cargo.toml +++ b/substrate/frame/staking/Cargo.toml @@ -31,6 +31,7 @@ pallet-session = { path = "../session", default-features = false, features = [ "historical", ] } pallet-authorship = { path = "../authorship", default-features = false } +pallet-stake-tracker = { path = "./stake-tracker", default-features = false } sp-application-crypto = { path = "../../primitives/application-crypto", default-features = false, features = ["serde"] } frame-election-provider-support = { path = "../election-provider-support", default-features = false } log = { workspace = true } @@ -45,9 +46,8 @@ sp-tracing = { path = "../../primitives/tracing" } sp-core = { path = "../../primitives/core" } sp-npos-elections = { path = "../../primitives/npos-elections" } pallet-timestamp = { path = "../timestamp" } -pallet-stake-tracker = { path = "./stake-tracker" } pallet-staking-reward-curve = { path = "reward-curve" } -pallet-bags-list = { path = "../bags-list" } +pallet-bags-list = { path = "../bags-list", default-features = false, features = ["try-runtime"] } pallet-migrations = { path = "../migrations" } substrate-test-utils = { path = "../../test-utils" } frame-benchmarking = { path = "../benchmarking" } diff --git a/substrate/frame/staking/src/benchmarking.rs b/substrate/frame/staking/src/benchmarking.rs index 0aca10f20a25..c619b5f94959 100644 --- a/substrate/frame/staking/src/benchmarking.rs +++ b/substrate/frame/staking/src/benchmarking.rs @@ -1145,7 +1145,7 @@ mod benchmarks { assert_eq!( Staking::::status(&voter), - Ok(StakerStatus::Nominator(vec![dangling_target.clone(), other_target.clone()])) + Ok(StakerStatus::Nominator(vec![other_target.clone(), dangling_target.clone()])) ); #[extrinsic_call] @@ -1214,7 +1214,7 @@ mod benchmarks { impl_benchmark_test_suite!( Staking, - crate::mock::ExtBuilder::default().has_stakers(true).set_voter_list_lazy(), + crate::mock::ExtBuilder::default().has_stakers(true), crate::mock::Test, exec_name = build_and_execute ); @@ -1228,7 +1228,7 @@ mod tests { #[test] fn create_validators_with_nominators_for_era_works() { - ExtBuilder::default().build_and_execute(|| { + ExtBuilder::default().try_state(false).build_and_execute(|| { let v = 10; let n = 100; @@ -1254,7 +1254,7 @@ mod tests { #[test] fn create_validator_with_nominators_works() { - ExtBuilder::default().build_and_execute(|| { + ExtBuilder::default().try_state(false).build_and_execute(|| { let n = 10; let (validator_stash, nominators) = create_validator_with_nominators::( @@ -1285,7 +1285,7 @@ mod tests { #[test] fn add_slashing_spans_works() { - ExtBuilder::default().build_and_execute(|| { + ExtBuilder::default().try_state(false).build_and_execute(|| { let n = 10; let (validator_stash, _nominators) = create_validator_with_nominators::( @@ -1315,28 +1315,4 @@ mod tests { } }); } - - // TODO: SelectedBenchmark not exposed by v2? - /* - #[test] - fn test_payout_all() { - ExtBuilder::default().build_and_execute(|| { - let v = 10; - let n = 100; - - let selected_benchmark = SelectedBenchmark::payout_all; - let c = vec![ - (frame_benchmarking::BenchmarkParameter::v, v), - (frame_benchmarking::BenchmarkParameter::n, n), - ]; - - assert_ok!( - >::unit_test_instance( - &selected_benchmark, - &c, - ) - ); - }); - } - */ } diff --git a/substrate/frame/staking/src/migrations/v13_stake_tracker/mod.rs b/substrate/frame/staking/src/migrations/v13_stake_tracker/mod.rs index 02ef5cd5da88..097e8f4a468f 100644 --- a/substrate/frame/staking/src/migrations/v13_stake_tracker/mod.rs +++ b/substrate/frame/staking/src/migrations/v13_stake_tracker/mod.rs @@ -20,35 +20,72 @@ //! sorted list of targets with a bags-list. use super::PALLET_MIGRATIONS_ID; -use crate::{log, weights, Config, Nominators, Pallet}; +use crate::{log, weights, Config, Nominations, Nominators, Pallet, StakerStatus, Validators}; +use codec::{Decode, Encode, MaxEncodedLen}; use core::marker::PhantomData; -use frame_election_provider_support::SortedListProvider; +use frame_election_provider_support::{SortedListProvider, VoteWeight}; use frame_support::{ + ensure, migrations::{MigrationId, SteppedMigration, SteppedMigrationError}, - traits::Defensive, + traits::{Defensive, DefensiveSaturating}, }; -use sp_runtime::traits::CheckedAdd; +use scale_info::TypeInfo; use sp_staking::StakingInterface; use sp_std::prelude::*; #[cfg(test)] mod tests; +#[derive(Encode, Decode, TypeInfo, MaxEncodedLen, PartialEq, Debug, Clone)] +pub enum Processing { + Nominators, + Validators, + Done, +} +impl Default for Processing { + fn default() -> Self { + Processing::Nominators + } +} + /// V13 Multi-block migration to introduce the stake-tracker pallet. /// -/// A step of the migration consists of processing one nominator in the [`Nominators`] list. All -/// nominatior's target nominations are processed per step (bound by upper bound of the max -/// nominations). +/// A step of the migration consists of processing one nominator in the [`Nominators`] list or one +/// validators in the [`Validators`] list, depending on the cursor's state. +/// +/// The migration has two phases: +/// * [`Processing::Nominators`]: iterates over the nominators list and updates the approvals stake +/// of the nominated targets associated with each of the nominators. +/// * [`Processing::Validators`]: iterates over the validators list and, if the validator does not +/// exist in the target list, add it with self-stake as score. +/// +/// First, the migration processes all the nominators and then the validators. When a validator is +/// added to the target list during the [`Processing::Validators`], it indicates that the validator +/// has no nominations. /// /// The goals of the migration are: -/// - Insert all the nominated targets into the [`SortedListProvider`] target list. -/// - Ensure the target score (total stake) is the sum of the self stake and all its nominations +/// * Insert all the nominated targets into the [`SortedListProvider`] target list. +/// * Ensure the target score (total stake) is the sum of the self stake and all its nominations /// stake. -/// - Ensure the new targets in the list are sorted per total stake (as per the underlying +/// * Ensure the new targets in the list are sorted per total stake (as per the underlying /// [`SortedListProvider`]). +/// * Ensure that there is no duplicate nominations per nominator. +/// +/// ## Potential changes to nominations state during the migration. +/// +/// When migrating a nominator, we need to ensure that the nominator is not nominating duplicate +/// targets. In addition, this migration also "cleans" the nominations by dropping all nominations +/// of targets that are not active validators. This logic is implemented by +/// [`MigrationV13::clean_nominations`]. In sum, the followinf invariants hold true after +/// processing each nominator: +/// +/// 1. A nominator has no duplicate nominations; +/// 2. A nominators is nominating only active validators; +/// 3. A nominator has at least one nomination, otherwise it is chilled. pub struct MigrationV13(PhantomData<(T, W)>); impl SteppedMigration for MigrationV13 { - type Cursor = T::AccountId; + // nominator cursor and validator cursor. + type Cursor = (Option, Processing); type Identifier = MigrationId<18>; /// Identifier of this migration which should be globally unique. @@ -67,63 +104,203 @@ impl SteppedMigration for MigrationV13 return Err(SteppedMigrationError::InsufficientWeight { required }); } - // Do as much progress as possible per step. + // do as much progress as possible per step. while meter.try_consume(required).is_ok() { - // 1. get next validator in the Validators map. - let mut iter = if let Some(ref last_nom) = cursor { - Nominators::::iter_from(Nominators::::hashed_key_for(last_nom)) - } else { - // first step, start from beginning of the validator's map. - Nominators::::iter() - }; + let new_cursor = match cursor { + None => { + // start processing first nominator. + if let Some((nominator, nominations)) = Nominators::::iter().next() { + Self::process_nominator(&nominator, nominations)?; + Some((Some(nominator), Processing::Nominators)) + } else { + Some((None, Processing::Validators)) + } + }, + Some((maybe_nominator, Processing::Nominators)) => { + let mut iter = if let Some(last_nominator) = maybe_nominator { + Nominators::::iter_from(Nominators::::hashed_key_for(last_nominator)) + } else { + Nominators::::iter() + }; - if let Some((nominator, _)) = iter.next() { - let nominator_stake = - Pallet::::stake(&nominator).defensive_unwrap_or_default().total; - let nominations = Nominators::::get(&nominator) - .map(|n| n.targets.into_inner()) - .unwrap_or_default(); - - log!( - info, - "multi-block migrations: processing nominator {:?} with {} nominations. remaining {} nominators to migrate.", - nominator, - nominations.len(), - iter.count() - ); - - // iter over up to `MaxNominationsOf` targets of `nominator`. - for target in nominations.into_iter() { - if let Ok(current_stake) = T::TargetList::get_score(&target) { - // target is not in the target list. update with nominator's stake. - - if let Some(total_stake) = current_stake.checked_add(&nominator_stake) { - let _ = T::TargetList::on_update(&target, total_stake).defensive(); - } else { - log!(error, "target stake overflow. exit."); - return Err(SteppedMigrationError::Failed) - } + if let Some((nominator, nominations)) = iter.next() { + Self::process_nominator(&nominator, nominations)?; + Some((Some(nominator), Processing::Nominators)) } else { - // target is not in the target list, insert new node and consider self - // stake. - let self_stake = Pallet::::stake(&target).defensive_unwrap_or_default(); - if let Some(total_stake) = self_stake.total.checked_add(&nominator_stake) { - let _ = T::TargetList::on_insert(target, total_stake).defensive(); - } else { - log!(error, "target stake overflow. exit."); - return Err(SteppedMigrationError::Failed) - } + // no more nominators to process, go to next phase. + Some((None, Processing::Validators)) } - } + }, + Some((maybe_validator, Processing::Validators)) => { + // process validator. + let mut iter = if let Some(last_validator) = maybe_validator { + Validators::::iter_from(Validators::::hashed_key_for(last_validator)) + } else { + Validators::::iter() + }; - // progress cursor. - cursor = Some(nominator) - } else { - // done, return earlier. + // nominators have been all processed, start processing validators. + if let Some((validator, _)) = iter.next() { + Self::process_validator(&validator); + Some((Some(validator), Processing::Validators)) + } else { + Some((None, Processing::Done)) + } + }, + Some((_, Processing::Done)) => Some((None, Processing::Done)), + }; + + // progress or terminate. + if new_cursor.clone().unwrap_or_default().1 == Processing::Done { return Ok(None) + } else { + cursor = new_cursor; } } Ok(cursor) } } + +impl MigrationV13 { + fn process_nominator( + nominator: &T::AccountId, + nominations: Nominations, + ) -> Result<(), SteppedMigrationError> { + let nominator_vote = Pallet::::weight_of(nominator); + // clean the nominations before migrating. This will ensure that the voter is not + // nominating duplicate and/or dangling targets. + let nominations = Self::clean_nominations(nominator, nominations)?; + + // iter over up to `MaxNominationsOf` targets of `nominator` and insert or + // update the target's approval's score. + for target in nominations.into_iter() { + if ::TargetList::contains(&target) { + Self::update_target(&target, nominator_vote)?; + } else { + Self::insert_target(&target, nominator_vote)?; + } + } + Ok(()) + } + + fn process_validator(validator: &T::AccountId) { + if !::TargetList::contains(validator) && + as StakingInterface>::status(validator) == Ok(StakerStatus::Validator) + { + let self_stake = Pallet::::weight_of(validator); + ::TargetList::on_insert(validator.clone(), self_stake.into()) + .expect("node does not exist, checked above; qed."); + } + } + + /// Inserts a new target in the list. + /// + /// Note: the caller must ensure that the target node does not exist in the list yet. + /// Oterhwise, use [`Self::update_target`]. + fn insert_target( + who: &T::AccountId, + nomination_stake: VoteWeight, + ) -> Result<(), SteppedMigrationError> { + let init_stake = match as StakingInterface>::status(&who) { + Ok(StakerStatus::Validator) => { + let self_stake = Pallet::::weight_of(&who); + let total_stake = self_stake.defensive_saturating_add(nomination_stake); + total_stake + }, + _ => nomination_stake, + }; + + match ::TargetList::on_insert(who.clone(), init_stake.into()) { + Err(e) => { + log!(error, "inserting {:?} in TL: {:?}", who, e); + Err(SteppedMigrationError::Failed) + }, + Ok(_) => Ok(()), + } + } + + /// Updates the target score in the target list. + /// + /// Note: the caller must ensure that the target node already exists in the list. Otherwise, + /// use [`Self::insert_target`]. + fn update_target( + who: &T::AccountId, + nomination_stake: VoteWeight, + ) -> Result<(), SteppedMigrationError> { + let current_stake = + ::TargetList::get_score(&who).expect("node is in the list"); + + let total_stake = current_stake.defensive_saturating_add(nomination_stake.into()); + let _ = ::TargetList::on_update(&who, total_stake.into()).map_err(|e| { + log!(error, "updating TL score of {:?}: {:?}", who, e); + SteppedMigrationError::Failed + })?; + + Ok(()) + } + + /// Cleans up the nominations of `who`. + /// + /// After calling this method, the following invariants are respected: + /// - `stash` has no duplicate nominations; + /// - `stash` has no dangling nominations (i.e. nomination of non-active validator stashes). + /// + /// If the clean set of nominations is empty, `who` is chilled. + /// + /// When successful, the final nominations of the stash are returned. + pub(crate) fn clean_nominations( + who: &T::AccountId, + raw_nominations: Nominations, + ) -> Result, SteppedMigrationError> { + use sp_std::collections::btree_set::BTreeSet; + + ensure!( + Pallet::::status(who).map(|x| x.is_nominator()).unwrap_or(false), + SteppedMigrationError::Failed + ); + + let mut raw_targets = raw_nominations.targets.into_inner(); + let count_before = raw_targets.len(); + + // remove duplicate nominations. + let dedup_noms: Vec = + raw_targets.drain(..).collect::>().into_iter().collect::>(); + + // remove all non-validator nominations. + let targets = dedup_noms + .into_iter() + .filter(|n| Pallet::::status(n) == Ok(StakerStatus::Validator)) + .collect::>(); + + if targets.len() == 0 { + // if no nominations are left, chill the nominator. + let _ = as StakingInterface>::chill(&who) + .map_err(|e| { + log!(error, "error when chilling {:?}", who); + e + }) + .defensive(); + } else if count_before > targets.len() { + // force update the nominations. + let bounded_targets = targets + .clone() + .into_iter() + .collect::>() + .try_into() + .expect( + "new bound should be within the existent set of targets, thus it should fit; qed.", + ); + + let nominations = Nominations { + targets: bounded_targets, + submitted_in: raw_nominations.submitted_in, + suppressed: raw_nominations.suppressed, + }; + + >::do_add_nominator(who, nominations); + } + + Ok(targets) + } +} diff --git a/substrate/frame/staking/src/migrations/v13_stake_tracker/tests.rs b/substrate/frame/staking/src/migrations/v13_stake_tracker/tests.rs index c853d4795fea..3747c1ecdf0a 100644 --- a/substrate/frame/staking/src/migrations/v13_stake_tracker/tests.rs +++ b/substrate/frame/staking/src/migrations/v13_stake_tracker/tests.rs @@ -21,12 +21,11 @@ use crate::{ bond_nominator, bond_validator, run_to_block, AllPalletsWithSystem, ExtBuilder, MigratorServiceWeight, Staking, System, TargetBagsList, Test as T, }, - testing_utils, weights::{SubstrateWeight, WeightInfo as _}, Nominators, }; use frame_election_provider_support::SortedListProvider; -use frame_support::{assert_ok, traits::OnRuntimeUpgrade}; +use frame_support::traits::OnRuntimeUpgrade; use pallet_migrations::WeightInfo as _; #[test] @@ -135,54 +134,8 @@ fn mb_migration_target_list_dangling_validators_works() { } #[test] -fn mb_migration_target_list_single_step_bench_works() { - ExtBuilder::default() - .has_stakers(false) - .max_winners(1000) - // skip checks as not all the steps are applied. - .stake_tracker_try_state(false) - .build_and_execute(|| { - // setup: - // 1000 validators; - // 5 nominators; - // 16 nominations. - let _ = testing_utils::create_validators_with_nominators_for_era::( - 1000, 5, 16, true, None, - ); - assert_eq!(TargetBagsList::count(), 1000); - - // drop targets from target list nominated by the one nominator to be migrated. - let (_to_migrate, mut nominations) = Nominators::::iter() - .map(|(n, noms)| (n, noms.targets.into_inner())) - .next() - .unwrap(); - - // remove duplicates. - nominations.sort(); - nominations.dedup(); - - for t in nominations.iter() { - assert_ok!(TargetBagsList::on_remove(&t)); - } - - // targets nominated by first nominator will be dropped from the target list. - assert_eq!(TargetBagsList::count(), 1000 - nominations.len() as u32); - assert!(Staking::do_try_state(System::block_number()).is_err()); - - // allocate 1 step per block. - let limit = ::WeightInfo::progress_mbms_none() + - pallet_migrations::Pallet::::exec_migration_max_weight() + - SubstrateWeight::::v13_mmb_step(); - MigratorServiceWeight::set(&limit); - - AllPalletsWithSystem::on_runtime_upgrade(); // onboard MBMs - - // migrate first nominator, which will add back all the targets to the target list. - run_to_block(2); - - // migration done, try state checks pass. - assert_eq!(TargetBagsList::count(), 1000); - Staking::do_try_state(System::block_number()).unwrap(); - assert!(Staking::do_try_state(System::block_number()).is_ok()); - }) +fn mb_migration_target_list_duplicate_validators_works() { + ExtBuilder::default().has_stakers(false).build_and_execute(|| { + // TODO + }) } diff --git a/substrate/frame/staking/src/mock.rs b/substrate/frame/staking/src/mock.rs index 7177ac1abdee..50249c692ab5 100644 --- a/substrate/frame/staking/src/mock.rs +++ b/substrate/frame/staking/src/mock.rs @@ -363,7 +363,7 @@ impl OnStakingUpdate for EventTracker { } parameter_types! { - pub static VoterUpdateMode: pallet_stake_tracker::VoterUpdateMode = pallet_stake_tracker::VoterUpdateMode::Strict; + pub static VoterUpdateMode: pallet_stake_tracker::VoterUpdateMode = pallet_stake_tracker::VoterUpdateMode::Lazy; } impl pallet_stake_tracker::Config for Test { @@ -450,8 +450,6 @@ pub(crate) type TestCall = ::RuntimeCall; parameter_types! { // if true, skips the try-state for the test running. pub static SkipTryStateCheck: bool = false; - // if true, skips the stake-tracker try-state for the tests running. - pub static SkipStakeTrackerTryStateCheck: bool = false; } pub struct ExtBuilder { @@ -567,12 +565,8 @@ impl ExtBuilder { SkipTryStateCheck::set(!enable); self } - pub fn stake_tracker_try_state(self, enable: bool) -> Self { - SkipStakeTrackerTryStateCheck::set(!enable); - self - } - pub fn set_voter_list_lazy(self) -> Self { - VoterUpdateMode::set(pallet_stake_tracker::VoterUpdateMode::Lazy); + pub fn set_voter_list_strict(self) -> Self { + VoterUpdateMode::set(pallet_stake_tracker::VoterUpdateMode::Strict); self } pub fn max_winners(self, max: u32) -> Self { @@ -721,18 +715,6 @@ impl ExtBuilder { }) .unwrap(); } - - // run the stake tracker try state checks too to leverage the test coverage of the - // staking pallet tests. - #[cfg(feature = "try-runtime")] - if !SkipStakeTrackerTryStateCheck::get() { - StakeTracker::do_try_state() - .map_err(|err| { - println!(" 🕵️‍♂️ StakeTracker try_state failure: {:?}", err); - err - }) - .unwrap() - } }); } } diff --git a/substrate/frame/staking/src/pallet/impls.rs b/substrate/frame/staking/src/pallet/impls.rs index d936503e1aa2..81a3c9c4a46a 100644 --- a/substrate/frame/staking/src/pallet/impls.rs +++ b/substrate/frame/staking/src/pallet/impls.rs @@ -411,6 +411,44 @@ impl Pallet { } } + /// Removes dangling nominations from a nominator. + /// + /// If `maybe_target` is `None`, search for *all* dangling nominations and drop them. Otherwise + /// drop only one dangling target. + /// + /// IMPORTANT NOTE: if `maybe_target` is set, it is assumed that the target is indeed dangling. + /// No further checks are performed in this method. + pub(crate) fn do_drop_dangling_nominations( + nominator: &T::AccountId, + target: Option<&T::AccountId>, + ) -> Result>, DispatchError> { + let nominations_after = match (target, Self::status(&nominator)) { + (None, Ok(StakerStatus::Nominator(nominations))) => { + // target not set, filter out all non-validator nominations. + nominations + .into_iter() + .filter(|n| Self::status(n) == Ok(StakerStatus::Validator)) + .collect::>() + }, + (Some(target), Ok(StakerStatus::Nominator(nominations))) => { + debug_assert!(Self::status(&target).is_err() && T::TargetList::contains(&target),); + + nominations.iter().cloned().filter(|n| n != target).collect::>() + }, + // not a nominator, return earlier. + (_, _) => return Err(Error::::NotNominator.into()), + }; + + // no dangling nominations, return earlier. + if nominations_after.len().is_zero() { + return Err(Error::::NotDanglingTarget.into()); + } + + ::nominate(nominator, nominations_after.clone())?; // TODO remove clone? + + Ok(BoundedVec::truncate_from(nominations_after)) + } + /// Actually make a payment to a staker. This uses the currency's reward function /// to pay the right payee for the given staker account. fn make_payout( @@ -2064,7 +2102,7 @@ impl sp_staking::StakingUnchecked for Pallet { #[cfg(any(test, feature = "try-runtime"))] impl Pallet { - pub(crate) fn do_try_state(_: BlockNumberFor) -> Result<(), TryRuntimeError> { + pub fn do_try_state(_: BlockNumberFor) -> Result<(), TryRuntimeError> { ensure!( T::VoterList::iter().all(|x| >::contains_key(&x) || >::contains_key(&x) || @@ -2079,7 +2117,9 @@ impl Pallet { Self::check_exposures()?; Self::check_paged_exposures()?; Self::check_count()?; - Self::ensure_disabled_validators_sorted() + Self::ensure_disabled_validators_sorted()?; + Self::do_try_state_approvals()?; + Self::do_try_state_target_sorting() } /// Invariants: @@ -2404,4 +2444,147 @@ impl Pallet { ); Ok(()) } + + /// Stake-tracker: checks if the approvals stake of the targets in the target list are correct. + /// + /// These try-state checks generate a map with approval stake of all the targets based on + /// the staking state of stakers in the voter and target lists. In doing so, we are able to + /// verify that the current voter and target lists and scores are in sync with the staking + /// data and perform other sanity checks as the approvals map is calculated. + /// + /// NOTE: this is an expensive state check since it iterates over all the nodes in the + /// target and voter list providers. + /// + /// Invariants: + /// + /// * Target List: + /// * The sum of the calculated approvals stake is the same as the current approvals in + /// the target list per target. + /// * The target score of an active validator is the sum of all of its nominators' stake + /// and the self-stake; + /// * The target score of an idle validator (i.e. chilled) is the sum of its nominator's + /// stake. An idle target may not be part of the target list, if it has no nominations. + /// * The target score of a "dangling" target (ie. idle AND unbonded validator) must + /// always be > 0. We expect the stake-tracker to have cleaned up dangling targets with 0 + /// score. + /// * The number of target nodes in the target list matches the number of + /// (active_validators + idle_validators + dangling_targets_score_with_score). + pub fn do_try_state_approvals() -> Result<(), sp_runtime::TryRuntimeError> { + use sp_std::collections::{btree_map::BTreeMap, btree_set::BTreeSet}; + let mut approvals_map: BTreeMap = BTreeMap::new(); + + // build map of approvals stakes from the `Nominators` storage map POV. + for (voter, nominations) in Nominators::::iter() { + let vote = Self::weight_of(&voter); + let nominations = nominations.targets; + + // fail if nominator has duplicate nominations, unexpected in the context of + // keeping track of the stake approvals. + let count_before = nominations.len(); + let dedup_noms: Vec = nominations + .clone() + .drain(..) + .collect::>() + .into_iter() + .collect::>(); + + ensure!( + count_before == dedup_noms.len(), + "nominator has duplicate nominations, unexpected." + ); + + for target in nominations.into_iter() { + if let Some(approvals) = approvals_map.get_mut(&target) { + *approvals += vote.into(); + } else { + // new addition to the map. add self-stake if validator is active. + let _ = match Self::status(&target) { + Ok(StakerStatus::Validator) => { + let self_stake = Pallet::::weight_of(&target); + approvals_map.insert(target, vote.saturating_add(self_stake).into()) + }, + _ => approvals_map.insert(target, vote.into()), + }; + } + } + } + + // add active validators without any nominations. + for (validator, _) in Validators::::iter() { + // do not add validator if it is not in a good state. + match Self::inspect_bond_state(&validator) { + Ok(LedgerIntegrityState::Ok) | Err(_) => (), + _ => continue, + } + + if !approvals_map.contains_key(&validator) { + // skip if for some reason there is a nominator being nominated. + match Self::status(&validator) { + Ok(StakerStatus::Nominator(_)) => { + log!( + warn, + "nominated staker {:?} is a nominator, not a validator.", + validator + ); + }, + _ => { + let self_stake = Pallet::::weight_of(&validator); + approvals_map.insert(validator, self_stake.into()); + }, + } + } + } + + let mut mismatch_approvals = 0; + + // compare calculated approvals per target with target list state. + for (target, calculated_stake) in approvals_map.iter() { + let stake_in_list = T::TargetList::get_score(target).unwrap(); + + if *calculated_stake != stake_in_list { + mismatch_approvals += 1; + + log!( + error, + "try-runtime: score of {:?} in `TargetList` list: {:?}, calculated sum of all stake: {:?} -- weight self-stake: {:?}", + target, + stake_in_list, + calculated_stake, + Pallet::::weight_of(&target), + ); + } + } + + frame_support::ensure!( + approvals_map.keys().count() == T::TargetList::iter().count(), + "calculated approvals count is different from total of target list.", + ); + + if !mismatch_approvals.is_zero() { + log!(error, "{} targets with unexpected score in list", mismatch_approvals); + return Err("final calculated approvals != target list scores".into()); + } + + Ok(()) + } + + /// Try-state: checks if targets in the target list are sorted by score. + /// + /// Invariant + /// * All targets in the target list are sorted by their score (approvals). + /// + /// NOTE: unfortunatelly, it is not trivial to check if the sort correctness of the list if + /// the `SortedListProvider` is implemented by bags list due to score bucketing. Thus, we + /// leverage the [`SortedListProvider::in_position`] to verify if the target is in the + /// correct position in the list (bag or otherwise), given its score. + pub fn do_try_state_target_sorting() -> Result<(), sp_runtime::TryRuntimeError> { + for t in T::TargetList::iter() { + frame_support::ensure!( + T::TargetList::in_position(&t).expect("target exists"), + "target list is not sorted" + ); + } + + Ok(()) + } } diff --git a/substrate/frame/staking/src/pallet/mod.rs b/substrate/frame/staking/src/pallet/mod.rs index 979af80b238b..401829472985 100644 --- a/substrate/frame/staking/src/pallet/mod.rs +++ b/substrate/frame/staking/src/pallet/mod.rs @@ -37,11 +37,11 @@ use sp_runtime::{ }; use sp_staking::{ - EraIndex, OnStakingUpdate, Page, SessionIndex, StakerStatus, + EraIndex, OnStakingUpdate, Page, SessionIndex, StakingAccount::{self, Controller, Stash}, StakingInterface, }; -use sp_std::prelude::*; +use sp_std::{collections::btree_set::BTreeSet, prelude::*}; mod impls; @@ -51,7 +51,7 @@ use crate::{ slashing, weights::WeightInfo, AccountIdLookupOf, ActiveEraInfo, BalanceOf, DisablingStrategy, EraPayout, EraRewardPoints, Exposure, ExposurePage, Forcing, LedgerIntegrityState, MaxNominationsOf, NegativeImbalanceOf, Nominations, NominationsQuota, PositiveImbalanceOf, - RewardDestination, SessionInterface, StakingLedger, UnappliedSlash, UnlockChunk, + RewardDestination, SessionInterface, StakerStatus, StakingLedger, UnappliedSlash, UnlockChunk, ValidatorPrefs, }; @@ -795,8 +795,8 @@ pub mod pallet { ForceEra { mode: Forcing }, /// Report of a controller batch deprecation. ControllerBatchDeprecated { failures: u32 }, - /// A dangling nomination has been successfully dropped. - DanglingNominationDropped { nominator: T::AccountId, target: T::AccountId }, + /// A set of dangling nominations have been successfully dropped. + DanglingNominationsDropped { nominator: T::AccountId, count: u32 }, } #[pallet::error] @@ -1231,9 +1231,15 @@ pub mod pallet { .map(|t| T::Lookup::lookup(t).map_err(DispatchError::from)) .map(|n| { n.and_then(|n| { - // a good target nomination must be a valiator (active or idle). The - // validator must not be blocked. - if Self::status(&n).is_ok() && + // a good target nomination must be an active validator or a Idle staker. + // The validator must not be blocked. + let validator_or_idle = Self::status(&n) + .map(|status| { + status == StakerStatus::Validator || status == StakerStatus::Idle + }) + .unwrap_or(false); + + if validator_or_idle && (old.contains(&n) || !Validators::::get(&n).blocked) { Ok(n) @@ -1243,6 +1249,11 @@ pub mod pallet { }) }) .collect::, _>>()? + // remove duplicate nominations. + .drain(..) + .collect::>() + .into_iter() + .collect::>() .try_into() .map_err(|_| Error::::TooManyNominators)?; @@ -2096,7 +2107,7 @@ pub mod pallet { Ok(()) } - /// Removes nomination from a chilled and unbonded target. + /// Removes nomination of a non-active validator. /// /// In the case that an unboded target still has nominations lingering, the approvals stake /// for the "dangling" target needs to remain in the target list. This extrinsic allows @@ -2121,28 +2132,16 @@ pub mod pallet { Error::::NotDanglingTarget ); - match Self::status(&nominator) { - Ok(StakerStatus::Nominator(nominations)) => { - let count_before = nominations.len(); - - let nominations_after = - nominations.into_iter().filter(|n| *n != target).collect::>(); - - if nominations_after.len() != count_before { - ::nominate(&nominator, nominations_after)?; + Self::do_drop_dangling_nominations(&nominator, Some(&target)) + .map(|_| { + Self::deposit_event(Event::::DanglingNominationsDropped { + nominator, + count: 1, + }); - Self::deposit_event(Event::::DanglingNominationDropped { - nominator, - target, - }); - - Ok(Pays::No.into()) - } else { - Ok(Pays::Yes.into()) - } - }, - _ => Err(Error::::NotNominator.into()), - } + Pays::No.into() + }) + .map_err(|err| err.into()) } } } diff --git a/substrate/frame/staking/src/tests.rs b/substrate/frame/staking/src/tests.rs index 9d835368fdc7..689b7e232e4b 100644 --- a/substrate/frame/staking/src/tests.rs +++ b/substrate/frame/staking/src/tests.rs @@ -1291,25 +1291,19 @@ fn bond_extra_works() { #[test] fn bond_extra_controller_bad_state_works() { - ExtBuilder::default() - .try_state(false) - .stake_tracker_try_state(false) - .build_and_execute(|| { - assert_eq!(StakingLedger::::get(StakingAccount::Stash(31)).unwrap().stash, 31); + ExtBuilder::default().try_state(false).build_and_execute(|| { + assert_eq!(StakingLedger::::get(StakingAccount::Stash(31)).unwrap().stash, 31); - // simulate ledger in bad state: the controller 41 is associated to the stash 31 and 41. - Bonded::::insert(31, 41); + // simulate ledger in bad state: the controller 41 is associated to the stash 31 and 41. + Bonded::::insert(31, 41); - // we confirm that the ledger is in bad state: 31 has 41 as controller and when fetching - // the ledger associated with the controller 41, its stash is 41 (and not 31). - assert_eq!(Ledger::::get(41).unwrap().stash, 41); + // we confirm that the ledger is in bad state: 31 has 41 as controller and when fetching + // the ledger associated with the controller 41, its stash is 41 (and not 31). + assert_eq!(Ledger::::get(41).unwrap().stash, 41); - // if the ledger is in this bad state, the `bond_extra` should fail. - assert_noop!( - Staking::bond_extra(RuntimeOrigin::signed(31), 10), - Error::::BadState - ); - }) + // if the ledger is in this bad state, the `bond_extra` should fail. + assert_noop!(Staking::bond_extra(RuntimeOrigin::signed(31), 10), Error::::BadState); + }) } #[test] @@ -1884,7 +1878,6 @@ fn reward_to_stake_works() { .set_status(41, StakerStatus::Idle) .set_stake(21, 2000) .try_state(false) - .stake_tracker_try_state(false) .build_and_execute(|| { assert_eq!(Staking::validator_count(), 2); // Confirm account 10 and 20 are validators @@ -1978,7 +1971,7 @@ fn reap_stash_works_with_existential_deposit_zero() { ExtBuilder::default() .existential_deposit(0) .balance_factor(10) - .stake_tracker_try_state(false) + .try_state(false) .build_and_execute(|| { // given assert_eq!(Balances::balance_locked(STAKING_ID, &11), 10 * 1000); @@ -2076,6 +2069,7 @@ fn switching_roles() { #[test] fn wrong_vote_errors() { ExtBuilder::default() + .nominate(true) .add_staker( 61, 61, @@ -2101,10 +2095,26 @@ fn wrong_vote_errors() { Error::::BadTarget ); - // however, nominating an `Idle` validator is OK. + // nominating a nominator fails. + assert_eq!(Staking::status(&101), Ok(StakerStatus::Nominator(vec![11, 21]))); + assert_noop!( + Staking::nominate(RuntimeOrigin::signed(61), vec![11, 21, 101]), + Error::::BadTarget + ); + + // nominating an `Idle` validator works. assert_eq!(Staking::status(&41), Ok(StakerStatus::Idle)); assert_eq!(Staking::status(&31), Ok(StakerStatus::Validator)); assert_ok!(Staking::nominate(RuntimeOrigin::signed(61), vec![11, 21, 31, 41])); + assert_eq!( + Staking::status(&61).unwrap(), + StakerStatus::Nominator(vec![11, 21, 31, 41]) + ); + + // nominating duplicate targets does not fail, but the final nominations list is + // deduplicated. + assert_ok!(Staking::nominate(RuntimeOrigin::signed(61), vec![11, 21, 11, 11, 21, 21])); + assert_eq!(Staking::status(&61).unwrap(), StakerStatus::Nominator(vec![11, 21])); }); } @@ -2231,6 +2241,7 @@ fn bond_with_duplicate_vote_should_be_ignored_by_election_provider() { .nominate(false) .minimum_validator_count(1) .set_stake(31, 1000) + .try_state(false) .build_and_execute(|| { // ensure all have equal stake. assert_eq!( @@ -2283,6 +2294,7 @@ fn bond_with_duplicate_vote_should_be_ignored_by_election_provider_elected() { .nominate(false) .set_stake(31, 1000) .minimum_validator_count(1) + .try_state(false) .build_and_execute(|| { // ensure all have equal stake. assert_eq!( @@ -2341,35 +2353,32 @@ fn new_era_elects_correct_number_of_validators() { #[test] fn phragmen_should_not_overflow() { - ExtBuilder::default() - .stake_tracker_try_state(false) - .nominate(false) - .build_and_execute(|| { - // This is the maximum value that we can have as the outcome of CurrencyToVote. - type Votes = u64; + ExtBuilder::default().try_state(false).nominate(false).build_and_execute(|| { + // This is the maximum value that we can have as the outcome of CurrencyToVote. + type Votes = u64; - let _ = Staking::chill(RuntimeOrigin::signed(10)); - let _ = Staking::chill(RuntimeOrigin::signed(20)); + let _ = Staking::chill(RuntimeOrigin::signed(10)); + let _ = Staking::chill(RuntimeOrigin::signed(20)); - bond_validator(3, Votes::max_value() as Balance); - bond_validator(5, Votes::max_value() as Balance); + bond_validator(3, Votes::max_value() as Balance); + bond_validator(5, Votes::max_value() as Balance); - bond_nominator(7, Votes::max_value() as Balance, vec![3, 5]); - bond_nominator(9, Votes::max_value() as Balance, vec![3, 5]); + bond_nominator(7, Votes::max_value() as Balance, vec![3, 5]); + bond_nominator(9, Votes::max_value() as Balance, vec![3, 5]); - mock::start_active_era(1); + mock::start_active_era(1); - assert_eq_uvec!(validator_controllers(), vec![3, 5]); + assert_eq_uvec!(validator_controllers(), vec![3, 5]); - // We can safely convert back to values within [u64, u128]. - assert!(Staking::eras_stakers(active_era(), &3).total > Votes::max_value() as Balance); - assert!(Staking::eras_stakers(active_era(), &5).total > Votes::max_value() as Balance); - }) + // We can safely convert back to values within [u64, u128]. + assert!(Staking::eras_stakers(active_era(), &3).total > Votes::max_value() as Balance); + assert!(Staking::eras_stakers(active_era(), &5).total > Votes::max_value() as Balance); + }) } #[test] fn reward_validator_slashing_validator_does_not_overflow() { - ExtBuilder::default().stake_tracker_try_state(false).build_and_execute(|| { + ExtBuilder::default().try_state(false).build_and_execute(|| { let stake = u64::MAX as Balance * 2; let reward_slash = u64::MAX as Balance * 2; @@ -5160,7 +5169,7 @@ mod sorted_list_provider_integration { #[test] fn nominator_bond_unbond_chill_works() { - ExtBuilder::default().build_and_execute(|| { + ExtBuilder::default().set_voter_list_strict().build_and_execute(|| { Balances::make_free_balance_be(&42, 100); // initial stakers. @@ -5228,7 +5237,7 @@ mod sorted_list_provider_integration { #[test] fn validator_validate_chill_works() { - ExtBuilder::default().build_and_execute(|| { + ExtBuilder::default().set_voter_list_strict().build_and_execute(|| { Balances::make_free_balance_be(&42, 100); // initial targets. @@ -5253,11 +5262,12 @@ mod sorted_list_provider_integration { assert_eq!(VoterBagsList::score(&42), 20); assert_eq!(TargetBagsList::score(&42), 20); - // stash 42 chills, thus it should be part of the target bags list but not in the voter - // list. And it is `Idle` status. + // stash 42 chills and no one nominates it, thus its score is 0 and it sis not part of + // the target bags list. In addition, it is not in the voter list. And it is `Idle` + // status. assert_ok!(Staking::chill(RuntimeOrigin::signed(42))); assert!(!VoterBagsList::contains(&42)); - assert!(TargetBagsList::contains(&42)); + assert!(!TargetBagsList::contains(&42)); assert_eq!(Staking::status(&42), Ok(StakerStatus::Idle)); // the target score of 42 is 0, since it is chilled and it has no nominations. assert_eq!(TargetBagsList::score(&42), 0); @@ -5601,7 +5611,7 @@ mod election_data_provider { #[test] fn lazy_quota_npos_voters_works_above_quota() { ExtBuilder::default() - .stake_tracker_try_state(false) + .try_state(false) .nominate(false) .has_stakers(true) .add_staker( @@ -5634,7 +5644,7 @@ mod election_data_provider { #[test] fn nominations_quota_limits_size_work() { ExtBuilder::default() - .stake_tracker_try_state(false) + .try_state(false) .nominate(false) .has_stakers(true) .add_staker(71, 70, 333, StakerStatus::::Nominator(vec![11, 21, 31, 41])) @@ -6234,12 +6244,12 @@ fn change_of_absolute_max_nominations() { fn nomination_quota_max_changes_decoding() { use frame_election_provider_support::ElectionDataProvider; ExtBuilder::default() - .stake_tracker_try_state(false) .add_staker(60, 61, 10, StakerStatus::Nominator(vec![11])) .add_staker(70, 71, 10, StakerStatus::Nominator(vec![11, 21, 31])) .add_staker(30, 330, 10, StakerStatus::Nominator(vec![11, 21, 31, 41])) .add_staker(50, 550, 10, StakerStatus::Nominator(vec![11, 21, 31, 41])) .balance_factor(10) + .try_state(false) .build_and_execute(|| { // pre-condition. assert_eq!(MaxNominationsOf::::get(), 16); @@ -7841,10 +7851,10 @@ mod stake_tracker { assert_ok!(Staking::nominate(RuntimeOrigin::signed(101), vec![11, 11, 11])); assert_eq!(nominators_of(&11), vec![101, 100]); - // even though the nominations of 101 have duplicate targets as 11. - assert_eq!(Nominators::::get(&101).unwrap().targets, vec![11, 11, 11]); + // however, the nominations are dedup. + assert_eq!(Nominators::::get(&101).unwrap().targets, vec![11]); // the approvals stake of 11 is self_stake + active stake of 101 and 100. duplicate - // nominations in the same voter is dedup by the stake tracker. + // nominations in the same voter are dedup. assert_eq!( TargetBagsList::score(&11), Staking::active_stake(&11).unwrap() + @@ -8255,10 +8265,10 @@ mod stake_tracker { // the chilled validator score drops to 0, since it had only self-stake before chill. assert_eq!(>::score(&11), 0); - // 11 is still part of the targets list although the score is 0, since its status is - // Idle. However, it has been removed from the nominator sand validators lists. + // since score of 11 is 0, it is removed from the target list. Since it is idle, it is + // nor part of the nominator and validator lists. assert_eq!(Staking::status(&11), Ok(StakerStatus::Idle)); - assert_eq!(voters_and_targets().1, [(21, 1000), (31, 500), (11, 0)]); + assert_eq!(voters_and_targets().1, [(21, 1000), (31, 500)]); assert!(!Nominators::::contains_key(&11)); assert!(!Validators::::contains_key(&11)); @@ -8271,8 +8281,6 @@ mod stake_tracker { assert_eq!( target_bags_events(), [ - BagsEvent::Rebagged { who: 11, from: 1000, to: 100 }, - BagsEvent::ScoreUpdated { who: 11, new_score: 0 }, BagsEvent::Rebagged { who: 11, from: 100, to: 2000 }, BagsEvent::ScoreUpdated { who: 11, new_score: 1100 }, BagsEvent::Rebagged { who: 21, from: 1000, to: 10000 }, @@ -8572,91 +8580,81 @@ mod stake_tracker { #[test] fn drop_dangling_nomination_works() { - ExtBuilder::default() - .try_state(false) - .stake_tracker_try_state(false) - .build_and_execute(|| { - // setup. - bond_validator(42, 10); + ExtBuilder::default().try_state(false).build_and_execute(|| { + // setup. + bond_validator(42, 10); - assert_ok!(Staking::bond( - RuntimeOrigin::signed(90), - 500, - RewardDestination::Staked - )); - assert_ok!(Staking::nominate(RuntimeOrigin::signed(90), vec![11])); - assert_ok!(Staking::nominate(RuntimeOrigin::signed(101), vec![11])); + assert_ok!(Staking::bond(RuntimeOrigin::signed(90), 500, RewardDestination::Staked)); + assert_ok!(Staking::nominate(RuntimeOrigin::signed(90), vec![11])); + assert_ok!(Staking::nominate(RuntimeOrigin::signed(101), vec![11])); - // target is dangling with nominations from 101 and 90. - setup_dangling_target_for_nominators(42, vec![101, 90]); + // target is dangling with nominations from 101 and 90. + setup_dangling_target_for_nominators(42, vec![101, 90]); - // 101 is now nominating 42.. - assert_ok!(Staking::status(&101), StakerStatus::Nominator(vec![11, 42])); - // .. which is unbonded.. - assert!(Staking::status(&42).is_err()); - // .. and still part of the target list (thus dangling). - assert!(TargetBagsList::contains(&42)); + // 101 is now nominating 42.. + assert_ok!(Staking::status(&101), StakerStatus::Nominator(vec![11, 42])); + // .. which is unbonded.. + assert!(Staking::status(&42).is_err()); + // .. and still part of the target list (thus dangling). + assert!(TargetBagsList::contains(&42)); - // remove 90 as dangling nomination. - assert_ok!(Staking::drop_dangling_nomination(RuntimeOrigin::signed(1), 90, 42)); + // remove 90 as dangling nomination. + assert_ok!(Staking::drop_dangling_nomination(RuntimeOrigin::signed(1), 90, 42)); - assert_eq!( - *mock::staking_events().last().unwrap(), - Event::::DanglingNominationDropped { nominator: 90, target: 42 }.into(), - ); + assert_eq!( + *mock::staking_events().last().unwrap(), + Event::::DanglingNominationsDropped { nominator: 90, count: 1 }.into(), + ); - // now, 90 is not nominating 42 anymore. - assert_ok!(Staking::status(&90), StakerStatus::Nominator(vec![11])); - // but 42 is still dangling because 101 is still nominating it - assert!(TargetBagsList::contains(&42)); - assert_ok!(Staking::status(&101), StakerStatus::Nominator(vec![11, 42])); + // now, 90 is not nominating 42 anymore. + assert_ok!(Staking::status(&90), StakerStatus::Nominator(vec![11])); + // but 42 is still dangling because 101 is still nominating it + assert!(TargetBagsList::contains(&42)); + assert_ok!(Staking::status(&101), StakerStatus::Nominator(vec![11, 42])); - // when the last dangling nomination is removed, the danling target is removed. - assert_ok!(Staking::drop_dangling_nomination(RuntimeOrigin::signed(1), 101, 42)); + // when the last dangling nomination is removed, the danling target is removed. + assert_ok!(Staking::drop_dangling_nomination(RuntimeOrigin::signed(1), 101, 42)); - assert_ok!(Staking::status(&101), StakerStatus::Nominator(vec![11])); - assert!(!TargetBagsList::contains(&42)); + assert_ok!(Staking::status(&101), StakerStatus::Nominator(vec![11])); + assert!(!TargetBagsList::contains(&42)); - assert_eq!( - *mock::staking_events().last().unwrap(), - Event::::DanglingNominationDropped { nominator: 101, target: 42 }.into(), - ); - }) + assert_eq!( + *mock::staking_events().last().unwrap(), + Event::::DanglingNominationsDropped { nominator: 101, count: 1 }.into(), + ); + }) } #[test] fn drop_dangling_nomination_failures_work() { - ExtBuilder::default() - .try_state(false) - .stake_tracker_try_state(false) - .build_and_execute(|| { - // target is not dangling since it does not exist in the target list. - assert!(Staking::status(&42).is_err()); - assert!(!TargetBagsList::contains(&42)); + ExtBuilder::default().try_state(false).build_and_execute(|| { + // target is not dangling since it does not exist in the target list. + assert!(Staking::status(&42).is_err()); + assert!(!TargetBagsList::contains(&42)); - assert_noop!( - Staking::drop_dangling_nomination(RuntimeOrigin::signed(1), 10, 42), - Error::::NotDanglingTarget, - ); + assert_noop!( + Staking::drop_dangling_nomination(RuntimeOrigin::signed(1), 10, 42), + Error::::NotDanglingTarget, + ); - // target is not dangling since it is still bonded. - assert_eq!(Staking::status(&31), Ok(StakerStatus::Validator)); - assert_noop!( - Staking::drop_dangling_nomination(RuntimeOrigin::signed(1), 42, 10), - Error::::NotDanglingTarget, - ); + // target is not dangling since it is still bonded. + assert_eq!(Staking::status(&31), Ok(StakerStatus::Validator)); + assert_noop!( + Staking::drop_dangling_nomination(RuntimeOrigin::signed(1), 42, 10), + Error::::NotDanglingTarget, + ); - // target is dangling but voter is not nominating it. - bond_validator(42, 10); + // target is dangling but voter is not nominating it. + bond_validator(42, 10); - assert_eq!(Staking::status(&101), Ok(StakerStatus::Nominator(vec![11, 21]))); - setup_dangling_target_for_nominators(42, vec![101]); - assert!(Staking::status(&42).is_err()); - assert_noop!( - Staking::drop_dangling_nomination(RuntimeOrigin::signed(1), 11, 42), - Error::::NotNominator, - ); - }) + assert_eq!(Staking::status(&101), Ok(StakerStatus::Nominator(vec![11, 21]))); + setup_dangling_target_for_nominators(42, vec![101]); + assert!(Staking::status(&42).is_err()); + assert_noop!( + Staking::drop_dangling_nomination(RuntimeOrigin::signed(1), 11, 42), + Error::::NotNominator, + ); + }) } } diff --git a/substrate/frame/staking/stake-tracker/Cargo.toml b/substrate/frame/staking/stake-tracker/Cargo.toml index cd694293d150..a25867bb86a3 100644 --- a/substrate/frame/staking/stake-tracker/Cargo.toml +++ b/substrate/frame/staking/stake-tracker/Cargo.toml @@ -24,8 +24,6 @@ frame-election-provider-support = { default-features = false, path = "../../elec frame-support = { default-features = false, path = "../../support" } frame-system = { default-features = false, path = "../../system" } -log = { version = "0.4.17", default-features = false } - # Optional imports for benchmarking frame-benchmarking = { path = "../../benchmarking", default-features = false, optional = true } @@ -48,7 +46,6 @@ std = [ "frame-election-provider-support/std", "frame-support/std", "frame-system/std", - "log/std", "pallet-bags-list/std", "pallet-balances/std", "scale-info/std", diff --git a/substrate/frame/staking/stake-tracker/src/lib.rs b/substrate/frame/staking/stake-tracker/src/lib.rs index b1be2c8778d4..176a0116f52a 100644 --- a/substrate/frame/staking/stake-tracker/src/lib.rs +++ b/substrate/frame/staking/stake-tracker/src/lib.rs @@ -79,9 +79,6 @@ //! be removed onced all the voters stop nominating the unbonded account (i.e. the target's score //! drops to 0). //! -//! For further details on the target list invariante, refer to [`Self`::do_try_state_approvals`] -//! and [`Self::do_try_state_target_sorting`]. -//! //! ## Event emitter ordering and staking ledger state updates //! //! It is important to ensure that the events are emitted from staking (i.e. the calls into @@ -154,7 +151,6 @@ impl VoterUpdateMode { pub mod pallet { use crate::*; use frame_election_provider_support::{ExtendedBalance, VoteWeight}; - use frame_system::pallet_prelude::BlockNumberFor; /// The current storage version. const STORAGE_VERSION: StorageVersion = StorageVersion::new(0); @@ -183,14 +179,6 @@ pub mod pallet { type VoterUpdateMode: Get; } - #[pallet::hooks] - impl Hooks> for Pallet { - #[cfg(feature = "try-runtime")] - fn try_state(_n: BlockNumberFor) -> Result<(), sp_runtime::TryRuntimeError> { - Self::do_try_state() - } - } - impl Pallet { /// Updates the stake of a voter. /// @@ -276,12 +264,8 @@ pub mod pallet { if let Ok(current_score) = T::TargetList::get_score(who) { let balance = current_score.saturating_sub(imbalance); - // the target is removed from the list IFF score is 0 and the target is - // either dangling (i.e. not bonded) or currently registered as a nominator. - let remove_target = balance.is_zero() && - T::Staking::status(who).map(|s| s.is_nominator()).unwrap_or(true); - - if remove_target { + // the target is removed from the list IFF score is 0. + if balance.is_zero() { let _ = T::TargetList::on_remove(who).defensive_proof( "staker exists in the list as per the check above; qed.", ); @@ -309,7 +293,7 @@ pub mod pallet { } /// Helper to fetch te active stake of a staker and convert it to vote weight. - pub(crate) fn vote_of(who: &T::AccountId) -> VoteWeight { + pub fn vote_of(who: &T::AccountId) -> VoteWeight { let active = T::Staking::stake(who).map(|s| s.active).defensive_unwrap_or_default(); Self::to_vote(active) } @@ -321,7 +305,7 @@ pub mod pallet { /// /// TODO: replace this helper method by a debug_assert if #4419 ever prevents the nomination /// of duplicated target. - pub(crate) fn ensure_dedup(mut v: Vec) -> Vec { + pub fn ensure_dedup(mut v: Vec) -> Vec { use sp_std::collections::btree_set::BTreeSet; v.drain(..).collect::>().into_iter().collect::>() @@ -329,242 +313,6 @@ pub mod pallet { } } -#[cfg(any(test, feature = "try-runtime"))] -impl Pallet { - /// Try-state checks for the stake-tracker pallet. - /// - /// 1. `do_try_state_approvals`: checks the current approval stake in the target list compared - /// with the staking state. - /// 2. `do_try_state_target_sorting`: checks if the target list is sorted by score (approvals). - /// 3. `do_try_state_voter_sorting`: checks if the voter list is sorted by score (stake). - pub fn do_try_state() -> Result<(), sp_runtime::TryRuntimeError> { - Self::do_try_state_approvals()?; - Self::do_try_state_target_sorting()?; - Self::do_try_state_voter_sorting()?; - - Ok(()) - } - - /// Try-state: checks if the approvals stake of the targets in the target list are correct. - /// - /// These try-state checks generate a map with approval stake of all the targets based on - /// the staking state of stakers in the voter and target lists. In doing so, we are able to - /// verify that the current voter and target lists and scores are in sync with the staking - /// data and perform other sanity checks as the approvals map is calculated. - /// - /// NOTE: this is an expensive state check since it iterates over all the nodes in the - /// target and voter list providers. - /// - /// Invariants: - /// - /// * Target List: - /// * The sum of the calculated approvals stake is the same as the current approvals in - /// the target list per target. - /// * The target score of an active validator is the sum of all of its nominators' stake - /// and the self-stake; - /// * The target score of an idle validator (i.e. chilled) is the sum of its nominator's - /// stake. An idle target may not be part of the target list, if it has no nominations. - /// * The target score of a "dangling" target (ie. idle AND unbonded validator) must - /// always be > 0. We expect the stake-tracker to have cleaned up dangling targets with 0 - /// score. - /// * The number of target nodes in the target list matches the number of - /// (active_validators + idle_validators + dangling_targets_score_with_score). - /// - /// * Voter List: - /// * The voter score is the same as the active stake of the corresponding stash. - /// * An active validator should also be part of the voter list. - /// * An idle validator should not be part of the voter list. - /// * A dangling target shoud not be part of the voter list. - pub(crate) fn do_try_state_approvals() -> Result<(), sp_runtime::TryRuntimeError> { - let mut approvals_map: BTreeMap, sp_npos_elections::ExtendedBalance> = - BTreeMap::new(); - - // build map of approvals stakes from the `VoterList` POV. - for voter in T::VoterList::iter() { - if let Some(nominations) = ::nominations(&voter) { - // sanity check. - let active_stake = T::Staking::stake(&voter) - .map(|s| Self::to_vote(s.active)) - .expect("active voter has bonded stake; qed."); - - // if the voter list is in strict mode, we expect the stake of the voter to match - // the score in the list at all times. The approvals calculation also depends on - // the sorting of the voter list: - // * if the voter list is strictly sorted, use the nominator's scores to calculate - // the approvals. - // * if the voter list is lazily sorted, use the active stake of the nominator to - // calculat the approvals. - let stake = if T::VoterUpdateMode::get().is_strict_mode() { - // voter list is strictly sorted, use the voter list score to calculate the - // target's approvals. - let score = - >>::get_score(&voter) - .map_err(|_| "nominator score must exist in voter bags list")?; - - frame_support::ensure!( - active_stake == score, - "voter score must be the same as its active stake" - ); - - score - } else { - active_stake - }; - - // update the approvals map with the voter's active stake. - // note: must remove the dedup nominations, which is also done by the - // stake-tracker. - let nominations = Self::ensure_dedup(nominations); - - for nomination in nominations { - *approvals_map.entry(nomination).or_default() += - stake as sp_npos_elections::ExtendedBalance; - } - } else { - // if it is in the voter list but it's not a nominator, it should be a validator - // and part of the target list. - frame_support::ensure!( - T::Staking::status(&voter) == Ok(StakerStatus::Validator) && - T::TargetList::contains(&voter), - "wrong state of voter" - ); - frame_support::ensure!( - T::TargetList::contains(&voter), - "if voter is in voter list and it's not a nominator, it must be a target" - ); - } - } - - // add self-vote of active targets to calculated approvals from the `TargetList` POV. - for target in T::TargetList::iter() { - // also checks invariant: all active targets are also voters. - let maybe_self_stake = match T::Staking::status(&target) { - Err(_) => { - // if target is "dangling" (i.e unbonded but still in the `TargetList`), it - // should NOT be part of the voter list. - frame_support::ensure!( - !T::VoterList::contains(&target), - "dangling target (i.e. unbonded) should not be part of the voter list" - ); - - // if target is dangling, its target score should > 0 (otherwise it should - // have been removed from the list). - frame_support::ensure!( - T::TargetList::get_score(&target).expect("target must have score") > Zero::zero(), - "dangling target (i.e. unbonded) is part of the `TargetList` IFF it's approval voting > 0" - ); - // no self-stake and it should not be part of the target list. - None - }, - Ok(StakerStatus::Idle) => { - // target is idle and not part of the voter list. - frame_support::ensure!( - !T::VoterList::contains(&target), - "chilled validator (idle target) should not be part of the voter list" - ); - - // no sef-stake but since it's chilling, it should be part of the TL even - // with score = 0. - Some(0) - }, - Ok(StakerStatus::Validator) => { - // active target should be part of the voter list. - frame_support::ensure!( - T::VoterList::contains(&target), - "bonded and active validator should also be part of the voter list" - ); - // return self-stake (ie. active bonded). - T::Staking::stake(&target).map(|s| Self::to_vote(s.active)).ok() - }, - Ok(StakerStatus::Nominator(_)) => { - // an idle/dangling target may become a nominator. - None - }, - }; - - if let Some(score) = maybe_self_stake { - if let Some(stake) = approvals_map.get_mut(&target) { - *stake += score as sp_npos_elections::ExtendedBalance; - } else { - approvals_map.insert(target, score.into()); - } - } else { - // unbonded target: it does not have self-stake. - } - } - - // compare calculated approvals per target with target list state. - for (target, calculated_stake) in approvals_map.iter() { - let stake_in_list = T::TargetList::get_score(target).expect("target must exist; qed."); - - if *calculated_stake != stake_in_list { - log::error!( - target: "runtime::stake-tracker", - "try-runtime: score of {:?} in `TargetList` list: {:?}, calculated sum of all stake: {:?}", - target, - stake_in_list, - calculated_stake, - ); - - return Err("target score in the target list is different than the expected".into()) - } - } - - frame_support::ensure!( - approvals_map.keys().count() == T::TargetList::iter().count(), - "calculated approvals count is different from total of target list.", - ); - - Ok(()) - } - - /// Try-state: checks if targets in the target list are sorted by score. - /// - /// Invariant - /// * All targets in the target list are sorted by their score (approvals). - /// - /// NOTE: unfortunatelly, it is not trivial to check if the sort correctness of the list if - /// the `SortedListProvider` is implemented by bags list due to score bucketing. Thus, we - /// leverage the [`SortedListProvider::in_position`] to verify if the target is in the - /// correct position in the list (bag or otherwise), given its score. - pub fn do_try_state_target_sorting() -> Result<(), sp_runtime::TryRuntimeError> { - for t in T::TargetList::iter() { - frame_support::ensure!( - T::TargetList::in_position(&t).expect("target exists"), - "target list is not sorted" - ); - } - - Ok(()) - } - - /// Try-state: checks if voters in the voter list are sorted by score (stake). - /// - /// Invariant - /// * All voters in the voter list are sorted by their score. - /// - /// NOTE: unfortunatelly, it is not trivial to check if the sort correctness of the list if - /// the `SortedListProvider` is implemented by bags list due to score bucketing. Thus, we - /// leverage the [`SortedListProvider::in_position`] to verify if the target is in the - /// correct position in the list (bag or otherwise), given its score. - pub fn do_try_state_voter_sorting() -> Result<(), sp_runtime::TryRuntimeError> { - // if the voter list is in lazy mode, we don't expect the nodes to be sorted at all times. - // skip checks. - if T::VoterUpdateMode::get().is_strict_mode() { - return Ok(()) - } - - for t in T::VoterList::iter() { - frame_support::ensure!( - T::VoterList::in_position(&t).expect("voter exists"), - "voter list is not sorted" - ); - } - - Ok(()) - } -} - impl OnStakingUpdate> for Pallet { /// When a nominator's stake is updated, all the nominated targets must be updated /// accordingly. @@ -656,7 +404,7 @@ impl OnStakingUpdate> for Pallet { } } else { // target is not part of the list. Given the contract with staking and the checks above, - // this may actually be called. So do nothing and skip defensive warns. + // this may actually be called. Do nothing and skip defensive warns. }; } diff --git a/substrate/frame/staking/stake-tracker/src/mock.rs b/substrate/frame/staking/stake-tracker/src/mock.rs index abc8b999e453..cdc10896b200 100644 --- a/substrate/frame/staking/stake-tracker/src/mock.rs +++ b/substrate/frame/staking/stake-tracker/src/mock.rs @@ -461,10 +461,6 @@ pub(crate) fn voter_bags_events() -> Vec>() } -parameter_types! { - pub static DisableTryRuntimeChecks: bool = false; -} - #[derive(Default, Copy, Clone)] pub struct ExtBuilder { populate_lists: bool, @@ -481,12 +477,6 @@ impl ExtBuilder { self } - #[allow(dead_code)] - pub fn try_state(self, enable: bool) -> Self { - DisableTryRuntimeChecks::set(!enable); - self - } - pub fn build(self) -> sp_io::TestExternalities { sp_tracing::try_init_simple(); let storage = frame_system::GenesisConfig::::default().build_storage().unwrap(); @@ -506,13 +496,5 @@ impl ExtBuilder { System::set_block_number(1); }); ext.execute_with(test); - - if !DisableTryRuntimeChecks::get() { - ext.execute_with(|| { - StakeTracker::do_try_state() - .map_err(|err| println!(" 🕵️‍♂️ try_state failure: {:?}", err)) - .unwrap(); - }); - } } } diff --git a/substrate/frame/staking/stake-tracker/src/tests.rs b/substrate/frame/staking/stake-tracker/src/tests.rs index dc7442c2e112..53e204f49abc 100644 --- a/substrate/frame/staking/stake-tracker/src/tests.rs +++ b/substrate/frame/staking/stake-tracker/src/tests.rs @@ -59,15 +59,11 @@ fn update_target_score_works() { assert_eq!(TargetBagsList::get_score(&10), Ok(300)); let current_score = TargetBagsList::get_score(&10).unwrap(); - crate::Pallet::::update_target_score( - &10, - StakeImbalance::Negative(current_score), - ); - assert_eq!(TargetBagsList::get_score(&10), Ok(0)); + crate::Pallet::::update_target_score(&10, StakeImbalance::Negative(current_score)); - // disables the try runtime checks since the score of 10 was updated manually, so the target - // list was not updated accordingly. - DisableTryRuntimeChecks::set(true); + // score dropped to 0, node is removed. + assert!(!TargetBagsList::contains(&10)); + assert!(TargetBagsList::get_score(&10).is_err()); }) } @@ -449,13 +445,7 @@ mod staking_integration { chill_staker(2); assert_eq!(StakingMock::status(&2), Ok(StakerStatus::Idle)); - // a chilled validator is kepts in the target list. - assert!(TargetBagsList::contains(&2)); - assert!(!VoterBagsList::contains(&2)); - - remove_staker(2); - assert!(StakingMock::status(&2).is_err()); - // a chilled validator is kepts in the target list if its score is 0. + // a chilled validator is dropped from the target list if its score is 0. assert!(!TargetBagsList::contains(&2)); assert!(!VoterBagsList::contains(&2)); })