diff --git a/.github/workflows/rust.yml b/.github/workflows/rust.yml index 812978f..64241eb 100644 --- a/.github/workflows/rust.yml +++ b/.github/workflows/rust.yml @@ -31,7 +31,10 @@ jobs: echo "$(pwd)/llvm18/bin" >> $GITHUB_PATH - name: Install apt dependencies - run: sudo apt update && sudo apt install -y libtinfo5 + run: | + sudo add-apt-repository -y ppa:ethereum/ethereum + sudo apt update + sudo apt install -y libtinfo5 ethereum - name: Format run: make format diff --git a/Cargo.lock b/Cargo.lock index 5bc6b65..98637b4 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -110,6 +110,29 @@ version = "0.2.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5c6cb57a04249c6480766f7f7cef5467412af1490f8d1e243141daddada3264f" +[[package]] +name = "alloy-genesis" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "210f4b358d724f85df8adaec753c583defb58169ad3cad3d48c80d1a25a6ff0e" +dependencies = [ + "alloy-primitives 0.8.0", + "alloy-serde", + "serde", +] + +[[package]] +name = "alloy-json-abi" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "299d2a937b6c60968df3dad2a988b0f0e03277b344639a4f7a31bd68e6285e59" +dependencies = [ + "alloy-primitives 0.8.0", + "alloy-sol-type-parser", + "serde", + "serde_json", +] + [[package]] name = "alloy-primitives" version = "0.4.2" @@ -132,9 +155,9 @@ dependencies = [ [[package]] name = "alloy-primitives" -version = "0.6.4" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "600d34d8de81e23b6d909c094e23b3d357e01ca36b78a8c5424c501eedbe86f0" +checksum = "a767e59c86900dd7c3ce3ecef04f3ace5ac9631ee150beb8b7d22f7fa3bbb2d7" dependencies = [ "alloy-rlp", "bytes", @@ -162,6 +185,17 @@ dependencies = [ "bytes", ] +[[package]] +name = "alloy-serde" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfd260ede54f0b53761fdd04133acc10ae70427f66a69aa9590529bbd066cd58" +dependencies = [ + "alloy-primitives 0.8.0", + "serde", + "serde_json", +] + [[package]] name = "alloy-sol-macro" version = "0.4.2" @@ -181,22 +215,61 @@ dependencies = [ [[package]] name = "alloy-sol-macro" -version = "0.6.4" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e86ec0a47740b20bc5613b8712d0d321d031c4efc58e9645af96085d5cccfc27" +checksum = "183bcfc0f3291d9c41a3774172ee582fb2ce6eb6569085471d8f225de7bb86fc" dependencies = [ + "alloy-sol-macro-expander", + "alloy-sol-macro-input", + "proc-macro-error", + "proc-macro2", + "quote", + "syn 2.0.76", +] + +[[package]] +name = "alloy-sol-macro-expander" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "71c4d842beb7a6686d04125603bc57614d5ed78bf95e4753274db3db4ba95214" +dependencies = [ + "alloy-sol-macro-input", "const-hex", - "dunce", - "heck 0.4.1", + "heck 0.5.0", "indexmap 2.4.0", "proc-macro-error", "proc-macro2", "quote", "syn 2.0.76", - "syn-solidity 0.6.4", + "syn-solidity 0.8.0", "tiny-keccak", ] +[[package]] +name = "alloy-sol-macro-input" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1306e8d3c9e6e6ecf7a39ffaf7291e73a5f655a2defd366ee92c2efebcdf7fee" +dependencies = [ + "const-hex", + "dunce", + "heck 0.5.0", + "proc-macro2", + "quote", + "syn 2.0.76", + "syn-solidity 0.8.0", +] + +[[package]] +name = "alloy-sol-type-parser" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f4691da83dce9c9b4c775dd701c87759f173bd3021cbf2e60cde00c5fe6d7241" +dependencies = [ + "serde", + "winnow 0.6.18", +] + [[package]] name = "alloy-sol-types" version = "0.4.2" @@ -211,12 +284,13 @@ dependencies = [ [[package]] name = "alloy-sol-types" -version = "0.6.4" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad09ec5853fa700d12d778ad224dcdec636af424d29fad84fb9a2f16a5b0ef09" +checksum = "577e262966e92112edbd15b1b2c0947cc434d6e8311df96d3329793fe8047da9" dependencies = [ - "alloy-primitives 0.6.4", - "alloy-sol-macro 0.6.4", + "alloy-json-abi", + "alloy-primitives 0.8.0", + "alloy-sol-macro 0.8.0", "const-hex", "serde", ] @@ -679,7 +753,7 @@ checksum = "9b34d609dfbaf33d6889b2b7106d3ca345eacad44200913df5ba02bfd31d2ba9" [[package]] name = "asset-test-utils" version = "7.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "cumulus-pallet-parachain-system", "cumulus-pallet-xcmp-queue", @@ -708,7 +782,7 @@ dependencies = [ [[package]] name = "assets-common" version = "0.7.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "cumulus-primitives-core", "frame-support", @@ -818,7 +892,7 @@ checksum = "8c3c1a368f70d6cf7302d78f8f7093da241fb8e8807c05cc9e51a125895a6d5b" [[package]] name = "binary-merkle-tree" version = "13.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "hash-db", "log", @@ -942,7 +1016,7 @@ dependencies = [ [[package]] name = "bp-header-chain" version = "0.7.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "bp-runtime", "finality-grandpa", @@ -953,13 +1027,13 @@ dependencies = [ "sp-consensus-grandpa", "sp-core", "sp-runtime", - "sp-std 14.0.0 (git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da)", + "sp-std 14.0.0 (git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591)", ] [[package]] name = "bp-messages" version = "0.7.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "bp-header-chain", "bp-runtime", @@ -968,13 +1042,13 @@ dependencies = [ "scale-info", "serde", "sp-core", - "sp-std 14.0.0 (git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da)", + "sp-std 14.0.0 (git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591)", ] [[package]] name = "bp-parachains" version = "0.7.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "bp-header-chain", "bp-polkadot-core", @@ -985,26 +1059,26 @@ dependencies = [ "scale-info", "sp-core", "sp-runtime", - "sp-std 14.0.0 (git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da)", + "sp-std 14.0.0 (git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591)", ] [[package]] name = "bp-polkadot" version = "0.5.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "bp-header-chain", "bp-polkadot-core", "bp-runtime", "frame-support", "sp-api", - "sp-std 14.0.0 (git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da)", + "sp-std 14.0.0 (git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591)", ] [[package]] name = "bp-polkadot-core" version = "0.7.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "bp-messages", "bp-runtime", @@ -1016,13 +1090,13 @@ dependencies = [ "serde", "sp-core", "sp-runtime", - "sp-std 14.0.0 (git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da)", + "sp-std 14.0.0 (git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591)", ] [[package]] name = "bp-relayers" version = "0.7.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "bp-messages", "bp-runtime", @@ -1030,13 +1104,13 @@ dependencies = [ "parity-scale-codec", "scale-info", "sp-runtime", - "sp-std 14.0.0 (git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da)", + "sp-std 14.0.0 (git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591)", ] [[package]] name = "bp-runtime" version = "0.7.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "frame-support", "frame-system", @@ -1051,7 +1125,7 @@ dependencies = [ "sp-io", "sp-runtime", "sp-state-machine", - "sp-std 14.0.0 (git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da)", + "sp-std 14.0.0 (git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591)", "sp-trie", "trie-db", ] @@ -1059,7 +1133,7 @@ dependencies = [ [[package]] name = "bp-test-utils" version = "0.7.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "bp-header-chain", "bp-parachains", @@ -1072,22 +1146,22 @@ dependencies = [ "sp-consensus-grandpa", "sp-core", "sp-runtime", - "sp-std 14.0.0 (git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da)", + "sp-std 14.0.0 (git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591)", "sp-trie", ] [[package]] name = "bp-xcm-bridge-hub" version = "0.2.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ - "sp-std 14.0.0 (git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da)", + "sp-std 14.0.0 (git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591)", ] [[package]] name = "bp-xcm-bridge-hub-router" version = "0.6.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "parity-scale-codec", "scale-info", @@ -1098,7 +1172,7 @@ dependencies = [ [[package]] name = "bridge-hub-common" version = "0.1.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "cumulus-primitives-core", "frame-support", @@ -1114,7 +1188,7 @@ dependencies = [ [[package]] name = "bridge-hub-test-utils" version = "0.7.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "asset-test-utils", "bp-header-chain", @@ -1144,7 +1218,7 @@ dependencies = [ "sp-io", "sp-keyring", "sp-runtime", - "sp-tracing 16.0.0 (git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da)", + "sp-tracing 16.0.0 (git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591)", "staging-xcm", "staging-xcm-builder", "staging-xcm-executor", @@ -1153,7 +1227,7 @@ dependencies = [ [[package]] name = "bridge-runtime-common" version = "0.7.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "bp-header-chain", "bp-messages", @@ -1176,7 +1250,7 @@ dependencies = [ "scale-info", "sp-io", "sp-runtime", - "sp-std 14.0.0 (git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da)", + "sp-std 14.0.0 (git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591)", "sp-trie", "staging-xcm", "staging-xcm-builder", @@ -1230,6 +1304,9 @@ name = "bytes" version = "1.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8318a53db07bb3f8dca91a600466bdb3f2eaadeedfdbcf02e1accbad9271ba50" +dependencies = [ + "serde", +] [[package]] name = "camino" @@ -1727,7 +1804,7 @@ dependencies = [ [[package]] name = "cumulus-pallet-aura-ext" version = "0.7.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "cumulus-pallet-parachain-system", "frame-support", @@ -1744,7 +1821,7 @@ dependencies = [ [[package]] name = "cumulus-pallet-dmp-queue" version = "0.7.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "cumulus-primitives-core", "frame-benchmarking", @@ -1761,7 +1838,7 @@ dependencies = [ [[package]] name = "cumulus-pallet-parachain-system" version = "0.7.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "bytes", "cumulus-pallet-parachain-system-proc-macro", @@ -1781,12 +1858,12 @@ dependencies = [ "polkadot-runtime-parachains", "scale-info", "sp-core", - "sp-externalities 0.25.0 (git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da)", + "sp-externalities 0.25.0 (git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591)", "sp-inherents", "sp-io", "sp-runtime", "sp-state-machine", - "sp-std 14.0.0 (git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da)", + "sp-std 14.0.0 (git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591)", "sp-trie", "sp-version", "staging-xcm", @@ -1797,7 +1874,7 @@ dependencies = [ [[package]] name = "cumulus-pallet-parachain-system-proc-macro" version = "0.6.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -1808,7 +1885,7 @@ dependencies = [ [[package]] name = "cumulus-pallet-session-benchmarking" version = "9.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "frame-benchmarking", "frame-support", @@ -1821,7 +1898,7 @@ dependencies = [ [[package]] name = "cumulus-pallet-solo-to-para" version = "0.7.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "cumulus-pallet-parachain-system", "frame-support", @@ -1836,7 +1913,7 @@ dependencies = [ [[package]] name = "cumulus-pallet-xcm" version = "0.7.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "cumulus-primitives-core", "frame-support", @@ -1851,7 +1928,7 @@ dependencies = [ [[package]] name = "cumulus-pallet-xcmp-queue" version = "0.7.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "bounded-collections", "bp-xcm-bridge-hub-router", @@ -1876,7 +1953,7 @@ dependencies = [ [[package]] name = "cumulus-ping" version = "0.7.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "cumulus-pallet-xcm", "cumulus-primitives-core", @@ -1891,7 +1968,7 @@ dependencies = [ [[package]] name = "cumulus-primitives-aura" version = "0.7.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "sp-api", "sp-consensus-aura", @@ -1900,7 +1977,7 @@ dependencies = [ [[package]] name = "cumulus-primitives-core" version = "0.7.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "parity-scale-codec", "polkadot-core-primitives", @@ -1916,7 +1993,7 @@ dependencies = [ [[package]] name = "cumulus-primitives-parachain-inherent" version = "0.7.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "async-trait", "cumulus-primitives-core", @@ -1930,17 +2007,17 @@ dependencies = [ [[package]] name = "cumulus-primitives-proof-size-hostfunction" version = "0.2.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ - "sp-externalities 0.25.0 (git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da)", - "sp-runtime-interface 24.0.0 (git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da)", + "sp-externalities 0.25.0 (git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591)", + "sp-runtime-interface 24.0.0 (git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591)", "sp-trie", ] [[package]] name = "cumulus-primitives-storage-weight-reclaim" version = "1.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "cumulus-primitives-core", "cumulus-primitives-proof-size-hostfunction", @@ -1956,7 +2033,7 @@ dependencies = [ [[package]] name = "cumulus-primitives-timestamp" version = "0.7.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "cumulus-primitives-core", "sp-inherents", @@ -1966,7 +2043,7 @@ dependencies = [ [[package]] name = "cumulus-primitives-utility" version = "0.7.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "cumulus-primitives-core", "frame-support", @@ -1983,7 +2060,7 @@ dependencies = [ [[package]] name = "cumulus-test-relay-sproof-builder" version = "0.7.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "cumulus-primitives-core", "parity-scale-codec", @@ -2435,20 +2512,6 @@ dependencies = [ "uint", ] -[[package]] -name = "evm-interpreter" -version = "1.0.0-dev" -source = "git+https://github.com/xermicus/evm.git?branch=separate-compilation#596447a3391f42fb4f99def5280c076a15e44d18" -dependencies = [ - "auto_impl", - "parity-scale-codec", - "primitive-types", - "rlp", - "scale-info", - "serde", - "sha3", -] - [[package]] name = "expander" version = "2.2.1" @@ -2600,7 +2663,7 @@ dependencies = [ [[package]] name = "frame-benchmarking" version = "28.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "frame-support", "frame-support-procedural", @@ -2616,15 +2679,15 @@ dependencies = [ "sp-core", "sp-io", "sp-runtime", - "sp-runtime-interface 24.0.0 (git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da)", - "sp-storage 19.0.0 (git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da)", + "sp-runtime-interface 24.0.0 (git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591)", + "sp-storage 19.0.0 (git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591)", "static_assertions", ] [[package]] name = "frame-benchmarking-pallet-pov" version = "18.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "frame-benchmarking", "frame-support", @@ -2638,7 +2701,7 @@ dependencies = [ [[package]] name = "frame-election-provider-solution-type" version = "13.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -2649,7 +2712,7 @@ dependencies = [ [[package]] name = "frame-election-provider-support" version = "28.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "frame-election-provider-solution-type", "frame-support", @@ -2665,7 +2728,7 @@ dependencies = [ [[package]] name = "frame-executive" version = "28.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "aquamarine", "frame-support", @@ -2677,7 +2740,7 @@ dependencies = [ "sp-core", "sp-io", "sp-runtime", - "sp-tracing 16.0.0 (git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da)", + "sp-tracing 16.0.0 (git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591)", ] [[package]] @@ -2695,7 +2758,7 @@ dependencies = [ [[package]] name = "frame-metadata-hash-extension" version = "0.1.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "array-bytes", "docify", @@ -2710,7 +2773,7 @@ dependencies = [ [[package]] name = "frame-support" version = "28.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "aquamarine", "array-bytes", @@ -2733,7 +2796,7 @@ dependencies = [ "sp-arithmetic", "sp-core", "sp-crypto-hashing-proc-macro", - "sp-debug-derive 14.0.0 (git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da)", + "sp-debug-derive 14.0.0 (git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591)", "sp-genesis-builder", "sp-inherents", "sp-io", @@ -2741,8 +2804,8 @@ dependencies = [ "sp-runtime", "sp-staking", "sp-state-machine", - "sp-std 14.0.0 (git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da)", - "sp-tracing 16.0.0 (git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da)", + "sp-std 14.0.0 (git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591)", + "sp-tracing 16.0.0 (git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591)", "sp-weights", "static_assertions", "tt-call", @@ -2751,7 +2814,7 @@ dependencies = [ [[package]] name = "frame-support-procedural" version = "23.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "Inflector", "cfg-expr", @@ -2771,7 +2834,7 @@ dependencies = [ [[package]] name = "frame-support-procedural-tools" version = "10.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "frame-support-procedural-tools-derive", "proc-macro-crate", @@ -2783,7 +2846,7 @@ dependencies = [ [[package]] name = "frame-support-procedural-tools-derive" version = "11.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "proc-macro2", "quote", @@ -2793,7 +2856,7 @@ dependencies = [ [[package]] name = "frame-system" version = "28.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "cfg-if", "docify", @@ -2805,7 +2868,7 @@ dependencies = [ "sp-core", "sp-io", "sp-runtime", - "sp-std 14.0.0 (git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da)", + "sp-std 14.0.0 (git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591)", "sp-version", "sp-weights", ] @@ -2813,7 +2876,7 @@ dependencies = [ [[package]] name = "frame-system-benchmarking" version = "28.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "frame-benchmarking", "frame-support", @@ -2827,7 +2890,7 @@ dependencies = [ [[package]] name = "frame-system-rpc-runtime-api" version = "26.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "docify", "parity-scale-codec", @@ -2837,7 +2900,7 @@ dependencies = [ [[package]] name = "frame-try-runtime" version = "0.34.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "frame-support", "parity-scale-codec", @@ -3127,6 +3190,9 @@ name = "hex" version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" +dependencies = [ + "serde", +] [[package]] name = "hex-conservative" @@ -3432,7 +3498,6 @@ dependencies = [ "once_cell", "serdect", "sha2 0.10.8", - "signature", ] [[package]] @@ -3980,7 +4045,7 @@ checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" [[package]] name = "pallet-alliance" version = "27.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "frame-benchmarking", "frame-support", @@ -3999,7 +4064,7 @@ dependencies = [ [[package]] name = "pallet-asset-conversion" version = "10.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "frame-benchmarking", "frame-support", @@ -4017,7 +4082,7 @@ dependencies = [ [[package]] name = "pallet-asset-conversion-ops" version = "0.1.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "frame-benchmarking", "frame-support", @@ -4035,7 +4100,7 @@ dependencies = [ [[package]] name = "pallet-asset-conversion-tx-payment" version = "10.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "frame-support", "frame-system", @@ -4049,7 +4114,7 @@ dependencies = [ [[package]] name = "pallet-asset-rate" version = "7.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "frame-benchmarking", "frame-support", @@ -4063,7 +4128,7 @@ dependencies = [ [[package]] name = "pallet-asset-tx-payment" version = "28.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "frame-benchmarking", "frame-support", @@ -4080,7 +4145,7 @@ dependencies = [ [[package]] name = "pallet-assets" version = "29.1.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "frame-benchmarking", "frame-support", @@ -4096,7 +4161,7 @@ dependencies = [ [[package]] name = "pallet-assets-freezer" version = "0.1.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "frame-benchmarking", "frame-support", @@ -4111,7 +4176,7 @@ dependencies = [ [[package]] name = "pallet-atomic-swap" version = "28.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "frame-support", "frame-system", @@ -4125,7 +4190,7 @@ dependencies = [ [[package]] name = "pallet-aura" version = "27.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "frame-support", "frame-system", @@ -4141,7 +4206,7 @@ dependencies = [ [[package]] name = "pallet-authority-discovery" version = "28.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "frame-support", "frame-system", @@ -4156,7 +4221,7 @@ dependencies = [ [[package]] name = "pallet-authorship" version = "28.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "frame-support", "frame-system", @@ -4169,7 +4234,7 @@ dependencies = [ [[package]] name = "pallet-babe" version = "28.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "frame-benchmarking", "frame-support", @@ -4192,7 +4257,7 @@ dependencies = [ [[package]] name = "pallet-bags-list" version = "27.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "aquamarine", "docify", @@ -4207,13 +4272,13 @@ dependencies = [ "sp-core", "sp-io", "sp-runtime", - "sp-tracing 16.0.0 (git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da)", + "sp-tracing 16.0.0 (git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591)", ] [[package]] name = "pallet-balances" version = "28.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "docify", "frame-benchmarking", @@ -4228,7 +4293,7 @@ dependencies = [ [[package]] name = "pallet-beefy" version = "28.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "frame-support", "frame-system", @@ -4247,7 +4312,7 @@ dependencies = [ [[package]] name = "pallet-beefy-mmr" version = "28.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "array-bytes", "binary-merkle-tree", @@ -4272,7 +4337,7 @@ dependencies = [ [[package]] name = "pallet-bounties" version = "27.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "frame-benchmarking", "frame-support", @@ -4289,7 +4354,7 @@ dependencies = [ [[package]] name = "pallet-bridge-grandpa" version = "0.7.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "bp-header-chain", "bp-runtime", @@ -4302,13 +4367,13 @@ dependencies = [ "scale-info", "sp-consensus-grandpa", "sp-runtime", - "sp-std 14.0.0 (git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da)", + "sp-std 14.0.0 (git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591)", ] [[package]] name = "pallet-bridge-messages" version = "0.7.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "bp-header-chain", "bp-messages", @@ -4320,14 +4385,14 @@ dependencies = [ "parity-scale-codec", "scale-info", "sp-runtime", - "sp-std 14.0.0 (git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da)", + "sp-std 14.0.0 (git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591)", "sp-trie", ] [[package]] name = "pallet-bridge-parachains" version = "0.7.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "bp-header-chain", "bp-parachains", @@ -4341,13 +4406,13 @@ dependencies = [ "parity-scale-codec", "scale-info", "sp-runtime", - "sp-std 14.0.0 (git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da)", + "sp-std 14.0.0 (git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591)", ] [[package]] name = "pallet-bridge-relayers" version = "0.7.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "bp-messages", "bp-relayers", @@ -4361,13 +4426,13 @@ dependencies = [ "scale-info", "sp-arithmetic", "sp-runtime", - "sp-std 14.0.0 (git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da)", + "sp-std 14.0.0 (git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591)", ] [[package]] name = "pallet-broker" version = "0.6.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "bitvec", "frame-benchmarking", @@ -4385,7 +4450,7 @@ dependencies = [ [[package]] name = "pallet-child-bounties" version = "27.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "frame-benchmarking", "frame-support", @@ -4403,7 +4468,7 @@ dependencies = [ [[package]] name = "pallet-collator-selection" version = "9.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "frame-benchmarking", "frame-support", @@ -4422,7 +4487,7 @@ dependencies = [ [[package]] name = "pallet-collective" version = "28.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "frame-benchmarking", "frame-support", @@ -4438,7 +4503,7 @@ dependencies = [ [[package]] name = "pallet-collective-content" version = "0.6.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "frame-benchmarking", "frame-support", @@ -4452,7 +4517,7 @@ dependencies = [ [[package]] name = "pallet-contracts" version = "27.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "bitflags 1.3.2", "environmental", @@ -4474,7 +4539,7 @@ dependencies = [ "sp-core", "sp-io", "sp-runtime", - "sp-std 14.0.0 (git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da)", + "sp-std 14.0.0 (git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591)", "staging-xcm", "staging-xcm-builder", "wasm-instrument", @@ -4484,7 +4549,7 @@ dependencies = [ [[package]] name = "pallet-contracts-mock-network" version = "3.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "frame-support", "frame-system", @@ -4509,7 +4574,7 @@ dependencies = [ "sp-io", "sp-keystore", "sp-runtime", - "sp-tracing 16.0.0 (git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da)", + "sp-tracing 16.0.0 (git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591)", "staging-xcm", "staging-xcm-builder", "staging-xcm-executor", @@ -4519,25 +4584,17 @@ dependencies = [ [[package]] name = "pallet-contracts-proc-macro" version = "18.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "proc-macro2", "quote", "syn 2.0.76", ] -[[package]] -name = "pallet-contracts-pvm-llapi" -version = "0.1.0" -dependencies = [ - "anyhow", - "inkwell", -] - [[package]] name = "pallet-contracts-uapi" version = "5.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "bitflags 1.3.2", "parity-scale-codec", @@ -4549,7 +4606,7 @@ dependencies = [ [[package]] name = "pallet-conviction-voting" version = "28.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "assert_matches", "frame-benchmarking", @@ -4565,7 +4622,7 @@ dependencies = [ [[package]] name = "pallet-core-fellowship" version = "12.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "frame-benchmarking", "frame-support", @@ -4583,7 +4640,7 @@ dependencies = [ [[package]] name = "pallet-delegated-staking" version = "1.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "frame-support", "frame-system", @@ -4598,7 +4655,7 @@ dependencies = [ [[package]] name = "pallet-democracy" version = "28.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "frame-benchmarking", "frame-support", @@ -4615,7 +4672,7 @@ dependencies = [ [[package]] name = "pallet-dev-mode" version = "10.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "frame-support", "frame-system", @@ -4630,7 +4687,7 @@ dependencies = [ [[package]] name = "pallet-election-provider-multi-phase" version = "27.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -4652,7 +4709,7 @@ dependencies = [ [[package]] name = "pallet-election-provider-support-benchmarking" version = "27.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -4665,7 +4722,7 @@ dependencies = [ [[package]] name = "pallet-elections-phragmen" version = "29.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "frame-benchmarking", "frame-support", @@ -4683,7 +4740,7 @@ dependencies = [ [[package]] name = "pallet-fast-unstake" version = "27.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "docify", "frame-benchmarking", @@ -4701,7 +4758,7 @@ dependencies = [ [[package]] name = "pallet-glutton" version = "14.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "blake2", "frame-benchmarking", @@ -4719,7 +4776,7 @@ dependencies = [ [[package]] name = "pallet-grandpa" version = "28.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "frame-benchmarking", "frame-support", @@ -4741,7 +4798,7 @@ dependencies = [ [[package]] name = "pallet-identity" version = "29.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "enumflags2", "frame-benchmarking", @@ -4757,7 +4814,7 @@ dependencies = [ [[package]] name = "pallet-im-online" version = "27.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "frame-benchmarking", "frame-support", @@ -4776,7 +4833,7 @@ dependencies = [ [[package]] name = "pallet-indices" version = "28.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "frame-benchmarking", "frame-support", @@ -4792,7 +4849,7 @@ dependencies = [ [[package]] name = "pallet-insecure-randomness-collective-flip" version = "16.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "frame-support", "frame-system", @@ -4805,7 +4862,7 @@ dependencies = [ [[package]] name = "pallet-lottery" version = "28.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "frame-benchmarking", "frame-support", @@ -4818,7 +4875,7 @@ dependencies = [ [[package]] name = "pallet-membership" version = "28.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "frame-benchmarking", "frame-support", @@ -4834,7 +4891,7 @@ dependencies = [ [[package]] name = "pallet-message-queue" version = "31.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "environmental", "frame-benchmarking", @@ -4853,7 +4910,7 @@ dependencies = [ [[package]] name = "pallet-migrations" version = "1.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "docify", "frame-benchmarking", @@ -4870,7 +4927,7 @@ dependencies = [ [[package]] name = "pallet-mixnet" version = "0.4.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "frame-benchmarking", "frame-support", @@ -4889,7 +4946,7 @@ dependencies = [ [[package]] name = "pallet-mmr" version = "27.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "frame-benchmarking", "frame-support", @@ -4906,7 +4963,7 @@ dependencies = [ [[package]] name = "pallet-multisig" version = "28.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "frame-benchmarking", "frame-support", @@ -4921,7 +4978,7 @@ dependencies = [ [[package]] name = "pallet-nft-fractionalization" version = "10.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "frame-benchmarking", "frame-support", @@ -4937,7 +4994,7 @@ dependencies = [ [[package]] name = "pallet-nfts" version = "22.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "enumflags2", "frame-benchmarking", @@ -4954,7 +5011,7 @@ dependencies = [ [[package]] name = "pallet-nfts-runtime-api" version = "14.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "pallet-nfts", "parity-scale-codec", @@ -4964,7 +5021,7 @@ dependencies = [ [[package]] name = "pallet-nis" version = "28.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "frame-benchmarking", "frame-support", @@ -4979,7 +5036,7 @@ dependencies = [ [[package]] name = "pallet-node-authorization" version = "28.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "frame-support", "frame-system", @@ -4994,7 +5051,7 @@ dependencies = [ [[package]] name = "pallet-nomination-pools" version = "25.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "frame-support", "frame-system", @@ -5006,13 +5063,13 @@ dependencies = [ "sp-io", "sp-runtime", "sp-staking", - "sp-tracing 16.0.0 (git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da)", + "sp-tracing 16.0.0 (git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591)", ] [[package]] name = "pallet-nomination-pools-benchmarking" version = "26.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -5025,14 +5082,14 @@ dependencies = [ "parity-scale-codec", "scale-info", "sp-runtime", - "sp-runtime-interface 24.0.0 (git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da)", + "sp-runtime-interface 24.0.0 (git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591)", "sp-staking", ] [[package]] name = "pallet-nomination-pools-runtime-api" version = "23.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "pallet-nomination-pools", "parity-scale-codec", @@ -5042,7 +5099,7 @@ dependencies = [ [[package]] name = "pallet-offences" version = "27.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "frame-support", "frame-system", @@ -5058,7 +5115,7 @@ dependencies = [ [[package]] name = "pallet-offences-benchmarking" version = "28.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -5081,7 +5138,7 @@ dependencies = [ [[package]] name = "pallet-paged-list" version = "0.6.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "docify", "frame-benchmarking", @@ -5098,7 +5155,7 @@ dependencies = [ [[package]] name = "pallet-parameters" version = "0.1.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "docify", "frame-benchmarking", @@ -5115,7 +5172,7 @@ dependencies = [ [[package]] name = "pallet-preimage" version = "28.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "frame-benchmarking", "frame-support", @@ -5131,7 +5188,7 @@ dependencies = [ [[package]] name = "pallet-proxy" version = "28.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "frame-benchmarking", "frame-support", @@ -5145,7 +5202,7 @@ dependencies = [ [[package]] name = "pallet-ranked-collective" version = "28.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "frame-benchmarking", "frame-support", @@ -5163,7 +5220,7 @@ dependencies = [ [[package]] name = "pallet-recovery" version = "28.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "frame-benchmarking", "frame-support", @@ -5177,7 +5234,7 @@ dependencies = [ [[package]] name = "pallet-referenda" version = "28.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "frame-benchmarking", "frame-support", @@ -5194,7 +5251,7 @@ dependencies = [ [[package]] name = "pallet-remark" version = "28.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "frame-benchmarking", "frame-support", @@ -5210,7 +5267,7 @@ dependencies = [ [[package]] name = "pallet-revive" version = "0.1.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "bitflags 1.3.2", "environmental", @@ -5225,14 +5282,14 @@ dependencies = [ "pallet-revive-uapi", "parity-scale-codec", "paste", - "polkavm 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)", + "polkavm 0.10.0", "scale-info", "serde", "sp-api", "sp-core", "sp-io", "sp-runtime", - "sp-std 14.0.0 (git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da)", + "sp-std 14.0.0 (git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591)", "staging-xcm", "staging-xcm-builder", ] @@ -5240,12 +5297,12 @@ dependencies = [ [[package]] name = "pallet-revive-fixtures" version = "0.1.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "anyhow", "frame-system", "parity-wasm", - "polkavm-linker 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)", + "polkavm-linker 0.10.0", "sp-runtime", "tempfile", "toml 0.8.19", @@ -5254,7 +5311,7 @@ dependencies = [ [[package]] name = "pallet-revive-mock-network" version = "0.1.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "frame-support", "frame-system", @@ -5278,7 +5335,7 @@ dependencies = [ "sp-io", "sp-keystore", "sp-runtime", - "sp-tracing 16.0.0 (git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da)", + "sp-tracing 16.0.0 (git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591)", "staging-xcm", "staging-xcm-builder", "staging-xcm-executor", @@ -5288,7 +5345,7 @@ dependencies = [ [[package]] name = "pallet-revive-proc-macro" version = "0.1.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "proc-macro2", "quote", @@ -5298,7 +5355,7 @@ dependencies = [ [[package]] name = "pallet-revive-uapi" version = "0.1.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "bitflags 1.3.2", "parity-scale-codec", @@ -5310,7 +5367,7 @@ dependencies = [ [[package]] name = "pallet-root-offences" version = "25.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "frame-support", "frame-system", @@ -5325,7 +5382,7 @@ dependencies = [ [[package]] name = "pallet-root-testing" version = "4.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "frame-support", "frame-system", @@ -5339,7 +5396,7 @@ dependencies = [ [[package]] name = "pallet-safe-mode" version = "9.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "docify", "frame-benchmarking", @@ -5357,7 +5414,7 @@ dependencies = [ [[package]] name = "pallet-salary" version = "13.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "frame-benchmarking", "frame-support", @@ -5375,7 +5432,7 @@ dependencies = [ [[package]] name = "pallet-scheduler" version = "29.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "docify", "frame-benchmarking", @@ -5392,7 +5449,7 @@ dependencies = [ [[package]] name = "pallet-scored-pool" version = "28.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "frame-support", "frame-system", @@ -5405,7 +5462,7 @@ dependencies = [ [[package]] name = "pallet-session" version = "28.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "frame-support", "frame-system", @@ -5426,7 +5483,7 @@ dependencies = [ [[package]] name = "pallet-session-benchmarking" version = "28.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "frame-benchmarking", "frame-support", @@ -5442,7 +5499,7 @@ dependencies = [ [[package]] name = "pallet-skip-feeless-payment" version = "3.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "frame-support", "frame-system", @@ -5454,7 +5511,7 @@ dependencies = [ [[package]] name = "pallet-society" version = "28.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "frame-benchmarking", "frame-support", @@ -5471,7 +5528,7 @@ dependencies = [ [[package]] name = "pallet-staking" version = "28.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -5489,21 +5546,10 @@ dependencies = [ "sp-staking", ] -[[package]] -name = "pallet-staking-reward-curve" -version = "11.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" -dependencies = [ - "proc-macro-crate", - "proc-macro2", - "quote", - "syn 2.0.76", -] - [[package]] name = "pallet-staking-reward-fn" version = "19.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "log", "sp-arithmetic", @@ -5512,7 +5558,7 @@ dependencies = [ [[package]] name = "pallet-staking-runtime-api" version = "14.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "parity-scale-codec", "sp-api", @@ -5522,7 +5568,7 @@ dependencies = [ [[package]] name = "pallet-state-trie-migration" version = "29.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "frame-benchmarking", "frame-support", @@ -5538,7 +5584,7 @@ dependencies = [ [[package]] name = "pallet-statement" version = "10.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "frame-support", "frame-system", @@ -5555,7 +5601,7 @@ dependencies = [ [[package]] name = "pallet-sudo" version = "28.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "docify", "frame-benchmarking", @@ -5570,7 +5616,7 @@ dependencies = [ [[package]] name = "pallet-timestamp" version = "27.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "docify", "frame-benchmarking", @@ -5582,14 +5628,14 @@ dependencies = [ "sp-inherents", "sp-io", "sp-runtime", - "sp-storage 19.0.0 (git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da)", + "sp-storage 19.0.0 (git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591)", "sp-timestamp", ] [[package]] name = "pallet-tips" version = "27.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "frame-benchmarking", "frame-support", @@ -5607,7 +5653,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment" version = "28.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "frame-support", "frame-system", @@ -5622,7 +5668,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment-rpc-runtime-api" version = "28.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "pallet-transaction-payment", "parity-scale-codec", @@ -5634,7 +5680,7 @@ dependencies = [ [[package]] name = "pallet-transaction-storage" version = "27.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "frame-benchmarking", "frame-support", @@ -5653,7 +5699,7 @@ dependencies = [ [[package]] name = "pallet-treasury" version = "27.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "docify", "frame-benchmarking", @@ -5671,7 +5717,7 @@ dependencies = [ [[package]] name = "pallet-tx-pause" version = "9.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "docify", "frame-benchmarking", @@ -5688,7 +5734,7 @@ dependencies = [ [[package]] name = "pallet-uniques" version = "28.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "frame-benchmarking", "frame-support", @@ -5702,7 +5748,7 @@ dependencies = [ [[package]] name = "pallet-utility" version = "28.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "frame-benchmarking", "frame-support", @@ -5717,7 +5763,7 @@ dependencies = [ [[package]] name = "pallet-vesting" version = "28.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "frame-benchmarking", "frame-support", @@ -5731,7 +5777,7 @@ dependencies = [ [[package]] name = "pallet-whitelist" version = "27.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "frame-benchmarking", "frame-support", @@ -5745,7 +5791,7 @@ dependencies = [ [[package]] name = "pallet-xcm" version = "7.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "bounded-collections", "frame-benchmarking", @@ -5768,7 +5814,7 @@ dependencies = [ [[package]] name = "pallet-xcm-benchmarks" version = "7.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "frame-benchmarking", "frame-support", @@ -5786,7 +5832,7 @@ dependencies = [ [[package]] name = "pallet-xcm-bridge-hub" version = "0.2.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "bp-messages", "bp-runtime", @@ -5800,7 +5846,7 @@ dependencies = [ "scale-info", "sp-core", "sp-runtime", - "sp-std 14.0.0 (git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da)", + "sp-std 14.0.0 (git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591)", "staging-xcm", "staging-xcm-builder", "staging-xcm-executor", @@ -5809,7 +5855,7 @@ dependencies = [ [[package]] name = "pallet-xcm-bridge-hub-router" version = "0.5.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "bp-xcm-bridge-hub-router", "frame-benchmarking", @@ -5820,7 +5866,7 @@ dependencies = [ "scale-info", "sp-core", "sp-runtime", - "sp-std 14.0.0 (git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da)", + "sp-std 14.0.0 (git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591)", "staging-xcm", "staging-xcm-builder", ] @@ -5828,7 +5874,7 @@ dependencies = [ [[package]] name = "parachains-common" version = "7.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "cumulus-primitives-core", "cumulus-primitives-utility", @@ -5858,7 +5904,7 @@ dependencies = [ [[package]] name = "parachains-runtimes-test-utils" version = "7.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "cumulus-pallet-parachain-system", "cumulus-pallet-xcmp-queue", @@ -5878,7 +5924,7 @@ dependencies = [ "sp-core", "sp-io", "sp-runtime", - "sp-tracing 16.0.0 (git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da)", + "sp-tracing 16.0.0 (git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591)", "staging-parachain-info", "staging-xcm", "staging-xcm-executor", @@ -6108,7 +6154,7 @@ dependencies = [ [[package]] name = "polkadot-core-primitives" version = "7.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "parity-scale-codec", "scale-info", @@ -6119,7 +6165,7 @@ dependencies = [ [[package]] name = "polkadot-parachain-primitives" version = "6.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "bounded-collections", "derive_more", @@ -6135,7 +6181,7 @@ dependencies = [ [[package]] name = "polkadot-primitives" version = "7.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "bitvec", "hex-literal", @@ -6161,7 +6207,7 @@ dependencies = [ [[package]] name = "polkadot-runtime-common" version = "7.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "bitvec", "frame-benchmarking", @@ -6210,19 +6256,19 @@ dependencies = [ [[package]] name = "polkadot-runtime-metrics" version = "7.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "bs58", "frame-benchmarking", "parity-scale-codec", "polkadot-primitives", - "sp-tracing 16.0.0 (git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da)", + "sp-tracing 16.0.0 (git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591)", ] [[package]] name = "polkadot-runtime-parachains" version = "7.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "bitflags 1.3.2", "bitvec", @@ -6262,7 +6308,7 @@ dependencies = [ "sp-runtime", "sp-session", "sp-staking", - "sp-std 14.0.0 (git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da)", + "sp-std 14.0.0 (git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591)", "staging-xcm", "staging-xcm-executor", ] @@ -6270,7 +6316,7 @@ dependencies = [ [[package]] name = "polkadot-sdk" version = "0.1.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "asset-test-utils", "assets-common", @@ -6347,8 +6393,6 @@ dependencies = [ "pallet-collective-content", "pallet-contracts", "pallet-contracts-mock-network", - "pallet-contracts-proc-macro", - "pallet-contracts-uapi", "pallet-conviction-voting", "pallet-core-fellowship", "pallet-delegated-staking", @@ -6392,8 +6436,6 @@ dependencies = [ "pallet-revive", "pallet-revive-fixtures", "pallet-revive-mock-network", - "pallet-revive-proc-macro", - "pallet-revive-uapi", "pallet-root-offences", "pallet-root-testing", "pallet-safe-mode", @@ -6405,7 +6447,6 @@ dependencies = [ "pallet-skip-feeless-payment", "pallet-society", "pallet-staking", - "pallet-staking-reward-curve", "pallet-staking-reward-fn", "pallet-staking-runtime-api", "pallet-state-trie-migration", @@ -6435,9 +6476,7 @@ dependencies = [ "polkadot-runtime-metrics", "polkadot-runtime-parachains", "polkadot-sdk-frame", - "sc-chain-spec-derive", "sc-executor", - "sc-tracing-proc-macro", "slot-range-helper", "snowbridge-beacon-primitives", "snowbridge-core", @@ -6468,11 +6507,11 @@ dependencies = [ "sp-consensus-slots", "sp-core", "sp-core-hashing", - "sp-crypto-ec-utils 0.10.0 (git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da)", + "sp-crypto-ec-utils 0.10.0 (git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591)", "sp-crypto-hashing", "sp-crypto-hashing-proc-macro", - "sp-debug-derive 14.0.0 (git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da)", - "sp-externalities 0.25.0 (git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da)", + "sp-debug-derive 14.0.0 (git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591)", + "sp-externalities 0.25.0 (git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591)", "sp-genesis-builder", "sp-inherents", "sp-io", @@ -6484,22 +6523,22 @@ dependencies = [ "sp-npos-elections", "sp-offchain", "sp-runtime", - "sp-runtime-interface 24.0.0 (git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da)", - "sp-runtime-interface-proc-macro 17.0.0 (git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da)", + "sp-runtime-interface 24.0.0 (git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591)", + "sp-runtime-interface-proc-macro 17.0.0 (git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591)", "sp-session", "sp-staking", "sp-state-machine", "sp-statement-store", - "sp-std 14.0.0 (git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da)", - "sp-storage 19.0.0 (git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da)", + "sp-std 14.0.0 (git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591)", + "sp-storage 19.0.0 (git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591)", "sp-timestamp", - "sp-tracing 16.0.0 (git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da)", + "sp-tracing 16.0.0 (git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591)", "sp-transaction-pool", "sp-transaction-storage-proof", "sp-trie", "sp-version", "sp-version-proc-macro", - "sp-wasm-interface 20.0.0 (git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da)", + "sp-wasm-interface 20.0.0 (git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591)", "sp-weights", "staging-parachain-info", "staging-xcm", @@ -6507,15 +6546,13 @@ dependencies = [ "staging-xcm-executor", "substrate-bip39", "testnet-parachains-constants", - "tracing-gum-proc-macro", - "xcm-procedural", "xcm-runtime-apis", ] [[package]] name = "polkadot-sdk-frame" version = "0.1.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "docify", "frame-benchmarking", @@ -6539,7 +6576,7 @@ dependencies = [ "sp-offchain", "sp-runtime", "sp-session", - "sp-storage 19.0.0 (git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da)", + "sp-storage 19.0.0 (git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591)", "sp-transaction-pool", "sp-version", ] @@ -6565,21 +6602,9 @@ checksum = "b7ec0c5935f2eff23cfc4653002f4f8d12b37f87a720e0631282d188c32089d6" dependencies = [ "libc", "log", - "polkavm-assembler 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)", - "polkavm-common 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)", - "polkavm-linux-raw 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "polkavm" -version = "0.10.0" -source = "git+https://github.com/koute/polkavm.git?rev=360029e#360029ec34863591e043012e1a76c767aa507657" -dependencies = [ - "libc", - "log", - "polkavm-assembler 0.10.0 (git+https://github.com/koute/polkavm.git?rev=360029e)", - "polkavm-common 0.10.0 (git+https://github.com/koute/polkavm.git?rev=360029e)", - "polkavm-linux-raw 0.10.0 (git+https://github.com/koute/polkavm.git?rev=360029e)", + "polkavm-assembler 0.10.0", + "polkavm-common 0.10.0", + "polkavm-linux-raw 0.10.0", ] [[package]] @@ -6600,14 +6625,6 @@ dependencies = [ "log", ] -[[package]] -name = "polkavm-assembler" -version = "0.10.0" -source = "git+https://github.com/koute/polkavm.git?rev=360029e#360029ec34863591e043012e1a76c767aa507657" -dependencies = [ - "log", -] - [[package]] name = "polkavm-common" version = "0.9.0" @@ -6624,15 +6641,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0097b48bc0bedf9f3f537ce8f37e8f1202d8d83f9b621bdb21ff2c59b9097c50" dependencies = [ "log", - "polkavm-assembler 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "polkavm-common" -version = "0.10.0" -source = "git+https://github.com/koute/polkavm.git?rev=360029e#360029ec34863591e043012e1a76c767aa507657" -dependencies = [ - "log", + "polkavm-assembler 0.10.0", ] [[package]] @@ -6671,7 +6680,7 @@ version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7855353a5a783dd5d09e3b915474bddf66575f5a3cf45dec8d1c5e051ba320dc" dependencies = [ - "polkavm-common 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)", + "polkavm-common 0.10.0", "proc-macro2", "quote", "syn 2.0.76", @@ -6700,13 +6709,14 @@ dependencies = [ [[package]] name = "polkavm-disassembler" version = "0.10.0" -source = "git+https://github.com/koute/polkavm.git?rev=360029e#360029ec34863591e043012e1a76c767aa507657" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c75c1204f837bdd2d945384b73658a8228064e5c163040f367a3acdca9088c9" dependencies = [ "clap", "iced-x86", - "polkavm 0.10.0 (git+https://github.com/koute/polkavm.git?rev=360029e)", - "polkavm-common 0.10.0 (git+https://github.com/koute/polkavm.git?rev=360029e)", - "polkavm-linker 0.10.0 (git+https://github.com/koute/polkavm.git?rev=360029e)", + "polkavm 0.10.0", + "polkavm-common 0.10.0", + "polkavm-linker 0.10.0", ] [[package]] @@ -6734,21 +6744,7 @@ dependencies = [ "hashbrown 0.14.5", "log", "object 0.36.3", - "polkavm-common 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)", - "regalloc2 0.9.3", - "rustc-demangle", -] - -[[package]] -name = "polkavm-linker" -version = "0.10.0" -source = "git+https://github.com/koute/polkavm.git?rev=360029e#360029ec34863591e043012e1a76c767aa507657" -dependencies = [ - "gimli 0.28.1", - "hashbrown 0.14.5", - "log", - "object 0.32.2", - "polkavm-common 0.10.0 (git+https://github.com/koute/polkavm.git?rev=360029e)", + "polkavm-common 0.10.0", "regalloc2 0.9.3", "rustc-demangle", ] @@ -6765,11 +6761,6 @@ version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "26e45fa59c7e1bb12ef5289080601e9ec9b31435f6e32800a5c90c132453d126" -[[package]] -name = "polkavm-linux-raw" -version = "0.10.0" -source = "git+https://github.com/koute/polkavm.git?rev=360029e#360029ec34863591e043012e1a76c767aa507657" - [[package]] name = "polyval" version = "0.6.2" @@ -7108,12 +7099,12 @@ checksum = "7a66a03ae7c801facd77a29370b4faec201768915ac14a721ba36f20bc9c209b" name = "revive-benchmarks" version = "0.1.0" dependencies = [ - "alloy-primitives 0.6.4", + "alloy-primitives 0.8.0", "criterion", "hex", - "polkavm 0.10.0 (git+https://github.com/koute/polkavm.git?rev=360029e)", "revive-differential", "revive-integration", + "revive-runner", ] [[package]] @@ -7134,25 +7125,30 @@ dependencies = [ name = "revive-differential" version = "0.1.0" dependencies = [ - "alloy-primitives 0.6.4", - "evm-interpreter", - "primitive-types", + "alloy-genesis", + "alloy-primitives 0.8.0", + "alloy-serde", + "hex", + "serde", + "serde_json", + "tempfile", ] [[package]] name = "revive-integration" version = "0.1.0" dependencies = [ - "alloy-primitives 0.6.4", - "alloy-sol-types 0.6.4", + "alloy-primitives 0.8.0", + "alloy-sol-types 0.8.0", "env_logger", "hex", "log", - "polkavm 0.10.0 (git+https://github.com/koute/polkavm.git?rev=360029e)", + "polkavm 0.10.0", "rayon", "revive-common", "revive-differential", "revive-llvm-context", + "revive-runner", "revive-solidity", "serde", "serde_json", @@ -7167,8 +7163,8 @@ dependencies = [ "inkwell", "libc", "lld-sys", - "polkavm-common 0.10.0 (git+https://github.com/koute/polkavm.git?rev=360029e)", - "polkavm-linker 0.10.0 (git+https://github.com/koute/polkavm.git?rev=360029e)", + "polkavm-common 0.10.0", + "polkavm-linker 0.10.0", "revive-builtins", "tempfile", ] @@ -7184,13 +7180,13 @@ dependencies = [ "md5", "num", "once_cell", - "pallet-contracts-pvm-llapi", - "polkavm-common 0.10.0 (git+https://github.com/koute/polkavm.git?rev=360029e)", + "polkavm-common 0.10.0", "polkavm-disassembler", "regex", "revive-builtins", "revive-common", "revive-linker", + "revive-runtime-api", "revive-stdlib", "semver 1.0.23", "serde", @@ -7202,14 +7198,25 @@ dependencies = [ name = "revive-runner" version = "0.1.0" dependencies = [ + "alloy-primitives 0.8.0", + "hex", "parity-scale-codec", "polkadot-sdk", + "revive-differential", "revive-solidity", "scale-info", "serde", "serde_json", ] +[[package]] +name = "revive-runtime-api" +version = "0.1.0" +dependencies = [ + "anyhow", + "inkwell", +] + [[package]] name = "revive-solidity" version = "0.1.0" @@ -7284,7 +7291,7 @@ dependencies = [ [[package]] name = "rococo-runtime-constants" version = "7.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "frame-support", "polkadot-primitives", @@ -7453,29 +7460,18 @@ dependencies = [ [[package]] name = "sc-allocator" version = "23.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "log", "sp-core", - "sp-wasm-interface 20.0.0 (git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da)", + "sp-wasm-interface 20.0.0 (git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591)", "thiserror", ] -[[package]] -name = "sc-chain-spec-derive" -version = "11.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" -dependencies = [ - "proc-macro-crate", - "proc-macro2", - "quote", - "syn 2.0.76", -] - [[package]] name = "sc-executor" version = "0.32.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "parity-scale-codec", "parking_lot", @@ -7485,25 +7481,25 @@ dependencies = [ "schnellru", "sp-api", "sp-core", - "sp-externalities 0.25.0 (git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da)", + "sp-externalities 0.25.0 (git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591)", "sp-io", "sp-panic-handler", - "sp-runtime-interface 24.0.0 (git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da)", + "sp-runtime-interface 24.0.0 (git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591)", "sp-trie", "sp-version", - "sp-wasm-interface 20.0.0 (git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da)", + "sp-wasm-interface 20.0.0 (git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591)", "tracing", ] [[package]] name = "sc-executor-common" version = "0.29.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "polkavm 0.9.3", "sc-allocator", "sp-maybe-compressed-blob", - "sp-wasm-interface 20.0.0 (git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da)", + "sp-wasm-interface 20.0.0 (git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591)", "thiserror", "wasm-instrument", ] @@ -7511,18 +7507,18 @@ dependencies = [ [[package]] name = "sc-executor-polkavm" version = "0.29.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "log", "polkavm 0.9.3", "sc-executor-common", - "sp-wasm-interface 20.0.0 (git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da)", + "sp-wasm-interface 20.0.0 (git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591)", ] [[package]] name = "sc-executor-wasmtime" version = "0.29.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "anyhow", "cfg-if", @@ -7532,22 +7528,11 @@ dependencies = [ "rustix 0.36.17", "sc-allocator", "sc-executor-common", - "sp-runtime-interface 24.0.0 (git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da)", - "sp-wasm-interface 20.0.0 (git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da)", + "sp-runtime-interface 24.0.0 (git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591)", + "sp-wasm-interface 20.0.0 (git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591)", "wasmtime", ] -[[package]] -name = "sc-tracing-proc-macro" -version = "11.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" -dependencies = [ - "proc-macro-crate", - "proc-macro2", - "quote", - "syn 2.0.76", -] - [[package]] name = "scale-info" version = "2.11.3" @@ -7905,7 +7890,7 @@ checksum = "826167069c09b99d56f31e9ae5c99049e932a98c9dc2dac47645b08dbbf76ba7" [[package]] name = "slot-range-helper" version = "7.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "enumn", "parity-scale-codec", @@ -7932,7 +7917,7 @@ dependencies = [ [[package]] name = "snowbridge-beacon-primitives" version = "0.2.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "byte-slice-cast", "frame-support", @@ -7946,7 +7931,7 @@ dependencies = [ "sp-core", "sp-io", "sp-runtime", - "sp-std 14.0.0 (git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da)", + "sp-std 14.0.0 (git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591)", "ssz_rs", "ssz_rs_derive", ] @@ -7954,7 +7939,7 @@ dependencies = [ [[package]] name = "snowbridge-core" version = "0.2.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "ethabi-decode", "frame-support", @@ -7969,7 +7954,7 @@ dependencies = [ "sp-core", "sp-io", "sp-runtime", - "sp-std 14.0.0 (git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da)", + "sp-std 14.0.0 (git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591)", "staging-xcm", "staging-xcm-builder", ] @@ -7977,7 +7962,7 @@ dependencies = [ [[package]] name = "snowbridge-ethereum" version = "0.3.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "ethabi-decode", "ethbloom", @@ -7991,7 +7976,7 @@ dependencies = [ "serde-big-array", "sp-io", "sp-runtime", - "sp-std 14.0.0 (git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da)", + "sp-std 14.0.0 (git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591)", ] [[package]] @@ -8012,7 +7997,7 @@ dependencies = [ [[package]] name = "snowbridge-outbound-queue-merkle-tree" version = "0.3.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "parity-scale-codec", "scale-info", @@ -8023,20 +8008,20 @@ dependencies = [ [[package]] name = "snowbridge-outbound-queue-runtime-api" version = "0.2.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "frame-support", "parity-scale-codec", "snowbridge-core", "snowbridge-outbound-queue-merkle-tree", "sp-api", - "sp-std 14.0.0 (git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da)", + "sp-std 14.0.0 (git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591)", ] [[package]] name = "snowbridge-pallet-ethereum-client" version = "0.2.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "frame-benchmarking", "frame-support", @@ -8053,26 +8038,26 @@ dependencies = [ "sp-core", "sp-io", "sp-runtime", - "sp-std 14.0.0 (git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da)", + "sp-std 14.0.0 (git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591)", "static_assertions", ] [[package]] name = "snowbridge-pallet-ethereum-client-fixtures" version = "0.9.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "hex-literal", "snowbridge-beacon-primitives", "snowbridge-core", "sp-core", - "sp-std 14.0.0 (git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da)", + "sp-std 14.0.0 (git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591)", ] [[package]] name = "snowbridge-pallet-inbound-queue" version = "0.2.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "alloy-primitives 0.4.2", "alloy-sol-types 0.4.2", @@ -8091,7 +8076,7 @@ dependencies = [ "sp-core", "sp-io", "sp-runtime", - "sp-std 14.0.0 (git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da)", + "sp-std 14.0.0 (git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591)", "staging-xcm", "staging-xcm-executor", ] @@ -8099,19 +8084,19 @@ dependencies = [ [[package]] name = "snowbridge-pallet-inbound-queue-fixtures" version = "0.10.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "hex-literal", "snowbridge-beacon-primitives", "snowbridge-core", "sp-core", - "sp-std 14.0.0 (git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da)", + "sp-std 14.0.0 (git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591)", ] [[package]] name = "snowbridge-pallet-outbound-queue" version = "0.2.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "bridge-hub-common", "ethabi-decode", @@ -8127,13 +8112,13 @@ dependencies = [ "sp-core", "sp-io", "sp-runtime", - "sp-std 14.0.0 (git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da)", + "sp-std 14.0.0 (git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591)", ] [[package]] name = "snowbridge-pallet-system" version = "0.2.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "frame-benchmarking", "frame-support", @@ -8145,7 +8130,7 @@ dependencies = [ "sp-core", "sp-io", "sp-runtime", - "sp-std 14.0.0 (git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da)", + "sp-std 14.0.0 (git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591)", "staging-xcm", "staging-xcm-executor", ] @@ -8153,7 +8138,7 @@ dependencies = [ [[package]] name = "snowbridge-router-primitives" version = "0.9.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "frame-support", "hex-literal", @@ -8164,7 +8149,7 @@ dependencies = [ "sp-core", "sp-io", "sp-runtime", - "sp-std 14.0.0 (git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da)", + "sp-std 14.0.0 (git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591)", "staging-xcm", "staging-xcm-executor", ] @@ -8172,14 +8157,14 @@ dependencies = [ [[package]] name = "snowbridge-runtime-common" version = "0.2.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "frame-support", "log", "parity-scale-codec", "snowbridge-core", "sp-arithmetic", - "sp-std 14.0.0 (git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da)", + "sp-std 14.0.0 (git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591)", "staging-xcm", "staging-xcm-builder", "staging-xcm-executor", @@ -8188,7 +8173,7 @@ dependencies = [ [[package]] name = "snowbridge-runtime-test-common" version = "0.2.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "cumulus-pallet-parachain-system", "frame-support", @@ -8219,19 +8204,19 @@ dependencies = [ [[package]] name = "snowbridge-system-runtime-api" version = "0.2.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "parity-scale-codec", "snowbridge-core", "sp-api", - "sp-std 14.0.0 (git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da)", + "sp-std 14.0.0 (git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591)", "staging-xcm", ] [[package]] name = "sp-api" version = "26.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "docify", "hash-db", @@ -8240,10 +8225,10 @@ dependencies = [ "scale-info", "sp-api-proc-macro", "sp-core", - "sp-externalities 0.25.0 (git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da)", + "sp-externalities 0.25.0 (git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591)", "sp-metadata-ir", "sp-runtime", - "sp-runtime-interface 24.0.0 (git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da)", + "sp-runtime-interface 24.0.0 (git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591)", "sp-state-machine", "sp-trie", "sp-version", @@ -8253,7 +8238,7 @@ dependencies = [ [[package]] name = "sp-api-proc-macro" version = "15.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "Inflector", "blake2", @@ -8267,7 +8252,7 @@ dependencies = [ [[package]] name = "sp-application-crypto" version = "30.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "parity-scale-codec", "scale-info", @@ -8279,7 +8264,7 @@ dependencies = [ [[package]] name = "sp-arithmetic" version = "23.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "docify", "integer-sqrt", @@ -8311,7 +8296,7 @@ dependencies = [ [[package]] name = "sp-authority-discovery" version = "26.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "parity-scale-codec", "scale-info", @@ -8323,7 +8308,7 @@ dependencies = [ [[package]] name = "sp-block-builder" version = "26.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "sp-api", "sp-inherents", @@ -8333,7 +8318,7 @@ dependencies = [ [[package]] name = "sp-consensus-aura" version = "0.32.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "async-trait", "parity-scale-codec", @@ -8349,7 +8334,7 @@ dependencies = [ [[package]] name = "sp-consensus-babe" version = "0.32.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "async-trait", "parity-scale-codec", @@ -8367,7 +8352,7 @@ dependencies = [ [[package]] name = "sp-consensus-beefy" version = "13.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "lazy_static", "parity-scale-codec", @@ -8388,7 +8373,7 @@ dependencies = [ [[package]] name = "sp-consensus-grandpa" version = "13.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "finality-grandpa", "log", @@ -8405,7 +8390,7 @@ dependencies = [ [[package]] name = "sp-consensus-pow" version = "0.32.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "parity-scale-codec", "sp-api", @@ -8416,7 +8401,7 @@ dependencies = [ [[package]] name = "sp-consensus-slots" version = "0.32.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "parity-scale-codec", "scale-info", @@ -8427,7 +8412,7 @@ dependencies = [ [[package]] name = "sp-core" version = "28.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "array-bytes", "bandersnatch_vrfs", @@ -8458,11 +8443,11 @@ dependencies = [ "secrecy", "serde", "sp-crypto-hashing", - "sp-debug-derive 14.0.0 (git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da)", - "sp-externalities 0.25.0 (git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da)", - "sp-runtime-interface 24.0.0 (git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da)", - "sp-std 14.0.0 (git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da)", - "sp-storage 19.0.0 (git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da)", + "sp-debug-derive 14.0.0 (git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591)", + "sp-externalities 0.25.0 (git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591)", + "sp-runtime-interface 24.0.0 (git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591)", + "sp-std 14.0.0 (git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591)", + "sp-storage 19.0.0 (git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591)", "ss58-registry", "substrate-bip39", "thiserror", @@ -8474,7 +8459,7 @@ dependencies = [ [[package]] name = "sp-core-hashing" version = "15.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "sp-crypto-hashing", ] @@ -8482,7 +8467,7 @@ dependencies = [ [[package]] name = "sp-crypto-ec-utils" version = "0.10.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "ark-bls12-377", "ark-bls12-377-ext", @@ -8496,7 +8481,7 @@ dependencies = [ "ark-ed-on-bls12-381-bandersnatch", "ark-ed-on-bls12-381-bandersnatch-ext", "ark-scale", - "sp-runtime-interface 24.0.0 (git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da)", + "sp-runtime-interface 24.0.0 (git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591)", ] [[package]] @@ -8522,7 +8507,7 @@ dependencies = [ [[package]] name = "sp-crypto-hashing" version = "0.1.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "blake2b_simd", "byteorder", @@ -8535,7 +8520,7 @@ dependencies = [ [[package]] name = "sp-crypto-hashing-proc-macro" version = "0.1.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "quote", "sp-crypto-hashing", @@ -8545,7 +8530,7 @@ dependencies = [ [[package]] name = "sp-debug-derive" version = "14.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "proc-macro2", "quote", @@ -8565,11 +8550,11 @@ dependencies = [ [[package]] name = "sp-externalities" version = "0.25.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "environmental", "parity-scale-codec", - "sp-storage 19.0.0 (git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da)", + "sp-storage 19.0.0 (git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591)", ] [[package]] @@ -8585,7 +8570,7 @@ dependencies = [ [[package]] name = "sp-genesis-builder" version = "0.8.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "parity-scale-codec", "scale-info", @@ -8597,7 +8582,7 @@ dependencies = [ [[package]] name = "sp-inherents" version = "26.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "async-trait", "impl-trait-for-tuples", @@ -8610,7 +8595,7 @@ dependencies = [ [[package]] name = "sp-io" version = "30.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "bytes", "docify", @@ -8623,11 +8608,11 @@ dependencies = [ "secp256k1", "sp-core", "sp-crypto-hashing", - "sp-externalities 0.25.0 (git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da)", + "sp-externalities 0.25.0 (git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591)", "sp-keystore", - "sp-runtime-interface 24.0.0 (git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da)", + "sp-runtime-interface 24.0.0 (git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591)", "sp-state-machine", - "sp-tracing 16.0.0 (git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da)", + "sp-tracing 16.0.0 (git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591)", "sp-trie", "tracing", "tracing-core", @@ -8636,7 +8621,7 @@ dependencies = [ [[package]] name = "sp-keyring" version = "31.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "sp-core", "sp-runtime", @@ -8646,18 +8631,18 @@ dependencies = [ [[package]] name = "sp-keystore" version = "0.34.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "parity-scale-codec", "parking_lot", "sp-core", - "sp-externalities 0.25.0 (git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da)", + "sp-externalities 0.25.0 (git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591)", ] [[package]] name = "sp-maybe-compressed-blob" version = "11.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "thiserror", "zstd 0.12.4", @@ -8666,7 +8651,7 @@ dependencies = [ [[package]] name = "sp-metadata-ir" version = "0.6.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "frame-metadata", "parity-scale-codec", @@ -8676,7 +8661,7 @@ dependencies = [ [[package]] name = "sp-mixnet" version = "0.4.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "parity-scale-codec", "scale-info", @@ -8687,7 +8672,7 @@ dependencies = [ [[package]] name = "sp-mmr-primitives" version = "26.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "log", "parity-scale-codec", @@ -8696,7 +8681,7 @@ dependencies = [ "serde", "sp-api", "sp-core", - "sp-debug-derive 14.0.0 (git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da)", + "sp-debug-derive 14.0.0 (git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591)", "sp-runtime", "thiserror", ] @@ -8704,7 +8689,7 @@ dependencies = [ [[package]] name = "sp-npos-elections" version = "26.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "parity-scale-codec", "scale-info", @@ -8717,7 +8702,7 @@ dependencies = [ [[package]] name = "sp-offchain" version = "26.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "sp-api", "sp-core", @@ -8727,7 +8712,7 @@ dependencies = [ [[package]] name = "sp-panic-handler" version = "13.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "backtrace", "lazy_static", @@ -8737,7 +8722,7 @@ dependencies = [ [[package]] name = "sp-runtime" version = "31.0.1" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "docify", "either", @@ -8755,7 +8740,7 @@ dependencies = [ "sp-arithmetic", "sp-core", "sp-io", - "sp-std 14.0.0 (git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da)", + "sp-std 14.0.0 (git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591)", "sp-weights", "tracing", ] @@ -8763,19 +8748,19 @@ dependencies = [ [[package]] name = "sp-runtime-interface" version = "24.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "bytes", "impl-trait-for-tuples", "parity-scale-codec", "polkavm-derive 0.9.1", "primitive-types", - "sp-externalities 0.25.0 (git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da)", - "sp-runtime-interface-proc-macro 17.0.0 (git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da)", - "sp-std 14.0.0 (git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da)", - "sp-storage 19.0.0 (git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da)", - "sp-tracing 16.0.0 (git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da)", - "sp-wasm-interface 20.0.0 (git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da)", + "sp-externalities 0.25.0 (git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591)", + "sp-runtime-interface-proc-macro 17.0.0 (git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591)", + "sp-std 14.0.0 (git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591)", + "sp-storage 19.0.0 (git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591)", + "sp-tracing 16.0.0 (git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591)", + "sp-wasm-interface 20.0.0 (git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591)", "static_assertions", ] @@ -8801,7 +8786,7 @@ dependencies = [ [[package]] name = "sp-runtime-interface-proc-macro" version = "17.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "Inflector", "expander", @@ -8827,7 +8812,7 @@ dependencies = [ [[package]] name = "sp-session" version = "27.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "parity-scale-codec", "scale-info", @@ -8841,7 +8826,7 @@ dependencies = [ [[package]] name = "sp-staking" version = "26.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "impl-trait-for-tuples", "parity-scale-codec", @@ -8854,7 +8839,7 @@ dependencies = [ [[package]] name = "sp-state-machine" version = "0.35.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "hash-db", "log", @@ -8863,7 +8848,7 @@ dependencies = [ "rand", "smallvec", "sp-core", - "sp-externalities 0.25.0 (git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da)", + "sp-externalities 0.25.0 (git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591)", "sp-panic-handler", "sp-trie", "thiserror", @@ -8874,7 +8859,7 @@ dependencies = [ [[package]] name = "sp-statement-store" version = "10.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "aes-gcm", "curve25519-dalek", @@ -8888,9 +8873,9 @@ dependencies = [ "sp-application-crypto", "sp-core", "sp-crypto-hashing", - "sp-externalities 0.25.0 (git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da)", + "sp-externalities 0.25.0 (git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591)", "sp-runtime", - "sp-runtime-interface 24.0.0 (git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da)", + "sp-runtime-interface 24.0.0 (git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591)", "thiserror", "x25519-dalek", ] @@ -8898,7 +8883,7 @@ dependencies = [ [[package]] name = "sp-std" version = "14.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" [[package]] name = "sp-std" @@ -8908,13 +8893,13 @@ source = "git+https://github.com/paritytech/polkadot-sdk#b3c2a25b73bb4854f262040 [[package]] name = "sp-storage" version = "19.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "impl-serde", "parity-scale-codec", "ref-cast", "serde", - "sp-debug-derive 14.0.0 (git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da)", + "sp-debug-derive 14.0.0 (git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591)", ] [[package]] @@ -8932,7 +8917,7 @@ dependencies = [ [[package]] name = "sp-timestamp" version = "26.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "async-trait", "parity-scale-codec", @@ -8944,7 +8929,7 @@ dependencies = [ [[package]] name = "sp-tracing" version = "16.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "parity-scale-codec", "tracing", @@ -8966,7 +8951,7 @@ dependencies = [ [[package]] name = "sp-transaction-pool" version = "26.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "sp-api", "sp-runtime", @@ -8975,7 +8960,7 @@ dependencies = [ [[package]] name = "sp-transaction-storage-proof" version = "26.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "async-trait", "parity-scale-codec", @@ -8989,7 +8974,7 @@ dependencies = [ [[package]] name = "sp-trie" version = "29.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "ahash 0.8.11", "hash-db", @@ -9002,7 +8987,7 @@ dependencies = [ "scale-info", "schnellru", "sp-core", - "sp-externalities 0.25.0 (git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da)", + "sp-externalities 0.25.0 (git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591)", "thiserror", "tracing", "trie-db", @@ -9012,7 +8997,7 @@ dependencies = [ [[package]] name = "sp-version" version = "29.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "impl-serde", "parity-scale-codec", @@ -9021,7 +9006,7 @@ dependencies = [ "serde", "sp-crypto-hashing-proc-macro", "sp-runtime", - "sp-std 14.0.0 (git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da)", + "sp-std 14.0.0 (git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591)", "sp-version-proc-macro", "thiserror", ] @@ -9029,7 +9014,7 @@ dependencies = [ [[package]] name = "sp-version-proc-macro" version = "13.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "parity-scale-codec", "proc-macro2", @@ -9040,7 +9025,7 @@ dependencies = [ [[package]] name = "sp-wasm-interface" version = "20.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "anyhow", "impl-trait-for-tuples", @@ -9062,7 +9047,7 @@ dependencies = [ [[package]] name = "sp-weights" version = "27.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "bounded-collections", "parity-scale-codec", @@ -9070,7 +9055,7 @@ dependencies = [ "serde", "smallvec", "sp-arithmetic", - "sp-debug-derive 14.0.0 (git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da)", + "sp-debug-derive 14.0.0 (git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591)", ] [[package]] @@ -9149,7 +9134,7 @@ dependencies = [ [[package]] name = "staging-parachain-info" version = "0.7.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "cumulus-primitives-core", "frame-support", @@ -9162,7 +9147,7 @@ dependencies = [ [[package]] name = "staging-xcm" version = "7.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "array-bytes", "bounded-collections", @@ -9181,7 +9166,7 @@ dependencies = [ [[package]] name = "staging-xcm-builder" version = "7.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "frame-support", "frame-system", @@ -9203,7 +9188,7 @@ dependencies = [ [[package]] name = "staging-xcm-executor" version = "7.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "environmental", "frame-benchmarking", @@ -9287,7 +9272,7 @@ dependencies = [ [[package]] name = "substrate-bip39" version = "0.4.7" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "hmac 0.12.1", "pbkdf2", @@ -9299,7 +9284,7 @@ dependencies = [ [[package]] name = "substrate-wasm-builder" version = "17.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "build-helper", "cargo_metadata", @@ -9358,9 +9343,9 @@ dependencies = [ [[package]] name = "syn-solidity" -version = "0.6.4" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb3d0961cd53c23ea94eeec56ba940f636f6394788976e9f16ca5ee0aca7464a" +checksum = "284c41c2919303438fcf8dede4036fd1e82d4fc0fbb2b279bd2a1442c909ca92" dependencies = [ "paste", "proc-macro2", @@ -9417,7 +9402,7 @@ dependencies = [ [[package]] name = "testnet-parachains-constants" version = "1.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "cumulus-primitives-core", "frame-support", @@ -9611,18 +9596,6 @@ dependencies = [ "valuable", ] -[[package]] -name = "tracing-gum-proc-macro" -version = "5.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" -dependencies = [ - "expander", - "proc-macro-crate", - "proc-macro2", - "quote", - "syn 2.0.76", -] - [[package]] name = "tracing-log" version = "0.2.0" @@ -10220,7 +10193,7 @@ dependencies = [ [[package]] name = "westend-runtime-constants" version = "7.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "frame-support", "polkadot-primitives", @@ -10586,7 +10559,7 @@ dependencies = [ [[package]] name = "xcm-procedural" version = "7.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "Inflector", "proc-macro2", @@ -10597,7 +10570,7 @@ dependencies = [ [[package]] name = "xcm-runtime-apis" version = "0.1.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "frame-support", "parity-scale-codec", @@ -10611,7 +10584,7 @@ dependencies = [ [[package]] name = "xcm-simulator" version = "7.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da#559fa1db0594a81d5dbf343613ba2f3fc16708da" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591#1c4141abeb4c581e503f07af2a3522e6918db591" dependencies = [ "frame-support", "frame-system", @@ -10624,7 +10597,7 @@ dependencies = [ "scale-info", "sp-io", "sp-runtime", - "sp-std 14.0.0 (git+https://github.com/paritytech/polkadot-sdk?rev=559fa1db0594a81d5dbf343613ba2f3fc16708da)", + "sp-std 14.0.0 (git+https://github.com/paritytech/polkadot-sdk?rev=1c4141abeb4c581e503f07af2a3522e6918db591)", "staging-xcm", "staging-xcm-builder", "staging-xcm-executor", diff --git a/Cargo.toml b/Cargo.toml index 0c88583..45decce 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -21,7 +21,7 @@ revive-integration = { version = "0.1.0", path = "crates/integration" } revive-linker = { version = "0.1.0", path = "crates/linker" } lld-sys = { version = "0.1.0", path = "crates/lld-sys" } revive-llvm-context = { version = "0.1.0", path = "crates/llvm-context" } -pallet-contracts-pvm-llapi = { version = "0.1.0", path = "crates/pallet-contracts-pvm-llapi" } +revive-runtime-api = { version = "0.1.0", path = "crates/runtime-api" } revive-runner = { version = "0.1.0", path = "crates/runner" } revive-solidity = { version = "0.1.0", path = "crates/solidity" } revive-stdlib = { version = "0.1.0", path = "crates/stdlib" } @@ -50,30 +50,31 @@ path-slash = "0.2" rayon = "1.8" clap = { version = "4", default-features = false, features = ["derive"] } rand = "0.8" -polkavm-common = { git = "https://github.com/koute/polkavm.git", rev = "360029e" } -polkavm-linker = { git = "https://github.com/koute/polkavm.git", rev = "360029e" } -polkavm-disassembler = { git = "https://github.com/koute/polkavm.git", rev = "360029e" } -polkavm = { git = "https://github.com/koute/polkavm.git", rev = "360029e" } -alloy-primitives = "0.6" -alloy-sol-types = "0.6" +polkavm-common = "0.10" +polkavm-linker = "0.10" +polkavm-disassembler = "0.10" +polkavm = "0.10" +alloy-primitives = { version = "0.8", features = ["serde"] } +alloy-sol-types = "0.8" +alloy-genesis = "0.3" +alloy-serde = "0.3" env_logger = { version = "0.10.0", default-features = false } serde_stacker = "0.1" criterion = { version = "0.5", features = ["html_reports"] } log = { version = "0.4" } + +# polkadot-sdk and friends codec = { version = "3.6.12", default-features = false, package = "parity-scale-codec" } scale-info = { version = "2.11.1", default-features = false } -polkadot-sdk = { git = "https://github.com/paritytech/polkadot-sdk", rev = "559fa1db0594a81d5dbf343613ba2f3fc16708da" } - -# Benchmarking against EVM -primitive-types = { version = "0.12", features = ["codec"] } -evm-interpreter = { git = "https://github.com/xermicus/evm.git", branch = "separate-compilation" } +polkadot-sdk = { git = "https://github.com/paritytech/polkadot-sdk", rev = "1c4141abeb4c581e503f07af2a3522e6918db591" } +# llvm [workspace.dependencies.inkwell] version = "0.5" default-features = false features = ["serde", "llvm18-0", "no-libffi-linking", "target-riscv"] -[profile.benchmark] +[profile.bench] inherits = "release" lto = true codegen-units = 1 diff --git a/Makefile b/Makefile index 530913b..101e121 100644 --- a/Makefile +++ b/Makefile @@ -26,23 +26,16 @@ test-workspace: install test-cli: install npm run test:cli -bench-prepare: install-bin - cargo criterion --bench prepare --features bench-evm,bench-pvm --message-format=json \ - | criterion-table > crates/benchmarks/PREPARE.md +bench-pvm: install-bin + cargo criterion --bench execute --features bench-pvm-interpreter --message-format=json \ + | criterion-table > crates/benchmarks/PVM.md -bench-execute: install-bin - cargo criterion --bench execute --features bench-evm,bench-pvm --message-format=json \ - | criterion-table > crates/benchmarks/EXECUTE.md - -bench-extensive: install-bin - cargo criterion --all --all-features --message-format=json \ - | criterion-table > crates/benchmarks/BENCHMARKS.md - -bench-quick: install-bin - cargo criterion --all --features bench-evm +bench-evm: install-bin + cargo criterion --bench execute --features bench-evm --message-format=json \ + | criterion-table > crates/benchmarks/EVM.md bench: install-bin - cargo criterion --all --features bench-evm,bench-pvm --message-format=json \ + cargo criterion --all --all-features --message-format=json \ | criterion-table > crates/benchmarks/BENCHMARKS.md clippy: diff --git a/README.md b/README.md index 7e70fd6..95c1fef 100644 --- a/README.md +++ b/README.md @@ -35,4 +35,4 @@ Please consult the [Makefile](Makefile) targets to learn how to run tests and be Ensure that your branch passes `make test` locally when submitting a pull request. ## Design overview -`revive` uses [solc](https://github.com/ethereum/solidity/), the Ethereum Solidity compiler, as the [Solidity frontend](crates/solidity/src/lib.rs) to process smart contracts written in Solidity. The YUL IR code (or legacy EVM assembly as a fallback for older `solc` versions) emitted by `solc` is then translated to LLVM IR, targetting a runtime similar to [Polkadots `contracts` pallet](https://docs.rs/pallet-contracts/latest/pallet_contracts/api_doc/trait.Current.html). +`revive` uses [solc](https://github.com/ethereum/solidity/), the Ethereum Solidity compiler, as the [Solidity frontend](crates/solidity/src/lib.rs) to process smart contracts written in Solidity. The YUL IR code (or legacy EVM assembly as a fallback for older `solc` versions) emitted by `solc` is then translated to LLVM IR, targetting [Polkadots `revive` pallet](https://docs.rs/pallet-revive/latest/pallet_revive/trait.SyscallDoc.html). diff --git a/crates/benchmarks/BENCHMARKS.md b/crates/benchmarks/BENCHMARKS.md index e69de29..568a254 100644 --- a/crates/benchmarks/BENCHMARKS.md +++ b/crates/benchmarks/BENCHMARKS.md @@ -0,0 +1,73 @@ +# Benchmarks + +## Table of Contents + +- [Benchmark Results](#benchmark-results) + - [Baseline](#baseline) + - [OddPorduct](#oddporduct) + - [TriangleNumber](#trianglenumber) + - [FibonacciRecursive](#fibonaccirecursive) + - [FibonacciIterative](#fibonacciiterative) + - [FibonacciBinet](#fibonaccibinet) + - [SHA1](#sha1) + +## Benchmark Results + +### Baseline + +| | `EVM` | `PVMInterpreter` | +|:--------|:------------------------|:-------------------------------- | +| **`0`** | `5.97 us` (✅ **1.00x**) | `27.04 us` (❌ *4.53x slower*) | + +### OddPorduct + +| | `EVM` | `PVMInterpreter` | +|:-------------|:--------------------------|:-------------------------------- | +| **`10000`** | `4.26 ms` (✅ **1.00x**) | `2.88 ms` (✅ **1.48x faster**) | +| **`100000`** | `42.37 ms` (✅ **1.00x**) | `28.35 ms` (✅ **1.49x faster**) | +| **`300000`** | `127.88 ms` (✅ **1.00x**) | `88.43 ms` (✅ **1.45x faster**) | + +### TriangleNumber + +| | `EVM` | `PVMInterpreter` | +|:-------------|:--------------------------|:-------------------------------- | +| **`10000`** | `2.85 ms` (✅ **1.00x**) | `2.37 ms` (✅ **1.20x faster**) | +| **`100000`** | `27.85 ms` (✅ **1.00x**) | `23.01 ms` (✅ **1.21x faster**) | +| **`360000`** | `103.01 ms` (✅ **1.00x**) | `83.66 ms` (✅ **1.23x faster**) | + +### FibonacciRecursive + +| | `EVM` | `PVMInterpreter` | +|:---------|:--------------------------|:--------------------------------- | +| **`12`** | `195.19 us` (✅ **1.00x**) | `333.53 us` (❌ *1.71x slower*) | +| **`16`** | `1.22 ms` (✅ **1.00x**) | `1.97 ms` (❌ *1.62x slower*) | +| **`20`** | `8.14 ms` (✅ **1.00x**) | `13.20 ms` (❌ *1.62x slower*) | +| **`24`** | `55.09 ms` (✅ **1.00x**) | `88.56 ms` (❌ *1.61x slower*) | + +### FibonacciIterative + +| | `EVM` | `PVMInterpreter` | +|:----------|:-------------------------|:--------------------------------- | +| **`64`** | `33.39 us` (✅ **1.00x**) | `86.02 us` (❌ *2.58x slower*) | +| **`128`** | `52.91 us` (✅ **1.00x**) | `126.38 us` (❌ *2.39x slower*) | +| **`256`** | `82.33 us` (✅ **1.00x**) | `208.74 us` (❌ *2.54x slower*) | + +### FibonacciBinet + +| | `EVM` | `PVMInterpreter` | +|:----------|:-------------------------|:--------------------------------- | +| **`64`** | `32.29 us` (✅ **1.00x**) | `161.75 us` (❌ *5.01x slower*) | +| **`128`** | `36.02 us` (✅ **1.00x**) | `172.59 us` (❌ *4.79x slower*) | +| **`256`** | `41.21 us` (✅ **1.00x**) | `185.30 us` (❌ *4.50x slower*) | + +### SHA1 + +| | `EVM` | `PVMInterpreter` | +|:----------|:--------------------------|:--------------------------------- | +| **`1`** | `160.17 us` (✅ **1.00x**) | `403.46 us` (❌ *2.52x slower*) | +| **`64`** | `286.69 us` (✅ **1.00x**) | `479.79 us` (❌ *1.67x slower*) | +| **`512`** | `1.18 ms` (✅ **1.00x**) | `1.37 ms` (❌ *1.16x slower*) | + +--- +Made with [criterion-table](https://github.com/nu11ptr/criterion-table) + diff --git a/crates/benchmarks/Cargo.toml b/crates/benchmarks/Cargo.toml index bc08a8c..f10cf28 100644 --- a/crates/benchmarks/Cargo.toml +++ b/crates/benchmarks/Cargo.toml @@ -9,17 +9,16 @@ description = "revive compiler benchmarks" [features] default = ["bench-pvm-interpreter"] -bench-pvm-interpreter = [] -bench-pvm = [] +bench-pvm-interpreter = ["revive-runner"] bench-evm = ["revive-differential"] -bench-extensive = [] [dependencies] hex = { workspace = true } -polkavm = { workspace = true } +alloy-primitives = { workspace = true } + revive-integration = { workspace = true } revive-differential = { workspace = true, optional = true } -alloy-primitives = { workspace = true } +revive-runner = { workspace = true, optional = true } [dev-dependencies] criterion = { workspace = true } @@ -27,7 +26,3 @@ criterion = { workspace = true } [[bench]] name = "execute" harness = false - -[[bench]] -name = "prepare" -harness = false diff --git a/crates/benchmarks/benches/execute.rs b/crates/benchmarks/benches/execute.rs index 56af6ea..5bb0505 100644 --- a/crates/benchmarks/benches/execute.rs +++ b/crates/benchmarks/benches/execute.rs @@ -1,104 +1,42 @@ +#![cfg(any(feature = "bench-pvm-interpreter", feature = "bench-evm"))] + use alloy_primitives::U256; use criterion::{ - criterion_group, criterion_main, measurement::Measurement, BenchmarkGroup, BenchmarkId, - Criterion, + criterion_group, criterion_main, + measurement::{Measurement, WallTime}, + BenchmarkGroup, BenchmarkId, Criterion, }; use revive_integration::cases::Contract; -fn bench(mut group: BenchmarkGroup<'_, M>, parameters: &[P], labels: &[L], contract: I) -where +fn bench( + mut group: BenchmarkGroup<'_, WallTime>, + parameters: &[P], + labels: &[L], + contract: I, +) where P: Clone, L: std::fmt::Display, I: Fn(P) -> Contract, - M: Measurement, { assert_eq!(parameters.len(), labels.len()); + group.sample_size(10); + for (p, l) in parameters.iter().zip(labels.iter()) { + let contract = contract(p.clone()); + #[cfg(feature = "bench-evm")] - { - let contract = contract(p.clone()); - group.bench_with_input(BenchmarkId::new("EVM", l), p, move |b, _| { - b.iter(|| { - revive_differential::execute(revive_differential::prepare( - contract.evm_runtime.clone(), - contract.calldata.clone(), - )); - }); - }); - } + group.bench_with_input(BenchmarkId::new("EVM", l), p, |b, _| { + let code = &contract.evm_runtime; + let input = &contract.calldata; + b.iter_custom(|iters| revive_benchmarks::measure_evm(code, input, iters)); + }); - #[cfg(not(feature = "bench-extensive"))] - { - #[cfg(all(feature = "bench-pvm-interpreter", not(feature = "bench-extensive")))] - { - let contract = contract(p.clone()); - let (transaction, mut instance, export) = revive_benchmarks::prepare_pvm( - &contract.pvm_runtime, - contract.calldata, - polkavm::BackendKind::Interpreter, - ); - group.bench_with_input(BenchmarkId::new("PVMInterpreter", l), p, |b, _| { - b.iter(|| { - let _ = transaction.clone().call_on(&mut instance, export); - }); - }); - } - - #[cfg(all(feature = "bench-pvm", not(feature = "bench-extensive")))] - { - let contract = contract(p.clone()); - let (transaction, mut instance, export) = revive_benchmarks::prepare_pvm( - &contract.pvm_runtime, - contract.calldata, - polkavm::BackendKind::Compiler, - ); - group.bench_with_input(BenchmarkId::new("PVM", l), p, |b, _| { - b.iter(|| { - let _ = transaction.clone().call_on(&mut instance, export); - }); - }); - } - } - #[cfg(feature = "bench-extensive")] - { - use revive_benchmarks::instantiate_engine; - use revive_integration::mock_runtime::{instantiate_module, recompile_code, State}; - - #[cfg(feature = "bench-pvm-interpreter")] - { - let contract = contract(p.clone()); - let engine = instantiate_engine(polkavm::BackendKind::Interpreter); - let module = recompile_code(&contract.pvm_runtime, &engine); - let transaction = State::default() - .transaction() - .with_default_account(&contract.pvm_runtime) - .calldata(contract.calldata); - group.bench_with_input(BenchmarkId::new("PVMInterpreter", l), p, |b, _| { - b.iter(|| { - let (mut instance, export) = instantiate_module(&module, &engine); - let _ = transaction.clone().call_on(&mut instance, export); - }); - }); - } - - #[cfg(feature = "bench-pvm")] - { - let contract = contract(p.clone()); - let engine = instantiate_engine(polkavm::BackendKind::Compiler); - let module = recompile_code(&contract.pvm_runtime, &engine); - let transaction = State::default() - .transaction() - .with_default_account(&contract.pvm_runtime) - .calldata(contract.calldata); - group.bench_with_input(BenchmarkId::new("PVM", l), p, |b, _| { - b.iter(|| { - let (mut instance, export) = instantiate_module(&module, &engine); - let _ = transaction.clone().call_on(&mut instance, export); - }); - }); - } - } + #[cfg(feature = "bench-pvm-interpreter")] + group.bench_with_input(BenchmarkId::new("PVMInterpreter", l), p, |b, _| { + let specs = revive_benchmarks::create_specs(&contract); + b.iter_custom(|iters| revive_benchmarks::measure_pvm(&specs, iters)); + }); } group.finish(); @@ -108,14 +46,6 @@ fn group<'error, M>(c: &'error mut Criterion, group_name: &str) -> BenchmarkG where M: Measurement, { - #[cfg(feature = "bench-extensive")] - { - let mut group = c.benchmark_group(group_name); - group.sample_size(10); - group - } - - #[cfg(not(feature = "bench-extensive"))] return c.benchmark_group(group_name); } @@ -128,33 +58,21 @@ fn bench_baseline(c: &mut Criterion) { fn bench_odd_product(c: &mut Criterion) { let group = group(c, "OddPorduct"); - #[cfg(feature = "bench-extensive")] - let parameters = &[300000, 1200000, 12000000, 180000000, 720000000]; - #[cfg(not(feature = "bench-extensive"))] - let parameters = &[10_000, 100_000]; + let parameters = &[10_000, 100_000, 300000]; bench(group, parameters, parameters, Contract::odd_product); } fn bench_triangle_number(c: &mut Criterion) { let group = group(c, "TriangleNumber"); - #[cfg(feature = "bench-extensive")] - let parameters = &[360000, 1440000, 14400000, 216000000, 864000000]; - #[cfg(not(feature = "bench-extensive"))] - let parameters = &[10_000, 100_000]; + let parameters = &[10_000, 100_000, 360000]; bench(group, parameters, parameters, Contract::triangle_number); } fn bench_fibonacci_recurisve(c: &mut Criterion) { let group = group(c, "FibonacciRecursive"); - #[cfg(feature = "bench-extensive")] - let parameters = [24, 27, 31, 36, 39] - .iter() - .map(|p| U256::from(*p)) - .collect::>(); - #[cfg(not(feature = "bench-extensive"))] - let parameters = [12, 16, 20] + let parameters = [12, 16, 20, 24] .iter() .map(|p| U256::from(*p)) .collect::>(); @@ -164,12 +82,6 @@ fn bench_fibonacci_recurisve(c: &mut Criterion) { fn bench_fibonacci_iterative(c: &mut Criterion) { let group = group(c, "FibonacciIterative"); - #[cfg(feature = "bench-extensive")] - let parameters = [256, 162500, 650000, 6500000, 100000000, 400000000] - .iter() - .map(|p| U256::from(*p)) - .collect::>(); - #[cfg(not(feature = "bench-extensive"))] let parameters = [64, 128, 256] .iter() .map(|p| U256::from(*p)) @@ -193,7 +105,9 @@ fn bench_sha1(c: &mut Criterion) { let parameters = &[vec![0xff], vec![0xff; 64], vec![0xff; 512]]; let labels = parameters.iter().map(|p| p.len()).collect::>(); - bench(group, parameters, &labels, Contract::sha1); + bench(group, parameters, &labels, |input| { + Contract::sha1(input.into()) + }); } criterion_group!( diff --git a/crates/benchmarks/benches/prepare.rs b/crates/benchmarks/benches/prepare.rs deleted file mode 100644 index 4de4301..0000000 --- a/crates/benchmarks/benches/prepare.rs +++ /dev/null @@ -1,171 +0,0 @@ -use alloy_primitives::U256; -use criterion::{criterion_group, criterion_main, BenchmarkId, Criterion}; - -use revive_integration::cases::Contract; - -fn bench( - c: &mut Criterion, - group_name: &str, - #[cfg(feature = "bench-evm")] evm_runtime: Vec, - #[cfg(any(feature = "bench-pvm-interpreter", feature = "bench-pvm"))] pvm_runtime: Vec, -) { - let mut group = c.benchmark_group(group_name); - let code_size = 0; - - #[cfg(feature = "bench-evm")] - group.bench_with_input( - BenchmarkId::new("Evm", code_size), - &evm_runtime, - |b, code| b.iter(|| revive_differential::prepare(code.clone(), Vec::new())), - ); - - #[cfg(feature = "bench-pvm-interpreter")] - { - let engine = revive_benchmarks::instantiate_engine(polkavm::BackendKind::Interpreter); - group.bench_with_input( - BenchmarkId::new("PVMInterpreterCompile", code_size), - &(&pvm_runtime, engine), - |b, (code, engine)| { - b.iter(|| { - revive_integration::mock_runtime::recompile_code(code, engine); - }); - }, - ); - } - - #[cfg(feature = "bench-pvm-interpreter")] - { - let engine = revive_benchmarks::instantiate_engine(polkavm::BackendKind::Interpreter); - let module = revive_integration::mock_runtime::recompile_code(&pvm_runtime, &engine); - group.bench_with_input( - BenchmarkId::new("PVMInterpreterInstantiate", code_size), - &(module, engine), - |b, (module, engine)| { - b.iter(|| { - revive_integration::mock_runtime::instantiate_module(module, engine); - }); - }, - ); - } - - #[cfg(feature = "bench-pvm")] - { - let engine = revive_benchmarks::instantiate_engine(polkavm::BackendKind::Compiler); - group.bench_with_input( - BenchmarkId::new("PVMCompile", code_size), - &(&pvm_runtime, engine), - |b, (code, engine)| { - b.iter(|| { - revive_integration::mock_runtime::recompile_code(code, engine); - }); - }, - ); - } - - #[cfg(feature = "bench-pvm")] - { - let engine = revive_benchmarks::instantiate_engine(polkavm::BackendKind::Compiler); - let module = revive_integration::mock_runtime::recompile_code(&pvm_runtime, &engine); - group.bench_with_input( - BenchmarkId::new("PVMInstantiate", code_size), - &(module, engine), - |b, (module, engine)| { - b.iter(|| { - revive_integration::mock_runtime::instantiate_module(module, engine); - }); - }, - ); - } - - group.finish(); -} - -fn bench_baseline(c: &mut Criterion) { - bench( - c, - "PrepareBaseline", - #[cfg(feature = "bench-evm")] - Contract::baseline().evm_runtime, - #[cfg(any(feature = "bench-pvm-interpreter", feature = "bench-pvm"))] - Contract::baseline().pvm_runtime, - ); -} - -fn bench_odd_product(c: &mut Criterion) { - bench( - c, - "PrepareOddProduct", - #[cfg(feature = "bench-evm")] - Contract::odd_product(0).evm_runtime, - #[cfg(any(feature = "bench-pvm-interpreter", feature = "bench-pvm"))] - Contract::baseline().pvm_runtime, - ); -} - -fn bench_triangle_number(c: &mut Criterion) { - bench( - c, - "PrepareTriangleNumber", - #[cfg(feature = "bench-evm")] - Contract::triangle_number(0).evm_runtime, - #[cfg(any(feature = "bench-pvm-interpreter", feature = "bench-pvm"))] - Contract::triangle_number(0).pvm_runtime, - ); -} - -fn bench_fibonacci_recursive(c: &mut Criterion) { - bench( - c, - "PrepareFibonacciRecursive", - #[cfg(feature = "bench-evm")] - Contract::fib_recursive(U256::ZERO).evm_runtime, - #[cfg(any(feature = "bench-pvm-interpreter", feature = "bench-pvm"))] - Contract::fib_recursive(U256::ZERO).pvm_runtime, - ); -} - -fn bench_fibonacci_iterative(c: &mut Criterion) { - bench( - c, - "PrepareFibonacciIterative", - #[cfg(feature = "bench-evm")] - Contract::fib_iterative(U256::ZERO).evm_runtime, - #[cfg(any(feature = "bench-pvm-interpreter", feature = "bench-pvm"))] - Contract::fib_iterative(U256::ZERO).pvm_runtime, - ); -} - -fn bench_fibonacci_binet(c: &mut Criterion) { - bench( - c, - "PrepareFibonacciBinet", - #[cfg(feature = "bench-evm")] - Contract::fib_binet(U256::ZERO).evm_runtime, - #[cfg(any(feature = "bench-pvm-interpreter", feature = "bench-pvm"))] - Contract::fib_binet(U256::ZERO).pvm_runtime, - ); -} - -fn bench_sha1(c: &mut Criterion) { - bench( - c, - "PrepareSHA1", - #[cfg(feature = "bench-evm")] - Contract::sha1(Default::default()).evm_runtime, - #[cfg(any(feature = "bench-pvm-interpreter", feature = "bench-pvm"))] - Contract::sha1(Default::default()).pvm_runtime, - ); -} - -criterion_group!( - name = prepare; - config = Criterion::default(); - targets = bench_baseline, - bench_odd_product, - bench_triangle_number, - bench_fibonacci_recursive, - bench_fibonacci_iterative, - bench_fibonacci_binet, - bench_sha1 -); -criterion_main!(prepare); diff --git a/crates/benchmarks/src/lib.rs b/crates/benchmarks/src/lib.rs index 1880509..dc0a24a 100644 --- a/crates/benchmarks/src/lib.rs +++ b/crates/benchmarks/src/lib.rs @@ -1,28 +1,71 @@ -use polkavm::{BackendKind, Config, Engine, ExportIndex, Instance, SandboxKind}; -use revive_integration::mock_runtime::{self, TransactionBuilder}; -use revive_integration::mock_runtime::{State, Transaction}; - -pub fn prepare_pvm( - code: &[u8], - input: Vec, - backend: BackendKind, -) -> (TransactionBuilder, Instance, ExportIndex) { - let mut config = Config::new(); - config.set_backend(Some(backend)); - config.set_sandbox(Some(SandboxKind::Linux)); - - let (instance, export_index) = mock_runtime::prepare(code, Some(config)); - let transaction = State::default() - .transaction() - .with_default_account(code) - .calldata(input); - - (transaction, instance, export_index) +#[cfg(feature = "bench-pvm-interpreter")] +pub fn create_specs(contract: &revive_integration::cases::Contract) -> revive_runner::Specs { + use revive_runner::*; + use SpecsAction::*; + Specs { + differential: false, + actions: vec![ + Instantiate { + code: Code::Bytes(contract.pvm_runtime.to_vec()), + origin: TestAccountId::Alice, + data: Default::default(), + value: Default::default(), + gas_limit: Default::default(), + storage_deposit_limit: Default::default(), + salt: Default::default(), + }, + Call { + origin: TestAccountId::Alice, + dest: TestAccountId::Instantiated(0), + data: contract.calldata.to_vec(), + value: Default::default(), + gas_limit: Default::default(), + storage_deposit_limit: Default::default(), + }, + ], + ..Default::default() + } } -pub fn instantiate_engine(backend: BackendKind) -> Engine { - let mut config = Config::new(); - config.set_backend(Some(backend)); - config.set_sandbox(Some(SandboxKind::Linux)); - mock_runtime::setup(Some(config)) +#[cfg(feature = "bench-pvm-interpreter")] +pub fn measure_pvm(specs: &revive_runner::Specs, iters: u64) -> std::time::Duration { + use revive_runner::*; + let mut total_time = std::time::Duration::default(); + + for _ in 0..iters { + let results = specs.clone().run(); + + let CallResult::Exec { result, wall_time } = + results.get(1).expect("contract should have been called") + else { + panic!("expected a execution result"); + }; + let ret = result.result.as_ref().unwrap(); + assert!(!ret.did_revert()); + + total_time += *wall_time; + } + + total_time +} + +#[cfg(feature = "bench-evm")] +pub fn measure_evm(code: &[u8], input: &[u8], iters: u64) -> std::time::Duration { + let mut total_time = std::time::Duration::default(); + + let code = hex::encode(code); + + for _ in 0..iters { + let log = revive_differential::Evm::default() + .code_blob(code.as_bytes().to_vec()) + .input(input.to_vec().into()) + .genesis_path("/tmp/genesis.json".into()) + .bench(true) + .run(); + assert!(log.output.run_success(), "evm run failed: {log:?}"); + + total_time += log.execution_time().unwrap(); + } + + total_time } diff --git a/crates/common/src/byte_length.rs b/crates/common/src/byte_length.rs index 7af12fd..c41f498 100644 --- a/crates/common/src/byte_length.rs +++ b/crates/common/src/byte_length.rs @@ -25,7 +25,7 @@ pub const BYTE_LENGTH_WORD: usize = 32; pub const BYTE_LENGTH_VALUE: usize = 32; /// Byte length of the runtime block number type. -pub const BYTE_LENGTH_BLOCK_NUMBER: usize = 8; +pub const BYTE_LENGTH_BLOCK_NUMBER: usize = 4; /// Byte length of the runtime block timestamp type. -pub const BYTE_LENGTH_BLOCK_TIMESTAMP: usize = 8; +pub const BYTE_LENGTH_BLOCK_TIMESTAMP: usize = 4; diff --git a/crates/differential/Cargo.toml b/crates/differential/Cargo.toml index 8647f90..d38c105 100644 --- a/crates/differential/Cargo.toml +++ b/crates/differential/Cargo.toml @@ -7,6 +7,10 @@ authors.workspace = true repository.workspace = true [dependencies] -evm-interpreter = { workspace = true } -primitive-types = { workspace = true } -alloy-primitives = { workspace = true } \ No newline at end of file +hex = { workspace = true } +tempfile = { workspace = true } +serde = { workspace = true } +serde_json = { workspace = true } +alloy-primitives = { workspace = true, features = ["serde"] } +alloy-genesis = { workspace = true } +alloy-serde = { workspace = true } \ No newline at end of file diff --git a/crates/differential/genesis.json b/crates/differential/genesis.json new file mode 100644 index 0000000..6d61c4e --- /dev/null +++ b/crates/differential/genesis.json @@ -0,0 +1,30 @@ +{ + "config": { + "chainId": 1, + "homesteadBlock": 0, + "eip150Block": 0, + "eip155Block": 0, + "eip158Block": 0, + "byzantiumBlock": 0, + "constantinopleBlock": 0, + "petersburgBlock": 0, + "istanbulBlock": 0, + "berlinBlock": 0, + "londonBlock": 0, + "arrowGlacierBlock": 0, + "grayGlacierBlock": 0, + "shanghaiTime": 0, + "cancunTime": 0, + "terminalTotalDifficulty": 0, + "terminalTotalDifficultyPassed": true + }, + "coinbase": "0x0000000000000000000000000000000000000000", + "difficulty": "0x20000", + "extraData": "", + "gasLimit": "0xffffffff", + "nonce": "0x0000000000000042", + "mixhash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "timestamp": "0x00", + "alloc": {} +} \ No newline at end of file diff --git a/crates/differential/src/go_duration.rs b/crates/differential/src/go_duration.rs new file mode 100644 index 0000000..f7c15d0 --- /dev/null +++ b/crates/differential/src/go_duration.rs @@ -0,0 +1,199 @@ +use std::time::Duration; + +/// Parse a go formatted duration. +/// +/// Sources: +/// - https://crates.io/crates/go-parse-duration (fixed an utf8 bug) +/// - https://github.com/golang/go/blob/master/src/time/format.go +pub fn parse_go_duration(value: &str) -> Result { + parse_duration(value).map(|ns| Duration::from_nanos(ns.unsigned_abs())) +} + +fn parse_duration(string: &str) -> Result { + // [-+]?([0-9]*(\.[0-9]*)?[a-z]+)+ + let mut s = string; + let mut d: i64 = 0; // duration to be returned + let mut neg = false; + + // Consume [-+]? + if !s.is_empty() { + let c = *s.as_bytes().first().unwrap(); + if c == b'-' || c == b'+' { + neg = c == b'-'; + s = &s[1..]; + } + } + // Special case: if all that is left is "0", this is zero. + if s == "0" { + return Ok(0); + } + if s.is_empty() { + return Err(format!("invalid duration: {string}")); + } + while !s.is_empty() { + // integers before, after decimal point + let mut v: i64; + let mut f: i64 = 0; + // value = v + f / scale + let mut scale: f64 = 1f64; + + // The next character must be [0-9.] + let c = *s.as_bytes().first().unwrap(); + if !(c == b'.' || c.is_ascii_digit()) { + return Err(format!("invalid duration: {string}")); + } + // Consume [0-9]* + let pl = s.len(); + match leading_int(s) { + Ok((_v, _s)) => { + v = _v; + s = _s; + } + Err(_) => { + return Err(format!("invalid duration: {string}")); + } + } + let pre = pl != s.len(); // whether we consume anything before a period + + // Consume (\.[0-9]*)? + let mut post = false; + if !s.is_empty() && *s.as_bytes().first().unwrap() == b'.' { + s = &s[1..]; + let pl = s.len(); + let (f_, scale_, s_) = leading_fraction(s); + { + f = f_; + scale = scale_; + s = s_; + } + post = pl != s.len(); + } + if !pre && !post { + // no digits (e.g. ".s" or "-.s") + return Err(format!("invalid duration: {string}")); + } + + // Consume unit. + let mut i = 0; + while i < s.len() { + let c = *s.as_bytes().get(i).unwrap(); + if c == b'.' || c.is_ascii_digit() { + break; + } + i += 1; + } + if i == 0 { + return Err(format!("missing unit in duration: {string}")); + } + let u = &s[..i]; + s = &s[i..]; + let unit = match u { + "ns" => 1i64, + "us" => 1000i64, + "µs" => 1000i64, // U+00B5 = micro symbol + "μs" => 1000i64, // U+03BC = Greek letter mu + "ms" => 1000000i64, + "s" => 1000000000i64, + "m" => 60000000000i64, + "h" => 3600000000000i64, + _ => { + return Err(format!("unknown unit {u} in duration {string}")); + } + }; + if v > (1 << (63 - 1)) / unit { + // overflow + return Err(format!("invalid duration {string}")); + } + v *= unit; + if f > 0 { + // f64 is needed to be nanosecond accurate for fractions of hours. + // v >= 0 && (f*unit/scale) <= 3.6e+12 (ns/h, h is the largest unit) + v += (f as f64 * (unit as f64 / scale)) as i64; + if v < 0 { + // overflow + return Err(format!("invalid duration {string}")); + } + } + d += v; + if d < 0 { + // overflow + return Err(format!("invalid duration {string}")); + } + } + if neg { + d = -d; + } + Ok(d) +} + +fn leading_int(s: &str) -> Result<(i64, &str), String> { + let mut x = 0; + let mut i = 0; + while i < s.len() { + let c = s.chars().nth(i).unwrap(); + if !c.is_ascii_digit() { + break; + } + if x > (1 << (63 - 1)) / 10 { + return Err("overflow".into()); + } + let d = i64::from(c.to_digit(10).unwrap()); + x = x * 10 + d; + if x < 0 { + // overflow + return Err("overflow".into()); + } + i += 1; + } + Ok((x, &s[i..])) +} + +fn leading_fraction(s: &str) -> (i64, f64, &str) { + let mut i = 0; + let mut x = 0i64; + let mut scale = 1f64; + let mut overflow = false; + while i < s.len() { + let c = s.chars().nth(i).unwrap(); + if !c.is_ascii_digit() { + break; + } + if overflow { + continue; + } + if x > (1 << (63 - 1)) / 10 { + // It's possible for overflow to give a positive number, so take care. + overflow = true; + continue; + } + let d = i64::from(c.to_digit(10).unwrap()); + let y = x * 10 + d; + if y < 0 { + overflow = true; + continue; + } + x = y; + scale *= 10f64; + i += 1; + } + (x, scale, &s[i..]) +} + +#[cfg(test)] +mod tests { + use super::parse_duration; + + #[test] + fn test_parse_duration() { + assert_eq!(parse_duration("8.731µs"), Ok(8731)); + assert_eq!(parse_duration("50ns"), Ok(50)); + assert_eq!(parse_duration("3ms"), Ok(3000000)); + assert_eq!(parse_duration("2us"), Ok(2000)); + assert_eq!(parse_duration("4.0s"), Ok(4000000000)); + assert_eq!(parse_duration("1h45m"), Ok(6300000000000)); + assert_eq!( + parse_duration("1"), + Err(String::from("missing unit in duration: 1")), + ); + } +} diff --git a/crates/differential/src/lib.rs b/crates/differential/src/lib.rs index fbe9190..757713f 100644 --- a/crates/differential/src/lib.rs +++ b/crates/differential/src/lib.rs @@ -1,159 +1,570 @@ -use alloy_primitives::{keccak256, Address, B256}; -use evm_interpreter::{ - interpreter::{EtableInterpreter, RunInterpreter}, - trap::CallCreateTrap, - Context, Etable, ExitError, Log, Machine, RuntimeBackend, RuntimeBaseBackend, - RuntimeEnvironment, RuntimeState, TransactionContext, Valids, +use core::str; +use std::{ + collections::BTreeMap, + io::Write, + path::PathBuf, + process::{Command, Stdio}, + str::FromStr, + time::Duration, }; -use primitive_types::{H160, H256, U256}; -static RUNTIME_ETABLE: Etable = - Etable::runtime(); +use alloy_genesis::{Genesis, GenesisAccount}; +use alloy_primitives::{hex::ToHexExt, Address, Bytes, B256, U256}; +use alloy_serde::storage::deserialize_storage_map; +use serde::{Deserialize, Serialize}; +use serde_json::{Deserializer, Value}; +use tempfile::{NamedTempFile, TempPath}; -#[derive(Default)] -pub struct UnimplementedHandler { - logs: Vec, +pub use self::go_duration::parse_go_duration; + +mod go_duration; + +const GENESIS_JSON: &str = include_str!("../genesis.json"); +const EXECUTABLE_NAME: &str = "evm"; +const EXECUTABLE_ARGS: [&str; 8] = [ + "--log.format=json", + "run", + "--dump", + "--nomemory=false", + "--noreturndata=false", + "--json", + "--codefile", + "-", +]; +const EXECUTABLE_ARGS_BENCH: [&str; 6] = [ + "run", + "--bench", + "--nomemory=false", + "--noreturndata=false", + "--codefile", + "-", +]; +const GAS_USED_MARKER: &str = "EVM gas used:"; +const REVERT_MARKER: &str = "error: execution reverted"; + +/// The geth EVM state dump structure +#[derive(Clone, Debug, Default, Serialize, Deserialize)] +pub struct StateDump { + pub root: Bytes, + pub accounts: BTreeMap, } -impl RuntimeEnvironment for UnimplementedHandler { - fn block_hash(&self, _number: U256) -> H256 { - unimplemented!() - } - fn block_number(&self) -> U256 { - U256::from(123) - } - fn block_coinbase(&self) -> H160 { - unimplemented!() - } - fn block_timestamp(&self) -> U256 { - U256::from(456) - } - fn block_difficulty(&self) -> U256 { - unimplemented!() - } - fn block_randomness(&self) -> Option { - unimplemented!() - } - fn block_gas_limit(&self) -> U256 { - unimplemented!() - } - fn block_base_fee_per_gas(&self) -> U256 { - unimplemented!() - } - fn chain_id(&self) -> U256 { - unimplemented!() +impl From for Genesis { + fn from(value: StateDump) -> Self { + let mut genesis: Genesis = serde_json::from_str(GENESIS_JSON).unwrap(); + genesis.alloc = value + .accounts + .iter() + .map(|(address, account)| (*address, account.clone().into())) + .collect(); + genesis } } -impl RuntimeBaseBackend for UnimplementedHandler { - fn balance(&self, _address: H160) -> U256 { - unimplemented!() - } - fn code_size(&self, _address: H160) -> U256 { - unimplemented!() - } - fn code_hash(&self, _address: H160) -> H256 { - unimplemented!() - } - fn code(&self, _address: H160) -> Vec { - unimplemented!() - } - fn storage(&self, _address: H160, _index: H256) -> H256 { - unimplemented!() - } - - fn exists(&self, _address: H160) -> bool { - unimplemented!() - } - - fn nonce(&self, _address: H160) -> U256 { - unimplemented!() - } +/// The geth EVM state dump account structure +#[derive(Clone, Debug, Serialize, Deserialize)] +pub struct Account { + pub balance: U256, + pub nonce: u64, + pub code: Option, + #[serde( + default, + skip_serializing_if = "Option::is_none", + deserialize_with = "deserialize_storage_map" + )] + pub storage: Option>, + pub key: Option, } -impl RuntimeBackend for UnimplementedHandler { - fn original_storage(&self, _address: H160, _index: H256) -> H256 { - unimplemented!() - } - - fn deleted(&self, _address: H160) -> bool { - unimplemented!() - } - fn is_cold(&self, _address: H160, _index: Option) -> bool { - unimplemented!() - } - - fn mark_hot(&mut self, _address: H160, _index: Option) { - unimplemented!() - } - - fn set_storage(&mut self, _address: H160, _index: H256, _value: H256) -> Result<(), ExitError> { - unimplemented!() - } - fn log(&mut self, log: Log) -> Result<(), ExitError> { - self.logs.push(log); - Ok(()) - } - fn mark_delete(&mut self, _address: H160) { - unimplemented!() - } - - fn reset_storage(&mut self, _address: H160) { - unimplemented!() - } - - fn set_code(&mut self, _address: H160, _code: Vec) -> Result<(), ExitError> { - unimplemented!() - } - fn reset_balance(&mut self, _address: H160) { - unimplemented!() - } - - fn deposit(&mut self, _address: H160, _value: U256) { - unimplemented!() - } - fn withdrawal(&mut self, _address: H160, _value: U256) -> Result<(), ExitError> { - unimplemented!() - } - - fn inc_nonce(&mut self, _address: H160) -> Result<(), ExitError> { - unimplemented!() - } -} - -#[derive(Clone)] -pub struct PreparedEvm { - pub valids: Valids, - pub vm: Machine, -} - -pub fn prepare(code: Vec, data: Vec) -> PreparedEvm { - let address = Address::default().create2(B256::default(), keccak256([]).0); - let caller = Address::default().create2(B256::default(), keccak256([]).0); - - let state = RuntimeState { - context: Context { - address: H160::from(address.0 .0), - caller: H160::from(caller.0 .0), - apparent_value: U256::default(), - }, - transaction_context: TransactionContext { - gas_price: U256::default(), - origin: H160::default(), +impl From for GenesisAccount { + fn from(value: Account) -> Self { + GenesisAccount { + balance: value.balance, + nonce: Some(value.nonce), + code: value.code, + storage: value.storage, + private_key: value.key, } - .into(), - retbuf: Vec::new(), - }; - - PreparedEvm { - valids: Valids::new(&code[..]), - vm: evm_interpreter::Machine::new(code.into(), data.to_vec().into(), 1024, 0xFFFF, state), } } -pub fn execute(pre: PreparedEvm) -> (Vec, Vec) { - let mut vm = EtableInterpreter::new_valid(pre.vm, &RUNTIME_ETABLE, pre.valids); - let mut handler = UnimplementedHandler::default(); - vm.run(&mut handler).exit().unwrap().unwrap(); - (vm.retval.clone(), handler.logs) +/// Contains the output from geth `emv` invocations +#[derive(Clone, Debug, Default, Serialize, Deserialize)] +pub struct EvmOutput { + pub output: Bytes, + #[serde(rename = "gasUsed")] + pub gas_used: U256, + pub error: Option, +} + +impl EvmOutput { + /// Return if there was no error found. + /// + /// Panics if the gas used is zero as this indicates nothing was run, i.e. + /// there was no receiving account but still no error is reported. + pub fn run_success(&self) -> bool { + assert_ne!(self.gas_used, U256::ZERO, "nothing was executed"); + self.error.is_none() + } +} + +/// Contains the full log from geth `emv` invocations +#[derive(Clone, Debug)] +pub struct EvmLog { + pub account_deployed: Option
, + pub output: EvmOutput, + pub state_dump: StateDump, + pub stderr: String, +} + +impl EvmLog { + pub const EXECUTION_TIME_MARKER: &'static str = "execution time:"; + + /// Parse the reported execution time from stderr (requires --bench) + pub fn execution_time(&self) -> Result { + for line in self.stderr.lines() { + if let Some(value) = line.split("execution time:").nth(1) { + return parse_go_duration(value.trim()); + } + } + + Err(format!( + "execution time marker '{}' not found in raw EVM log", + Self::EXECUTION_TIME_MARKER + )) + } + + fn parse_gas_used_from_bench(&mut self) { + for line in self.stderr.lines() { + if let Some(gas_line) = line.split(GAS_USED_MARKER).nth(1) { + let gas_used = gas_line.trim().parse::().unwrap_or_else(|error| { + panic!("invalid output '{gas_line}' for gas used: {error}") + }); + self.output.gas_used = U256::from(gas_used); + } + } + } +} + +impl From<&str> for EvmLog { + fn from(value: &str) -> Self { + let mut output = None; + let mut state_dump = None; + for value in Deserializer::from_str(value).into_iter::() { + let Ok(value) = value else { continue }; + if let Ok(value @ EvmOutput { .. }) = serde_json::from_value(value.clone()) { + output = Some(value); + continue; + } + if let Ok(value @ StateDump { .. }) = serde_json::from_value(value) { + state_dump = Some(value); + } + } + + if let (Some(output), Some(state_dump)) = (output, state_dump) { + return Self { + account_deployed: None, + output, + state_dump, + stderr: value.into(), + }; + } + + EvmLog { + account_deployed: None, + output: EvmOutput { + error: value.find(REVERT_MARKER).map(|_| REVERT_MARKER.to_string()), + ..Default::default() + }, + state_dump: Default::default(), + stderr: Default::default(), + } + } +} + +/// Builder for running contracts in geth `evm` +pub struct Evm { + genesis_json: Option, + genesis_path: Option, + code: Option>, + input: Option, + receiver: Option, + sender: String, + value: Option, + gas: Option, + create: bool, + bench: bool, +} + +impl Default for Evm { + fn default() -> Self { + Self { + genesis_json: Some(GENESIS_JSON.to_string()), + genesis_path: None, + code: None, + input: None, + receiver: None, + sender: Address::default().encode_hex(), + value: None, + gas: None, + create: false, + bench: false, + } + } +} + +impl Evm { + /// Create a new EVM with the given `genesis` + pub fn from_genesis(genesis: Genesis) -> Self { + Self::default().genesis_json(genesis) + } + + /// Run the `code` + pub fn code_blob(self, blob: Vec) -> Self { + Self { + code: Some(blob), + ..self + } + } + + /// Set the calldata + pub fn input(self, bytes: Bytes) -> Self { + Self { + input: (!bytes.is_empty()).then_some(bytes), + ..self + } + } + + /// Set the create flag + pub fn deploy(self, enable: bool) -> Self { + Self { + create: enable, + ..self + } + } + + /// Set the transferred value + pub fn value(self, value: u128) -> Self { + Self { + value: Some(value), + ..self + } + } + + /// Set the gas limit + pub fn gas(self, limit: u64) -> Self { + Self { + gas: Some(limit), + ..self + } + } + + /// Provide the prestate genesis configuration + pub fn genesis_json(self, genesis: Genesis) -> Self { + let genesis_json = serde_json::to_string(&genesis).expect("state dump should be valid"); + // TODO: Investigate + let genesis_json = genesis_json.replace("\"0x0\"", "0").into(); + + Self { + genesis_json, + genesis_path: None, + ..self + } + } + + /// Provide a path to the genesis file to be used + pub fn genesis_path(self, path: PathBuf) -> Self { + Self { + genesis_path: Some(path), + genesis_json: None, + ..self + } + } + + /// Set the callee address + pub fn receiver(self, address: Address) -> Self { + Self { + receiver: Some(address.encode_hex()), + ..self + } + } + + /// Set the caller address + pub fn sender(self, address: Address) -> Self { + Self { + sender: address.encode_hex(), + ..self + } + } + + /// Run as a benchmark + pub fn bench(self, flag: bool) -> Self { + Self { + bench: flag, + ..self + } + } + + /// Calculate the address of the contract account this deploy call would create + pub fn expect_account_created(&self) -> Address { + assert!(self.create, "expected a deploy call"); + let sender = Address::from_str(&self.sender).expect("sender address should be valid"); + let genesis: Genesis = match (self.genesis_json.as_ref(), self.genesis_path.as_ref()) { + (Some(json), None) => serde_json::from_str(json).unwrap(), + (None, Some(path)) => { + serde_json::from_str(&std::fs::read_to_string(path).unwrap()).unwrap() + } + _ => panic!("provided a genesis json and a genesis json path"), + }; + let nonce = genesis + .alloc + .get(&sender) + .map(|account| account.nonce.unwrap_or(0)) + .unwrap_or(0); + sender.create(nonce) + } + + /// Return the path to the genesis file; + /// writes the genesis file into a tmpdir if necessary. + /// + /// `TempPath`` will delete on drop, so need to keep it around + fn write_genesis_file(&self, temp_path: &mut Option) -> String { + match (self.genesis_json.as_ref(), self.genesis_path.as_ref()) { + (Some(json), None) => { + let mut temp_file = NamedTempFile::new().unwrap(); + temp_file.write_all(json.as_bytes()).unwrap(); + let path = temp_file.into_temp_path(); + *temp_path = Some(path); + temp_path.as_ref().unwrap().display().to_string() + } + (None, Some(path)) => path.display().to_string(), + _ => panic!("provided a genesis json and a genesis json path"), + } + } + + /// Run the call in a geth `evm` subprocess. + /// + /// Definitively not a hairy plumbing function. + pub fn run(self) -> EvmLog { + let mut temp_path = None; + let genesis_json_path = &self.write_genesis_file(&mut temp_path); + + // Static args + let mut command = Command::new(PathBuf::from(EXECUTABLE_NAME)); + command + .stdin(Stdio::piped()) + .stdout(Stdio::piped()) + .stderr(Stdio::piped()); + if self.bench { + command.args(EXECUTABLE_ARGS_BENCH); + } else { + command.args(EXECUTABLE_ARGS); + }; + + // Dynamic args + command.args(["--prestate", genesis_json_path]); + command.args(["--sender", &self.sender]); + if let Some(input) = &self.input { + command.args(["--input", hex::encode(input).as_str()]); + } + let account_deployed = if self.create { + command.arg("--create"); + self.expect_account_created().into() + } else { + None + }; + match (&self.code, &self.receiver) { + (Some(_), None) => {} + (None, Some(address)) => { + command.args(["--receiver", address]); + } + (Some(_), Some(_)) => panic!("code and receiver specified"), + _ => panic!("no code file or receiver specified"), + } + if let Some(gas) = self.gas { + command.args(["--gas", &format!("{gas}")]); + } + if let Some(value) = self.value { + command.args(["--value", &format!("{value}")]); + } + + // Run the evm subprocess and assert success return value + let process = command.spawn().unwrap_or_else(|error| { + panic!("{EXECUTABLE_NAME} subprocess spawning error: {error:?}") + }); + let buf = vec![]; + process + .stdin + .as_ref() + .unwrap_or_else(|| panic!("{EXECUTABLE_NAME} stdin getting error")) + .write_all(self.code.as_ref().unwrap_or(&buf)) + .unwrap_or_else(|err| panic!("{EXECUTABLE_NAME} stdin writing error: {err:?}")); + + let output = process + .wait_with_output() + .unwrap_or_else(|err| panic!("{EXECUTABLE_NAME} subprocess output error: {err}")); + assert!( + output.status.success(), + "{EXECUTABLE_NAME} command failed: {output:?}", + ); + drop(temp_path); + + let stdout = str::from_utf8(output.stdout.as_slice()) + .unwrap_or_else(|err| panic!("{EXECUTABLE_NAME} stdout failed to parse: {err}")); + let stderr = str::from_utf8(output.stderr.as_slice()) + .unwrap_or_else(|err| panic!("{EXECUTABLE_NAME} stderr failed to parse: {err}")); + + let mut log: EvmLog = stdout.into(); + log.stderr = stderr.into(); + if self.bench { + log.parse_gas_used_from_bench(); + } + + // Set the deployed account + log.account_deployed = account_deployed; + log + } +} + +#[cfg(test)] +mod tests { + use std::{str::FromStr, time::Duration}; + + use alloy_genesis::Genesis; + use alloy_primitives::{Bytes, B256, U256}; + + use crate::{Evm, EvmLog, EvmOutput, StateDump}; + + const OUTPUT_JSON_OK: &str = r#"{"output":"0000000000000000000000000000000000000000000000000000000000000000","gasUsed":"0x11d"}"#; + const OUTPUT_JSON_REVERTED: &str = + r#"{"output":"","gasUsed":"0x2d","error":"execution reverted"}"#; + const STATE_DUMP: &str = r#" +{ + "root": "eb5d51177cb9049b848ea92f87f9a3f00abfb683d0866c2eddecc5692ad27f86", + "accounts": { + "0x1f2a98889594024BFfdA3311CbE69728d392C06D": { + "balance": "0", + "nonce": 1, + "root": "0x63cfcda8d81a8b1840b1b9722c37f929a4037e53ad1ce6abdef31c0c8bac1f61", + "codeHash": "0xa6e0062c5ba829446695f179b97702a75f7d354e33445d2e928ed00e1a39e88f", + "code": "0x608060405260043610610028575f3560e01c80633fa4f2451461002c578063b144adfb1461004a575b5f80fd5b610034610086565b60405161004191906100c5565b60405180910390f35b348015610055575f80fd5b50610070600480360381019061006b919061013c565b61008d565b60405161007d91906100c5565b60405180910390f35b5f34905090565b5f8173ffffffffffffffffffffffffffffffffffffffff16319050919050565b5f819050919050565b6100bf816100ad565b82525050565b5f6020820190506100d85f8301846100b6565b92915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61010b826100e2565b9050919050565b61011b81610101565b8114610125575f80fd5b50565b5f8135905061013681610112565b92915050565b5f60208284031215610151576101506100de565b5b5f61015e84828501610128565b9150509291505056fea2646970667358221220a2109c2f05a629fff4640e9f0cf12a698bbea9b0858a4029901e88bf5d1c926964736f6c63430008190033", + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000000": "02" + }, + "address": "0x1f2a98889594024bffda3311cbe69728d392c06d", + "key": "0xcbeeb4463624bc2f332dcfe2b479eddb1c380ec862ee63d9f31b31b854fb7c61" + } + } +}"#; + const EVM_BIN_FIXTURE: &str = "6080604052348015600e575f80fd5b506040516101403803806101408339818101604052810190602e9190607f565b805f806101000a81548160ff0219169083151502179055505060a5565b5f80fd5b5f8115159050919050565b606181604f565b8114606a575f80fd5b50565b5f81519050607981605a565b92915050565b5f602082840312156091576090604b565b5b5f609c84828501606d565b91505092915050565b608f806100b15f395ff3fe6080604052348015600e575f80fd5b50600436106026575f3560e01c8063cde4efa914602a575b5f80fd5b60306032565b005b5f8054906101000a900460ff16155f806101000a81548160ff02191690831515021790555056fea264697066735822122046c92dd2fd612b1ed93d184dad4c49f61c44690722c4a6c7c746ebeb0aadeb4a64736f6c63430008190033"; + const EVM_BIN_RUNTIME_FIXTURE: &str = "6080604052348015600e575f80fd5b50600436106026575f3560e01c8063cde4efa914602a575b5f80fd5b60306032565b005b5f8054906101000a900460ff16155f806101000a81548160ff02191690831515021790555056fea264697066735822122046c92dd2fd612b1ed93d184dad4c49f61c44690722c4a6c7c746ebeb0aadeb4a64736f6c63430008190033"; + const EVM_BIN_FIXTURE_INPUT: &str = + "0000000000000000000000000000000000000000000000000000000000000001"; + const EVM_BIN_RUNTIME_FIXTURE_INPUT: &str = "cde4efa9"; + const STDERR_BENCH_OK: &str = r#"EVM gas used: 560071 +execution time: 1.460881ms +allocations: 29 +allocated bytes: 2558 +"#; + const STDERR_BENCH_REVERT: &str = r#"EVM gas used: 69 +execution time: 10.11µs +allocations: 43 +allocated bytes: 3711"#; + const STDOUT_BENCH_REVERT: &str = r#" error: execution reverted"#; + + #[test] + fn parse_evm_output_ok() { + serde_json::from_str::(OUTPUT_JSON_OK).unwrap(); + } + + #[test] + fn parse_evm_output_revert() { + serde_json::from_str::(OUTPUT_JSON_REVERTED).unwrap(); + } + + #[test] + fn parse_evm_output_bench_ok() { + let mut log = EvmLog::from(""); + log.stderr = STDERR_BENCH_OK.into(); + log.parse_gas_used_from_bench(); + assert!(log.output.run_success()); + + assert_eq!(log.execution_time().unwrap(), Duration::from_nanos(1460881)); + } + + #[test] + fn parse_evm_output_bench_revert() { + let mut log = EvmLog::from(STDOUT_BENCH_REVERT); + log.stderr = STDERR_BENCH_REVERT.into(); + log.parse_gas_used_from_bench(); + assert!(!log.output.run_success()); + } + + #[test] + fn parse_state_dump() { + serde_json::from_str::(STATE_DUMP).unwrap(); + } + + #[test] + fn evm_log_from_str() { + let log = format!("{OUTPUT_JSON_OK}\n{STATE_DUMP}"); + let _ = EvmLog::from(log.as_str()); + } + + #[test] + fn generate_genesis() { + let log = format!("{OUTPUT_JSON_OK}\n{STATE_DUMP}"); + let log = EvmLog::from(log.as_str()); + let mut genesis: Genesis = log.state_dump.into(); + let storage = genesis + .alloc + .pop_first() + .expect("should have one account in genesis") + .1 + .storage + .expect("genesis account should have storage"); + let storage_value = storage + .get(&B256::ZERO) + .expect("genesis account should have key 0 occupied"); + assert_eq!(*storage_value, B256::from(U256::from(2))); + } + + #[test] + fn flipper() { + let log_runtime = Evm::default() + .code_blob(EVM_BIN_RUNTIME_FIXTURE.as_bytes().to_vec()) + .input(Bytes::from_str(EVM_BIN_RUNTIME_FIXTURE_INPUT).unwrap()) + .run(); + assert!(log_runtime.output.run_success()); + } + + #[test] + fn prestate() { + let log_deploy = Evm::default() + .code_blob(EVM_BIN_FIXTURE.as_bytes().to_vec()) + .input(Bytes::from_str(EVM_BIN_FIXTURE_INPUT).unwrap()) + .deploy(true) + .run(); + assert!(log_deploy.output.run_success()); + + let address = log_deploy.account_deployed.unwrap(); + let genesis: Genesis = log_deploy.state_dump.into(); + let log_runtime = Evm::default() + .genesis_json(genesis) + .receiver(address) + .input(Bytes::from_str(EVM_BIN_RUNTIME_FIXTURE_INPUT).unwrap()) + .run(); + assert!(log_runtime.output.run_success(), "{:?}", log_runtime.output); + } + + #[test] + fn bench_flipper() { + let log_runtime = Evm::default() + .code_blob(EVM_BIN_RUNTIME_FIXTURE.as_bytes().to_vec()) + .input(Bytes::from_str(EVM_BIN_RUNTIME_FIXTURE_INPUT).unwrap()) + .bench(true) + .run(); + assert!(log_runtime.output.run_success()); + assert!(log_runtime.execution_time().unwrap() > Duration::from_nanos(0)); + } } diff --git a/crates/integration/Cargo.toml b/crates/integration/Cargo.toml index 4294f98..886bd9d 100644 --- a/crates/integration/Cargo.toml +++ b/crates/integration/Cargo.toml @@ -14,11 +14,13 @@ alloy-sol-types = { workspace = true } hex = { workspace = true } env_logger = { workspace = true } log = { workspace = true } +serde_json = { workspace = true } revive-solidity = { workspace = true } revive-differential = { workspace = true } revive-llvm-context = { workspace = true } revive-common = { workspace = true } +revive-runner = { workspace = true } [dev-dependencies] sha1 = { workspace = true } diff --git a/crates/integration/codesize.json b/crates/integration/codesize.json index 9cedb4e..e2c613d 100644 --- a/crates/integration/codesize.json +++ b/crates/integration/codesize.json @@ -1,10 +1,10 @@ { - "Baseline": 934, - "Computation": 4360, - "DivisionArithmetics": 39824, - "ERC20": 46471, - "Events": 1749, - "FibonacciIterative": 2973, - "Flipper": 3563, - "SHA1": 32543 + "Baseline": 878, + "Computation": 4305, + "DivisionArithmetics": 39774, + "ERC20": 53405, + "Events": 1693, + "FibonacciIterative": 2917, + "Flipper": 3570, + "SHA1": 32557 } \ No newline at end of file diff --git a/crates/integration/contracts/Baseline.sol b/crates/integration/contracts/Baseline.sol index 4fd3560..3db46ab 100644 --- a/crates/integration/contracts/Baseline.sol +++ b/crates/integration/contracts/Baseline.sol @@ -1,5 +1,20 @@ // SPDX-License-Identifier: MIT +/* runner.json + +{ + "actions": [ + { + "Instantiate": { + "origin": "Alice", + "value": 0 + } + } + ] +} + +*/ + pragma solidity ^0.8; contract Baseline { diff --git a/crates/integration/contracts/Bitwise.sol b/crates/integration/contracts/Bitwise.sol index 7cf581a..0e2d82a 100644 --- a/crates/integration/contracts/Bitwise.sol +++ b/crates/integration/contracts/Bitwise.sol @@ -2,6 +2,31 @@ pragma solidity ^0.8; +/* runner.json +{ + "differential": true, + "actions": [ + { + "Instantiate": { + "code": { + "Solidity": { + "contract": "Bitwise" + } + } + } + }, + { + "Call": { + "dest": { + "Instantiated": 0 + }, + "data": "3fa4f245" + } + } + ] +} +*/ + contract Bitwise { function opByte(uint i, uint x) public payable returns (uint ret) { assembly { diff --git a/crates/integration/contracts/Block.sol b/crates/integration/contracts/Block.sol index d4d9328..e078d48 100644 --- a/crates/integration/contracts/Block.sol +++ b/crates/integration/contracts/Block.sol @@ -2,12 +2,49 @@ pragma solidity ^0.8; +/* runner.json +{ + "differential": true, + "actions": [ + { + "Instantiate": { + "code": { + "Solidity": { + "contract": "Block" + } + } + } + }, + { + "Call": { + "dest": { + "Instantiated": 0 + }, + "data": "8381f58a" + } + }, + { + "Call": { + "dest": { + "Instantiated": 0 + }, + "data": "b80777ea" + } + } + ] +} +*/ + contract Block { function timestamp() public view returns (uint ret) { ret = block.timestamp; } function number() public view returns (uint ret) { - ret = block.number; + if (block.number == 0) { + ret = 1; + } else { + ret = block.number; + } } } diff --git a/crates/integration/contracts/Computation.sol b/crates/integration/contracts/Computation.sol index 3ba4dcd..2f40215 100644 --- a/crates/integration/contracts/Computation.sol +++ b/crates/integration/contracts/Computation.sol @@ -2,6 +2,44 @@ pragma solidity ^0.8; +/* runner.json +{ + "actions": [ + { + "Instantiate": {} + }, + { + "Call": { + "dest": { + "Instantiated": 0 + }, + "data": "0f760610000000000000000000000000000000000000000000000000000000000000000d" + } + }, + { + "VerifyCall": { + "success": true, + "output": "000000000000000000000000000000000000000000000000000000000000005b" + } + }, + { + "Call": { + "dest": { + "Instantiated": 0 + }, + "data": "00261b660000000000000000000000000000000000000000000000000000000000000005" + } + }, + { + "VerifyCall": { + "success": true, + "output": "00000000000000000000000000000000000000000000000000000000000003b1" + } + } + ] +} +*/ + contract Computation { function triangle_number(int64 n) public pure returns (int64 sum) { unchecked { diff --git a/crates/integration/contracts/Crypto.sol b/crates/integration/contracts/Crypto.sol new file mode 100644 index 0000000..818a3d1 --- /dev/null +++ b/crates/integration/contracts/Crypto.sol @@ -0,0 +1,33 @@ +// SPDX-License-Identifier: MIT + +pragma solidity ^0.8.24; + +/* runner.json +{ + "actions": [ + { + "Instantiate": {} + }, + { + "Call": { + "dest": { + "Instantiated": 0 + }, + "data": "f9fbd5540000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000c68656c6c6f20776f726c64210000000000000000000000000000000000000000" + } + }, + { + "VerifyCall": { + "success": true, + "output": "57caa176af1ac0433c5df30e8dabcd2ec1af1e92a26eced5f719b88458777cd6" + } + } + ] +} +*/ + +contract TestSha3 { + function test(string memory _pre) external payable returns (bytes32 hash) { + hash = keccak256(bytes(_pre)); + } +} diff --git a/crates/integration/contracts/ERC20.sol b/crates/integration/contracts/ERC20.sol index 5b4dea3..49426f7 100644 --- a/crates/integration/contracts/ERC20.sol +++ b/crates/integration/contracts/ERC20.sol @@ -2,6 +2,16 @@ pragma solidity ^0.8; +/* runner.json +{ + "actions": [ + { + "Instantiate": {} + } + ] +} +*/ + // https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v3.0.0/contracts/token/ERC20/IERC20.sol interface IERC20 { function totalSupply() external view returns (uint); diff --git a/crates/integration/contracts/Events.sol b/crates/integration/contracts/Events.sol index d52064b..c3f7dd7 100644 --- a/crates/integration/contracts/Events.sol +++ b/crates/integration/contracts/Events.sol @@ -2,6 +2,43 @@ pragma solidity ^0.8; +/* runner.json +{ + "differential": true, + "actions": [ + { + "Instantiate": { + "code": { + "Solidity": { + "contract": "Events" + } + } + } + }, + { + "Call": { + "dest": { + "Instantiated": 0 + }, + "data": "4d43bec90000000000000000000000000000000000000000000000000000000000000000" + } + } + ] +} +*/ + +/* TODO when pallet_revive accepts Solidity event topics + { + "Call": { + "dest": { + "Instantiated": 0 + }, + "data": "4d43bec9000000000000000000000000000000000000000000000000000000000000007b" + } + } + +*/ + contract Events { event A() anonymous; event E(uint, uint indexed, uint indexed, uint indexed); diff --git a/crates/integration/contracts/Fibonacci.sol b/crates/integration/contracts/Fibonacci.sol index d8fbc98..c7253ec 100644 --- a/crates/integration/contracts/Fibonacci.sol +++ b/crates/integration/contracts/Fibonacci.sol @@ -2,7 +2,29 @@ pragma solidity ^0.8; -// https://medium.com/coinmonks/fibonacci-in-solidity-8477d907e22a +/* runner.json +{ + "actions": [ + { + "Instantiate": {} + }, + { + "Call": { + "dest": { + "Instantiated": 0 + }, + "data": "6b83dd2e0000000000000000000000000000000000000000000000000000000000000006" + } + }, + { + "VerifyCall": { + "success": true, + "output": "0000000000000000000000000000000000000000000000000000000000000008" + } + } + ] +} +*/ contract FibonacciRecursive { function f(uint n) internal pure returns (uint) { @@ -36,6 +58,7 @@ contract FibonacciIterative { } } +// https://medium.com/coinmonks/fibonacci-in-solidity-8477d907e22a contract FibonacciBinet { function fib3(uint n) external pure returns (uint a) { if (n == 0) { diff --git a/crates/integration/contracts/MCopy.sol b/crates/integration/contracts/MCopy.sol index 03431fa..4d746c7 100644 --- a/crates/integration/contracts/MCopy.sol +++ b/crates/integration/contracts/MCopy.sol @@ -2,6 +2,31 @@ pragma solidity ^0.8; +/* runner.json +{ + "differential": true, + "actions": [ + { + "Instantiate": { + "code": { + "Solidity": { + "contract": "MCopy" + } + } + } + }, + { + "Call": { + "dest": { + "Instantiated": 0 + }, + "data": "0ee188b0000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000030102030000000000000000000000000000000000000000000000000000000000" + } + } + ] +} +*/ + contract MCopy { function memcpy(bytes memory payload) public pure returns (bytes memory) { return payload; diff --git a/crates/integration/contracts/MSize.sol b/crates/integration/contracts/MSize.sol index 3500f4b..c215368 100644 --- a/crates/integration/contracts/MSize.sol +++ b/crates/integration/contracts/MSize.sol @@ -2,6 +2,51 @@ pragma solidity ^0.8; +/* runner.json +{ + "actions": [ + { + "Instantiate": { + "code": { + "Solidity": { + "contract": "MSize", + "solc_optimizer": false + } + } + } + }, + { + "Call": { + "dest": { + "Instantiated": 0 + }, + "data": "f016832c" + } + }, + { + "VerifyCall": { + "success": true, + "output": "0000000000000000000000000000000000000000000000000000000000000060" + } + }, + { + "Call": { + "dest": { + "Instantiated": 0 + }, + "data": "f4a63aa5" + } + }, + { + "VerifyCall": { + "success": true, + "output": "0000000000000000000000000000000000000000000000000000000000000084" + } + } + ] +} +*/ + contract MSize { uint[] public data; diff --git a/crates/integration/contracts/MStore8.sol b/crates/integration/contracts/MStore8.sol new file mode 100644 index 0000000..e238fa8 --- /dev/null +++ b/crates/integration/contracts/MStore8.sol @@ -0,0 +1,101 @@ +// SPDX-License-Identifier: MIT + +pragma solidity ^0.8; + +/* runner.json +{ + "differential": true, + "actions": [ + { + "Instantiate": { + "code": { + "Solidity": { + "contract": "MStore8" + } + } + } + }, + { + "Call": { + "dest": { + "Instantiated": 0 + }, + "data": "b09ad4210000000000000000000000000000000000000000000000000000000000000000" + } + }, + { + "Call": { + "dest": { + "Instantiated": 0 + }, + "data": "b09ad4210000000000000000000000000000000000000000000000000000000000000001" + } + }, + { + "Call": { + "dest": { + "Instantiated": 0 + }, + "data": "b09ad4210000000000000000000000000000000000000000000000000000000000000002" + } + }, + { + "Call": { + "dest": { + "Instantiated": 0 + }, + "data": "b09ad42100000000000000000000000000000000000000000000000000000000000000ff" + } + }, + { + "Call": { + "dest": { + "Instantiated": 0 + }, + "data": "b09ad4210000000000000000000000000000000000000000000000000000000000000100" + } + }, + { + "Call": { + "dest": { + "Instantiated": 0 + }, + "data": "b09ad4210000000000000000000000000000000000000000000000000000000000000101" + } + }, + { + "Call": { + "dest": { + "Instantiated": 0 + }, + "data": "b09ad4210000000000000000000000000000000000000000000000000000000000000102" + } + }, + { + "Call": { + "dest": { + "Instantiated": 0 + }, + "data": "b09ad42100000000000000000000000000000000000000000000000000000000075bcd15" + } + }, + { + "Call": { + "dest": { + "Instantiated": 0 + }, + "data": "b09ad421ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" + } + } + ] +} +*/ + +contract MStore8 { + function mStore8(uint value) public pure returns (uint256 word) { + assembly { + mstore8(0x80, value) + word := mload(0x80) + } + } +} diff --git a/crates/integration/contracts/SHA1.sol b/crates/integration/contracts/SHA1.sol index db116e5..cac1563 100644 --- a/crates/integration/contracts/SHA1.sol +++ b/crates/integration/contracts/SHA1.sol @@ -1,6 +1,31 @@ // SPDX-License-Identifier: BSD-2-Clause pragma solidity ^0.8.4; +/* runner.json +{ + "differential": true, + "actions": [ + { + "Instantiate": { + "code": { + "Solidity": { + "contract": "SHA1" + } + } + } + }, + { + "Call": { + "dest": { + "Instantiated": 0 + }, + "data": "1605782b00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000200ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" + } + } + ] +} +*/ + contract SHA1 { function sha1(bytes memory data) public pure returns (bytes20 ret) { assembly { diff --git a/crates/integration/contracts/Storage.sol b/crates/integration/contracts/Storage.sol index b0c474b..b1ef75b 100644 --- a/crates/integration/contracts/Storage.sol +++ b/crates/integration/contracts/Storage.sol @@ -2,6 +2,31 @@ pragma solidity ^0.8; +/* runner.json +{ + "differential": true, + "actions": [ + { + "Instantiate": { + "code": { + "Solidity": { + "contract": "Storage" + } + } + } + }, + { + "Call": { + "dest": { + "Instantiated": 0 + }, + "data": "fabc9efaffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" + } + } + ] +} +*/ + contract Storage { function transient(uint value) public returns (uint ret) { assembly { diff --git a/crates/integration/contracts/Value.sol b/crates/integration/contracts/Value.sol index 5fa6bd8..031463f 100644 --- a/crates/integration/contracts/Value.sol +++ b/crates/integration/contracts/Value.sol @@ -1,7 +1,31 @@ // SPDX-License-Identifier: MIT - pragma solidity ^0.8; +/* runner.json +{ + "differential": true, + "actions": [ + { + "Instantiate": { + "code": { + "Solidity": { + "contract": "Value" + } + } + } + }, + { + "Call": { + "dest": { + "Instantiated": 0 + }, + "data": "3fa4f245" + } + } + ] +} +*/ + contract Value { function value() public payable returns (uint ret) { ret = msg.value; diff --git a/crates/integration/contracts/flipper.sol b/crates/integration/contracts/flipper.sol index 08c48c3..0c2ef61 100644 --- a/crates/integration/contracts/flipper.sol +++ b/crates/integration/contracts/flipper.sol @@ -1,6 +1,44 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8; +/* runner.json +{ + "actions": [ + { + "Instantiate": { + "data": "0000000000000000000000000000000000000000000000000000000000000001" + } + }, + { + "VerifyStorage": { + "contract": { + "Instantiated": 0 + }, + "key": "0000000000000000000000000000000000000000000000000000000000000000", + "expected": "0100000000000000000000000000000000000000000000000000000000000000" + } + }, + { + "Call": { + "dest": { + "Instantiated": 0 + }, + "data": "cde4efa9" + } + }, + { + "VerifyStorage": { + "contract": { + "Instantiated": 0 + }, + "key": "0000000000000000000000000000000000000000000000000000000000000000", + "expected": "0000000000000000000000000000000000000000000000000000000000000000" + } + } + ] +} +*/ + contract Flipper { bool coin; diff --git a/crates/integration/contracts/mStore8.sol b/crates/integration/contracts/mStore8.sol deleted file mode 100644 index 3be7193..0000000 --- a/crates/integration/contracts/mStore8.sol +++ /dev/null @@ -1,12 +0,0 @@ -// SPDX-License-Identifier: MIT - -pragma solidity ^0.8; - -contract MStore8 { - function mStore8(uint value) public pure returns (uint256 word) { - assembly { - mstore8(0x80, value) - word := mload(0x80) - } - } -} diff --git a/crates/integration/src/cases.rs b/crates/integration/src/cases.rs index 5794ff2..6536d3d 100644 --- a/crates/integration/src/cases.rs +++ b/crates/integration/src/cases.rs @@ -1,10 +1,8 @@ -use alloy_primitives::{Address, I256, U256}; +use alloy_primitives::{Address, Bytes, I256, U256}; use alloy_sol_types::{sol, SolCall, SolConstructor}; use revive_solidity::test_utils::*; -use crate::mock_runtime::{CallOutput, State}; - #[derive(Clone)] pub struct Contract { pub name: &'static str, @@ -93,7 +91,7 @@ sol!( function sha1(bytes memory data) public pure returns (bytes20 ret); } ); -case!("SHA1.sol", SHA1, sha1Call, sha1, pre: Vec); +case!("SHA1.sol", SHA1, sha1Call, sha1, pre: Bytes); sol!( contract ERC20 { @@ -163,7 +161,7 @@ sol!( function mStore8(uint value) public pure returns (uint256 word); } ); -case!("mStore8.sol", MStore8, mStore8Call, mstore8, value: U256); +case!("MStore8.sol", MStore8, mStore8Call, mstore8, value: U256); sol!( contract Events { @@ -190,7 +188,7 @@ sol!( function memcpy(bytes memory payload) public pure returns (bytes memory); } ); -case!("MCopy.sol", MCopy, memcpyCall, memcpy, payload: Vec); +case!("MCopy.sol", MCopy, memcpyCall, memcpy, payload: Bytes); sol!( contract Call { @@ -205,7 +203,7 @@ sol!( } ); case!("Call.sol", Call, value_transferCall, call_value_transfer, destination: Address); -case!("Call.sol", Call, callCall, call_call, destination: Address, payload: Vec); +case!("Call.sol", Call, callCall, call_call, destination: Address, payload: Bytes); case!("Call.sol", "Call", vec![], call_constructor); sol!( @@ -230,24 +228,6 @@ sol!( case!("Storage.sol", Storage, transientCall, storage_transient, value: U256); impl Contract { - /// Execute the contract. - /// - /// Useful helper if the contract state can be ignored, - /// as it spares the deploy transaciton. - /// - /// - Inserts an account with given `code` into a new state. - /// - Callee and caller account will be `Transaction::default_address()`. - /// - Sets the calldata. - /// - Doesn't execute the constructor or deploy code. - /// - Calls the "call" export on a default backend config. - pub fn execute(&self) -> (State, CallOutput) { - State::default() - .transaction() - .with_default_account(&self.pvm_runtime) - .calldata(self.calldata.clone()) - .call() - } - fn build(calldata: Vec, name: &'static str, code: &str) -> Self { Self { name, @@ -260,7 +240,7 @@ impl Contract { #[cfg(test)] mod tests { - use alloy_primitives::U256; + use alloy_primitives::{Bytes, U256}; use rayon::iter::{IntoParallelIterator, ParallelIterator}; use serde::{de::Deserialize, Serialize}; use std::{collections::BTreeMap, fs::File}; @@ -305,7 +285,7 @@ mod tests { (|| Contract::odd_product(0)) as fn() -> Contract, (|| Contract::fib_iterative(U256::ZERO)) as fn() -> Contract, Contract::erc20 as fn() -> Contract, - (|| Contract::sha1(Vec::new())) as fn() -> Contract, + (|| Contract::sha1(Bytes::new())) as fn() -> Contract, (|| Contract::division_arithmetics_div(U256::ZERO, U256::ZERO)) as fn() -> Contract, (|| Contract::event(U256::ZERO)) as fn() -> Contract, ] diff --git a/crates/integration/src/lib.rs b/crates/integration/src/lib.rs index 581a8ed..3b9902c 100644 --- a/crates/integration/src/lib.rs +++ b/crates/integration/src/lib.rs @@ -1,42 +1,4 @@ -use alloy_primitives::{Address, U256}; -use cases::Contract; -use mock_runtime::{CallOutput, State}; - -use crate::mock_runtime::{Event, ReturnFlags}; - pub mod cases; -pub mod mock_runtime; #[cfg(test)] mod tests; - -pub fn assert_success(contract: &Contract, differential: bool) -> (State, CallOutput) { - let (state, output) = contract.execute(); - assert_eq!(output.flags, ReturnFlags::Success); - - if differential { - let evm = - revive_differential::prepare(contract.evm_runtime.clone(), contract.calldata.clone()); - let (evm_output, evm_log) = revive_differential::execute(evm); - - assert_eq!(output.data.clone(), evm_output); - assert_eq!(output.events.len(), evm_log.len()); - assert_eq!( - output.events, - evm_log - .iter() - .map(|log| Event { - address: Address::from_slice(log.address.as_bytes()), - data: log.data.clone(), - topics: log - .topics - .iter() - .map(|topic| U256::from_be_bytes(topic.0)) - .collect(), - }) - .collect::>() - ); - } - - (state, output) -} diff --git a/crates/integration/src/mock_runtime.rs b/crates/integration/src/mock_runtime.rs deleted file mode 100644 index e89bdb5..0000000 --- a/crates/integration/src/mock_runtime.rs +++ /dev/null @@ -1,1018 +0,0 @@ -//! Mock environment used for integration tests. -use std::collections::HashMap; - -use alloy_primitives::{keccak256, Address, Keccak256, B256, U256}; -use polkavm::{ - Caller, Config, Engine, ExportIndex, GasMeteringKind, Instance, Linker, Module, ModuleConfig, - ProgramBlob, Trap, -}; -use revive_llvm_context::polkavm_const::runtime_api; - -/// The mocked blockchain account. -#[derive(Debug, Default, Clone)] -pub struct Account { - pub value: U256, - pub contract: Option, - pub storage: HashMap, -} - -/// Emitted event data. -#[derive(Debug, Default, Clone, PartialEq)] -pub struct Event { - pub address: Address, - pub data: Vec, - pub topics: Vec, -} - -/// The result of the contract call. -#[derive(Debug, Default, Clone)] -pub struct CallOutput { - /// The return flags. - pub flags: ReturnFlags, - /// The contract call output. - pub data: Vec, - /// The emitted events. - pub events: Vec, -} - -/// The contract blob export to be called. -#[derive(Clone, Debug, Default)] -enum Export { - #[default] - Call, - Deploy(B256), -} - -/// Possible contract call return flags. -#[derive(Debug, Default, Clone, PartialEq)] -#[repr(u32)] -pub enum ReturnFlags { - /// The contract execution returned normally. - Success = 0, - /// The contract execution returned normally but state changes should be reverted. - Revert = 1, - /// The contract trapped unexpectedly during execution. - #[default] - Trap = u32::MAX, -} - -impl From for ReturnFlags { - fn from(value: u32) -> Self { - match value { - 0 => Self::Success, - 1 => Self::Revert, - u32::MAX => Self::Trap, - _ => panic!("invalid return flag: {value}"), - } - } -} - -/// The local context inside the call stack. -#[derive(Debug, Clone)] -struct Frame { - /// The account that is being executed. - callee: Address, - /// The caller account. - caller: Address, - /// The value transferred with this transaction. - callvalue: U256, - /// The calldata for the contract execution. - input: Vec, - // The contract call output. - output: CallOutput, - /// The export to call. - export: Export, - /// The returndata from the last contract call. - returndata: Vec, -} - -impl Default for Frame { - fn default() -> Self { - Self { - callee: Transaction::default_address(), - caller: Transaction::default_address(), - callvalue: Default::default(), - input: Default::default(), - output: Default::default(), - export: Default::default(), - returndata: Default::default(), - } - } -} - -/// The transaction can modify the state by calling contracts. -/// -/// Use the [TransactionBuilder] to create new transactions. -#[derive(Default, Clone, Debug)] -pub struct Transaction { - state: State, - transient_state: State, - stack: Vec, -} - -impl Transaction { - pub const CALL_STACK_SIZE: usize = 1024; - - pub fn default_address() -> Address { - Address::default().create2(B256::default(), keccak256([]).0) - } - - fn top_frame(&self) -> &Frame { - self.stack.last().expect("transactions should have a frame") - } - - fn top_frame_mut(&mut self) -> &mut Frame { - self.stack - .last_mut() - .expect("transactions should have a frame") - } - - fn top_account_mut(&mut self) -> &mut Account { - let account = self.top_frame_mut().callee; - self.state - .accounts - .get_mut(&account) - .unwrap_or_else(|| panic!("callee has no associated account: {account}")) - } - - fn create2(&self, salt: B256, blob_hash: B256) -> Address { - self.top_frame().callee.create2(salt, blob_hash) - } - - fn transient_account_mut(&mut self) -> &mut Account { - let address = self.top_frame().callee; - let account = self - .transient_state - .accounts_mut() - .entry(address) - .or_default(); - account - } -} - -/// Helper to create valid transactions. -#[derive(Default, Clone, Debug)] -pub struct TransactionBuilder { - context: Transaction, - state_before: State, -} - -impl TransactionBuilder { - /// Set the caller account. - pub fn caller(mut self, account: Address) -> Self { - self.context.top_frame_mut().caller = account; - self - } - - /// Set the callee account. - pub fn callee(mut self, account: Address) -> Self { - self.context.top_frame_mut().callee = account; - self - } - - /// Set the transferred callvalue. - pub fn callvalue(mut self, amount: U256) -> Self { - self.context.top_frame_mut().callvalue = amount; - self - } - - /// Set the calldata. - pub fn calldata(mut self, data: Vec) -> Self { - self.context.top_frame_mut().input = data; - self - } - - /// Helper to setup the transaction for deploy code. - /// - Simulate an upload of the `code` - /// - Set the export to `deploy` - /// - Derive address based on the caller and `salt` value - /// - Set the callee to the derived address - /// - Create a new default account at the derived address - pub fn deploy(mut self, code: &[u8], salt: Option) -> Self { - let blob_hash = self.context.state.upload_code(code); - let address = self - .context - .top_frame() - .caller - .create2(salt.unwrap_or_default(), blob_hash); - - self.context.top_frame_mut().export = Export::Deploy(blob_hash); - self.context.top_frame_mut().callee = address; - self.context - .state - .create_account(address, Default::default(), blob_hash); - - self - } - - /// Set the account at [Transaction::default_address] to the given `code`. - /// - /// Useful helper to spare the deploy transaction. - pub fn with_default_account(mut self, code: &[u8]) -> Self { - self.context.state.upload_code(code); - self.context.state.create_account( - Transaction::default_address(), - Default::default(), - keccak256(code), - ); - self - } - - /// Execute the transaction with a default config backend. - /// - /// Reverts any state changes if the contract reverts or the exuection traps. - pub fn call(mut self) -> (State, CallOutput) { - let blob_hash = match self.context.top_frame().export { - Export::Call => self - .context - .top_account_mut() - .contract - .expect("balance transfer"), - Export::Deploy(blob_hash) => blob_hash, - }; - let code = self - .context - .state - .blobs - .get(&blob_hash) - .unwrap_or_else(|| panic!("contract code not found: {blob_hash}")); - let (mut instance, _) = prepare(code, None); - let export = match self.context.top_frame().export { - Export::Call => runtime_api::exports::CALL, - Export::Deploy(_) => runtime_api::exports::DEPLOY, - }; - let export = instance.module().lookup_export(export).unwrap(); - self.call_on(&mut instance, export) - } - - /// Execute the transaction on a given instance and export. - /// The `instance` and `export` are expected to match that of the `Transaction`. - - /// Reverts any state changes if the contract reverts or the exuection traps. - pub fn call_on( - mut self, - instance: &mut Instance, - export: ExportIndex, - ) -> (State, CallOutput) { - let mut state_args = polkavm::StateArgs::default(); - state_args.set_gas(polkavm::Gas::MAX); - - let callvalue = self.context.top_frame().callvalue; - self.context.top_account_mut().value += callvalue; - - let call_args = polkavm::CallArgs::new(&mut self.context, export); - - init_logs(); - - match instance.call(state_args, call_args) { - Err(polkavm::ExecutionError::Trap(_)) => self.finalize(), - Err(other) => panic!("unexpected error: {other}"), - Ok(_) => panic!("unexpected return"), - } - } - - /// Commits or reverts the state changes based on the call flags. - fn finalize(mut self) -> (State, CallOutput) { - let state = match self.context.top_frame().output.flags { - ReturnFlags::Success => self.context.state, - _ => self.state_before, - }; - let output = self.context.stack.pop().unwrap().output; - (state, output) - } -} - -impl From for TransactionBuilder { - fn from(state: State) -> Self { - TransactionBuilder { - state_before: state.clone(), - context: Transaction { - state, - transient_state: Default::default(), - stack: Default::default(), - }, - } - } -} - -/// The mocked blockchain state. -#[derive(Default, Clone, Debug)] -pub struct State { - blobs: HashMap>, - accounts: HashMap, -} - -impl State { - pub const BLOCK_NUMBER: u64 = 123; - pub const BLOCK_TIMESTAMP: u64 = 456; - - pub fn new_deployed(contract: crate::Contract) -> (Self, Address) { - let (state, output) = State::default() - .transaction() - .deploy(&contract.pvm_runtime, None) - .calldata(contract.calldata) - .call(); - assert_eq!(output.flags, ReturnFlags::Success); - - let address = *state.accounts().keys().next().unwrap(); - - (state, address) - } - - pub fn transaction(self) -> TransactionBuilder { - TransactionBuilder { - state_before: self.clone(), - context: Transaction { - state: self, - transient_state: Default::default(), - stack: vec![Default::default()], - }, - } - } - - pub fn upload_code(&mut self, code: &[u8]) -> B256 { - let blob_hash = keccak256(code); - self.blobs.insert(blob_hash, code.to_vec()); - blob_hash - } - - pub fn assert_storage_key(&self, account: Address, key: U256, expected: U256) { - assert_eq!( - self.accounts - .get(&account) - .unwrap_or_else(|| panic!("unknown account: {account}")) - .storage - .get(&key) - .copied() - .unwrap_or_default(), - expected - ); - } - - pub fn create_account(&mut self, address: Address, value: U256, blob_hash: B256) { - self.accounts.insert( - address, - Account { - value, - contract: Some(blob_hash), - storage: HashMap::new(), - }, - ); - } - - pub fn accounts(&self) -> &HashMap { - &self.accounts - } - - pub fn accounts_mut(&mut self) -> &mut HashMap { - &mut self.accounts - } -} - -fn link_host_functions(engine: &Engine) -> Linker { - let mut linker = Linker::new(engine); - - linker - .func_wrap( - runtime_api::imports::INPUT, - |caller: Caller, out_ptr: u32, out_len_ptr: u32| -> Result<(), Trap> { - let (mut caller, transaction) = caller.split(); - - let input = &transaction.top_frame().input; - assert!(input.len() <= caller.read_u32(out_len_ptr).unwrap() as usize); - - caller.write_memory(out_ptr, input)?; - caller.write_memory(out_len_ptr, &(input.len() as u32).to_le_bytes())?; - - Ok(()) - }, - ) - .unwrap(); - - linker - .func_wrap( - runtime_api::imports::RETURN, - |caller: Caller, - flags: u32, - data_ptr: u32, - data_len: u32| - -> Result<(), Trap> { - let (caller, transaction) = caller.split(); - - let frame = transaction.top_frame_mut(); - frame.output.flags = flags.into(); - frame.output.data = caller.read_memory_into_vec(data_ptr, data_len)?; - - Err(Default::default()) - }, - ) - .unwrap(); - - linker - .func_wrap( - runtime_api::imports::VALUE_TRANSFERRED, - |caller: Caller, out_ptr: u32, out_len_ptr: u32| -> Result<(), Trap> { - let (mut caller, transaction) = caller.split(); - - let out_len = caller.read_u32(out_len_ptr)? as usize; - assert_eq!( - out_len, - revive_common::BYTE_LENGTH_VALUE, - "spurious output buffer size: {out_len}" - ); - - let value = transaction.top_frame().callvalue.as_le_bytes(); - caller.write_memory(out_ptr, &value)?; - caller.write_memory(out_len_ptr, &(value.len() as u32).to_le_bytes())?; - - Ok(()) - }, - ) - .unwrap(); - - linker - .func_wrap( - "debug_message", - |caller: Caller, str_ptr: u32, str_len: u32| -> Result { - let (caller, _) = caller.split(); - - let data = caller.read_memory_into_vec(str_ptr, str_len)?; - print!("debug_message: {}", String::from_utf8(data).unwrap()); - - Ok(0) - }, - ) - .unwrap(); - - linker - .func_wrap( - runtime_api::imports::SET_STORAGE, - |caller: Caller, - transient: u32, - key_ptr: u32, - key_len: u32, - value_ptr: u32, - value_len: u32| - -> Result { - let (caller, transaction) = caller.split(); - - assert_eq!( - key_len as usize, - revive_common::BYTE_LENGTH_WORD, - "storage key must be 32 bytes" - ); - assert_eq!( - value_len as usize, - revive_common::BYTE_LENGTH_WORD, - "storage value must be 32 bytes" - ); - - let key = caller.read_memory_into_vec(key_ptr, key_len)?; - let value = caller.read_memory_into_vec(value_ptr, value_len)?; - - let key = U256::from_le_bytes::<32>(key.try_into().unwrap()); - let value = U256::from_le_bytes::<32>(value.try_into().unwrap()); - - log::info!("set storage {key} = {value}"); - - let storage = if transient == 0 { - &mut transaction.top_account_mut().storage - } else { - &mut transaction.transient_account_mut().storage - }; - storage.insert(key, value); - - Ok(0) - }, - ) - .unwrap(); - - linker - .func_wrap( - runtime_api::imports::GET_STORAGE, - |caller: Caller, - transient: u32, - key_ptr: u32, - key_len: u32, - out_ptr: u32, - out_len_ptr: u32| - -> Result { - let (mut caller, transaction) = caller.split(); - - let key = caller.read_memory_into_vec(key_ptr, key_len)?; - let out_len = caller.read_u32(out_len_ptr)? as usize; - assert_eq!( - out_len, - revive_common::BYTE_LENGTH_WORD, - "spurious output buffer size: {out_len}" - ); - - let key = U256::from_le_bytes::<32>(key.try_into().unwrap()); - - let storage = if transient == 0 { - &transaction.top_account_mut().storage - } else { - &transaction.transient_account_mut().storage - }; - let value = storage.get(&key).cloned().unwrap_or_default(); - - log::info!("get storage {key} = {value}"); - - caller.write_memory(out_ptr, &value.to_le_bytes::<32>())?; - caller.write_memory(out_len_ptr, &32u32.to_le_bytes())?; - - Ok(0) - }, - ) - .unwrap(); - - linker - .func_wrap( - runtime_api::imports::HASH_KECCAK_256, - |caller: Caller, - input_ptr: u32, - input_len: u32, - out_ptr: u32| - -> Result<(), Trap> { - let (mut caller, _) = caller.split(); - - let pre = caller.read_memory_into_vec(input_ptr, input_len)?; - - let mut hasher = Keccak256::new(); - hasher.update(&pre); - caller.write_memory(out_ptr, &hasher.finalize()[..])?; - - Ok(()) - }, - ) - .unwrap(); - - linker - .func_wrap( - runtime_api::imports::NOW, - |caller: Caller, out_ptr: u32, out_len_ptr: u32| { - let (mut caller, _) = caller.split(); - - let out_len = caller.read_u32(out_len_ptr)? as usize; - assert_eq!( - out_len, - revive_common::BYTE_LENGTH_BLOCK_TIMESTAMP, - "spurious output buffer size: {out_len}" - ); - - caller.write_memory(out_ptr, &State::BLOCK_TIMESTAMP.to_le_bytes())?; - caller.write_memory(out_len_ptr, &64u32.to_le_bytes())?; - - Ok(()) - }, - ) - .unwrap(); - - linker - .func_wrap( - runtime_api::imports::BLOCK_NUMBER, - |caller: Caller, out_ptr: u32, out_len_ptr: u32| { - let (mut caller, _) = caller.split(); - - let out_len = caller.read_u32(out_len_ptr)? as usize; - assert_eq!( - out_len, - revive_common::BYTE_LENGTH_BLOCK_NUMBER, - "spurious output buffer size: {out_len}" - ); - - caller.write_memory(out_ptr, &State::BLOCK_NUMBER.to_le_bytes())?; - caller.write_memory(out_len_ptr, &64u32.to_le_bytes())?; - - Ok(()) - }, - ) - .unwrap(); - - linker - .func_wrap( - runtime_api::imports::ADDRESS, - |caller: Caller, out_ptr: u32, out_len_ptr: u32| { - let (mut caller, transaction) = caller.split(); - - let out_len = caller.read_u32(out_len_ptr)? as usize; - assert_eq!( - out_len, - revive_common::BYTE_LENGTH_ETH_ADDRESS, - "spurious output buffer size: {out_len}" - ); - - let address = transaction.top_frame().callee.as_slice(); - caller.write_memory(out_ptr, address)?; - caller.write_memory(out_len_ptr, &(address.len() as u32).to_le_bytes())?; - - Ok(()) - }, - ) - .unwrap(); - - linker - .func_wrap( - runtime_api::imports::CALLER, - |caller: Caller, out_ptr: u32, out_len_ptr: u32| { - let (mut caller, transaction) = caller.split(); - - let out_len = caller.read_u32(out_len_ptr)? as usize; - assert_eq!( - out_len, - revive_common::BYTE_LENGTH_ETH_ADDRESS, - "spurious output buffer size: {out_len}" - ); - - let address = transaction.top_frame().caller.as_slice(); - caller.write_memory(out_ptr, address)?; - caller.write_memory(out_len_ptr, &(address.len() as u32).to_le_bytes())?; - - Ok(()) - }, - ) - .unwrap(); - - linker - .func_wrap( - runtime_api::imports::DEPOSIT_EVENT, - |caller: Caller, - topics_ptr: u32, - topics_len: u32, - data_ptr: u32, - data_len: u32| { - let (caller, transaction) = caller.split(); - - let address = transaction.top_frame().callee; - let data = if data_len != 0 { - caller.read_memory_into_vec(data_ptr, data_len)? - } else { - Default::default() - }; - let topics = if topics_len != 0 { - caller - .read_memory_into_vec(topics_ptr, topics_len)? - .chunks(32) - .map(|chunk| U256::from_be_slice(chunk)) - .collect() - } else { - Default::default() - }; - - transaction.top_frame_mut().output.events.push(Event { - address, - data, - topics, - }); - - Ok(()) - }, - ) - .unwrap(); - - linker - .func_wrap( - runtime_api::imports::INSTANTIATE, - |caller: Caller, argument_ptr: u32| { - let (mut caller, transaction) = caller.split(); - - #[derive(Debug)] - #[repr(packed)] - struct Arguments { - code_hash_ptr: u32, - ref_time_limit: u64, - proof_size_limit: u64, - deposit_ptr: u32, - value_ptr: u32, - input_data_ptr: u32, - input_data_len: u32, - address_ptr: u32, - address_len_ptr: u32, - output_ptr: u32, - output_len_ptr: u32, - salt_ptr: u32, - salt_len: u32, - } - let mut buffer = [0; std::mem::size_of::()]; - caller.read_memory_into_slice(argument_ptr, &mut buffer)?; - let arguments: Arguments = unsafe { std::mem::transmute(buffer) }; - - assert_eq!({ arguments.ref_time_limit }, 0); - assert_eq!({ arguments.proof_size_limit }, 0); - assert_eq!({ arguments.deposit_ptr }, u32::MAX); - assert_eq!({ arguments.output_ptr }, u32::MAX); - assert_eq!({ arguments.output_len_ptr }, u32::MAX); - assert_eq!({ arguments.salt_len }, 32); - - if transaction.stack.len() >= Transaction::CALL_STACK_SIZE { - log::info!("deployment faild: maximum stack depth reached"); - caller.write_memory(arguments.address_ptr, &Address::ZERO.0 .0)?; - return Ok(()); - } - - let blob_hash = caller.read_memory_into_vec(arguments.code_hash_ptr, 32)?; - let blob_hash = B256::from_slice(&blob_hash); - let value = caller.read_memory_into_vec(arguments.value_ptr, 20)?; - let input_data = caller - .read_memory_into_vec(arguments.input_data_ptr, arguments.input_data_len)?; - - let address_len = caller.read_u32(arguments.address_len_ptr)?; - assert_eq!(address_len, 20); - - let salt = caller.read_memory_into_vec(arguments.salt_ptr, arguments.salt_len)?; - let salt = B256::from_slice(&salt); - let address = transaction.create2(salt, blob_hash); - if transaction.state.accounts.contains_key(&address) { - log::info!("deployment failed: address {address} already exists"); - caller.write_memory(arguments.address_ptr, &Address::ZERO.0 .0)?; - return Ok(()); - } - - let amount = U256::from_le_slice(&value); - match transaction.top_account_mut().value.checked_sub(amount) { - Some(deducted) => transaction.top_account_mut().value = deducted, - None => { - log::info!("deployment failed: insufficient balance {amount}"); - caller.write_memory(arguments.address_ptr, &Address::ZERO.0 .0)?; - return Ok(()); - } - } - - let (state, output) = transaction - .state - .clone() - .transaction() - .callee(address) - .deploy(transaction.state.blobs.get(&blob_hash).unwrap(), Some(salt)) - .callvalue(amount) - .calldata(input_data) - .call(); - - let result = if output.flags == ReturnFlags::Success { - log::info!("deployment succeeded"); - transaction.state = state; - address - } else { - log::info!("deployment failed: callee reverted {:?}", output.flags); - Address::ZERO - }; - caller.write_memory(arguments.address_ptr, &result.0 .0)?; - - Ok(()) - }, - ) - .unwrap(); - - linker - .func_wrap( - runtime_api::imports::CALL, - |caller: Caller, argument_ptr: u32| -> Result { - let (mut caller, transaction) = caller.split(); - - #[derive(Debug)] - #[repr(packed)] - struct Arguments { - _flags: u32, - address_ptr: u32, - _ref_time_limit: u64, - proof_size_limit: u64, - deposit_ptr: u32, - value_ptr: u32, - input_data_ptr: u32, - input_data_len: u32, - output_ptr: u32, - output_len_ptr: u32, - } - let mut buffer = [0; std::mem::size_of::()]; - caller.read_memory_into_slice(argument_ptr, &mut buffer)?; - let arguments: Arguments = unsafe { std::mem::transmute(buffer) }; - - assert_eq!({ arguments.proof_size_limit }, 0); - assert_eq!({ arguments.deposit_ptr }, u32::MAX); - - let amount = if arguments.value_ptr != u32::MAX { - let value = caller.read_memory_into_vec(arguments.value_ptr, 32)?; - U256::from_le_slice(&value) - } else { - U256::ZERO - }; - - match transaction.top_account_mut().value.checked_sub(amount) { - Some(deducted) => transaction.top_account_mut().value = deducted, - None => { - log::info!("call failed: insufficient balance {amount}"); - return Ok(1); - } - } - - let bytes = caller.read_memory_into_vec(arguments.address_ptr, 32)?; - let word = U256::from_le_slice(&bytes); - let address = Address::from_word(word.into()); - log::info!("call {address}"); - - if !transaction.state.accounts.contains_key(&address) { - log::info!( - "balance transfer {amount} from {} to {address}", - transaction.top_frame().callee - ); - - transaction - .state - .accounts - .entry(address) - .or_insert_with(|| Account { - value: amount, - contract: None, - storage: Default::default(), - }); - - return Ok(0); - } - - if transaction.stack.len() >= Transaction::CALL_STACK_SIZE { - log::info!("deployment faild: maximum stack depth reached"); - return Ok(1); - } - - let calldata = caller - .read_memory_into_vec(arguments.input_data_ptr, arguments.input_data_len)?; - - let (state, output) = transaction - .state - .clone() - .transaction() - .callee(address) - .callvalue(amount) - .calldata(calldata) - .call(); - - let bytes_to_copy = caller.read_u32(arguments.output_len_ptr)? as usize; - let output_size = output.data.len(); - assert!( - bytes_to_copy <= output_size, - "output buffer of {bytes_to_copy}b too small for {output_size}b" - ); - - transaction.top_frame_mut().returndata = output.data.to_vec(); - caller.write_memory( - arguments.output_ptr, - &transaction.top_frame().returndata[..bytes_to_copy], - )?; - caller.write_memory(arguments.output_len_ptr, &output.data.len().to_le_bytes())?; - assert_eq!( - transaction.top_frame().returndata.len(), - caller.read_u32(arguments.output_len_ptr)? as usize - ); - - let success = if output.flags == ReturnFlags::Success { - log::info!("call succeeded"); - transaction.state = state; - 0 - } else { - log::info!("call failed: callee reverted {:?}", output.flags); - 1 - }; - - Ok(success) - }, - ) - .unwrap(); - - linker - .func_wrap( - runtime_api::imports::CODE_SIZE, - |caller: Caller, address_ptr: u32| { - let (caller, transaction) = caller.split(); - - let address = if address_ptr == u32::MAX { - transaction.top_frame().callee - } else { - let bytes = caller.read_memory_into_vec(address_ptr, 32)?; - let word = U256::from_le_slice(&bytes); - Address::from_word(word.into()) - }; - - let code_size = transaction - .state - .accounts - .get(&address) - .and_then(|account| account.contract) - .and_then(|blob_hash| transaction.state.blobs.get(&blob_hash)) - .map(|code| code.len()) - .unwrap_or_default() as u32; - - log::info!("code size of {address} = {code_size}"); - - Ok(code_size) - }, - ) - .unwrap(); - - linker - .func_wrap( - runtime_api::imports::RETURNDATACOPY, - |caller: Caller, - destination_ptr: u32, - offset: u32, - size: u32| - -> Result<(), Trap> { - let (mut caller, transaction) = caller.split(); - - let offset = offset as usize; - let slice_end = offset - .checked_add(size as usize) - .expect("offset + size overflows"); - - assert!( - slice_end <= transaction.top_frame().returndata.len(), - "offset + size is larger than RETURNDATASIZE" - ); - - caller.write_memory( - destination_ptr, - &transaction.top_frame().returndata[offset..slice_end], - )?; - - Ok(()) - }, - ) - .unwrap(); - - linker - .func_wrap( - runtime_api::imports::BALANCE, - |caller: Caller, address_ptr: u32, balance_ptr: u32| -> Result<(), Trap> { - let (mut caller, transaction) = caller.split(); - - let bytes = caller.read_memory_into_vec(address_ptr, 32)?; - let word = U256::from_le_slice(&bytes); - let address = Address::from_word(word.into()); - let balance = transaction - .state - .accounts() - .get(&address) - .map(|account| account.value) - .unwrap_or(U256::default()); - - caller.write_memory(balance_ptr, &balance.to_le_bytes::<32>())?; - - log::info!("account {address} balance {balance}"); - - Ok(()) - }, - ) - .unwrap(); - - linker -} - -pub fn setup(config: Option) -> Engine { - Engine::new(&config.unwrap_or_default()).unwrap() -} - -pub fn recompile_code(code: &[u8], engine: &Engine) -> Module { - let mut module_config = ModuleConfig::new(); - module_config.set_gas_metering(Some(GasMeteringKind::Sync)); - - Module::new(engine, &module_config, code.into()).unwrap() -} - -pub fn instantiate_module( - module: &Module, - engine: &Engine, -) -> (Instance, ExportIndex) { - let export = module.lookup_export(runtime_api::imports::CALL).unwrap(); - let func = link_host_functions(engine).instantiate_pre(module).unwrap(); - let instance = func.instantiate().unwrap(); - - (instance, export) -} - -pub fn prepare(code: &[u8], config: Option) -> (Instance, ExportIndex) { - let blob = ProgramBlob::parse(code.into()) - .unwrap_or_else(|err| panic!("{err}\n{}", hex::encode(code))); - - let engine = Engine::new(&config.unwrap_or_default()).unwrap(); - - let mut module_config = ModuleConfig::new(); - module_config.set_gas_metering(Some(GasMeteringKind::Sync)); - - let module = Module::from_blob(&engine, &module_config, blob).unwrap(); - let export = module.lookup_export(runtime_api::exports::CALL).unwrap(); - let func = link_host_functions(&engine) - .instantiate_pre(&module) - .unwrap(); - let instance = func.instantiate().unwrap(); - - (instance, export) -} - -fn init_logs() { - if std::env::var("RUST_LOG").is_ok() { - #[cfg(test)] - let test = true; - #[cfg(not(test))] - let test = false; - let _ = env_logger::builder().is_test(test).try_init(); - } -} diff --git a/crates/integration/src/tests.rs b/crates/integration/src/tests.rs index ca08bff..2dfa34e 100644 --- a/crates/integration/src/tests.rs +++ b/crates/integration/src/tests.rs @@ -1,294 +1,257 @@ use std::str::FromStr; -use alloy_primitives::{keccak256, Address, FixedBytes, B256, I256, U256}; -use alloy_sol_types::{sol, SolCall, SolValue}; -use rayon::iter::{IntoParallelRefIterator, ParallelIterator}; -use sha1::Digest; +use alloy_primitives::*; +use revive_runner::*; +use SpecsAction::*; -use revive_solidity::test_utils::*; +use crate::cases::Contract; -use crate::{ - assert_success, - cases::Contract, - mock_runtime::{self, ReturnFlags, State, Transaction}, -}; +macro_rules! test_spec { + ($test_name:ident, $contract_name:literal, $source_file:literal) => { + #[test] + fn $test_name() { + let manifest_dir = std::env::var("CARGO_MANIFEST_DIR").expect("should always exist"); + let path = format!("{manifest_dir}/../integration/contracts/{}", $source_file); + specs_from_comment($contract_name, &path).remove(0).run(); + } + }; +} -#[test] -fn fibonacci() { - let parameter = 6; +test_spec!(baseline, "Baseline", "Baseline.sol"); +test_spec!(flipper, "Flipper", "flipper.sol"); +test_spec!(fibonacci_recursive, "FibonacciRecursive", "Fibonacci.sol"); +test_spec!(fibonacci_iterative, "FibonacciIterative", "Fibonacci.sol"); +test_spec!(fibonacci_binet, "FibonacciBinet", "Fibonacci.sol"); +test_spec!(hash_keccak_256, "TestSha3", "Crypto.sol"); +test_spec!(erc20, "ERC20", "ERC20.sol"); +test_spec!(computation, "Computation", "Computation.sol"); +test_spec!(msize, "MSize", "MSize.sol"); +test_spec!(transferred_value, "Value", "Value.sol"); +test_spec!(sha1, "SHA1", "SHA1.sol"); +test_spec!(block, "Block", "Block.sol"); +test_spec!(mcopy, "MCopy", "MCopy.sol"); +test_spec!(events, "Events", "Events.sol"); +test_spec!(storage, "Storage", "Storage.sol"); +test_spec!(mstore8, "MStore8", "MStore8.sol"); - for contract in [ - Contract::fib_recursive(U256::from(parameter)), - Contract::fib_iterative(U256::from(parameter)), - Contract::fib_binet(U256::from(parameter)), - ] { - let (_, output) = assert_success(&contract, true); - let received = U256::from_be_bytes::<32>(output.data.try_into().unwrap()); - let expected = U256::from(8); - assert_eq!(received, expected); +fn instantiate(path: &str, contract: &str) -> Vec { + vec![Instantiate { + origin: TestAccountId::Alice, + value: 0, + gas_limit: Some(GAS_LIMIT), + storage_deposit_limit: None, + code: Code::Solidity { + path: Some(path.into()), + contract: contract.to_string(), + solc_optimizer: None, + pipeline: None, + }, + data: vec![], + salt: vec![], + }] +} + +fn run_differential(actions: Vec) { + Specs { + differential: true, + balances: vec![(ALICE, 1_000_000_000)], + actions, } + .run(); } #[test] -fn flipper() { - let (state, address) = State::new_deployed(Contract::flipper_constructor(true)); +fn bitwise_byte() { + let mut actions = instantiate("contracts/Bitwise.sol", "Bitwise"); - let contract = Contract::flipper(); - let (state, output) = state - .transaction() - .calldata(contract.calldata.clone()) - .callee(address) - .call(); - assert_eq!(output.flags, ReturnFlags::Success); - state.assert_storage_key(address, U256::ZERO, U256::ZERO); - - let (state, output) = state - .transaction() - .calldata(contract.calldata) - .callee(address) - .call(); - assert_eq!(output.flags, ReturnFlags::Success); - state.assert_storage_key(address, U256::ZERO, U256::from(1)); -} - -#[test] -fn hash_keccak_256() { - sol!( - #[derive(Debug, PartialEq, Eq)] - contract TestSha3 { - function test(string memory _pre) external payable returns (bytes32); - } - ); - let source = r#"contract TestSha3 { - function test(string memory _pre) external payable returns (bytes32 hash) { - hash = keccak256(bytes(_pre)); - } - }"#; - let code = compile_blob("TestSha3", source); - - let param = "hello"; - let input = TestSha3::testCall::new((param.to_string(),)).abi_encode(); - - let (_, output) = State::default() - .transaction() - .with_default_account(&code) - .calldata(input) - .call(); - - assert_eq!(output.flags, ReturnFlags::Success); - - let expected = keccak256(param.as_bytes()); - let received = FixedBytes::<32>::from_slice(&output.data); - assert_eq!(received, expected); -} - -#[test] -fn erc20() { - let _ = compile_blob("ERC20", include_str!("../contracts/ERC20.sol")); -} - -#[test] -fn triangle_number() { - let (_, output) = assert_success(&Contract::triangle_number(13), true); - let received = U256::from_be_bytes::<32>(output.data.try_into().unwrap()); - let expected = U256::try_from(91).unwrap(); - assert_eq!(received, expected); -} - -#[test] -fn odd_product() { - let (_, output) = assert_success(&Contract::odd_product(5), true); - let received = I256::from_be_bytes::<32>(output.data.try_into().unwrap()); - let expected = I256::try_from(945i64).unwrap(); - assert_eq!(received, expected); -} - -#[test] -fn msize_plain() { - sol!( - #[derive(Debug, PartialEq, Eq)] - contract MSize { - function mSize() public pure returns (uint); - } - ); - let code = compile_blob_with_options( - "MSize", - include_str!("../contracts/MSize.sol"), - false, - revive_solidity::SolcPipeline::EVMLA, - ); - - let input = MSize::mSizeCall::new(()).abi_encode(); - let (_, output) = State::default() - .transaction() - .calldata(input) - .with_default_account(&code) - .call(); - - assert_eq!(output.flags, ReturnFlags::Success); - - // Solidity always stores the "free memory pointer" (32 byte int) at offset 64. - let expected = U256::try_from(64 + 32).unwrap(); - let received = U256::from_be_bytes::<32>(output.data.try_into().unwrap()); - assert_eq!(received, expected); -} - -#[test] -fn transferred_value() { - sol!( - contract Value { - function value() public payable returns (uint); - } - ); - let code = compile_blob("Value", include_str!("../contracts/Value.sol")); - - let (_, output) = State::default() - .transaction() - .calldata(Value::valueCall::SELECTOR.to_vec()) - .callvalue(U256::from(123)) - .with_default_account(&code) - .call(); - - assert_eq!(output.flags, ReturnFlags::Success); - - let expected = I256::try_from(123).unwrap(); - let received = I256::from_be_bytes::<32>(output.data.try_into().unwrap()); - assert_eq!(received, expected); -} - -#[test] -fn msize_non_word_sized_access() { - sol!( - #[derive(Debug, PartialEq, Eq)] - contract MSize { - function mStore100() public pure returns (uint); - } - ); - let code = compile_blob_with_options( - "MSize", - include_str!("../contracts/MSize.sol"), - false, - revive_solidity::SolcPipeline::Yul, - ); - - let input = MSize::mStore100Call::new(()).abi_encode(); - let (_, output) = State::default() - .transaction() - .with_default_account(&code) - .calldata(input) - .call(); - - assert_eq!(output.flags, ReturnFlags::Success); - - // https://docs.zksync.io/build/developer-reference/differences-with-ethereum.html#mstore-mload - // "Unlike EVM, where the memory growth is in words, on zkEVM the memory growth is counted in bytes." - // "For example, if you write mstore(100, 0) the msize on zkEVM will be 132, but on the EVM it will be 160." - let expected = U256::try_from(132).unwrap(); - let received = U256::from_be_bytes::<32>(output.data.try_into().unwrap()); - assert_eq!(received, expected); -} - -#[test] -fn mstore8() { - for (received, expected) in [ - (U256::MIN, U256::MIN), - ( - U256::from(1), - U256::from_str_radix( - "452312848583266388373324160190187140051835877600158453279131187530910662656", - 10, - ) - .unwrap(), - ), - ( - U256::from(2), - U256::from_str_radix( - "904625697166532776746648320380374280103671755200316906558262375061821325312", - 10, - ) - .unwrap(), - ), - ( - U256::from(255), - U256::from_str_radix( - "115339776388732929035197660848497720713218148788040405586178452820382218977280", - 10, - ) - .unwrap(), - ), - (U256::from(256), U256::from(0)), - ( - U256::from(257), - U256::from_str_radix( - "452312848583266388373324160190187140051835877600158453279131187530910662656", - 10, - ) - .unwrap(), - ), - ( - U256::from(258), - U256::from_str_radix( - "904625697166532776746648320380374280103671755200316906558262375061821325312", - 10, - ) - .unwrap(), - ), - ( - U256::from(123456789), - U256::from_str_radix( - "9498569820248594155839807363993929941088553429603327518861754938149123915776", - 10, - ) - .unwrap(), - ), - ( - U256::MAX, - U256::from_str_radix( - "115339776388732929035197660848497720713218148788040405586178452820382218977280", - 10, - ) - .unwrap(), - ), - ] - .par_iter() - .map(|(parameter, expected)| { - let (_, output) = assert_success(&Contract::mstore8(*parameter), true); - let received = U256::from_be_bytes::<32>(output.data.try_into().unwrap()); - (received, *expected) - }) - .collect::>() + let de_bruijn_sequence = + hex::decode("4060503824160d0784426150b864361d0f88c4a27148ac5a2f198d46e391d8f4").unwrap(); + let value = U256::from_be_bytes::<32>(de_bruijn_sequence.clone().try_into().unwrap()); + for input in de_bruijn_sequence + .iter() + .enumerate() + .map(|(index, _)| Contract::bitwise_byte(U256::from(index), value).calldata) + .chain([ + Contract::bitwise_byte(U256::ZERO, U256::ZERO).calldata, + Contract::bitwise_byte(U256::ZERO, U256::MAX).calldata, + Contract::bitwise_byte(U256::MAX, U256::ZERO).calldata, + Contract::bitwise_byte(U256::from_str("18446744073709551619").unwrap(), U256::MAX) + .calldata, + ]) { - assert_eq!(received, expected); + actions.push(Call { + origin: TestAccountId::Alice, + dest: TestAccountId::Instantiated(0), + value: 0, + gas_limit: None, + storage_deposit_limit: None, + data: input, + }) + } + + run_differential(actions); +} + +#[test] +fn unsigned_division() { + let mut actions = instantiate("contracts/DivisionArithmetics.sol", "DivisionArithmetics"); + + let one = U256::from(1); + let two = U256::from(2); + let five = U256::from(5); + for (n, d) in [ + (five, five), + (five, one), + (U256::ZERO, U256::MAX), + (five, two), + (one, U256::ZERO), + ] { + actions.push(Call { + origin: TestAccountId::Alice, + dest: TestAccountId::Instantiated(0), + value: 0, + gas_limit: None, + storage_deposit_limit: None, + data: Contract::division_arithmetics_div(n, d).calldata, + }) + } + + run_differential(actions); +} + +#[test] +fn signed_division() { + let mut actions = instantiate("contracts/DivisionArithmetics.sol", "DivisionArithmetics"); + + let one = I256::try_from(1).unwrap(); + let two = I256::try_from(2).unwrap(); + let minus_two = I256::try_from(-2).unwrap(); + let five = I256::try_from(5).unwrap(); + let minus_five = I256::try_from(-5).unwrap(); + for (n, d) in [ + (five, five), + (five, one), + (I256::ZERO, I256::MAX), + (I256::ZERO, I256::MINUS_ONE), + (five, two), + (five, I256::MINUS_ONE), + (I256::MINUS_ONE, minus_two), + (minus_five, minus_five), + (minus_five, two), + (I256::MINUS_ONE, I256::MIN), + (one, I256::ZERO), + ] { + actions.push(Call { + origin: TestAccountId::Alice, + dest: TestAccountId::Instantiated(0), + value: 0, + gas_limit: None, + storage_deposit_limit: None, + data: Contract::division_arithmetics_sdiv(n, d).calldata, + }) + } + + run_differential(actions); +} + +#[test] +fn unsigned_remainder() { + let mut actions = instantiate("contracts/DivisionArithmetics.sol", "DivisionArithmetics"); + + let one = U256::from(1); + let two = U256::from(2); + let five = U256::from(5); + for (n, d) in [ + (five, five), + (five, one), + (U256::ZERO, U256::MAX), + (U256::MAX, U256::MAX), + (five, two), + (two, five), + (U256::MAX, U256::ZERO), + ] { + actions.push(Call { + origin: TestAccountId::Alice, + dest: TestAccountId::Instantiated(0), + value: 0, + gas_limit: None, + storage_deposit_limit: None, + data: Contract::division_arithmetics_mod(n, d).calldata, + }) + } + + run_differential(actions); +} + +#[test] +fn signed_remainder() { + let mut actions = instantiate("contracts/DivisionArithmetics.sol", "DivisionArithmetics"); + + let one = I256::try_from(1).unwrap(); + let two = I256::try_from(2).unwrap(); + let minus_two = I256::try_from(-2).unwrap(); + let five = I256::try_from(5).unwrap(); + let minus_five = I256::try_from(-5).unwrap(); + for (n, d) in [ + (five, five), + (five, one), + (I256::ZERO, I256::MAX), + (I256::MAX, I256::MAX), + (five, two), + (two, five), + (five, minus_five), + (five, I256::MINUS_ONE), + (five, minus_two), + (minus_five, two), + (minus_two, five), + (minus_five, minus_five), + (minus_five, I256::MINUS_ONE), + (minus_five, minus_two), + (minus_two, minus_five), + (I256::MIN, I256::MINUS_ONE), + (I256::ZERO, I256::ZERO), + ] { + actions.push(Call { + origin: TestAccountId::Alice, + dest: TestAccountId::Instantiated(0), + value: 0, + gas_limit: None, + storage_deposit_limit: None, + data: Contract::division_arithmetics_smod(n, d).calldata, + }) } } +/* #[test] -fn sha1() { - let pre = vec![0xffu8; 512]; - let mut hasher = sha1::Sha1::new(); - hasher.update(&pre); - let hash = hasher.finalize(); - - let (_, output) = assert_success(&Contract::sha1(pre), true); - let expected = FixedBytes::<20>::from_slice(&hash[..]); - let received = FixedBytes::<20>::from_slice(&output.data[..20]); - assert_eq!(received, expected); +fn events() { + assert_success(&Contract::event(U256::ZERO), true); + assert_success(&Contract::event(U256::from(123)), true); } #[test] -fn block_number() { - let (_, output) = assert_success(&Contract::block_number(), true); - let received = U256::from_be_bytes::<32>(output.data.try_into().unwrap()); - let expected = U256::from(mock_runtime::State::BLOCK_NUMBER); - assert_eq!(received, expected); -} +fn balance() { + let (_, output) = assert_success(&Contract::value_balance_of(Default::default()), false); -#[test] -fn block_timestamp() { - let (_, output) = assert_success(&Contract::block_timestamp(), true); - let received = U256::from_be_bytes::<32>(output.data.try_into().unwrap()); - let expected = U256::from(mock_runtime::State::BLOCK_TIMESTAMP); - assert_eq!(received, expected); + let expected = U256::ZERO; + let received = U256::from_be_slice(&output.data); + assert_eq!(expected, received); + + let expected = U256::from(54589); + let (mut state, address) = State::new_deployed(Contract::value_balance_of(Default::default())); + state.accounts_mut().get_mut(&address).unwrap().value = expected; + + let contract = Contract::value_balance_of(address); + let (_, output) = state + .transaction() + .with_default_account(&contract.pvm_runtime) + .calldata(contract.calldata) + .call(); + + assert_eq!(ReturnFlags::Success, output.flags); + + let received = U256::from_be_slice(&output.data); + assert_eq!(expected, received) } #[test] @@ -308,132 +271,6 @@ fn caller() { assert_eq!(received, expected); } -#[test] -fn unsigned_division() { - let one = U256::from(1); - let two = U256::from(2); - let five = U256::from(5); - for (received, expected) in [ - (five, five, one), - (five, one, five), - (U256::ZERO, U256::MAX, U256::ZERO), - (five, two, two), - (one, U256::ZERO, U256::ZERO), - ] - .par_iter() - .map(|(n, d, q)| { - let (_, output) = assert_success(&Contract::division_arithmetics_div(*n, *d), true); - let received = U256::from_be_bytes::<32>(output.data.try_into().unwrap()); - (received, *q) - }) - .collect::>() - { - assert_eq!(received, expected) - } -} - -#[test] -fn signed_division() { - let one = I256::try_from(1).unwrap(); - let two = I256::try_from(2).unwrap(); - let minus_two = I256::try_from(-2).unwrap(); - let five = I256::try_from(5).unwrap(); - let minus_five = I256::try_from(-5).unwrap(); - for (received, expected) in [ - (five, five, one), - (five, one, five), - (I256::ZERO, I256::MAX, I256::ZERO), - (I256::ZERO, I256::MINUS_ONE, I256::ZERO), - (five, two, two), - (five, I256::MINUS_ONE, minus_five), - (I256::MINUS_ONE, minus_two, I256::ZERO), - (minus_five, minus_five, one), - (minus_five, two, minus_two), - (I256::MINUS_ONE, I256::MIN, I256::ZERO), - (one, I256::ZERO, I256::ZERO), - ] - .par_iter() - .map(|(n, d, q)| { - let (_, output) = assert_success(&Contract::division_arithmetics_sdiv(*n, *d), true); - let received = I256::from_be_bytes::<32>(output.data.try_into().unwrap()); - (received, *q) - }) - .collect::>() - { - assert_eq!(received, expected); - } -} - -#[test] -fn unsigned_remainder() { - let one = U256::from(1); - let two = U256::from(2); - let five = U256::from(5); - for (received, expected) in [ - (five, five, U256::ZERO), - (five, one, U256::ZERO), - (U256::ZERO, U256::MAX, U256::ZERO), - (U256::MAX, U256::MAX, U256::ZERO), - (five, two, one), - (two, five, two), - (U256::MAX, U256::ZERO, U256::ZERO), - ] - .par_iter() - .map(|(n, d, q)| { - let (_, output) = assert_success(&Contract::division_arithmetics_mod(*n, *d), true); - let received = U256::from_be_bytes::<32>(output.data.try_into().unwrap()); - (received, *q) - }) - .collect::>() - { - assert_eq!(received, expected); - } -} - -#[test] -fn signed_remainder() { - let one = I256::try_from(1).unwrap(); - let two = I256::try_from(2).unwrap(); - let minus_two = I256::try_from(-2).unwrap(); - let five = I256::try_from(5).unwrap(); - let minus_five = I256::try_from(-5).unwrap(); - for (received, expected) in [ - (five, five, I256::ZERO), - (five, one, I256::ZERO), - (I256::ZERO, I256::MAX, I256::ZERO), - (I256::MAX, I256::MAX, I256::ZERO), - (five, two, one), - (two, five, two), - (five, minus_five, I256::ZERO), - (five, I256::MINUS_ONE, I256::ZERO), - (five, minus_two, one), - (minus_five, two, I256::MINUS_ONE), - (minus_two, five, minus_two), - (minus_five, minus_five, I256::ZERO), - (minus_five, I256::MINUS_ONE, I256::ZERO), - (minus_five, minus_two, I256::MINUS_ONE), - (minus_two, minus_five, minus_two), - (I256::MIN, I256::MINUS_ONE, I256::ZERO), - (I256::ZERO, I256::ZERO, I256::ZERO), - ] - .par_iter() - .map(|(n, d, q)| { - let (_, output) = assert_success(&Contract::division_arithmetics_smod(*n, *d), true); - let received = I256::from_be_bytes::<32>(output.data.try_into().unwrap()); - (received, *q) - }) - .collect::>() - { - assert_eq!(received, expected); - } -} - -#[test] -fn events() { - assert_success(&Contract::event(U256::ZERO), true); - assert_success(&Contract::event(U256::from(123)), true); -} - #[test] fn create2() { let mut state = State::default(); @@ -565,76 +402,4 @@ fn echo() { assert_eq!(expected, received); } - -#[test] -fn mcopy() { - let expected = vec![1, 2, 3]; - - let (_, output) = assert_success(&Contract::memcpy(expected.clone()), false); - - let received = alloy_primitives::Bytes::abi_decode(&output.data, true) - .unwrap() - .to_vec(); - - assert_eq!(expected, received); -} - -#[test] -fn balance() { - let (_, output) = assert_success(&Contract::value_balance_of(Default::default()), false); - - let expected = U256::ZERO; - let received = U256::from_be_slice(&output.data); - assert_eq!(expected, received); - - let expected = U256::from(54589); - let (mut state, address) = State::new_deployed(Contract::value_balance_of(Default::default())); - state.accounts_mut().get_mut(&address).unwrap().value = expected; - - let contract = Contract::value_balance_of(address); - let (_, output) = state - .transaction() - .with_default_account(&contract.pvm_runtime) - .calldata(contract.calldata) - .call(); - - assert_eq!(ReturnFlags::Success, output.flags); - - let received = U256::from_be_slice(&output.data); - assert_eq!(expected, received) -} - -#[test] -fn bitwise_byte() { - assert_success(&Contract::bitwise_byte(U256::ZERO, U256::ZERO), true); - assert_success(&Contract::bitwise_byte(U256::ZERO, U256::MAX), true); - assert_success(&Contract::bitwise_byte(U256::MAX, U256::ZERO), true); - assert_success( - &Contract::bitwise_byte(U256::from_str("18446744073709551619").unwrap(), U256::MAX), - true, - ); - - let de_bruijn_sequence = - hex::decode("4060503824160d0784426150b864361d0f88c4a27148ac5a2f198d46e391d8f4").unwrap(); - let value = U256::from_be_bytes::<32>(de_bruijn_sequence.clone().try_into().unwrap()); - - for (index, byte) in de_bruijn_sequence.iter().enumerate() { - let (_, output) = assert_success(&Contract::bitwise_byte(U256::from(index), value), true); - let expected = U256::from(*byte as i32); - let received = U256::abi_decode(&output.data, true).unwrap(); - assert_eq!(expected, received) - } -} - -#[test] -fn transient_storage() { - let expected = U256::MAX; - let (state, output) = assert_success(&Contract::storage_transient(expected), false); - let received = U256::abi_decode(&output.data, true).unwrap(); - assert_eq!(expected, received); - - assert!(state - .accounts() - .values() - .all(|account| account.storage.is_empty())); -} +*/ diff --git a/crates/llvm-context/Cargo.toml b/crates/llvm-context/Cargo.toml index 8dc66b9..715e336 100644 --- a/crates/llvm-context/Cargo.toml +++ b/crates/llvm-context/Cargo.toml @@ -34,7 +34,7 @@ polkavm-disassembler = { workspace = true } polkavm-common = { workspace = true } revive-common = { workspace = true } -pallet-contracts-pvm-llapi = { workspace = true } +revive-runtime-api = { workspace = true } revive-linker = { workspace = true } revive-builtins = { workspace = true } revive-stdlib = { workspace = true } diff --git a/crates/llvm-context/src/polkavm/const/runtime_api.rs b/crates/llvm-context/src/polkavm/const/runtime_api.rs index 01b65ac..3929004 100644 --- a/crates/llvm-context/src/polkavm/const/runtime_api.rs +++ b/crates/llvm-context/src/polkavm/const/runtime_api.rs @@ -19,7 +19,7 @@ pub mod imports { pub static BLOCK_NUMBER: &str = "block_number"; - pub static CALL: &str = "seal_call"; + pub static CALL: &str = "call"; pub static CALLER: &str = "caller"; diff --git a/crates/llvm-context/src/polkavm/context/function/runtime/entry.rs b/crates/llvm-context/src/polkavm/context/function/runtime/entry.rs index 46f8ad7..28ef499 100644 --- a/crates/llvm-context/src/polkavm/context/function/runtime/entry.rs +++ b/crates/llvm-context/src/polkavm/context/function/runtime/entry.rs @@ -233,11 +233,12 @@ where fn declare(&mut self, context: &mut Context) -> anyhow::Result<()> { let entry_arguments = vec![context.bool_type().as_basic_type_enum()]; let entry_function_type = context.function_type(entry_arguments, 0, false); - context.add_function(runtime::FUNCTION_ENTRY, entry_function_type, 0, None)?; - - for symbol in runtime_api::exports::EXPORTS { - context.declare_extern_function(symbol)?; - } + context.add_function( + runtime::FUNCTION_ENTRY, + entry_function_type, + 0, + Some(inkwell::module::Linkage::External), + )?; Ok(()) } @@ -258,26 +259,6 @@ where true, ); - context.set_current_function(runtime_api::exports::DEPLOY)?; - context.set_basic_block(context.current_function().borrow().entry_block()); - - assert!(context - .build_call(entry, &[context.bool_const(true).into()], "entry_deploy") - .is_none()); - - context.set_basic_block(context.current_function().borrow().return_block); - context.build_unreachable(); - - context.set_current_function(runtime_api::exports::CALL)?; - context.set_basic_block(context.current_function().borrow().entry_block()); - - assert!(context - .build_call(entry, &[context.bool_const(false).into()], "entry_call") - .is_none()); - - context.set_basic_block(context.current_function().borrow().return_block); - context.build_unreachable(); - context.set_current_function(runtime::FUNCTION_ENTRY)?; context.set_basic_block(context.current_function().borrow().entry_block()); diff --git a/crates/llvm-context/src/polkavm/context/mod.rs b/crates/llvm-context/src/polkavm/context/mod.rs index 931f9da..c739b00 100644 --- a/crates/llvm-context/src/polkavm/context/mod.rs +++ b/crates/llvm-context/src/polkavm/context/mod.rs @@ -124,27 +124,17 @@ where .expect("the stdlib module should be linkable"); } - /// Link in the PolkaVM guest module, containing imported and exported functions, + /// Link in the PolkaVM imports module, containing imported functions, /// and marking them as external (they need to be relocatable as too). - fn link_polkavm_guest_module( + fn link_polkavm_imports( llvm: &'ctx inkwell::context::Context, module: &inkwell::module::Module<'ctx>, ) { module .link_in_module( - pallet_contracts_pvm_llapi::polkavm_guest::module(llvm, "polkavm_guest").unwrap(), + revive_runtime_api::polkavm_imports::module(llvm, "polkavm_imports").unwrap(), ) - .expect("the PolkaVM guest API module should be linkable"); - - for export in runtime_api::exports::EXPORTS { - module - .get_function(export) - .expect("should be declared") - .add_attribute( - inkwell::attributes::AttributeLoc::Function, - llvm.create_enum_attribute(Attribute::NoReturn as u32, 0), - ); - } + .expect("the PolkaVM imports module should be linkable"); for import in runtime_api::imports::IMPORTS { module @@ -154,6 +144,24 @@ where } } + fn link_polkavm_exports(&self, contract_path: &str) -> anyhow::Result<()> { + let exports = revive_runtime_api::polkavm_exports::module(self.llvm(), "polkavm_exports") + .map_err(|error| { + anyhow::anyhow!( + "The contract `{}` exports module loading error: {}", + contract_path, + error + ) + })?; + self.module.link_in_module(exports).map_err(|error| { + anyhow::anyhow!( + "The contract `{}` exports module linking error: {}", + contract_path, + error + ) + }) + } + /// Configure the PolkaVM minimum stack size. fn set_polkavm_stack_size( llvm: &'ctx inkwell::context::Context, @@ -161,7 +169,7 @@ where size: u32, ) { module - .link_in_module(pallet_contracts_pvm_llapi::polkavm_guest::min_stack_size( + .link_in_module(revive_runtime_api::calling_convention::min_stack_size( llvm, "polkavm_stack_size", size, @@ -191,7 +199,7 @@ where debug_config: Option, ) -> Self { Self::link_stdlib_module(llvm, &module); - Self::link_polkavm_guest_module(llvm, &module); + Self::link_polkavm_imports(llvm, &module); Self::set_polkavm_stack_size(llvm, &module, Self::POLKAVM_STACK_SIZE); Self::set_module_flags(llvm, &module); @@ -230,6 +238,8 @@ where ) -> anyhow::Result { let module_clone = self.module.clone(); + self.link_polkavm_exports(contract_path)?; + let target_machine = TargetMachine::new(Target::PVM, self.optimizer.settings())?; target_machine.set_target_data(self.module()); @@ -688,8 +698,14 @@ where self.builder() .build_store(storage_key_pointer.value, storage_key_value)?; - let (storage_value_pointer, storage_value_length_pointer) = self - .build_stack_parameter(revive_common::BIT_LENGTH_WORD, "storage_value_pointer"); + let storage_value_pointer = + self.build_alloca(self.word_type(), "storage_value_pointer"); + let storage_value_length_pointer = + self.build_alloca(self.xlen_type(), "storage_value_length_pointer"); + self.build_store( + storage_value_length_pointer, + self.word_const(revive_common::BIT_LENGTH_WORD as u64), + )?; let transient = pointer.address_space == AddressSpace::TransientStorage; diff --git a/crates/llvm-context/src/polkavm/evm/call.rs b/crates/llvm-context/src/polkavm/evm/call.rs index 1215400..804291f 100644 --- a/crates/llvm-context/src/polkavm/evm/call.rs +++ b/crates/llvm-context/src/polkavm/evm/call.rs @@ -57,9 +57,9 @@ where let output_length_pointer = context.get_global(crate::polkavm::GLOBAL_RETURN_DATA_SIZE)?; context.build_store(output_length_pointer.into(), output_length)?; - let argument_pointer = pallet_contracts_pvm_llapi::calling_convention::Spill::new( + let argument_pointer = revive_runtime_api::calling_convention::Spill::new( context.builder(), - pallet_contracts_pvm_llapi::calling_convention::call(context.llvm()), + revive_runtime_api::calling_convention::call(context.llvm()), "call_arguments", )? .next(context.xlen_type().const_int(flags as u64, false))? diff --git a/crates/llvm-context/src/polkavm/evm/context.rs b/crates/llvm-context/src/polkavm/evm/context.rs index e270da4..ee16b79 100644 --- a/crates/llvm-context/src/polkavm/evm/context.rs +++ b/crates/llvm-context/src/polkavm/evm/context.rs @@ -38,12 +38,12 @@ where /// Translates the `chain_id` instruction. pub fn chain_id<'ctx, D>( - _context: &mut Context<'ctx, D>, + context: &mut Context<'ctx, D>, ) -> anyhow::Result> where D: Dependency + Clone, { - todo!() + Ok(context.word_const(0).as_basic_value_enum()) } /// Translates the `block_number` instruction. diff --git a/crates/llvm-context/src/polkavm/evm/create.rs b/crates/llvm-context/src/polkavm/evm/create.rs index ecb1967..a60ed8d 100644 --- a/crates/llvm-context/src/polkavm/evm/create.rs +++ b/crates/llvm-context/src/polkavm/evm/create.rs @@ -58,9 +58,9 @@ where context.build_stack_parameter(revive_common::BIT_LENGTH_ETH_ADDRESS, "address_pointer"); context.build_store(address_pointer, context.word_const(0))?; - let argument_pointer = pallet_contracts_pvm_llapi::calling_convention::Spill::new( + let argument_pointer = revive_runtime_api::calling_convention::Spill::new( context.builder(), - pallet_contracts_pvm_llapi::calling_convention::instantiate(context.llvm()), + revive_runtime_api::calling_convention::instantiate(context.llvm()), "create2_arguments", )? .next(code_hash_pointer.value)? diff --git a/crates/pallet-contracts-pvm-llapi/src/lib.rs b/crates/pallet-contracts-pvm-llapi/src/lib.rs deleted file mode 100644 index 34648d5..0000000 --- a/crates/pallet-contracts-pvm-llapi/src/lib.rs +++ /dev/null @@ -1,2 +0,0 @@ -pub mod calling_convention; -pub mod polkavm_guest; diff --git a/crates/runner/Cargo.toml b/crates/runner/Cargo.toml index 21d8598..6008e2d 100644 --- a/crates/runner/Cargo.toml +++ b/crates/runner/Cargo.toml @@ -4,14 +4,25 @@ version.workspace = true license.workspace = true edition.workspace = true repository.workspace = true -repository.authors = true -descritption = "Execute revive contracts in a simulated blockchain runtime" +authors.workspace = true +description = "Execute revive contracts in a simulated blockchain runtime" [dependencies] serde = { workspace = true } serde_json = { workspace = true } +hex = { workspace = true, features = ["serde"] } codec = { workspace = true, default-features = false } scale-info = { workspace = true, default-features = false } -polkadot-sdk = { workspace = true, features = ["experimental", "runtime"] } +alloy-primitives = { workspace = true } +polkadot-sdk.workspace = true +polkadot-sdk.features = [ + "experimental", + "runtime", + "polkadot-runtime-common", + "pallet-revive", + "pallet-balances", + "pallet-timestamp" +] -revive-solidity = { workspace = true } \ No newline at end of file +revive-solidity = { workspace = true } +revive-differential = { workspace = true } diff --git a/crates/runner/src/lib.rs b/crates/runner/src/lib.rs index c47a428..da7fc7e 100644 --- a/crates/runner/src/lib.rs +++ b/crates/runner/src/lib.rs @@ -7,10 +7,11 @@ //! ```rust //! use revive_runner::*; //! use SpecsAction::*; -//! run_test(Specs { +//! Specs { +//! differential: false, //! balances: vec![(ALICE, 1_000_000_000)], //! actions: vec![Instantiate { -//! origin: ALICE, +//! origin: TestAccountId::Alice, //! value: 0, //! gas_limit: Some(GAS_LIMIT), //! storage_deposit_limit: Some(DEPOSIT_LIMIT), @@ -18,25 +19,34 @@ //! data: vec![], //! salt: vec![], //! }], -//! }) +//! } +//! .run(); //! ``` +use std::time::Duration; + +use hex::{FromHex, FromHexError, ToHex}; use polkadot_sdk::*; use polkadot_sdk::{ pallet_revive::{CollectEvents, ContractExecResult, ContractInstantiateResult, DebugInfo}, polkadot_runtime_common::BuildStorage, polkadot_sdk_frame::testing_prelude::*, sp_keystore::{testing::MemoryKeystore, KeystoreExt}, - sp_runtime::AccountId32, }; use serde::{Deserialize, Serialize}; mod runtime; -use crate::runtime::*; +mod specs; -pub const ALICE: AccountId32 = AccountId32::new([1u8; 32]); -pub const BOB: AccountId32 = AccountId32::new([2u8; 32]); -pub const CHARLIE: AccountId32 = AccountId32::new([3u8; 32]); +use crate::runtime::*; +pub use crate::specs::*; + +pub const ALICE: AccountId = AccountId::new([1u8; 32]); +pub const BOB: AccountId = AccountId::new([2u8; 32]); +pub const CHARLIE: AccountId = AccountId::new([3u8; 32]); + +const SPEC_MARKER_BEGIN: &str = "/* runner.json"; +const SPEC_MARKER_END: &str = "*/"; /// Externalities builder #[derive(Default)] @@ -81,18 +91,57 @@ pub const DEPOSIT_LIMIT: Balance = 10_000_000; #[derive(Debug, Clone, Serialize, Deserialize)] pub struct VerifyCallExpectation { /// When provided, the expected gas consumed - gas_consumed: Option, + pub gas_consumed: Option, /// When provided, the expected output - output: Option>, + #[serde(default, with = "hex")] + pub output: OptionalHex, ///Expected call result - success: bool, + pub success: bool, +} + +#[derive(Clone, Debug, Default, PartialEq)] +pub struct OptionalHex(Option>); + +impl FromHex for OptionalHex { + type Error = FromHexError; + + fn from_hex>(hex: T) -> Result { + let value = hex::decode(hex)?; + Ok(Self(Some(value))) + } +} + +impl ToHex for &OptionalHex { + fn encode_hex>(&self) -> T { + match self.0.as_ref() { + None => T::from_iter("".chars()), + Some(data) => T::from_iter(hex::encode(data).chars()), + } + } + + fn encode_hex_upper>(&self) -> T { + match self.0.as_ref() { + None => T::from_iter("".chars()), + Some(data) => T::from_iter(hex::encode_upper(data).chars()), + } + } +} + +impl From for OptionalHex { + fn from(value: alloy_primitives::Bytes) -> Self { + if value.is_empty() { + OptionalHex(None) + } else { + OptionalHex(Some(value.into())) + } + } } impl Default for VerifyCallExpectation { fn default() -> Self { Self { gas_consumed: None, - output: None, + output: OptionalHex(None), success: true, } } @@ -100,42 +149,51 @@ impl Default for VerifyCallExpectation { impl VerifyCallExpectation { /// Verify that the expectations are met - fn verify(self, result: CallResult) { - dbg!(&result); - assert_eq!(self.success, result.is_ok()); + fn verify(self, result: &CallResult) { + assert_eq!( + self.success, + result.is_ok(), + "contract execution result mismatch: {result:?}" + ); if let Some(gas_consumed) = self.gas_consumed { assert_eq!(gas_consumed, result.gas_consumed()); } - if let Some(output) = self.output { - assert_eq!(output, result.output()); + if let OptionalHex(Some(data)) = self.output { + assert_eq!(data, result.output()); } } } /// Result of a call -#[derive(Debug)] -enum CallResult { - Exec(ContractExecResult), - Instantiate(ContractInstantiateResult), +#[derive(Clone, Debug)] +pub enum CallResult { + Exec { + result: ContractExecResult, + wall_time: Duration, + }, + Instantiate { + result: ContractInstantiateResult, + wall_time: Duration, + }, } impl CallResult { /// Check if the call was successful fn is_ok(&self) -> bool { match self { - Self::Exec(res) => res.result.is_ok(), - Self::Instantiate(res) => res.result.is_ok(), + Self::Exec { result, .. } => result.result.is_ok(), + Self::Instantiate { result, .. } => result.result.is_ok(), } } /// Get the output of the call fn output(&self) -> Vec { match self { - Self::Exec(res) => res + Self::Exec { result, .. } => result .result .as_ref() .map(|r| r.data.clone()) .unwrap_or_default(), - Self::Instantiate(res) => res + Self::Instantiate { result, .. } => result .result .as_ref() .map(|r| r.result.data.clone()) @@ -145,8 +203,8 @@ impl CallResult { /// Get the gas consumed by the call fn gas_consumed(&self) -> Weight { match self { - Self::Exec(res) => res.gas_consumed, - Self::Instantiate(res) => res.gas_consumed, + Self::Exec { result, .. } => result.gas_consumed, + Self::Instantiate { result, .. } => result.gas_consumed, } } } @@ -155,7 +213,9 @@ impl CallResult { pub enum Code { /// Compile a single solidity source and use the blob of `contract` Solidity { - path: std::path::PathBuf, + path: Option, + solc_optimizer: Option, + pipeline: Option, contract: String, }, /// Read the contract blob from disk @@ -166,13 +226,32 @@ pub enum Code { Hash(Hash), } +impl Default for Code { + fn default() -> Self { + Self::Bytes(vec![]) + } +} + impl From for pallet_revive::Code { fn from(val: Code) -> Self { match val { - Code::Solidity { path, contract } => { - pallet_revive::Code::Upload(revive_solidity::test_utils::compile_blob( - contract.as_str(), - std::fs::read_to_string(path).unwrap().as_str(), + Code::Solidity { + path, + contract, + solc_optimizer, + pipeline, + } => { + let Some(path) = path else { + panic!("Solidity source of contract '{contract}' missing path"); + }; + let Ok(source_code) = std::fs::read_to_string(&path) else { + panic!("Failed to reead source code from {}", path.display()); + }; + pallet_revive::Code::Upload(revive_solidity::test_utils::compile_blob_with_options( + &contract, + &source_code, + solc_optimizer.unwrap_or(true), + pipeline.unwrap_or(revive_solidity::SolcPipeline::Yul), )) } Code::Path(path) => pallet_revive::Code::Upload(std::fs::read(path).unwrap()), @@ -182,179 +261,56 @@ impl From for pallet_revive::Code { } } -/// An action to perform in a contract test -#[derive(Debug, Clone, Serialize, Deserialize)] -pub enum SpecsAction { - /// Instantiate a contract - Instantiate { - origin: AccountId, - #[serde(default)] - value: Balance, - #[serde(default)] - gas_limit: Option, - #[serde(default)] - storage_deposit_limit: Option, - code: Code, - #[serde(default)] - data: Vec, - #[serde(default)] - salt: Vec, - }, - /// Call a contract - Call { - origin: AccountId, - dest: AccountId, - #[serde(default)] - value: Balance, - #[serde(default)] - gas_limit: Option, - #[serde(default)] - storage_deposit_limit: Option, - #[serde(default)] - data: Vec, - }, - /// Verify the result of the last call, omitting this will simply ensure the last call was successful - VerifyCall(VerifyCallExpectation), +pub fn specs_from_comment(contract_name: &str, path: &str) -> Vec { + let solidity = match std::fs::read_to_string(path) { + Err(err) => panic!("unable to read {path}: {err}"), + Ok(solidity) => solidity, + }; + let mut json_string = String::with_capacity(solidity.len()); + let mut is_reading = false; + let mut specs = Vec::new(); - /// Verify the balance of an account - VerifyBalance { - origin: AccountId, - expected: Balance, - }, - /// Verify the storage of a contract - VerifyStorage { - contract: AccountId, - key: Vec, - expected: Option>, - }, -} + for line in solidity.lines() { + if line.starts_with(SPEC_MARKER_BEGIN) { + is_reading = true; + continue; + } -/// Specs for a contract test -#[derive(Default, Debug, Serialize, Deserialize)] -#[serde(default)] -pub struct Specs { - /// List of endowments at genesis - pub balances: Vec<(AccountId, Balance)>, - /// List of actions to perform - pub actions: Vec, -} - -impl Specs { - /// Get the list of actions to perform - /// A default [`SpecAction::VerifyCall`] is injected after each Instantiate or Call action when - /// missing - fn actions(&self) -> Vec { - self.actions - .iter() - .enumerate() - .flat_map(|(index, item)| { - let next_item = self.actions.get(index + 1); - if matches!( - item, - SpecsAction::Instantiate { .. } | SpecsAction::Call { .. } - ) && !matches!(next_item, Some(SpecsAction::VerifyCall(_))) - { - return vec![ - item.clone(), - SpecsAction::VerifyCall(VerifyCallExpectation::default()), - ]; - } - vec![item.clone()] - }) - .collect() - } -} - -/// Run a contract test -/// The test takes a [`Specs`] and executes the actions in order -pub fn run_test(specs: Specs) { - ExtBuilder::default() - .balance_genesis_config(specs.balances.clone()) - .build() - .execute_with(|| { - use SpecsAction::*; - - let mut res: Option = None; - let actions = specs.actions(); - - for action in actions { - match action { - Instantiate { - origin, - value, - gas_limit, - storage_deposit_limit, - code, - data, - salt, - } => { - res = Some(CallResult::Instantiate(Contracts::bare_instantiate( - RuntimeOrigin::signed(origin), - value, - gas_limit.unwrap_or(GAS_LIMIT), - storage_deposit_limit.unwrap_or(DEPOSIT_LIMIT), - code.into(), - data, - salt, - DebugInfo::Skip, - CollectEvents::Skip, - ))); - } - Call { - origin, - dest, - value, - gas_limit, - storage_deposit_limit, - data, - } => { - res = Some(CallResult::Exec(Contracts::bare_call( - RuntimeOrigin::signed(origin), - dest, - value, - gas_limit.unwrap_or(GAS_LIMIT), - storage_deposit_limit.unwrap_or(DEPOSIT_LIMIT), - data, - DebugInfo::Skip, - CollectEvents::Skip, - ))); - } - VerifyCall(expectation) => { - if let Some(res) = res.take() { - expectation.verify(res); - } else { - panic!("No call to verify"); - } - } - VerifyBalance { origin, expected } => { - assert_eq!(Balances::free_balance(&origin), expected); - } - VerifyStorage { - contract, - key, - expected, - } => { - let Ok(storage) = Contracts::get_storage(contract, key) else { - panic!("Error reading storage"); - }; - assert_eq!(storage, expected); - } + if is_reading { + if line.starts_with(SPEC_MARKER_END) { + match serde_json::from_str::(&json_string) { + Ok(mut spec) => { + spec.replace_empty_code(contract_name, path); + specs.push(spec); + } + Err(e) => panic!("invalid spec JSON: {e}"), } + is_reading = false; + json_string.clear(); + continue; } - }); + + json_string.push_str(line) + } + } + + assert!(!specs.is_empty(), "source does not contain any test spec"); + + specs } #[cfg(test)] mod tests { - use super::*; + use crate::*; #[test] fn instantiate_works() { - use SpecsAction::*; - run_test(Specs { + use specs::SpecsAction::*; + let specs = Specs { + differential: false, balances: vec![(ALICE, 1_000_000_000)], actions: vec![Instantiate { - origin: ALICE, + origin: TestAccountId::Alice, value: 0, gas_limit: Some(GAS_LIMIT), storage_deposit_limit: Some(DEPOSIT_LIMIT), @@ -362,12 +318,13 @@ mod tests { data: vec![], salt: vec![], }], - }) + }; + specs.run(); } #[test] fn instantiate_with_json() { - let specs = serde_json::from_str::( + serde_json::from_str::( r#" { "balances": [ @@ -376,7 +333,7 @@ mod tests { "actions": [ { "Instantiate": { - "origin": "5C62Ck4UrFPiBtoCmeSrgF7x9yv9mn38446dhCpsi2mLHiFT", + "origin": "Alice", "value": 0, "code": { "Path": "fixtures/Baseline.pvm" @@ -387,7 +344,7 @@ mod tests { } "#, ) - .unwrap(); - run_test(specs); + .unwrap() + .run(); } } diff --git a/crates/runner/src/specs.rs b/crates/runner/src/specs.rs new file mode 100644 index 0000000..cd29611 --- /dev/null +++ b/crates/runner/src/specs.rs @@ -0,0 +1,428 @@ +use std::time::Instant; + +use revive_differential::{Evm, EvmLog}; +use serde::{Deserialize, Serialize}; + +use crate::*; +use alloy_primitives::Address; +use revive_solidity::test_utils::*; + +/// An action to perform in a contract test +#[derive(Debug, Clone, Serialize, Deserialize)] +pub enum SpecsAction { + /// Instantiate a contract + Instantiate { + #[serde(default)] + origin: TestAccountId, + #[serde(default)] + value: Balance, + #[serde(default)] + gas_limit: Option, + #[serde(default)] + storage_deposit_limit: Option, + #[serde(default)] + code: Code, + #[serde(default, with = "hex::serde")] + data: Vec, + #[serde(default, with = "hex::serde")] + salt: Vec, + }, + /// Call a contract + Call { + #[serde(default)] + origin: TestAccountId, + dest: TestAccountId, + #[serde(default)] + value: Balance, + #[serde(default)] + gas_limit: Option, + #[serde(default)] + storage_deposit_limit: Option, + #[serde(default, with = "hex::serde")] + data: Vec, + }, + /// Verify the result of the last call, omitting this will simply ensure the last call was successful + VerifyCall(VerifyCallExpectation), + + /// Verify the balance of an account + VerifyBalance { + origin: TestAccountId, + expected: Balance, + }, + /// Verify the storage of a contract + VerifyStorage { + contract: TestAccountId, + #[serde(with = "hex::serde")] + key: Vec, + #[serde(default, with = "hex::serde")] + expected: Vec, + }, +} + +impl SpecsAction { + /// Derive verification actions from the EVM output log + pub fn derive_verification( + log: &EvmLog, + address_evm: Address, + account_pvm: TestAccountId, + ) -> Vec { + let account = log + .state_dump + .accounts + .get(&address_evm) + .unwrap_or_else(|| panic!("account {address_evm} not in state dump")); + + let mut actions = vec![ + Self::VerifyCall(VerifyCallExpectation { + gas_consumed: None, + success: log.output.run_success(), + output: log.output.output.clone().into(), + }), + Self::VerifyBalance { + origin: account_pvm.clone(), + expected: account + .balance + .try_into() + .expect("balance should fit into u128"), + }, + ]; + + let Some(storage) = &account.storage else { + return actions; + }; + + for (key, expected) in storage { + let mut key = key.to_vec(); + key.reverse(); + let mut expected = expected.to_vec(); + expected.reverse(); + actions.push(Self::VerifyStorage { + contract: account_pvm.clone(), + key, + expected, + }); + } + + actions + } +} + +#[derive(Clone, Debug, Default, Serialize, Deserialize, PartialEq)] +pub enum TestAccountId { + /// The ALICE account + #[default] + Alice, + /// The BOB account + Bob, + /// The CHARLIE account + Charlie, + /// AccountID that was created during the nth call in this run. + Instantiated(usize), + /// Arbitrary AccountID + AccountId(AccountId), +} + +impl TestAccountId { + fn to_account_id(&self, results: &[CallResult]) -> AccountId { + match self { + TestAccountId::Alice => ALICE, + TestAccountId::Bob => BOB, + TestAccountId::Charlie => CHARLIE, + TestAccountId::AccountId(account_id) => account_id.clone(), + TestAccountId::Instantiated(n) => match results + .get(*n) + .expect("should provide valid index into call results") + { + CallResult::Exec { .. } => panic!("call #{n} should be an instantiation"), + CallResult::Instantiate { result, .. } => result + .result + .as_ref() + .expect("call #{n} reverted") + .account_id + .clone(), + }, + } + } +} + +/// Specs for a contract test +#[derive(Clone, Debug, Serialize, Deserialize)] +#[serde(default)] +pub struct Specs { + /// Interpret EVM bytecode and assert output, storage and events + #[serde(default)] + pub differential: bool, + /// List of endowments at genesis + pub balances: Vec<(AccountId, Balance)>, + /// List of actions to perform + pub actions: Vec, +} + +impl Default for Specs { + fn default() -> Self { + Self { + differential: false, + balances: vec![(ALICE, 1_000_000_000)], + actions: Default::default(), + } + } +} + +impl Specs { + /// Get the list of actions to perform + /// A default [`SpecAction::VerifyCall`] is injected after each Instantiate or Call action when + /// missing and not in differential mode + pub fn actions(&self) -> Vec { + self.actions + .iter() + .enumerate() + .flat_map(|(index, item)| { + let next_item = self.actions.get(index + 1); + if matches!( + item, + SpecsAction::Instantiate { .. } | SpecsAction::Call { .. } + ) && !matches!(next_item, Some(SpecsAction::VerifyCall { .. })) + && !self.differential + { + return vec![ + item.clone(), + SpecsAction::VerifyCall(VerifyCallExpectation::default()), + ]; + } + vec![item.clone()] + }) + .collect() + } + + /// Helper to allow not specifying the code bytes or path directly in the runner.json + /// - Replace `Code::Bytes(bytes)` if `bytes` are empty: read `contract_file` + /// - Replace `Code::Solidity{ path, ..}` if `path` is not provided: replace `path` with `contract_file` + pub fn replace_empty_code(&mut self, contract_name: &str, contract_path: &str) { + for action in self.actions.iter_mut() { + let SpecsAction::Instantiate { code, .. } = action else { + continue; + }; + + match code { + Code::Bytes(bytes) if bytes.is_empty() => { + let contract_source = match std::fs::read_to_string(contract_path) { + Err(err) => panic!("unable to read {contract_path}: {err}"), + Ok(solidity) => solidity, + }; + *bytes = compile_blob(contract_name, &contract_source) + } + Code::Solidity { path, .. } if path.is_none() => *path = Some(contract_path.into()), + _ => continue, + } + } + } + + /// Run a contract test + /// The test takes a [`Specs`] and executes the actions in order + pub fn run(self) -> Vec { + if self.differential { + self.run_on_evm() + } else { + self + } + .run_on_pallet() + } + + fn run_on_evm(self) -> Self { + let mut derived_specs = Self { + actions: vec![], + ..self + }; + + let mut evm = Evm::default(); + let mut deployed_accounts = vec![]; + + for action in self.actions { + derived_specs.actions.push(action.clone()); + + use specs::SpecsAction::*; + match action { + Instantiate { + origin, + value, + gas_limit, + storage_deposit_limit, + code, + data, + salt, + } => { + let Code::Solidity { + path: Some(path), + solc_optimizer, + pipeline, + contract, + } = code + else { + panic!("the differential runner requires Code::Solidity source"); + }; + assert_ne!(solc_optimizer, Some(false), "solc_optimizer must be enabled in differntial mode"); + assert_ne!(pipeline, Some(revive_solidity::SolcPipeline::EVMLA), "yul pipeline must be enabled in differntial mode"); + assert!(storage_deposit_limit.is_none(), "storage deposit limit is not supported in differential mode"); + assert!(salt.is_empty(), "salt is not supported in differential mode"); + assert_eq!(origin, TestAccountId::default(), "configuring the origin is not supported in differential mode"); + let deploy_code = match std::fs::read_to_string(&path) { + Ok(solidity_source) => compile_evm_deploy_code(&contract, &solidity_source), + Err(err) => panic!( + "failed to read solidity source\n . path: '{}'\n . error: {:?}", + path.display(), + err + ), + }; + let deploy_code = hex::encode(deploy_code); + let mut vm = evm.code_blob(deploy_code.as_bytes().to_vec()).sender(Address::default()).deploy(true); + if !data.is_empty() { + vm = vm.input(data.into()); + } + if value > 0 { + vm = vm.value(value); + } + if let Some(gas) = gas_limit { + vm = vm.gas(gas.ref_time()); + } + let mut log = vm.run(); + log.output.output = Default::default(); // PVM will not have constructor output + let deployed_account = log.account_deployed.expect("no account was created"); + let account_pvm = TestAccountId::Instantiated(deployed_accounts.len()); + deployed_accounts.push(deployed_account); + derived_specs.actions.append(&mut SpecsAction::derive_verification(&log, deployed_account, account_pvm)); + evm = Evm::from_genesis(log.state_dump.into()); + } + Call { + origin, + dest, + value, + gas_limit, + storage_deposit_limit, + data, + } => { + assert_eq!(origin, TestAccountId::default(), "configuring the origin is not supported in differential mode"); + assert!(storage_deposit_limit.is_none(), "storage deposit limit is not supported in differential mode"); + let TestAccountId::Instantiated(n) = dest else { + panic!("the differential runner requires TestAccountId::Instantiated(n) as dest"); + }; + let address = deployed_accounts.get(n).unwrap_or_else(|| panic!("no account at index {n} ")); + let mut vm = evm.receiver(*address).sender(Address::default()); + if !data.is_empty() { + vm = vm.input(data.into()); + } + if value > 0 { + vm = vm.value(value); + } + if let Some(gas) = gas_limit { + vm = vm.gas(gas.ref_time()); + } + + let log = vm.run(); + derived_specs.actions.append(&mut SpecsAction::derive_verification(&log, *address, dest)); + evm = Evm::from_genesis(log.state_dump.into()); + } + _ => panic!("only instantiate and call action allowed in differential mode, got: {action:?}"), + } + } + + derived_specs + } + + fn run_on_pallet(self) -> Vec { + let mut results = vec![]; + + ExtBuilder::default() + .balance_genesis_config(self.balances.clone()) + .build() + .execute_with(|| { + use specs::SpecsAction::*; + + for action in self.actions() { + match action { + Instantiate { + origin, + value, + gas_limit, + storage_deposit_limit, + code, + data, + salt, + } => { + let origin = RuntimeOrigin::signed(origin.to_account_id(&results)); + let time_start = Instant::now(); + let result = Contracts::bare_instantiate( + origin, + value, + gas_limit.unwrap_or(GAS_LIMIT), + storage_deposit_limit.unwrap_or(DEPOSIT_LIMIT), + code.into(), + data, + salt, + DebugInfo::Skip, + CollectEvents::Skip, + ); + results.push(CallResult::Instantiate { + result, + wall_time: time_start.elapsed(), + }) + } + Call { + origin, + dest, + value, + gas_limit, + storage_deposit_limit, + data, + } => { + let origin = RuntimeOrigin::signed(origin.to_account_id(&results)); + let dest = dest.to_account_id(&results); + let time_start = Instant::now(); + let result = Contracts::bare_call( + origin, + dest, + value, + gas_limit.unwrap_or(GAS_LIMIT), + storage_deposit_limit.unwrap_or(DEPOSIT_LIMIT), + data, + DebugInfo::Skip, + CollectEvents::Skip, + ); + results.push(CallResult::Exec { + result, + wall_time: time_start.elapsed(), + }); + } + VerifyCall(expectation) => { + expectation.verify(results.last().expect("No call to verify")); + } + VerifyBalance { origin, expected } => { + let balance = Balances::usable_balance(origin.to_account_id(&results)); + assert_eq!(balance, expected); + } + VerifyStorage { + contract, + key, + expected, + } => { + let Ok(storage) = Contracts::get_storage( + contract.to_account_id(&results), + key.clone(), + ) else { + panic!("Error reading storage"); + }; + let Some(value) = storage else { + panic!("No value for storage key 0x{}", hex::encode(key)); + }; + assert_eq!(value, expected, "at key {}", hex::encode(&key)); + } + } + } + }); + + results + } +} + +pub trait SpecsRunner { + fn run_action(&mut self, spec: &mut Specs) -> Vec; +} diff --git a/crates/pallet-contracts-pvm-llapi/Cargo.toml b/crates/runtime-api/Cargo.toml similarity index 65% rename from crates/pallet-contracts-pvm-llapi/Cargo.toml rename to crates/runtime-api/Cargo.toml index 1630845..32bff3a 100644 --- a/crates/pallet-contracts-pvm-llapi/Cargo.toml +++ b/crates/runtime-api/Cargo.toml @@ -1,11 +1,11 @@ [package] -name = "pallet-contracts-pvm-llapi" +name = "revive-runtime-api" version.workspace = true license.workspace = true edition.workspace = true repository.workspace = true -repository.authors = true -descritption = "Implements the low level runtime API bindings with pallet contracts" +authors.workspace = true +description = "Implements the low level runtime API bindings with pallet contracts" [features] riscv-64 = [] diff --git a/crates/pallet-contracts-pvm-llapi/README.md b/crates/runtime-api/README.md similarity index 100% rename from crates/pallet-contracts-pvm-llapi/README.md rename to crates/runtime-api/README.md diff --git a/crates/pallet-contracts-pvm-llapi/build.rs b/crates/runtime-api/build.rs similarity index 63% rename from crates/pallet-contracts-pvm-llapi/build.rs rename to crates/runtime-api/build.rs index 6a17ac7..6559e57 100644 --- a/crates/pallet-contracts-pvm-llapi/build.rs +++ b/crates/runtime-api/build.rs @@ -20,7 +20,15 @@ const TARGET_ABI_FLAG: &str = "-mabi=ilp32e"; #[cfg(feature = "riscv-64")] const TARGET_ABI_FLAG: &str = "-mabi=lp64e"; -fn compile(bitcode_path: &str) { +const IMPORTS_SOUCE: &str = "src/polkavm_imports.c"; +const IMPORTS_BC: &str = "polkavm_imports.bc"; +const IMPORTS_RUST: &str = "polkavm_imports.rs"; + +const EXPORTS_SOUCE: &str = "src/polkavm_exports.c"; +const EXPORTS_BC: &str = "polkavm_exports.bc"; +const EXPORTS_RUST: &str = "polkavm_exports.rs"; + +fn compile(source_path: &str, bitcode_path: &str) { let output = Command::new("clang") .args([ TARGET_FLAG, @@ -35,9 +43,9 @@ fn compile(bitcode_path: &str) { "-O3", "-emit-llvm", "-c", - "src/polkavm_guest.c", "-o", bitcode_path, + source_path, ]) .output() .expect("should be able to invoke C clang"); @@ -49,19 +57,24 @@ fn compile(bitcode_path: &str) { ); } -fn main() { +fn build_module(source_path: &str, bitcode_path: &str, rust_file: &str) { let out_dir = env::var_os("OUT_DIR").expect("env should have $OUT_DIR"); - let lib = "polkavm_guest.bc"; - let bitcode_path = Path::new(&out_dir).join(lib); - compile(bitcode_path.to_str().expect("$OUT_DIR should be UTF-8")); + let lib = Path::new(&out_dir).join(bitcode_path); + compile(source_path, lib.to_str().expect("$OUT_DIR should be UTF-8")); - let bitcode = fs::read(bitcode_path).expect("bitcode should have been built"); + let bitcode = fs::read(lib).expect("bitcode should have been built"); let len = bitcode.len(); - let src_path = Path::new(&out_dir).join("polkavm_guest.rs"); - let src = format!("pub static BITCODE: &[u8; {len}] = include_bytes!(\"{lib}\");"); + let src_path = Path::new(&out_dir).join(rust_file); + let src = format!("pub static BITCODE: &[u8; {len}] = include_bytes!(\"{bitcode_path}\");"); fs::write(src_path, src).expect("should be able to write in $OUT_DIR"); +} + +fn main() { + build_module(IMPORTS_SOUCE, IMPORTS_BC, IMPORTS_RUST); + build_module(EXPORTS_SOUCE, EXPORTS_BC, EXPORTS_RUST); println!("cargo:rerun-if-changed=build.rs"); - println!("cargo:rerun-if-changed=src/polkavm_guest.c"); + println!("cargo:rerun-if-changed=src/polkavm_imports.c"); + println!("cargo:rerun-if-changed=src/polkavm_exports.c"); println!("cargo:rerun-if-changed=src/polkavm_guest.h"); } diff --git a/crates/runtime-api/polkavm_exports.bc b/crates/runtime-api/polkavm_exports.bc new file mode 100644 index 0000000..844092b Binary files /dev/null and b/crates/runtime-api/polkavm_exports.bc differ diff --git a/crates/runtime-api/polkavm_imports.bc b/crates/runtime-api/polkavm_imports.bc new file mode 100644 index 0000000..188d5f1 Binary files /dev/null and b/crates/runtime-api/polkavm_imports.bc differ diff --git a/crates/pallet-contracts-pvm-llapi/src/calling_convention.rs b/crates/runtime-api/src/calling_convention.rs similarity index 89% rename from crates/pallet-contracts-pvm-llapi/src/calling_convention.rs rename to crates/runtime-api/src/calling_convention.rs index df3472a..700f5fb 100644 --- a/crates/pallet-contracts-pvm-llapi/src/calling_convention.rs +++ b/crates/runtime-api/src/calling_convention.rs @@ -1,10 +1,26 @@ use inkwell::{ builder::Builder, context::Context, + module::Module, types::{BasicType, StructType}, values::{BasicValue, PointerValue}, }; +/// Creates a module that sets the PolkaVM minimum stack size to [`size`] if linked in. +pub fn min_stack_size<'context>( + context: &'context Context, + module_name: &str, + size: u32, +) -> Module<'context> { + let module = context.create_module(module_name); + module.set_inline_assembly(&format!( + ".pushsection .polkavm_min_stack_size,\"\",@progbits + .word {size} + .popsection" + )); + module +} + pub struct Spill<'a, 'ctx> { pointer: PointerValue<'ctx>, builder: &'a Builder<'ctx>, diff --git a/crates/runtime-api/src/lib.rs b/crates/runtime-api/src/lib.rs new file mode 100644 index 0000000..2a4f0e0 --- /dev/null +++ b/crates/runtime-api/src/lib.rs @@ -0,0 +1,11 @@ +//! This crate vendors the [PolkaVM][0] C API and provides a LLVM module for interacting +//! with the `pallet-revive` runtime API. +//! At present, the contracts pallet requires blobs to export `call` and `deploy`, +//! and offers a bunch of [runtime API methods][1]. The provided [module] implements +//! those exports and imports. +//! [0]: [https://crates.io/crates/polkavm] +//! [1]: [https://docs.rs/pallet-contracts/26.0.0/pallet_contracts/api_doc/index.html] + +pub mod calling_convention; +pub mod polkavm_exports; +pub mod polkavm_imports; diff --git a/crates/runtime-api/src/polkavm_exports.c b/crates/runtime-api/src/polkavm_exports.c new file mode 100644 index 0000000..2402077 --- /dev/null +++ b/crates/runtime-api/src/polkavm_exports.c @@ -0,0 +1,16 @@ +#include + +#include "polkavm_guest.h" + +extern void __entry(bool); + +static void deploy() { + __entry(true); +} + +static void call() { + __entry(false); +} + +POLKAVM_EXPORT(void, deploy) +POLKAVM_EXPORT(void, call) diff --git a/crates/runtime-api/src/polkavm_exports.rs b/crates/runtime-api/src/polkavm_exports.rs new file mode 100644 index 0000000..70b7e54 --- /dev/null +++ b/crates/runtime-api/src/polkavm_exports.rs @@ -0,0 +1,29 @@ +use inkwell::{context::Context, memory_buffer::MemoryBuffer, module::Module, support::LLVMString}; + +include!(concat!(env!("OUT_DIR"), "/polkavm_exports.rs")); + +/// Creates a LLVM module from the [BITCODE]. +/// The module exports `call` and `deploy` functions (which are named thereafter). +/// Returns `Error` if the bitcode fails to parse, which should never happen. +pub fn module<'context>( + context: &'context Context, + module_name: &str, +) -> Result, LLVMString> { + let buf = MemoryBuffer::create_from_memory_range(BITCODE, module_name); + Module::parse_bitcode_from_buffer(&buf, context) +} + +#[cfg(test)] +mod tests { + use crate::polkavm_exports; + + #[test] + fn it_works() { + inkwell::targets::Target::initialize_riscv(&Default::default()); + let context = inkwell::context::Context::create(); + let module = polkavm_exports::module(&context, "polkavm_exports").unwrap(); + + assert!(module.get_function("call").is_some()); + assert!(module.get_function("deploy").is_some()); + } +} diff --git a/crates/pallet-contracts-pvm-llapi/src/polkavm_guest.h b/crates/runtime-api/src/polkavm_guest.h similarity index 100% rename from crates/pallet-contracts-pvm-llapi/src/polkavm_guest.h rename to crates/runtime-api/src/polkavm_guest.h diff --git a/crates/pallet-contracts-pvm-llapi/src/polkavm_guest.c b/crates/runtime-api/src/polkavm_imports.c similarity index 95% rename from crates/pallet-contracts-pvm-llapi/src/polkavm_guest.c rename to crates/runtime-api/src/polkavm_imports.c index b9e5d58..065d6fb 100644 --- a/crates/pallet-contracts-pvm-llapi/src/polkavm_guest.c +++ b/crates/runtime-api/src/polkavm_imports.c @@ -48,14 +48,6 @@ void * __sbrk(uint32_t size) { return (void *)address; } -// Exports - -extern void call(); -POLKAVM_EXPORT(void, call) - -extern void deploy(); -POLKAVM_EXPORT(void, deploy) - // Imports @@ -77,7 +69,7 @@ POLKAVM_IMPORT(uint32_t, contains_storage, uint32_t, uint32_t) POLKAVM_IMPORT(uint32_t, take_storage, uint32_t, uint32_t, uint32_t, uint32_t) -POLKAVM_IMPORT(uint32_t, seal_call, uint32_t) +POLKAVM_IMPORT(uint32_t, call, uint32_t) POLKAVM_IMPORT(uint32_t, delegate_call, uint32_t, uint32_t, uint32_t, uint32_t, uint32_t, uint32_t) diff --git a/crates/pallet-contracts-pvm-llapi/src/polkavm_guest.rs b/crates/runtime-api/src/polkavm_imports.rs similarity index 50% rename from crates/pallet-contracts-pvm-llapi/src/polkavm_guest.rs rename to crates/runtime-api/src/polkavm_imports.rs index 77bbccb..fc90f3f 100644 --- a/crates/pallet-contracts-pvm-llapi/src/polkavm_guest.rs +++ b/crates/runtime-api/src/polkavm_imports.rs @@ -1,6 +1,6 @@ //! This crate vendors the [PolkaVM][0] C API and provides a LLVM module for interacting -//! with the `pallet-contracts` runtime API. -//! At present, the contracts pallet requires blobs to export `call` and `deploy`, +//! with the `pallet-revive` runtime API. +//! At present, the revive pallet requires blobs to export `call` and `deploy`, //! and offers a bunch of [runtime API methods][1]. The provided [module] implements //! those exports and imports. //! [0]: [https://crates.io/crates/polkavm] @@ -8,12 +8,10 @@ use inkwell::{context::Context, memory_buffer::MemoryBuffer, module::Module, support::LLVMString}; -include!(concat!(env!("OUT_DIR"), "/polkavm_guest.rs")); +include!(concat!(env!("OUT_DIR"), "/polkavm_imports.rs")); /// Creates a LLVM module from the [BITCODE]. -/// The module does: -/// - Export the `call` and `deploy` functions (which are named thereafter). -/// - Import (most) `pallet-contracts` runtime API functions. +/// The module imports `pallet-revive` runtime API functions. /// Returns `Error` if the bitcode fails to parse, which should never happen. pub fn module<'context>( context: &'context Context, @@ -23,32 +21,14 @@ pub fn module<'context>( Module::parse_bitcode_from_buffer(&buf, context) } -/// Creates a module that sets the PolkaVM minimum stack size to [`size`] if linked in. -pub fn min_stack_size<'context>( - context: &'context Context, - module_name: &str, - size: u32, -) -> Module<'context> { - let module = context.create_module(module_name); - module.set_inline_assembly(&format!( - ".pushsection .polkavm_min_stack_size,\"\",@progbits - .word {size} - .popsection" - )); - module -} - #[cfg(test)] mod tests { - use crate::polkavm_guest; + use crate::polkavm_imports; #[test] fn it_works() { inkwell::targets::Target::initialize_riscv(&Default::default()); let context = inkwell::context::Context::create(); - let module = polkavm_guest::module(&context, "polkavm_guest").unwrap(); - - assert!(module.get_function("call").is_some()); - assert!(module.get_function("deploy").is_some()); + let _ = polkavm_imports::module(&context, "polkavm_imports").unwrap(); } } diff --git a/crates/solidity/src/solc/mod.rs b/crates/solidity/src/solc/mod.rs index 6985ab8..1763c2e 100644 --- a/crates/solidity/src/solc/mod.rs +++ b/crates/solidity/src/solc/mod.rs @@ -129,7 +129,6 @@ impl Compiler { ) })?; output.preprocess_ast(&version, pipeline, suppressed_warnings.as_slice())?; - output.remove_evm(); Ok(output) } diff --git a/crates/solidity/src/solc/pipeline.rs b/crates/solidity/src/solc/pipeline.rs index 83dcef3..fc09ba4 100644 --- a/crates/solidity/src/solc/pipeline.rs +++ b/crates/solidity/src/solc/pipeline.rs @@ -1,10 +1,12 @@ //! The Solidity compiler pipeline type. +use serde::{Deserialize, Serialize}; + use crate::solc::version::Version as SolcVersion; use crate::solc::Compiler as SolcCompiler; /// The Solidity compiler pipeline type. -#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] +#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)] #[allow(non_camel_case_types)] #[allow(clippy::upper_case_acronyms)] pub enum Pipeline { diff --git a/crates/solidity/src/solc/standard_json/input/settings/selection/file/flag.rs b/crates/solidity/src/solc/standard_json/input/settings/selection/file/flag.rs index 9ad481a..d3cedff 100644 --- a/crates/solidity/src/solc/standard_json/input/settings/selection/file/flag.rs +++ b/crates/solidity/src/solc/standard_json/input/settings/selection/file/flag.rs @@ -37,6 +37,8 @@ pub enum Flag { /// The EVM legacy assembly JSON. #[serde(rename = "evm.legacyAssembly")] EVMLA, + #[serde(rename = "evm.bytecode")] + EVMBC, #[serde(rename = "evm.deployedBytecode")] EVMDBC, } @@ -62,6 +64,7 @@ impl std::fmt::Display for Flag { Self::AST => write!(f, "ast"), Self::Yul => write!(f, "irOptimized"), Self::EVMLA => write!(f, "evm.legacyAssembly"), + Self::EVMBC => write!(f, "evm.bytecode"), Self::EVMDBC => write!(f, "evm.deployedBytecode"), } } diff --git a/crates/solidity/src/solc/standard_json/input/settings/selection/file/mod.rs b/crates/solidity/src/solc/standard_json/input/settings/selection/file/mod.rs index cb54612..df232c3 100644 --- a/crates/solidity/src/solc/standard_json/input/settings/selection/file/mod.rs +++ b/crates/solidity/src/solc/standard_json/input/settings/selection/file/mod.rs @@ -28,6 +28,7 @@ impl File { Self { per_file: Some(HashSet::from_iter([SelectionFlag::AST])), per_contract: Some(HashSet::from_iter([ + SelectionFlag::EVMBC, SelectionFlag::EVMDBC, SelectionFlag::MethodIdentifiers, SelectionFlag::Metadata, diff --git a/crates/solidity/src/solc/standard_json/output/mod.rs b/crates/solidity/src/solc/standard_json/output/mod.rs index 027a122..f78ab22 100644 --- a/crates/solidity/src/solc/standard_json/output/mod.rs +++ b/crates/solidity/src/solc/standard_json/output/mod.rs @@ -138,19 +138,6 @@ impl Output { )) } - /// Removes EVM artifacts to prevent their accidental usage. - pub fn remove_evm(&mut self) { - if let Some(files) = self.contracts.as_mut() { - for (_, file) in files.iter_mut() { - for (_, contract) in file.iter_mut() { - if let Some(evm) = contract.evm.as_mut() { - evm.bytecode = None; - } - } - } - } - } - /// Traverses the AST and returns the list of additional errors and warnings. pub fn preprocess_ast( &mut self, diff --git a/crates/solidity/src/test_utils.rs b/crates/solidity/src/test_utils.rs index 55a1bdb..6330506 100644 --- a/crates/solidity/src/test_utils.rs +++ b/crates/solidity/src/test_utils.rs @@ -13,6 +13,7 @@ use crate::solc::pipeline::Pipeline as SolcPipeline; use crate::solc::standard_json::input::settings::optimizer::Optimizer as SolcStandardJsonInputSettingsOptimizer; use crate::solc::standard_json::input::settings::selection::Selection as SolcStandardJsonInputSettingsSelection; use crate::solc::standard_json::input::Input as SolcStandardJsonInput; +use crate::solc::standard_json::output::contract::evm::bytecode::Bytecode; use crate::solc::standard_json::output::contract::evm::bytecode::DeployedBytecode; use crate::solc::standard_json::output::Output as SolcStandardJsonOutput; use crate::solc::Compiler as SolcCompiler; @@ -20,6 +21,8 @@ use crate::warning::Warning; static PVM_BLOB_CACHE: Lazy>>> = Lazy::new(Default::default); static EVM_BLOB_CACHE: Lazy>>> = Lazy::new(Default::default); +static EVM_RUNTIME_BLOB_CACHE: Lazy>>> = + Lazy::new(Default::default); #[derive(Hash, PartialEq, Eq)] struct CachedBlob { @@ -113,14 +116,14 @@ pub fn build_solidity_with_options( Ok(output) } -/// Build a Solidity contract and get the EVM bin-runtime. +/// Build a Solidity contract and get the EVM code pub fn build_solidity_with_options_evm( sources: BTreeMap, libraries: BTreeMap>, remappings: Option>, pipeline: SolcPipeline, solc_optimizer_enabled: bool, -) -> anyhow::Result> { +) -> anyhow::Result> { check_dependencies(); inkwell::support::enable_llvm_pretty_stack_trace(); @@ -155,9 +158,12 @@ pub fn build_solidity_with_options_evm( for (_, file) in files.iter_mut() { for (name, contract) in file.iter_mut() { if let Some(evm) = contract.evm.as_mut() { - if let Some(deployed_bytecode) = evm.deployed_bytecode.as_ref() { - contracts.insert(name.clone(), deployed_bytecode.clone()); - } + let (Some(bytecode), Some(deployed_bytecode)) = + (evm.bytecode.as_ref(), evm.deployed_bytecode.as_ref()) + else { + continue; + }; + contracts.insert(name.clone(), (bytecode.clone(), deployed_bytecode.clone())); } } } @@ -284,6 +290,16 @@ pub fn compile_blob(contract_name: &str, source_code: &str) -> Vec { /// Compile the EVM bin-runtime of `contract_name` found in given `source_code`. /// The `solc` optimizer will be enabled pub fn compile_evm_bin_runtime(contract_name: &str, source_code: &str) -> Vec { + compile_evm(contract_name, source_code, true) +} + +/// Compile the EVM bin of `contract_name` found in given `source_code`. +/// The `solc` optimizer will be enabled +pub fn compile_evm_deploy_code(contract_name: &str, source_code: &str) -> Vec { + compile_evm(contract_name, source_code, false) +} + +fn compile_evm(contract_name: &str, source_code: &str, runtime: bool) -> Vec { let pipeline = SolcPipeline::Yul; let solc_optimizer_enabled = true; let id = CachedBlob { @@ -292,7 +308,12 @@ pub fn compile_evm_bin_runtime(contract_name: &str, source_code: &str) -> Vec Vec