diff --git a/Cargo.lock b/Cargo.lock index 45b28ce..fd73b40 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -37,17 +37,6 @@ dependencies = [ "generic-array", ] -[[package]] -name = "ahash" -version = "0.7.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "891477e0c6a8957309ee5c45a6368af3ae14bb510732d2684ffa19af310920f9" -dependencies = [ - "getrandom", - "once_cell", - "version_check", -] - [[package]] name = "ahash" version = "0.8.11" @@ -140,20 +129,6 @@ dependencies = [ "num-traits", ] -[[package]] -name = "aquamarine" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d1da02abba9f9063d786eab1509833ebb2fac0f966862ca59439c76b9c566760" -dependencies = [ - "include_dir", - "itertools 0.10.5", - "proc-macro-error", - "proc-macro2", - "quote", - "syn 1.0.109", -] - [[package]] name = "aquamarine" version = "0.5.0" @@ -266,7 +241,7 @@ version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "43d68f2d516162846c1238e755a7c4d131b892b70cc70c471a8e3ca3ed818fce" dependencies = [ - "ahash 0.8.11", + "ahash", "ark-ff 0.5.0", "ark-poly 0.5.0", "ark-serialize 0.5.0", @@ -449,7 +424,7 @@ version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "579305839da207f02b89cd1679e50e67b4331e2f9294a57693e5051b7703fe27" dependencies = [ - "ahash 0.8.11", + "ahash", "ark-ff 0.5.0", "ark-serialize 0.5.0", "ark-std 0.5.0", @@ -564,7 +539,7 @@ dependencies = [ "ark-serialize 0.4.2", "ark-std 0.4.0", "digest 0.10.7", - "rand_core 0.6.4", + "rand_core", "sha3", ] @@ -631,7 +606,7 @@ dependencies = [ "ark-std 0.4.0", "dleq_vrf", "rand_chacha", - "rand_core 0.6.4", + "rand_core", "ring", "sha2 0.10.8", "sp-ark-bls12-381", @@ -1052,7 +1027,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0dc92fb57ca44df6db8059111ab3af99a63d5d0f8375d9972e319a379c6bab76" dependencies = [ "generic-array", - "rand_core 0.6.4", + "rand_core", "subtle", "zeroize", ] @@ -1064,7 +1039,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" dependencies = [ "generic-array", - "rand_core 0.6.4", + "rand_core", "typenum", ] @@ -1078,19 +1053,6 @@ dependencies = [ "subtle", ] -[[package]] -name = "curve25519-dalek" -version = "3.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b9fdf9972b2bd6af2d913799d9ebc165ea4d2e65878e329d9c6b372c4491b61" -dependencies = [ - "byteorder", - "digest 0.9.0", - "rand_core 0.5.1", - "subtle", - "zeroize", -] - [[package]] name = "curve25519-dalek" version = "4.1.2" @@ -1361,7 +1323,7 @@ version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4a3daa8e81a3963a60642bcc1f90a670680bd4a77535faa384e9d1c79d620871" dependencies = [ - "curve25519-dalek 4.1.2", + "curve25519-dalek", "ed25519", "serde", "sha2 0.10.8", @@ -1369,31 +1331,17 @@ dependencies = [ "zeroize", ] -[[package]] -name = "ed25519-zebra" -version = "3.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c24f403d068ad0b359e577a77f92392118be3f3c927538f2bb544a5ecd828c6" -dependencies = [ - "curve25519-dalek 3.2.0", - "hashbrown 0.12.3", - "hex", - "rand_core 0.6.4", - "sha2 0.9.9", - "zeroize", -] - [[package]] name = "ed25519-zebra" version = "4.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7d9ce6874da5d4415896cd45ffbc4d1cfc0c4f9c079427bd870742c30f2f65a9" dependencies = [ - "curve25519-dalek 4.1.2", + "curve25519-dalek", "ed25519", "hashbrown 0.14.5", "hex", - "rand_core 0.6.4", + "rand_core", "sha2 0.10.8", "zeroize", ] @@ -1429,7 +1377,7 @@ dependencies = [ "generic-array", "group", "pkcs8", - "rand_core 0.6.4", + "rand_core", "sec1", "serdect", "subtle", @@ -1524,7 +1472,7 @@ version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ded41244b729663b1e574f1b4fb731469f69f79c17667b5d776b16cda0479449" dependencies = [ - "rand_core 0.6.4", + "rand_core", "subtle", ] @@ -1612,9 +1560,7 @@ dependencies = [ [[package]] name = "frame-benchmarking" -version = "33.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f963589fa0f5ef5fe87fad5a9ac9ec4a43d83fd63e1993024576a8dcaee5e228" +version = "28.0.0" dependencies = [ "frame-support", "frame-support-procedural", @@ -1625,47 +1571,31 @@ dependencies = [ "paste", "scale-info", "serde", - "sp-api 31.0.0", - "sp-application-crypto 35.0.0", - "sp-core 32.0.0", - "sp-io 35.0.0", - "sp-runtime 36.0.0", - "sp-runtime-interface 27.0.0", - "sp-std 14.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "sp-storage 21.0.0", + "sp-api", + "sp-application-crypto", + "sp-core", + "sp-io", + "sp-runtime", + "sp-runtime-interface 24.0.0", + "sp-storage 19.0.0", "static_assertions", ] [[package]] name = "frame-executive" -version = "33.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01d5b1ec42b019aa16d1f9269f74f391c32ce642cb2aad7b1b6a6d65a34e1bc6" +version = "28.0.0" dependencies = [ - "aquamarine 0.3.3", + "aquamarine", "frame-support", "frame-system", "frame-try-runtime", "log", "parity-scale-codec", "scale-info", - "sp-core 32.0.0", - "sp-io 35.0.0", - "sp-runtime 36.0.0", - "sp-std 14.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "sp-tracing 17.0.1", -] - -[[package]] -name = "frame-metadata" -version = "16.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87cf1549fba25a6fcac22785b61698317d958e96cac72a59102ea45b9ae64692" -dependencies = [ - "cfg-if", - "parity-scale-codec", - "scale-info", - "serde", + "sp-core", + "sp-io", + "sp-runtime", + "sp-tracing 16.0.0", ] [[package]] @@ -1682,16 +1612,15 @@ dependencies = [ [[package]] name = "frame-support" -version = "33.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d04fc1fdbc7bdcb1cb54834e16a5194e5a16a25bfdaca1b761ee9ff4963366f" +version = "28.0.0" dependencies = [ - "aquamarine 0.5.0", + "aquamarine", "array-bytes", + "binary-merkle-tree", "bitflags 1.3.2", "docify", "environmental", - "frame-metadata 16.0.0", + "frame-metadata", "frame-support-procedural", "impl-trait-for-tuples", "k256", @@ -1703,50 +1632,48 @@ dependencies = [ "serde", "serde_json", "smallvec", - "sp-api 31.0.0", - "sp-arithmetic 26.0.0", - "sp-core 32.0.0", - "sp-crypto-hashing-proc-macro 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", - "sp-debug-derive 14.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "sp-api", + "sp-arithmetic", + "sp-core", + "sp-crypto-hashing-proc-macro", + "sp-debug-derive 14.0.0", "sp-genesis-builder", "sp-inherents", - "sp-io 35.0.0", - "sp-metadata-ir 0.7.0", - "sp-runtime 36.0.0", + "sp-io", + "sp-metadata-ir", + "sp-runtime", "sp-staking", - "sp-state-machine 0.40.0", - "sp-std 14.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "sp-tracing 17.0.1", - "sp-weights 31.0.0", + "sp-state-machine", + "sp-std 14.0.0", + "sp-tracing 16.0.0", + "sp-trie", + "sp-weights", "static_assertions", "tt-call", ] [[package]] name = "frame-support-procedural" -version = "28.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d8eaf3bb331b98427158733e221bd6fb79e9f213da55b305e159dc023d41fd2" +version = "23.0.0" dependencies = [ "Inflector", "cfg-expr", "derive-syn-parse", + "docify", "expander", "frame-support-procedural-tools", - "itertools 0.10.5", + "itertools 0.11.0", "macro_magic", "proc-macro-warning", "proc-macro2", "quote", - "sp-crypto-hashing 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "sp-crypto-hashing", "syn 2.0.96", ] [[package]] name = "frame-support-procedural-tools" -version = "12.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a40b5cc8526c9aad01cdf46dcee6cbefd6f6c78e022607ff4cf76094919b6462" +version = "10.0.0" dependencies = [ "frame-support-procedural-tools-derive", "proc-macro-crate", @@ -1757,9 +1684,7 @@ dependencies = [ [[package]] name = "frame-support-procedural-tools-derive" -version = "12.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed971c6435503a099bdac99fe4c5bea08981709e5b5a0a8535a1856f48561191" +version = "11.0.0" dependencies = [ "proc-macro2", "quote", @@ -1768,9 +1693,7 @@ dependencies = [ [[package]] name = "frame-system" -version = "33.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64265317899a2ecfc465a1ab55fa3094dbbbc7061292592fdbbb8acc136c4735" +version = "28.0.0" dependencies = [ "cfg-if", "docify", @@ -1779,35 +1702,43 @@ dependencies = [ "parity-scale-codec", "scale-info", "serde", - "sp-core 32.0.0", - "sp-io 35.0.0", - "sp-runtime 36.0.0", - "sp-std 14.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "sp-version 34.0.0", - "sp-weights 31.0.0", + "sp-core", + "sp-io", + "sp-runtime", + "sp-version", + "sp-weights", +] + +[[package]] +name = "frame-system-benchmarking" +version = "28.0.0" +dependencies = [ + "frame-benchmarking", + "frame-support", + "frame-system", + "parity-scale-codec", + "scale-info", + "sp-core", + "sp-runtime", ] [[package]] name = "frame-system-rpc-runtime-api" -version = "31.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "54771ae481dd08825d4de28b1b3623163efd9e7c4b59a6db1fb048dcdf73789e" +version = "26.0.0" dependencies = [ + "docify", "parity-scale-codec", - "sp-api 31.0.0", + "sp-api", ] [[package]] name = "frame-try-runtime" -version = "0.39.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f542a58bd43234882faff12062ce94838b3bbca1b6ed6b32180ee153350905f" +version = "0.34.0" dependencies = [ "frame-support", "parity-scale-codec", - "sp-api 31.0.0", - "sp-runtime 36.0.0", - "sp-std 14.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "sp-api", + "sp-runtime", ] [[package]] @@ -1950,7 +1881,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6ea1015b5a70616b688dc230cfe50c8af89d972cb132d5a622814d29773b10b9" dependencies = [ "rand", - "rand_core 0.6.4", + "rand_core", ] [[package]] @@ -1982,7 +1913,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f0f9ef7462f7c099f518d754361858f86d8a07af53ba9af0fe635bbccb151a63" dependencies = [ "ff", - "rand_core 0.6.4", + "rand_core", "subtle", ] @@ -2001,22 +1932,13 @@ dependencies = [ "crunchy", ] -[[package]] -name = "hashbrown" -version = "0.12.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" -dependencies = [ - "ahash 0.7.8", -] - [[package]] name = "hashbrown" version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "43a3c133739dddd0d2990f9a4bdf8eb4b21ef50e4851ca85ab661199821d510e" dependencies = [ - "ahash 0.8.11", + "ahash", ] [[package]] @@ -2025,7 +1947,7 @@ version = "0.14.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" dependencies = [ - "ahash 0.8.11", + "ahash", "allocator-api2", ] @@ -2098,15 +2020,6 @@ dependencies = [ "hmac 0.8.1", ] -[[package]] -name = "impl-codec" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba6a270039626615617f3f36d15fc827041df3b78c439da2cadfa47455a77f2f" -dependencies = [ - "parity-scale-codec", -] - [[package]] name = "impl-codec" version = "0.7.0" @@ -2124,16 +2037,7 @@ checksum = "803d15461ab0dcc56706adf266158acbc44ccf719bf7d0af30705f58b90a4b8c" dependencies = [ "integer-sqrt", "num-traits", - "uint 0.10.0", -] - -[[package]] -name = "impl-serde" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ebc88fc67028ae3db0c853baa36269d398d5f45b6982f95549ff5def78c935cd" -dependencies = [ - "serde", + "uint", ] [[package]] @@ -2466,7 +2370,7 @@ checksum = "58c38e2799fc0978b65dfff8023ec7843e2330bb462f19198840b34b6582397d" dependencies = [ "byteorder", "keccak", - "rand_core 0.6.4", + "rand_core", "zeroize", ] @@ -2622,26 +2526,22 @@ checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" [[package]] name = "pallet-assets" -version = "34.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14bb2544de653caa76f88156c53ccdea218737ae00ef37b949786bc4c13719f8" +version = "29.1.0" dependencies = [ "frame-benchmarking", "frame-support", "frame-system", + "impl-trait-for-tuples", "log", "parity-scale-codec", "scale-info", - "sp-core 32.0.0", - "sp-runtime 36.0.0", - "sp-std 14.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "sp-core", + "sp-runtime", ] [[package]] name = "pallet-balances" -version = "34.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06c00a7041511735547ac443a14ecb2915976725dfbf1d3d9f64df20359e483e" +version = "28.0.0" dependencies = [ "docify", "frame-benchmarking", @@ -2650,15 +2550,13 @@ dependencies = [ "log", "parity-scale-codec", "scale-info", - "sp-runtime 36.0.0", - "sp-std 14.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "sp-core", + "sp-runtime", ] [[package]] name = "pallet-sudo" -version = "33.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "10ee43e8bb38a50a234ef49198413483562e229ca20d8e9d9f78b756244f6d7c" +version = "28.0.0" dependencies = [ "docify", "frame-benchmarking", @@ -2666,16 +2564,13 @@ dependencies = [ "frame-system", "parity-scale-codec", "scale-info", - "sp-io 35.0.0", - "sp-runtime 36.0.0", - "sp-std 14.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "sp-io", + "sp-runtime", ] [[package]] name = "pallet-timestamp" -version = "32.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5982a7cc371e2b9be504465bb6e47bc27dba0b98ee9794d7fc797c24244fb6d9" +version = "27.0.0" dependencies = [ "docify", "frame-benchmarking", @@ -2685,41 +2580,36 @@ dependencies = [ "parity-scale-codec", "scale-info", "sp-inherents", - "sp-io 35.0.0", - "sp-runtime 36.0.0", - "sp-std 14.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "sp-storage 21.0.0", + "sp-io", + "sp-runtime", + "sp-storage 19.0.0", "sp-timestamp", ] [[package]] name = "pallet-transaction-payment" -version = "33.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aad5b92a96c4e38c7917477a1e5f2916c64f667f2734b2bf790ce552ceada82c" +version = "28.0.0" dependencies = [ + "frame-benchmarking", "frame-support", "frame-system", "parity-scale-codec", "scale-info", "serde", - "sp-core 32.0.0", - "sp-io 35.0.0", - "sp-runtime 36.0.0", - "sp-std 14.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "sp-core", + "sp-io", + "sp-runtime", ] [[package]] name = "pallet-transaction-payment-rpc-runtime-api" -version = "33.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f274055d2c61888689889d6e9b9266b163e1ed298967b55bf961db26b11a60fe" +version = "28.0.0" dependencies = [ "pallet-transaction-payment", "parity-scale-codec", - "sp-api 31.0.0", - "sp-runtime 36.0.0", - "sp-weights 31.0.0", + "sp-api", + "sp-runtime", + "sp-weights", ] [[package]] @@ -2730,7 +2620,7 @@ checksum = "4e69bf016dc406eff7d53a7d3f7cf1c2e72c82b9088aac1118591e36dd2cd3e9" dependencies = [ "bitcoin_hashes", "rand", - "rand_core 0.6.4", + "rand_core", "serde", "unicode-normalization", ] @@ -2800,7 +2690,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "346f04948ba92c43e8469c1ee6736c7563d71012b17d40745260fe106aac2166" dependencies = [ "base64ct", - "rand_core 0.6.4", + "rand_core", "subtle", ] @@ -2872,6 +2762,7 @@ dependencies = [ "pvq-extension-core", "pvq-extension-fungibles", "pvq-primitives", + "pvq-runtime-api", "scale-info", "sp-genesis-builder", "substrate-wasm-builder", @@ -2879,32 +2770,35 @@ dependencies = [ [[package]] name = "polkadot-sdk-frame" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4f438588cd6d826934a75229081bcd1d76e3220d0f210c8799add10083e4748" +version = "0.1.0" dependencies = [ "docify", + "frame-benchmarking", "frame-executive", "frame-support", "frame-system", + "frame-system-benchmarking", "frame-system-rpc-runtime-api", + "frame-try-runtime", "log", "parity-scale-codec", "scale-info", - "sp-api 31.0.0", - "sp-arithmetic 26.0.0", + "sp-api", + "sp-arithmetic", "sp-block-builder", "sp-consensus-aura", "sp-consensus-grandpa", - "sp-core 32.0.0", + "sp-core", + "sp-genesis-builder", "sp-inherents", - "sp-io 35.0.0", + "sp-io", + "sp-keyring", "sp-offchain", - "sp-runtime 36.0.0", + "sp-runtime", "sp-session", - "sp-std 14.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "sp-storage 19.0.0", "sp-transaction-pool", - "sp-version 34.0.0", + "sp-version", ] [[package]] @@ -2945,15 +2839,6 @@ dependencies = [ "polkavm-assembler", ] -[[package]] -name = "polkavm-derive" -version = "0.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae8c4bea6f3e11cd89bb18bcdddac10bd9a24015399bd1c485ad68a985a19606" -dependencies = [ - "polkavm-derive-impl-macro 0.9.0", -] - [[package]] name = "polkavm-derive" version = "0.18.0" @@ -2970,18 +2855,6 @@ dependencies = [ "polkavm-derive-impl-macro 0.21.0", ] -[[package]] -name = "polkavm-derive-impl" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c4fdfc49717fb9a196e74a5d28e0bc764eb394a2c803eb11133a31ac996c60c" -dependencies = [ - "polkavm-common 0.9.0", - "proc-macro2", - "quote", - "syn 2.0.96", -] - [[package]] name = "polkavm-derive-impl" version = "0.18.1" @@ -3004,16 +2877,6 @@ dependencies = [ "syn 2.0.96", ] -[[package]] -name = "polkavm-derive-impl-macro" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ba81f7b5faac81e528eb6158a6f3c9e0bb1008e0ffa19653bc8dea925ecb429" -dependencies = [ - "polkavm-derive-impl 0.9.0", - "syn 2.0.96", -] - [[package]] name = "polkavm-derive-impl-macro" version = "0.18.0" @@ -3073,19 +2936,6 @@ dependencies = [ "syn 2.0.96", ] -[[package]] -name = "primitive-types" -version = "0.12.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b34d9fd68ae0b74a41b21c03c2f62847aa0ffea044eee893b4c140b37e244e2" -dependencies = [ - "fixed-hash", - "impl-codec 0.6.0", - "impl-serde 0.4.0", - "scale-info", - "uint 0.9.5", -] - [[package]] name = "primitive-types" version = "0.13.1" @@ -3093,11 +2943,11 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d15600a7d856470b7d278b3fe0e311fe28c2526348549f8ef2ff7db3299c87f5" dependencies = [ "fixed-hash", - "impl-codec 0.7.0", + "impl-codec", "impl-num-traits", - "impl-serde 0.5.0", + "impl-serde", "scale-info", - "uint 0.10.0", + "uint", ] [[package]] @@ -3244,7 +3094,7 @@ name = "pvq-runtime-api" version = "0.1.0" dependencies = [ "pvq-primitives", - "sp-api 26.0.0", + "sp-api", ] [[package]] @@ -3287,7 +3137,7 @@ checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" dependencies = [ "libc", "rand_chacha", - "rand_core 0.6.4", + "rand_core", ] [[package]] @@ -3297,15 +3147,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" dependencies = [ "ppv-lite86", - "rand_core 0.6.4", + "rand_core", ] -[[package]] -name = "rand_core" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19" - [[package]] name = "rand_core" version = "0.6.4" @@ -3556,7 +3400,7 @@ version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c9a8ef13a93c54d20580de1e5c413e624e53121d42fc7e2c11d10ef7f8b02367" dependencies = [ - "ahash 0.8.11", + "ahash", "cfg-if", "hashbrown 0.13.2", ] @@ -3570,10 +3414,10 @@ dependencies = [ "aead", "arrayref", "arrayvec", - "curve25519-dalek 4.1.2", + "curve25519-dalek", "getrandom_or_panic", "merlin", - "rand_core 0.6.4", + "rand_core", "serde_bytes", "sha2 0.10.8", "subtle", @@ -3689,11 +3533,12 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.117" +version = "1.0.140" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "455182ea6142b14f93f4bc5320a2b31c1f266b66a4a5c858b013302a5d8cbfc3" +checksum = "20068b6e96dc6c9bd23e01df8827e6c7e1f2fddd43c21810382803c136b99373" dependencies = [ "itoa", + "memchr", "ryu", "serde", ] @@ -3767,7 +3612,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de" dependencies = [ "digest 0.10.7", - "rand_core 0.6.4", + "rand_core", ] [[package]] @@ -3819,38 +3664,15 @@ dependencies = [ "log", "parity-scale-codec", "scale-info", - "sp-api-proc-macro 15.0.0", - "sp-core 28.0.0", + "sp-api-proc-macro", + "sp-core", "sp-externalities 0.25.0", - "sp-metadata-ir 0.6.0", - "sp-runtime 31.0.1", + "sp-metadata-ir", + "sp-runtime", "sp-runtime-interface 24.0.0", - "sp-state-machine 0.35.0", - "sp-trie 29.0.0", - "sp-version 29.0.0", - "thiserror", -] - -[[package]] -name = "sp-api" -version = "31.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b500647cfe266d58781f44af9b13c3bd57fb3be08642f2a9f13e024cc5e22359" -dependencies = [ - "hash-db", - "log", - "parity-scale-codec", - "scale-info", - "sp-api-proc-macro 19.0.0", - "sp-core 32.0.0", - "sp-externalities 0.28.0", - "sp-metadata-ir 0.7.0", - "sp-runtime 36.0.0", - "sp-runtime-interface 27.0.0", - "sp-state-machine 0.40.0", - "sp-std 14.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "sp-trie 34.0.0", - "sp-version 34.0.0", + "sp-state-machine", + "sp-trie", + "sp-version", "thiserror", ] @@ -3867,21 +3689,6 @@ dependencies = [ "syn 2.0.96", ] -[[package]] -name = "sp-api-proc-macro" -version = "19.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "213a4bec1b18bd0750e7b81d11d8276c24f68b53cde83950b00b178ecc9ab24a" -dependencies = [ - "Inflector", - "blake2", - "expander", - "proc-macro-crate", - "proc-macro2", - "quote", - "syn 2.0.96", -] - [[package]] name = "sp-application-crypto" version = "30.0.0" @@ -3889,22 +3696,8 @@ dependencies = [ "parity-scale-codec", "scale-info", "serde", - "sp-core 28.0.0", - "sp-io 30.0.0", -] - -[[package]] -name = "sp-application-crypto" -version = "35.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57541120624a76379cc993cbb85064a5148957a92da032567e54bce7977f51fc" -dependencies = [ - "parity-scale-codec", - "scale-info", - "serde", - "sp-core 32.0.0", - "sp-io 35.0.0", - "sp-std 14.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "sp-core", + "sp-io", ] [[package]] @@ -3920,22 +3713,6 @@ dependencies = [ "static_assertions", ] -[[package]] -name = "sp-arithmetic" -version = "26.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46d0d0a4c591c421d3231ddd5e27d828618c24456d51445d21a1f79fcee97c23" -dependencies = [ - "docify", - "integer-sqrt", - "num-traits", - "parity-scale-codec", - "scale-info", - "serde", - "sp-std 14.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "static_assertions", -] - [[package]] name = "sp-ark-bls12-381" version = "0.4.2" @@ -3956,55 +3733,47 @@ dependencies = [ [[package]] name = "sp-block-builder" -version = "31.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "51cf3d8fb96de98aecdd32cdd4a735af4d84fae274314f411f95c89d4dff6ad3" +version = "26.0.0" dependencies = [ - "sp-api 31.0.0", + "sp-api", "sp-inherents", - "sp-runtime 36.0.0", + "sp-runtime", ] [[package]] name = "sp-consensus-aura" -version = "0.37.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8904da70720b26f207b6ae1d140cac4f5b10b94bce535e08ee0df08f3a27a84" +version = "0.32.0" dependencies = [ "async-trait", "parity-scale-codec", "scale-info", - "sp-api 31.0.0", - "sp-application-crypto 35.0.0", + "sp-api", + "sp-application-crypto", "sp-consensus-slots", "sp-inherents", - "sp-runtime 36.0.0", + "sp-runtime", "sp-timestamp", ] [[package]] name = "sp-consensus-grandpa" -version = "18.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a6f4d90b65fd82e77c3b8c382c3a9e669bba5ccfb5402a945cde88984c98681b" +version = "13.0.0" dependencies = [ "finality-grandpa", "log", "parity-scale-codec", "scale-info", "serde", - "sp-api 31.0.0", - "sp-application-crypto 35.0.0", - "sp-core 32.0.0", - "sp-keystore 0.38.0", - "sp-runtime 36.0.0", + "sp-api", + "sp-application-crypto", + "sp-core", + "sp-keystore", + "sp-runtime", ] [[package]] name = "sp-consensus-slots" -version = "0.37.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "60823551c6987e2f5e1dda772140a09850e866e704757662795b8e7cacf9b228" +version = "0.32.0" dependencies = [ "parity-scale-codec", "scale-info", @@ -4023,11 +3792,11 @@ dependencies = [ "bounded-collections", "bs58", "dyn-clonable", - "ed25519-zebra 4.0.3", + "ed25519-zebra", "futures", "hash-db", "hash256-std-hasher", - "impl-serde 0.5.0", + "impl-serde", "itertools 0.11.0", "k256", "libsecp256k1", @@ -4037,21 +3806,21 @@ dependencies = [ "parity-scale-codec", "parking_lot", "paste", - "primitive-types 0.13.1", + "primitive-types", "rand", "scale-info", "schnorrkel", "secp256k1", "secrecy", "serde", - "sp-crypto-hashing 0.1.0", + "sp-crypto-hashing", "sp-debug-derive 14.0.0", "sp-externalities 0.25.0", "sp-runtime-interface 24.0.0", "sp-std 14.0.0", "sp-storage 19.0.0", "ss58-registry", - "substrate-bip39 0.4.7", + "substrate-bip39", "thiserror", "tracing", "w3f-bls", @@ -4059,56 +3828,9 @@ dependencies = [ ] [[package]] -name = "sp-core" -version = "32.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb2dac7e47c7ddbb61efe196d5cce99f6ea88926c961fa39909bfeae46fc5a7b" -dependencies = [ - "array-bytes", - "bitflags 1.3.2", - "blake2", - "bounded-collections", - "bs58", - "dyn-clonable", - "ed25519-zebra 3.1.0", - "futures", - "hash-db", - "hash256-std-hasher", - "impl-serde 0.4.0", - "itertools 0.10.5", - "k256", - "libsecp256k1", - "log", - "merlin", - "parity-bip39", - "parity-scale-codec", - "parking_lot", - "paste", - "primitive-types 0.12.2", - "rand", - "scale-info", - "schnorrkel", - "secp256k1", - "secrecy", - "serde", - "sp-crypto-hashing 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", - "sp-debug-derive 14.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "sp-externalities 0.28.0", - "sp-runtime-interface 27.0.0", - "sp-std 14.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "sp-storage 21.0.0", - "ss58-registry", - "substrate-bip39 0.6.0", - "thiserror", - "tracing", - "w3f-bls", - "zeroize", -] - -[[package]] -name = "sp-crypto-ec-utils" -version = "0.10.0" -source = "git+https://github.com/paritytech/polkadot-sdk#738282a2c4127f5e6a1c8d50235ba126b9f05025" +name = "sp-crypto-ec-utils" +version = "0.10.0" +source = "git+https://github.com/paritytech/polkadot-sdk#738282a2c4127f5e6a1c8d50235ba126b9f05025" dependencies = [ "ark-bls12-377", "ark-bls12-377-ext", @@ -4137,54 +3859,18 @@ dependencies = [ "twox-hash", ] -[[package]] -name = "sp-crypto-hashing" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc9927a7f81334ed5b8a98a4a978c81324d12bd9713ec76b5c68fd410174c5eb" -dependencies = [ - "blake2b_simd", - "byteorder", - "digest 0.10.7", - "sha2 0.10.8", - "sha3", - "twox-hash", -] - [[package]] name = "sp-crypto-hashing-proc-macro" version = "0.1.0" dependencies = [ "quote", - "sp-crypto-hashing 0.1.0", - "syn 2.0.96", -] - -[[package]] -name = "sp-crypto-hashing-proc-macro" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b85d0f1f1e44bd8617eb2a48203ee854981229e3e79e6f468c7175d5fd37489b" -dependencies = [ - "quote", - "sp-crypto-hashing 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", - "syn 2.0.96", -] - -[[package]] -name = "sp-debug-derive" -version = "14.0.0" -dependencies = [ - "proc-macro2", - "quote", + "sp-crypto-hashing", "syn 2.0.96", ] [[package]] name = "sp-debug-derive" version = "14.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48d09fa0a5f7299fb81ee25ae3853d26200f7a348148aed6de76be905c007dbe" dependencies = [ "proc-macro2", "quote", @@ -4220,41 +3906,26 @@ dependencies = [ "sp-storage 19.0.0 (git+https://github.com/paritytech/polkadot-sdk)", ] -[[package]] -name = "sp-externalities" -version = "0.28.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33abaec4be69b1613796bbf430decbbcaaf978756379e2016e683a4d6379cd02" -dependencies = [ - "environmental", - "parity-scale-codec", - "sp-storage 21.0.0", -] - [[package]] name = "sp-genesis-builder" -version = "0.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7605a8ed2c06d348c26055b7907c3d2d62f984666e9025b57df4895f865f5901" +version = "0.8.0" dependencies = [ "parity-scale-codec", "scale-info", "serde_json", - "sp-api 31.0.0", - "sp-runtime 36.0.0", + "sp-api", + "sp-runtime", ] [[package]] name = "sp-inherents" -version = "31.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "170537049d57fc645637e4586fe98a3291392b2ecfd7988ea31639cf43470b42" +version = "26.0.0" dependencies = [ "async-trait", "impl-trait-for-tuples", "parity-scale-codec", "scale-info", - "sp-runtime 36.0.0", + "sp-runtime", "thiserror", ] @@ -4271,43 +3942,25 @@ dependencies = [ "polkavm-derive 0.18.0", "rustversion", "secp256k1", - "sp-core 28.0.0", - "sp-crypto-hashing 0.1.0", + "sp-core", + "sp-crypto-hashing", "sp-externalities 0.25.0", - "sp-keystore 0.34.0", + "sp-keystore", "sp-runtime-interface 24.0.0", - "sp-state-machine 0.35.0", + "sp-state-machine", "sp-tracing 16.0.0", - "sp-trie 29.0.0", + "sp-trie", "tracing", "tracing-core", ] [[package]] -name = "sp-io" -version = "35.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b64ab18a0e29def6511139a8c45a59c14a846105aab6f9cc653523bd3b81f55" +name = "sp-keyring" +version = "31.0.0" dependencies = [ - "bytes", - "ed25519-dalek", - "libsecp256k1", - "log", - "parity-scale-codec", - "polkavm-derive 0.9.1", - "rustversion", - "secp256k1", - "sp-core 32.0.0", - "sp-crypto-hashing 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", - "sp-externalities 0.28.0", - "sp-keystore 0.38.0", - "sp-runtime-interface 27.0.0", - "sp-state-machine 0.40.0", - "sp-std 14.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "sp-tracing 17.0.1", - "sp-trie 34.0.0", - "tracing", - "tracing-core", + "sp-core", + "sp-runtime", + "strum 0.26.3", ] [[package]] @@ -4316,22 +3969,10 @@ version = "0.34.0" dependencies = [ "parity-scale-codec", "parking_lot", - "sp-core 28.0.0", + "sp-core", "sp-externalities 0.25.0", ] -[[package]] -name = "sp-keystore" -version = "0.38.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e6c7a7abd860a5211a356cf9d5fcabf0eb37d997985e5d722b6b33dcc815528" -dependencies = [ - "parity-scale-codec", - "parking_lot", - "sp-core 32.0.0", - "sp-externalities 0.28.0", -] - [[package]] name = "sp-maybe-compressed-blob" version = "11.0.0" @@ -4346,31 +3987,18 @@ dependencies = [ name = "sp-metadata-ir" version = "0.6.0" dependencies = [ - "frame-metadata 19.0.0", - "parity-scale-codec", - "scale-info", -] - -[[package]] -name = "sp-metadata-ir" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a616fa51350b35326682a472ee8e6ba742fdacb18babac38ecd46b3e05ead869" -dependencies = [ - "frame-metadata 16.0.0", + "frame-metadata", "parity-scale-codec", "scale-info", ] [[package]] name = "sp-offchain" -version = "31.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2cbbd2096fda34c2f6f9f268c808ca280c08565e759309ea24f17dcd0808097b" +version = "26.0.0" dependencies = [ - "sp-api 31.0.0", - "sp-core 32.0.0", - "sp-runtime 36.0.0", + "sp-api", + "sp-core", + "sp-runtime", ] [[package]] @@ -4381,16 +4009,6 @@ dependencies = [ "regex", ] -[[package]] -name = "sp-panic-handler" -version = "13.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81478b3740b357fa0ea10fcdc1ee02ebae7734e50f80342c4743476d9f78eeea" -dependencies = [ - "backtrace", - "regex", -] - [[package]] name = "sp-runtime" version = "31.0.1" @@ -4408,42 +4026,17 @@ dependencies = [ "scale-info", "serde", "simple-mermaid", - "sp-application-crypto 30.0.0", - "sp-arithmetic 23.0.0", - "sp-core 28.0.0", - "sp-io 30.0.0", + "sp-application-crypto", + "sp-arithmetic", + "sp-core", + "sp-io", "sp-std 14.0.0", - "sp-trie 29.0.0", - "sp-weights 27.0.0", + "sp-trie", + "sp-weights", "tracing", "tuplex", ] -[[package]] -name = "sp-runtime" -version = "36.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a6b85cb874b78ebb17307a910fc27edf259a0455ac5155d87eaed8754c037e07" -dependencies = [ - "docify", - "either", - "hash256-std-hasher", - "impl-trait-for-tuples", - "log", - "parity-scale-codec", - "paste", - "rand", - "scale-info", - "serde", - "simple-mermaid", - "sp-application-crypto 35.0.0", - "sp-arithmetic 26.0.0", - "sp-core 32.0.0", - "sp-io 35.0.0", - "sp-std 14.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "sp-weights 31.0.0", -] - [[package]] name = "sp-runtime-interface" version = "24.0.0" @@ -4452,7 +4045,7 @@ dependencies = [ "impl-trait-for-tuples", "parity-scale-codec", "polkavm-derive 0.18.0", - "primitive-types 0.13.1", + "primitive-types", "sp-externalities 0.25.0", "sp-runtime-interface-proc-macro 17.0.0", "sp-std 14.0.0", @@ -4471,7 +4064,7 @@ dependencies = [ "impl-trait-for-tuples", "parity-scale-codec", "polkavm-derive 0.18.0", - "primitive-types 0.13.1", + "primitive-types", "sp-externalities 0.25.0 (git+https://github.com/paritytech/polkadot-sdk)", "sp-runtime-interface-proc-macro 17.0.0 (git+https://github.com/paritytech/polkadot-sdk)", "sp-std 14.0.0 (git+https://github.com/paritytech/polkadot-sdk)", @@ -4481,26 +4074,6 @@ dependencies = [ "static_assertions", ] -[[package]] -name = "sp-runtime-interface" -version = "27.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "647db5e1dc481686628b41554e832df6ab400c4b43a6a54e54d3b0a71ca404aa" -dependencies = [ - "bytes", - "impl-trait-for-tuples", - "parity-scale-codec", - "polkavm-derive 0.9.1", - "primitive-types 0.12.2", - "sp-externalities 0.28.0", - "sp-runtime-interface-proc-macro 18.0.0", - "sp-std 14.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "sp-storage 21.0.0", - "sp-tracing 17.0.1", - "sp-wasm-interface 21.0.1", - "static_assertions", -] - [[package]] name = "sp-runtime-interface-proc-macro" version = "17.0.0" @@ -4526,47 +4099,29 @@ dependencies = [ "syn 2.0.96", ] -[[package]] -name = "sp-runtime-interface-proc-macro" -version = "18.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0195f32c628fee3ce1dfbbf2e7e52a30ea85f3589da9fe62a8b816d70fc06294" -dependencies = [ - "Inflector", - "expander", - "proc-macro-crate", - "proc-macro2", - "quote", - "syn 2.0.96", -] - [[package]] name = "sp-session" -version = "32.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c558f85486882433adcfdfe05c5e82972a7be1a6d7fa68a6213b70ec1d86068" +version = "27.0.0" dependencies = [ "parity-scale-codec", "scale-info", - "sp-api 31.0.0", - "sp-core 32.0.0", - "sp-keystore 0.38.0", - "sp-runtime 36.0.0", + "sp-api", + "sp-core", + "sp-keystore", + "sp-runtime", "sp-staking", ] [[package]] name = "sp-staking" -version = "31.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd38abe12a12b0c24d318011ec3cd3280f8d828666994695a6c0652f38662dbf" +version = "26.0.0" dependencies = [ "impl-trait-for-tuples", "parity-scale-codec", "scale-info", "serde", - "sp-core 32.0.0", - "sp-runtime 36.0.0", + "sp-core", + "sp-runtime", ] [[package]] @@ -4579,31 +4134,10 @@ dependencies = [ "parking_lot", "rand", "smallvec", - "sp-core 28.0.0", + "sp-core", "sp-externalities 0.25.0", - "sp-panic-handler 13.0.0", - "sp-trie 29.0.0", - "thiserror", - "tracing", - "trie-db", -] - -[[package]] -name = "sp-state-machine" -version = "0.40.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "18084cb996c27d5d99a88750e0a8eb4af6870a40df97872a5923e6d293d95fb9" -dependencies = [ - "hash-db", - "log", - "parity-scale-codec", - "parking_lot", - "rand", - "smallvec", - "sp-core 32.0.0", - "sp-externalities 0.28.0", - "sp-panic-handler 13.0.1", - "sp-trie 34.0.0", + "sp-panic-handler", + "sp-trie", "thiserror", "tracing", "trie-db", @@ -4613,12 +4147,6 @@ dependencies = [ name = "sp-std" version = "14.0.0" -[[package]] -name = "sp-std" -version = "14.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12f8ee986414b0a9ad741776762f4083cd3a5128449b982a3919c4df36874834" - [[package]] name = "sp-std" version = "14.0.0" @@ -4628,7 +4156,7 @@ source = "git+https://github.com/paritytech/polkadot-sdk#738282a2c4127f5e6a1c8d5 name = "sp-storage" version = "19.0.0" dependencies = [ - "impl-serde 0.5.0", + "impl-serde", "parity-scale-codec", "ref-cast", "serde", @@ -4640,36 +4168,21 @@ name = "sp-storage" version = "19.0.0" source = "git+https://github.com/paritytech/polkadot-sdk#738282a2c4127f5e6a1c8d50235ba126b9f05025" dependencies = [ - "impl-serde 0.5.0", + "impl-serde", "parity-scale-codec", "ref-cast", "serde", "sp-debug-derive 14.0.0 (git+https://github.com/paritytech/polkadot-sdk)", ] -[[package]] -name = "sp-storage" -version = "21.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "99c82989b3a4979a7e1ad848aad9f5d0b4388f1f454cc131766526601ab9e8f8" -dependencies = [ - "impl-serde 0.4.0", - "parity-scale-codec", - "ref-cast", - "serde", - "sp-debug-derive 14.0.0 (registry+https://github.com/rust-lang/crates.io-index)", -] - [[package]] name = "sp-timestamp" -version = "31.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bdb7768c895643e315f9bcfacdd61e283b78c862d976fd081a508cf7239c8643" +version = "26.0.0" dependencies = [ "async-trait", "parity-scale-codec", "sp-inherents", - "sp-runtime 36.0.0", + "sp-runtime", "thiserror", ] @@ -4694,33 +4207,19 @@ dependencies = [ "tracing-subscriber", ] -[[package]] -name = "sp-tracing" -version = "17.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf641a1d17268c8fcfdb8e0fa51a79c2d4222f4cfda5f3944dbdbc384dced8d5" -dependencies = [ - "parity-scale-codec", - "tracing", - "tracing-core", - "tracing-subscriber", -] - [[package]] name = "sp-transaction-pool" -version = "31.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "207cb372504cf86237fa63953a0aa40d7596d1c9cf21175a56346ed1744eb8fe" +version = "26.0.0" dependencies = [ - "sp-api 31.0.0", - "sp-runtime 36.0.0", + "sp-api", + "sp-runtime", ] [[package]] name = "sp-trie" version = "29.0.0" dependencies = [ - "ahash 0.8.11", + "ahash", "hash-db", "memory-db", "nohash-hasher", @@ -4729,7 +4228,7 @@ dependencies = [ "rand", "scale-info", "schnellru", - "sp-core 28.0.0", + "sp-core", "sp-externalities 0.25.0", "thiserror", "tracing", @@ -4737,61 +4236,19 @@ dependencies = [ "trie-root", ] -[[package]] -name = "sp-trie" -version = "34.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87727eced997f14d0f79e3a5186a80e38a9de87f6e9dc0baea5ebf8b7f9d8b66" -dependencies = [ - "ahash 0.8.11", - "hash-db", - "lazy_static", - "memory-db", - "nohash-hasher", - "parity-scale-codec", - "parking_lot", - "rand", - "scale-info", - "schnellru", - "sp-core 32.0.0", - "sp-externalities 0.28.0", - "thiserror", - "tracing", - "trie-db", - "trie-root", -] - [[package]] name = "sp-version" version = "29.0.0" dependencies = [ - "impl-serde 0.5.0", + "impl-serde", "parity-scale-codec", "parity-wasm", "scale-info", "serde", - "sp-crypto-hashing-proc-macro 0.1.0", - "sp-runtime 31.0.1", + "sp-crypto-hashing-proc-macro", + "sp-runtime", "sp-std 14.0.0", - "sp-version-proc-macro 13.0.0", - "thiserror", -] - -[[package]] -name = "sp-version" -version = "34.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b8e3856686aa2719b1c05af07ba7e6021d844944472f246f3b5f1c585be04cd" -dependencies = [ - "impl-serde 0.4.0", - "parity-scale-codec", - "parity-wasm", - "scale-info", - "serde", - "sp-crypto-hashing-proc-macro 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", - "sp-runtime 36.0.0", - "sp-std 14.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "sp-version-proc-macro 14.0.0", + "sp-version-proc-macro", "thiserror", ] @@ -4806,18 +4263,6 @@ dependencies = [ "syn 2.0.96", ] -[[package]] -name = "sp-version-proc-macro" -version = "14.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5aee8f6730641a65fcf0c8f9b1e448af4b3bb083d08058b47528188bccc7b7a7" -dependencies = [ - "parity-scale-codec", - "proc-macro2", - "quote", - "syn 2.0.96", -] - [[package]] name = "sp-wasm-interface" version = "20.0.0" @@ -4839,18 +4284,6 @@ dependencies = [ "parity-scale-codec", ] -[[package]] -name = "sp-wasm-interface" -version = "21.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b066baa6d57951600b14ffe1243f54c47f9c23dd89c262e17ca00ae8dca58be9" -dependencies = [ - "anyhow", - "impl-trait-for-tuples", - "log", - "parity-scale-codec", -] - [[package]] name = "sp-weights" version = "27.0.0" @@ -4860,25 +4293,10 @@ dependencies = [ "scale-info", "serde", "smallvec", - "sp-arithmetic 23.0.0", + "sp-arithmetic", "sp-debug-derive 14.0.0", ] -[[package]] -name = "sp-weights" -version = "31.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93cdaf72a1dad537bbb130ba4d47307ebe5170405280ed1aa31fa712718a400e" -dependencies = [ - "bounded-collections", - "parity-scale-codec", - "scale-info", - "serde", - "smallvec", - "sp-arithmetic 26.0.0", - "sp-debug-derive 14.0.0 (registry+https://github.com/rust-lang/crates.io-index)", -] - [[package]] name = "spki" version = "0.7.3" @@ -4974,19 +4392,6 @@ dependencies = [ "zeroize", ] -[[package]] -name = "substrate-bip39" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca58ffd742f693dc13d69bdbb2e642ae239e0053f6aab3b104252892f856700a" -dependencies = [ - "hmac 0.12.1", - "pbkdf2", - "schnorrkel", - "sha2 0.10.8", - "zeroize", -] - [[package]] name = "substrate-wasm-builder" version = "22.0.1" @@ -5328,18 +4733,6 @@ version = "1.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" -[[package]] -name = "uint" -version = "0.9.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76f64bba2c53b04fcab63c01a7d7427eadc821e3bc48c34dc9ba29c501164b52" -dependencies = [ - "byteorder", - "crunchy", - "hex", - "static_assertions", -] - [[package]] name = "uint" version = "0.10.0" @@ -5420,7 +4813,7 @@ dependencies = [ "digest 0.10.7", "rand", "rand_chacha", - "rand_core 0.6.4", + "rand_core", "sha2 0.10.8", "sha3", "thiserror", diff --git a/Cargo.toml b/Cargo.toml index cae6676..4c1f400 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -46,6 +46,19 @@ polkavm-derive = { path = "vendor/polkavm/crates/polkavm-derive", default-featur # polkadot-sdk sp-api = { path = "vendor/polkadot-sdk/substrate/primitives/api", default-features = false } +frame = { package = "polkadot-sdk-frame", path = "vendor/polkadot-sdk/substrate/frame", default-features = false } +pallet-balances = { path = "vendor/polkadot-sdk/substrate/frame/balances", default-features = false } +pallet-assets = { path = "vendor/polkadot-sdk/substrate/frame/assets", default-features = false } +pallet-sudo = { path = "vendor/polkadot-sdk/substrate/frame/sudo", default-features = false } +pallet-timestamp = { path = "vendor/polkadot-sdk/substrate/frame/timestamp", default-features = false } +pallet-transaction-payment = { path = "vendor/polkadot-sdk/substrate/frame/transaction-payment", default-features = false } +pallet-transaction-payment-rpc-runtime-api = { path = "vendor/polkadot-sdk/substrate/frame/transaction-payment/rpc/runtime-api", default-features = false } + +# genesis builder that allows us to interacto with runtime genesis config +sp-genesis-builder = { path = "vendor/polkadot-sdk/substrate/primitives/genesis-builder", default-features = false } + +# wasm builder +substrate-wasm-builder = { version = "22.0.1" } # nostd parity-scale-codec = { version = "3.6.12", default-features = false, features = [ diff --git a/poc/runtime/Cargo.toml b/poc/runtime/Cargo.toml index a55e52b..c3686c9 100644 --- a/poc/runtime/Cargo.toml +++ b/poc/runtime/Cargo.toml @@ -6,34 +6,31 @@ edition = "2021" [dependencies] parity-scale-codec = { workspace = true } scale-info = { workspace = true } -# this is a frame-based runtime, thus importing `frame` with runtime feature enabled. -frame = { version = "0.2.0", package = "polkadot-sdk-frame", default-features = false, features = [ - "experimental", - "runtime", -] } +frame = { workspace = true, features = ["experimental", "runtime"] } # pallets that we want to use -pallet-balances = { version = "34.0.0", default-features = false } -pallet-assets = { version = "34.0.0", default-features = false } -pallet-sudo = { version = "33.0.0", default-features = false } -pallet-timestamp = { version = "32.0.0", default-features = false } -pallet-transaction-payment = { version = "33.0.0", default-features = false } -pallet-transaction-payment-rpc-runtime-api = { version = "33.0.0", default-features = false } +pallet-balances = { workspace = true } +pallet-assets = { workspace = true } +pallet-sudo = { workspace = true } +pallet-timestamp = { workspace = true } +pallet-transaction-payment = { workspace = true } +pallet-transaction-payment-rpc-runtime-api = { workspace = true } # genesis builder that allows us to interacto with runtime genesis config -sp-genesis-builder = { version = "0.12.0", default-features = false } +sp-genesis-builder = { workspace = true } pvq-executor = { workspace = true } pvq-extension = { workspace = true } pvq-extension-core = { workspace = true } pvq-extension-fungibles = { workspace = true } pvq-primitives = { workspace = true } +pvq-runtime-api = { workspace = true } [dev-dependencies] hex = "0.4" [build-dependencies] -substrate-wasm-builder = { version = "22.0.1", optional = true } +substrate-wasm-builder = { workspace = true, optional = true } [features] default = ["std"] diff --git a/poc/runtime/src/lib.rs b/poc/runtime/src/lib.rs index 251220b..336b93e 100644 --- a/poc/runtime/src/lib.rs +++ b/poc/runtime/src/lib.rs @@ -4,6 +4,9 @@ #[cfg(feature = "std")] include!(concat!(env!("OUT_DIR"), "/wasm_binary.rs")); +extern crate alloc; +use alloc::{vec, vec::Vec}; + mod pvq; use frame::{ @@ -13,24 +16,21 @@ use frame::{ }, prelude::*, runtime::{ - apis::{ - self, impl_runtime_apis, ApplyExtrinsicResult, CheckInherentsResult, ExtrinsicInclusionMode, OpaqueMetadata, - }, + apis::{self, impl_runtime_apis}, prelude::*, }, - traits::AsEnsureOriginWithArg, }; #[runtime_version] pub const VERSION: RuntimeVersion = RuntimeVersion { - spec_name: create_runtime_str!("pvq-poc"), - impl_name: create_runtime_str!("pvq-poc"), + spec_name: alloc::borrow::Cow::Borrowed("pvq-poc"), + impl_name: alloc::borrow::Cow::Borrowed("pvq-poc"), authoring_version: 1, spec_version: 0, impl_version: 1, apis: RUNTIME_API_VERSIONS, transaction_version: 1, - state_version: 1, + system_version: 1, }; /// The version information used to identify this runtime when compiled natively. @@ -110,6 +110,8 @@ type RuntimeExecutive = Executive for Runtime { fn version() -> RuntimeVersion { @@ -225,9 +227,10 @@ impl_runtime_apis! { } } - impl pvq::PvqApi for Runtime { - fn execute_query(query: Vec, input: Vec) -> pvq::PvqResult { - pvq::execute_query(&query, &input) + impl pvq_runtime_api::PvqApi for Runtime { + fn execute_query(program: Vec, args: Vec, gas_limit: Option) -> pvq_primitives::PvqResult { + // Set a default gas limit of 2 seconds + pvq::execute_query(&program, &args, gas_limit.unwrap_or(ONE_SECOND_IN_GAS * 2)) } fn metadata() -> Vec { pvq::metadata().encode() diff --git a/poc/runtime/src/pvq.rs b/poc/runtime/src/pvq.rs index 9dd00d1..ccde806 100644 --- a/poc/runtime/src/pvq.rs +++ b/poc/runtime/src/pvq.rs @@ -1,18 +1,8 @@ #[allow(unused_imports)] use frame::deps::scale_info::prelude::{format, string::String}; -use frame::deps::sp_api::decl_runtime_apis; -use frame::prelude::*; use pvq_extension::metadata::Metadata; -pub use pvq_primitives::PvqResult; - use pvq_extension::{extensions_impl, ExtensionsExecutor, InvokeSource}; -decl_runtime_apis! { - pub trait PvqApi { - fn execute_query(query: Vec, input: Vec) -> PvqResult; - fn metadata() -> Vec; - } -} #[extensions_impl] pub mod extensions { @@ -42,9 +32,10 @@ pub mod extensions { } } -pub fn execute_query(query: &[u8], input: &[u8]) -> PvqResult { +pub fn execute_query(program: &[u8], args: &[u8], gas_limit: i64) -> pvq_primitives::PvqResult { let mut executor = ExtensionsExecutor::::new(InvokeSource::RuntimeAPI); - executor.execute_method(query, input, 0) + let (result, _) = executor.execute(program, args, Some(gas_limit)); + result } pub fn metadata() -> Metadata { diff --git a/pvq-executor/src/context.rs b/pvq-executor/src/context.rs new file mode 100644 index 0000000..8c37c94 --- /dev/null +++ b/pvq-executor/src/context.rs @@ -0,0 +1,8 @@ +use polkavm::Linker; + +pub trait PvqExecutorContext { + type UserData; + type UserError; + fn register_host_functions(&mut self, linker: &mut Linker); + fn data(&mut self) -> &mut Self::UserData; +} diff --git a/pvq-executor/src/error.rs b/pvq-executor/src/error.rs new file mode 100644 index 0000000..4d624f2 --- /dev/null +++ b/pvq-executor/src/error.rs @@ -0,0 +1,50 @@ +use pvq_primitives::PvqError; +#[derive(Debug)] +pub enum PvqExecutorError { + InvalidProgramFormat, + MemoryAccessError(polkavm::MemoryAccessError), + // Extract from the PVM CallError + Trap, + // Extract from the PVM CallError + NotEnoughGas, + // Usually a custom error type from the extension system definition + User(UserError), + // Other errors directly from the PVM + OtherPvmError(polkavm::Error), +} + +impl From for PvqExecutorError { + fn from(err: polkavm::MemoryAccessError) -> Self { + Self::MemoryAccessError(err) + } +} + +impl From for PvqExecutorError { + fn from(err: polkavm::Error) -> Self { + Self::OtherPvmError(err) + } +} + +impl From> for PvqExecutorError { + fn from(err: polkavm::CallError) -> Self { + match err { + polkavm::CallError::Trap => Self::Trap, + polkavm::CallError::NotEnoughGas => Self::NotEnoughGas, + polkavm::CallError::Error(e) => Self::OtherPvmError(e), + polkavm::CallError::User(e) => Self::User(e), + } + } +} + +impl From> for PvqError { + fn from(e: PvqExecutorError) -> PvqError { + match e { + PvqExecutorError::InvalidProgramFormat => PvqError::InvalidPvqProgramFormat, + PvqExecutorError::MemoryAccessError(_) => PvqError::MemoryAccessError, + PvqExecutorError::Trap => PvqError::Trap, + PvqExecutorError::NotEnoughGas => PvqError::QueryExceedsWeightLimit, + PvqExecutorError::User(_) => PvqError::HostCallError, + PvqExecutorError::OtherPvmError(_) => PvqError::Other, + } + } +} diff --git a/pvq-executor/src/executor.rs b/pvq-executor/src/executor.rs new file mode 100644 index 0000000..72e71a8 --- /dev/null +++ b/pvq-executor/src/executor.rs @@ -0,0 +1,91 @@ +use alloc::vec::Vec; +use polkavm::{Config, Engine, Linker, Module, ModuleConfig, ProgramBlob}; + +use crate::context::PvqExecutorContext; +use crate::error::PvqExecutorError; + +type PvqExecutorResult = Result, PvqExecutorError>; +type GasLimit = Option; + +pub struct PvqExecutor { + engine: Engine, + linker: Linker, + context: Ctx, +} + +impl PvqExecutor { + pub fn new(config: Config, mut context: Ctx) -> Self { + let engine = Engine::new(&config).unwrap(); + let mut linker = Linker::::new(); + // Register user-defined host functions + context.register_host_functions(&mut linker); + Self { + engine, + linker, + context, + } + } + + pub fn execute( + &mut self, + program: &[u8], + args: &[u8], + gas_limit: GasLimit, + ) -> (PvqExecutorResult, GasLimit) { + let blob = match ProgramBlob::parse(program.into()) { + Ok(blob) => blob, + Err(_) => return (Err(PvqExecutorError::InvalidProgramFormat), gas_limit), + }; + + let mut module_config = ModuleConfig::new(); + module_config.set_aux_data_size(args.len() as u32); + if gas_limit.is_some() { + module_config.set_gas_metering(Some(polkavm::GasMeteringKind::Sync)); + } + + let module = match Module::from_blob(&self.engine, &module_config, blob) { + Ok(module) => module, + Err(err) => return (Err(err.into()), gas_limit), + }; + + let instance_pre = match self.linker.instantiate_pre(&module) { + Ok(instance_pre) => instance_pre, + Err(err) => return (Err(err.into()), gas_limit), + }; + + let mut instance = match instance_pre.instantiate() { + Ok(instance) => instance, + Err(err) => return (Err(err.into()), gas_limit), + }; + + if let Some(gas_limit) = gas_limit { + instance.set_gas(gas_limit); + } + + // From this point on, we include instance.gas() in the return value + let result = (|| { + instance.write_memory(module.memory_map().aux_data_address(), args)?; + + tracing::info!("Calling entrypoint with args: {:?}", args); + let res = instance.call_typed_and_get_result::( + self.context.data(), + "pvq", + (module.memory_map().aux_data_address(), args.len() as u32), + )?; + + let res_size = (res >> 32) as u32; + let res_ptr = (res & 0xffffffff) as u32; + + let result = instance.read_memory(res_ptr, res_size)?; + + tracing::info!("Result: {:?}", result); + Ok(result) + })(); + + if gas_limit.is_some() { + (result, Some(instance.gas())) + } else { + (result, None) + } + } +} diff --git a/pvq-executor/src/lib.rs b/pvq-executor/src/lib.rs index 2adf1de..8092ad9 100644 --- a/pvq-executor/src/lib.rs +++ b/pvq-executor/src/lib.rs @@ -3,88 +3,12 @@ extern crate alloc; pub use alloc::vec::Vec; -use polkavm::ModuleConfig; pub use polkavm::{Caller, Config, Engine, Linker, Module, ProgramBlob}; -pub trait PvqExecutorContext { - type UserData; - type UserError; - fn register_host_functions(&mut self, linker: &mut Linker); - fn data(&mut self) -> &mut Self::UserData; -} +mod context; +mod error; +mod executor; -pub struct PvqExecutor { - engine: Engine, - linker: Linker, - context: Ctx, -} - -#[derive(Debug)] -pub enum PvqExecutorError { - MemoryAllocationError, - MemoryAccessError(polkavm::MemoryAccessError), - CallError(polkavm::CallError), - OtherPVMError(polkavm::Error), -} - -impl From for PvqExecutorError { - fn from(err: polkavm::MemoryAccessError) -> Self { - Self::MemoryAccessError(err) - } -} - -impl From for PvqExecutorError { - fn from(err: polkavm::Error) -> Self { - Self::OtherPVMError(err) - } -} - -impl From> for PvqExecutorError { - fn from(err: polkavm::CallError) -> Self { - Self::CallError(err) - } -} - -impl PvqExecutor { - pub fn new(config: Config, mut context: Ctx) -> Self { - let engine = Engine::new(&config).unwrap(); - let mut linker = Linker::::new(); - // Register user-defined host functions - context.register_host_functions(&mut linker); - Self { - engine, - linker, - context, - } - } - - pub fn execute( - &mut self, - program: &[u8], - args: &[u8], - _gas_limit: u64, - ) -> Result, PvqExecutorError> { - let blob = ProgramBlob::parse(program.into()).map_err(polkavm::Error::from)?; - - // TODO: make this configurable - let mut module_config = ModuleConfig::new(); - module_config.set_aux_data_size(args.len() as u32); - - let module = Module::from_blob(&self.engine, &module_config, blob)?; - let instance_pre = self.linker.instantiate_pre(&module)?; - let mut instance = instance_pre.instantiate()?; - - instance.write_memory(module.memory_map().aux_data_address(), args)?; - tracing::info!("Calling entrypoint with args: {:?}", args); - let res = instance.call_typed_and_get_result::( - self.context.data(), - "pvq", - (module.memory_map().aux_data_address(), args.len() as u32), - )?; - let res_size = (res >> 32) as u32; - let res_ptr = (res & 0xffffffff) as u32; - let result = instance.read_memory(res_ptr, res_size)?; - tracing::info!("Result: {:?}", result); - Ok(result) - } -} +pub use context::PvqExecutorContext; +pub use error::PvqExecutorError; +pub use executor::PvqExecutor; diff --git a/pvq-extension/src/error.rs b/pvq-extension/src/error.rs index 47cfb1e..617984f 100644 --- a/pvq-extension/src/error.rs +++ b/pvq-extension/src/error.rs @@ -5,6 +5,7 @@ use scale_info::prelude::fmt; use scale_info::prelude::fmt::{Display, Formatter}; /// Errors that can occur when working with extensions +// Typically will be used as a UserError #[derive(Debug)] pub enum ExtensionError { /// Permission denied for the requested operation diff --git a/pvq-extension/src/executor.rs b/pvq-extension/src/executor.rs index b6dae94..b9840b1 100644 --- a/pvq-extension/src/executor.rs +++ b/pvq-extension/src/executor.rs @@ -27,7 +27,6 @@ impl ExtensionsExecutor { Self { executor } } - /// Execute a method on an extension /// /// # Arguments /// @@ -37,9 +36,8 @@ impl ExtensionsExecutor { /// # Returns /// /// The result of the execution or an error - pub fn execute_method(&mut self, program: &[u8], args: &[u8], gas_limit: u64) -> PvqResult { - self.executor - .execute(program, args, gas_limit) - .map_err(|e| PvqError::Custom(scale_info::prelude::format!("{:?}", e))) + pub fn execute(&mut self, program: &[u8], args: &[u8], gas_limit: Option) -> (PvqResult, Option) { + let (result, gas_remaining) = self.executor.execute(program, args, gas_limit); + (result.map_err(PvqError::from), gas_remaining) } } diff --git a/pvq-primitives/src/lib.rs b/pvq-primitives/src/lib.rs index 1796329..cfbac95 100644 --- a/pvq-primitives/src/lib.rs +++ b/pvq-primitives/src/lib.rs @@ -2,10 +2,12 @@ extern crate alloc; -use alloc::{string::String, vec::Vec}; +use alloc::vec::Vec; use parity_scale_codec::{Decode, Encode}; use scale_info::TypeInfo; +pub type PvqResult = Result; + pub type PvqResponse = Vec; #[derive(Debug, Clone, PartialEq, Eq, Encode, Decode, TypeInfo)] @@ -13,7 +15,8 @@ pub enum PvqError { FailedToDecode, InvalidPvqProgramFormat, QueryExceedsWeightLimit, - Custom(String), + Trap, + MemoryAccessError, + HostCallError, + Other, } - -pub type PvqResult = Result; diff --git a/pvq-runtime-api/src/lib.rs b/pvq-runtime-api/src/lib.rs index 2d7f3b4..af4110d 100644 --- a/pvq-runtime-api/src/lib.rs +++ b/pvq-runtime-api/src/lib.rs @@ -7,11 +7,12 @@ use pvq_primitives::PvqResult; use sp_api::decl_runtime_apis; // The runtime API for the PVQ module. -// query: the query to be executed, written in polkavm. i.e. query balance of given accounts and sum them up -// input: the input data for the query. i.e. accounts to be queried +// - `program`: PVQ binary. +// - `args`: Query arguments that is SCALE-encoded. +// - `gas_limit`: Optional gas limit for query execution. When set to `None`, execution is constrained by the default time boundary. decl_runtime_apis! { pub trait PvqApi { - fn execute_query(query: Vec, input: Vec) -> PvqResult; + fn execute_query(program: Vec, args: Vec, gas_limit: Option) -> PvqResult; fn metadata() -> Vec; } } diff --git a/pvq-test-runner/src/lib.rs b/pvq-test-runner/src/lib.rs index 5b4b228..f4fe1ab 100644 --- a/pvq-test-runner/src/lib.rs +++ b/pvq-test-runner/src/lib.rs @@ -71,12 +71,9 @@ impl TestRunner { input_data } - pub fn execute_program( - &mut self, - program_blob: &[u8], - input_data: &[u8], - ) -> Result, pvq_primitives::PvqError> { - self.executor.execute_method(program_blob, input_data, 0) + pub fn execute_program(&mut self, program_blob: &[u8], input_data: &[u8]) -> pvq_primitives::PvqResult { + let (result, _) = self.executor.execute(program_blob, input_data, None); + result } }