diff --git a/.github/workflows/lint.yaml b/.github/workflows/lint.yaml index 113b9daf..0cfe5073 100644 --- a/.github/workflows/lint.yaml +++ b/.github/workflows/lint.yaml @@ -107,7 +107,7 @@ jobs: with: cache-on-failure: true - name: Run feature check - run: cargo hack check --feature-powerset --no-dev-deps + run: cargo hack check --feature-powerset no_std: runs-on: ubuntu-latest @@ -117,10 +117,10 @@ jobs: include: - type: wasm target: wasm32-unknown-unknown - exclude: engine,scroll-wire,scroll-bridge,scroll-network + exclude: scroll-engine,scroll-wire,scroll-bridge,scroll-network,rollup-node-manager - type: riscv target: riscv32imac-unknown-none-elf - exclude: engine,scroll-wire,scroll-bridge,scroll-network + exclude: scroll-engine,scroll-wire,scroll-bridge,scroll-network,rollup-node-manager steps: - uses: actions/checkout@v4 - uses: rui314/setup-mold@v1 diff --git a/Cargo.lock b/Cargo.lock index 56d57c4c..b73db196 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -62,7 +62,7 @@ dependencies = [ "getrandom 0.2.15", "once_cell", "version_check", - "zerocopy", + "zerocopy 0.7.35", ] [[package]] @@ -97,9 +97,9 @@ checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923" [[package]] name = "alloy-chains" -version = "0.1.57" +version = "0.1.62" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ab9d1367c6ffb90c93fb4a9a4989530aa85112438c6f73a734067255d348469" +checksum = "1317fde6d2d3cd6082a15144c23230697a5e1a91a27d1facc146715d3b4b2046" dependencies = [ "alloy-primitives", "alloy-rlp", @@ -107,48 +107,48 @@ dependencies = [ "num_enum", "proptest", "serde", - "strum", + "strum 0.27.1", ] [[package]] name = "alloy-consensus" -version = "0.9.2" +version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4138dc275554afa6f18c4217262ac9388790b2fc393c2dfe03c51d357abf013" +checksum = "69e32ef5c74bbeb1733c37f4ac7f866f8c8af208b7b4265e21af609dcac5bd5e" dependencies = [ - "alloy-eips", + "alloy-eips 0.11.1", "alloy-primitives", "alloy-rlp", - "alloy-serde", + "alloy-serde 0.11.1", "alloy-trie", "arbitrary", "auto_impl", "c-kzg", "derive_more", - "rand", + "rand 0.8.5", "serde", "serde_with", ] [[package]] name = "alloy-consensus-any" -version = "0.9.2" +version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fa04e1882c31288ce1028fdf31b6ea94cfa9eafa2e497f903ded631c8c6a42c" +checksum = "0fa13b7b1e1e3fedc42f0728103bfa3b4d566d3d42b606db449504d88dbdbdcf" dependencies = [ "alloy-consensus", - "alloy-eips", + "alloy-eips 0.11.1", "alloy-primitives", "alloy-rlp", - "alloy-serde", + "alloy-serde 0.11.1", "serde", ] [[package]] name = "alloy-dyn-abi" -version = "0.8.19" +version = "0.8.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc9138f4f0912793642d453523c3116bd5d9e11de73b70177aa7cb3e94b98ad2" +checksum = "555896f0b8578adb522b1453b6e6cc6704c3027bd0af20058befdde992cee8e9" dependencies = [ "alloy-json-abi", "alloy-primitives", @@ -159,7 +159,7 @@ dependencies = [ "itoa", "serde", "serde_json", - "winnow 0.6.26", + "winnow", ] [[package]] @@ -172,7 +172,7 @@ dependencies = [ "alloy-rlp", "arbitrary", "crc", - "rand", + "rand 0.8.5", "serde", "thiserror 2.0.11", ] @@ -185,7 +185,7 @@ dependencies = [ "alloy-primitives", "alloy-rlp", "arbitrary", - "rand", + "rand 0.8.5", "serde", ] @@ -200,7 +200,7 @@ dependencies = [ "arbitrary", "derive_more", "k256", - "rand", + "rand 0.8.5", "serde", "serde_with", ] @@ -215,10 +215,31 @@ dependencies = [ "alloy-eip7702", "alloy-primitives", "alloy-rlp", - "alloy-serde", + "alloy-serde 0.9.2", "arbitrary", "c-kzg", "derive_more", + "once_cell", + "serde", + "sha2 0.10.8", +] + +[[package]] +name = "alloy-eips" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5591581ca2ab0b3e7226a4047f9a1bfcf431da1d0cce3752fda609fea3c27e37" +dependencies = [ + "alloy-eip2124", + "alloy-eip2930", + "alloy-eip7702", + "alloy-primitives", + "alloy-rlp", + "alloy-serde 0.11.1", + "arbitrary", + "auto_impl", + "c-kzg", + "derive_more", "ethereum_ssz", "ethereum_ssz_derive", "once_cell", @@ -228,22 +249,22 @@ dependencies = [ [[package]] name = "alloy-genesis" -version = "0.9.2" +version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7d2a7fe5c1a9bd6793829ea21a636f30fc2b3f5d2e7418ba86d96e41dd1f460" +checksum = "0cded3a2d4bd7173f696458c5d4c98c18a628dfcc9f194385e80a486e412e2e0" dependencies = [ - "alloy-eips", + "alloy-eips 0.11.1", "alloy-primitives", - "alloy-serde", + "alloy-serde 0.11.1", "alloy-trie", "serde", ] [[package]] name = "alloy-json-abi" -version = "0.8.19" +version = "0.8.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24acd2f5ba97c7a320e67217274bc81fe3c3174b8e6144ec875d9d54e760e278" +checksum = "4012581681b186ba0882007ed873987cc37f86b1b488fe6b91d5efd0b585dc41" dependencies = [ "alloy-primitives", "alloy-sol-type-parser", @@ -253,9 +274,9 @@ dependencies = [ [[package]] name = "alloy-json-rpc" -version = "0.9.2" +version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2008bedb8159a255b46b7c8614516eda06679ea82f620913679afbd8031fea72" +checksum = "762414662d793d7aaa36ee3af6928b6be23227df1681ce9c039f6f11daadef64" dependencies = [ "alloy-primitives", "alloy-sol-types", @@ -267,19 +288,19 @@ dependencies = [ [[package]] name = "alloy-network" -version = "0.9.2" +version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4556f01fe41d0677495df10a648ddcf7ce118b0e8aa9642a0e2b6dd1fb7259de" +checksum = "8be03f2ebc00cf88bd06d3c6caf387dceaa9c7e6b268216779fa68a9bf8ab4e6" dependencies = [ "alloy-consensus", "alloy-consensus-any", - "alloy-eips", + "alloy-eips 0.11.1", "alloy-json-rpc", "alloy-network-primitives", "alloy-primitives", "alloy-rpc-types-any", "alloy-rpc-types-eth", - "alloy-serde", + "alloy-serde 0.11.1", "alloy-signer", "alloy-sol-types", "async-trait", @@ -292,22 +313,22 @@ dependencies = [ [[package]] name = "alloy-network-primitives" -version = "0.9.2" +version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f31c3c6b71340a1d076831823f09cb6e02de01de5c6630a9631bdb36f947ff80" +checksum = "3a00ce618ae2f78369918be0c20f620336381502c83b6ed62c2f7b2db27698b0" dependencies = [ "alloy-consensus", - "alloy-eips", + "alloy-eips 0.11.1", "alloy-primitives", - "alloy-serde", + "alloy-serde 0.11.1", "serde", ] [[package]] name = "alloy-primitives" -version = "0.8.19" +version = "0.8.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec878088ec6283ce1e90d280316aadd3d6ce3de06ff63d68953c855e7e447e92" +checksum = "478bedf4d24e71ea48428d1bc278553bd7c6ae07c30ca063beb0b09fe58a9e74" dependencies = [ "alloy-rlp", "arbitrary", @@ -326,9 +347,9 @@ dependencies = [ "paste", "proptest", "proptest-derive", - "rand", + "rand 0.8.5", "ruint", - "rustc-hash 2.1.0", + "rustc-hash 2.1.1", "serde", "sha3", "tiny-keccak", @@ -336,13 +357,13 @@ dependencies = [ [[package]] name = "alloy-provider" -version = "0.9.2" +version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a22c4441b3ebe2d77fa9cf629ba68c3f713eb91779cff84275393db97eddd82" +checksum = "cbe0a2acff0c4bd1669c71251ce10fc455cbffa1b4d0a817d5ea4ba7e5bb3db7" dependencies = [ "alloy-chains", "alloy-consensus", - "alloy-eips", + "alloy-eips 0.11.1", "alloy-json-rpc", "alloy-network", "alloy-network-primitives", @@ -350,8 +371,10 @@ dependencies = [ "alloy-pubsub", "alloy-rpc-client", "alloy-rpc-types-eth", + "alloy-sol-types", "alloy-transport", "alloy-transport-http", + "alloy-transport-ipc", "alloy-transport-ws", "async-stream", "async-trait", @@ -359,11 +382,10 @@ dependencies = [ "dashmap", "futures", "futures-utils-wasm", - "lru", + "lru 0.13.0", "parking_lot", "pin-project", "reqwest", - "schnellru", "serde", "serde_json", "thiserror 2.0.11", @@ -375,9 +397,9 @@ dependencies = [ [[package]] name = "alloy-pubsub" -version = "0.9.2" +version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2269fd635f7b505f27c63a3cb293148cd02301efce4c8bdd9ff54fbfc4a20e23" +checksum = "de3a68996f193f542f9e29c88dfa8ed1369d6ee04fa764c1bf23dc11b2f9e4a2" dependencies = [ "alloy-json-rpc", "alloy-primitives", @@ -411,20 +433,21 @@ checksum = "a40e1ef334153322fd878d07e86af7a529bcb86b2439525920a88eba87bcf943" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.98", ] [[package]] name = "alloy-rpc-client" -version = "0.9.2" +version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d06a292b37e182e514903ede6e623b9de96420e8109ce300da288a96d88b7e4b" +checksum = "b37cc3c7883dc41be1b01460127ad7930466d0a4bb6ba15a02ee34d2745e2d7c" dependencies = [ "alloy-json-rpc", "alloy-primitives", "alloy-pubsub", "alloy-transport", "alloy-transport-http", + "alloy-transport-ipc", "alloy-transport-ws", "futures", "pin-project", @@ -441,22 +464,22 @@ dependencies = [ [[package]] name = "alloy-rpc-types" -version = "0.9.2" +version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9383845dd924939e7ab0298bbfe231505e20928907d7905aa3bf112287305e06" +checksum = "6f18e68a3882f372e045ddc89eb455469347767d17878ca492cfbac81e71a111" dependencies = [ "alloy-primitives", "alloy-rpc-types-engine", "alloy-rpc-types-eth", - "alloy-serde", + "alloy-serde 0.11.1", "serde", ] [[package]] name = "alloy-rpc-types-admin" -version = "0.9.2" +version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0fcea70b3872c645fa0ee7fb23370d685f98e8c35f47297de619fb2e9f607ff" +checksum = "b4e30339fff15d53a3a258a7add476c7d24b61d6f4a71476cc39c8b567666772" dependencies = [ "alloy-genesis", "alloy-primitives", @@ -466,34 +489,34 @@ dependencies = [ [[package]] name = "alloy-rpc-types-anvil" -version = "0.9.2" +version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11495cb8c8d3141fc27556a4c9188b81531ad5ec3076a0394c61a6dcfbce9f34" +checksum = "10d06300df4a87d960add35909240fc72da355dd2ac926fa6999f9efafbdc5a7" dependencies = [ "alloy-primitives", "alloy-rpc-types-eth", - "alloy-serde", + "alloy-serde 0.11.1", "serde", ] [[package]] name = "alloy-rpc-types-any" -version = "0.9.2" +version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca445cef0eb6c2cf51cfb4e214fbf1ebd00893ae2e6f3b944c8101b07990f988" +checksum = "318ae46dd12456df42527c3b94c1ae9001e1ceb707f7afe2c7807ac4e49ebad9" dependencies = [ "alloy-consensus-any", "alloy-rpc-types-eth", - "alloy-serde", + "alloy-serde 0.11.1", ] [[package]] name = "alloy-rpc-types-beacon" -version = "0.9.2" +version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4009405b1d3f5e8c529b8cf353f74e815fd2102549af4172fc721b4b9ea09133" +checksum = "799103aa44270c7bea076ec5d3d7b6c6d29557ab5485c91a74d3068327adb485" dependencies = [ - "alloy-eips", + "alloy-eips 0.11.1", "alloy-primitives", "alloy-rpc-types-engine", "ethereum_ssz", @@ -505,9 +528,9 @@ dependencies = [ [[package]] name = "alloy-rpc-types-debug" -version = "0.9.2" +version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "358d6a8d7340b9eb1a7589a6c1fb00df2c9b26e90737fa5ed0108724dd8dac2c" +checksum = "2834b7012054cb2f90ee9893b7cc97702edca340ec1ef386c30c42e55e6cd691" dependencies = [ "alloy-primitives", "serde", @@ -515,41 +538,41 @@ dependencies = [ [[package]] name = "alloy-rpc-types-engine" -version = "0.9.2" +version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a5f821f30344862a0b6eb9a1c2eb91dfb2ff44c7489f37152a526cdcab79264" +checksum = "e83dde9fcf1ccb9b815cc0c89bba26bbbbaae5150a53ae624ed0fc63cb3676c1" dependencies = [ "alloy-consensus", - "alloy-eips", + "alloy-eips 0.11.1", "alloy-primitives", "alloy-rlp", - "alloy-serde", + "alloy-serde 0.11.1", "derive_more", "ethereum_ssz", "ethereum_ssz_derive", "jsonrpsee-types", "jsonwebtoken", - "rand", + "rand 0.8.5", "serde", - "strum", + "strum 0.26.3", ] [[package]] name = "alloy-rpc-types-eth" -version = "0.9.2" +version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0938bc615c02421bd86c1733ca7205cc3d99a122d9f9bff05726bd604b76a5c2" +checksum = "8b4dbee4d82f8a22dde18c28257bed759afeae7ba73da4a1479a039fd1445d04" dependencies = [ "alloy-consensus", "alloy-consensus-any", - "alloy-eips", + "alloy-eips 0.11.1", "alloy-network-primitives", "alloy-primitives", "alloy-rlp", - "alloy-serde", + "alloy-serde 0.11.1", "alloy-sol-types", "arbitrary", - "itertools 0.13.0", + "itertools 0.14.0", "jsonrpsee-types", "serde", "serde_json", @@ -558,27 +581,27 @@ dependencies = [ [[package]] name = "alloy-rpc-types-mev" -version = "0.9.2" +version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06bd42cf54b8a05b596322267f396a7dbdf141a56e93502a2ab4464fb718467a" +checksum = "418eb6584edd695dfe496dda85a19102c1ae4838f142efce11e2463ed2288d71" dependencies = [ - "alloy-eips", + "alloy-eips 0.11.1", "alloy-primitives", "alloy-rpc-types-eth", - "alloy-serde", + "alloy-serde 0.11.1", "serde", "serde_json", ] [[package]] name = "alloy-rpc-types-trace" -version = "0.9.2" +version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd38207e056cc7d1372367fbb4560ddf9107cbd20731743f641246bf0dede149" +checksum = "7bd951155515fa452a2ca4b5434d4b3ab742bcd3d1d1b9a91704bcef5b8d2604" dependencies = [ "alloy-primitives", "alloy-rpc-types-eth", - "alloy-serde", + "alloy-serde 0.11.1", "serde", "serde_json", "thiserror 2.0.11", @@ -586,13 +609,13 @@ dependencies = [ [[package]] name = "alloy-rpc-types-txpool" -version = "0.9.2" +version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7fd456a3fa9ea732d1c0611c9d52b5326ee29f4d02d01b07dac453ed68d9eb5" +checksum = "21d8dd5bd94993eda3d56a8c4c0d693548183a35462523ffc4385c0b020d3b0c" dependencies = [ "alloy-primitives", "alloy-rpc-types-eth", - "alloy-serde", + "alloy-serde 0.11.1", "serde", ] @@ -608,15 +631,28 @@ dependencies = [ "serde_json", ] +[[package]] +name = "alloy-serde" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8732058f5ca28c1d53d241e8504620b997ef670315d7c8afab856b3e3b80d945" +dependencies = [ + "alloy-primitives", + "arbitrary", + "serde", + "serde_json", +] + [[package]] name = "alloy-signer" -version = "0.9.2" +version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9bfa395ad5cc952c82358d31e4c68b27bf4a89a5456d9b27e226e77dac50e4ff" +checksum = "f96b3526fdd779a4bd0f37319cfb4172db52a7ac24cdbb8804b72091c18e1701" dependencies = [ "alloy-primitives", "async-trait", "auto_impl", + "either", "elliptic-curve", "k256", "thiserror 2.0.11", @@ -624,9 +660,9 @@ dependencies = [ [[package]] name = "alloy-signer-local" -version = "0.9.2" +version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fbdc63ce9eda1283fcbaca66ba4a414b841c0e3edbeef9c86a71242fc9e84ccc" +checksum = "fe8f78cd6b7501c7e813a1eb4a087b72d23af51f5bb66d4e948dc840bdd207d8" dependencies = [ "alloy-consensus", "alloy-network", @@ -636,29 +672,29 @@ dependencies = [ "coins-bip32", "coins-bip39", "k256", - "rand", + "rand 0.8.5", "thiserror 2.0.11", ] [[package]] name = "alloy-sol-macro" -version = "0.8.19" +version = "0.8.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d039d267aa5cbb7732fa6ce1fd9b5e9e29368f580f80ba9d7a8450c794de4b2" +checksum = "a2708e27f58d747423ae21d31b7a6625159bd8d867470ddd0256f396a68efa11" dependencies = [ "alloy-sol-macro-expander", "alloy-sol-macro-input", "proc-macro-error2", "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.98", ] [[package]] name = "alloy-sol-macro-expander" -version = "0.8.19" +version = "0.8.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "620ae5eee30ee7216a38027dec34e0585c55099f827f92f50d11e3d2d3a4a954" +checksum = "c6b7984d7e085dec382d2c5ef022b533fcdb1fe6129200af30ebf5afddb6a361" dependencies = [ "alloy-sol-macro-input", "const-hex", @@ -667,41 +703,41 @@ dependencies = [ "proc-macro-error2", "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.98", "syn-solidity", "tiny-keccak", ] [[package]] name = "alloy-sol-macro-input" -version = "0.8.19" +version = "0.8.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad9f7d057e00f8c5994e4ff4492b76532c51ead39353aa2ed63f8c50c0f4d52e" +checksum = "33d6a9fc4ed1a3c70bdb2357bec3924551c1a59f24e5a04a74472c755b37f87d" dependencies = [ "const-hex", "dunce", "heck", "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.98", "syn-solidity", ] [[package]] name = "alloy-sol-type-parser" -version = "0.8.19" +version = "0.8.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74e60b084fe1aef8acecda2743ff2d93c18ff3eb67a2d3b12f62582a1e66ef5e" +checksum = "1b1b3e9a48a6dd7bb052a111c8d93b5afc7956ed5e2cb4177793dc63bb1d2a36" dependencies = [ "serde", - "winnow 0.6.26", + "winnow", ] [[package]] name = "alloy-sol-types" -version = "0.8.19" +version = "0.8.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1382302752cd751efd275f4d6ef65877ddf61e0e6f5ac84ef4302b79a33a31a" +checksum = "6044800da35c38118fd4b98e18306bd3b91af5dedeb54c1b768cf1b4fb68f549" dependencies = [ "alloy-json-abi", "alloy-primitives", @@ -712,13 +748,12 @@ dependencies = [ [[package]] name = "alloy-transport" -version = "0.9.2" +version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d17722a198f33bbd25337660787aea8b8f57814febb7c746bc30407bdfc39448" +checksum = "5a8d762eadce3e9b65eac09879430c6f4fce3736cac3cac123f9b1bf435ddd13" dependencies = [ "alloy-json-rpc", "base64 0.22.1", - "futures-util", "futures-utils-wasm", "serde", "serde_json", @@ -732,12 +767,17 @@ dependencies = [ [[package]] name = "alloy-transport-http" -version = "0.9.2" +version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e1509599021330a31c4a6816b655e34bf67acb1cc03c564e09fd8754ff6c5de" +checksum = "20819c4cb978fb39ce6ac31991ba90f386d595f922f42ef888b4a18be190713e" dependencies = [ "alloy-json-rpc", + "alloy-rpc-types-engine", "alloy-transport", + "http-body-util", + "hyper", + "hyper-util", + "jsonwebtoken", "reqwest", "serde_json", "tower 0.5.2", @@ -745,11 +785,31 @@ dependencies = [ "url", ] +[[package]] +name = "alloy-transport-ipc" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e88304aa8b796204e5e2500dfe235933ed692745e3effd94c3733643db6d218" +dependencies = [ + "alloy-json-rpc", + "alloy-pubsub", + "alloy-transport", + "bytes", + "futures", + "interprocess", + "pin-project", + "serde", + "serde_json", + "tokio", + "tokio-util", + "tracing", +] + [[package]] name = "alloy-transport-ws" -version = "0.9.2" +version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "58011745b2f17b334db40df9077d75b181f78360a5bc5c35519e15d4bfce15e2" +checksum = "b9653ea9aa06d0e02fcbe2f04f1c47f35a85c378ccefa98e54ae85210bc8bbfa" dependencies = [ "alloy-pubsub", "alloy-transport", @@ -765,9 +825,9 @@ dependencies = [ [[package]] name = "alloy-trie" -version = "0.7.8" +version = "0.7.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6917c79e837aa7b77b7a6dae9f89cbe15313ac161c4d3cfaf8909ef21f3d22d8" +checksum = "d95a94854e420f07e962f7807485856cde359ab99ab6413883e15235ad996e8b" dependencies = [ "alloy-primitives", "alloy-rlp", @@ -865,7 +925,7 @@ dependencies = [ "proc-macro-error2", "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.98", ] [[package]] @@ -988,7 +1048,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1df2c09229cbc5a028b1d70e00fdb2acee28b1055dfb5ca73eea49c5a25c4e7c" dependencies = [ "num-traits", - "rand", + "rand 0.8.5", ] [[package]] @@ -998,7 +1058,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "94893f1e0c6eeab764ade8dc4c0db24caf4fe7cbbaafc0eba0a9030f447b5185" dependencies = [ "num-traits", - "rand", + "rand 0.8.5", ] [[package]] @@ -1046,7 +1106,7 @@ checksum = "3b43422f69d8ff38f95f1b2bb76517c91589a924d1559a0e935d7c8ce0274c11" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.98", ] [[package]] @@ -1068,18 +1128,18 @@ checksum = "c7c24de15d275a1ecfd47a380fb4d5ec9bfe0933f309ed5e705b775596a3574d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.98", ] [[package]] name = "async-trait" -version = "0.1.85" +version = "0.1.86" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f934833b4b7233644e5848f235df3f57ed8c80f1528a26c3dfa13d2147fa056" +checksum = "644dd749086bf3771a2fbc5f256fdb982d53f011c7d5d560304eafeecebce79d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.98", ] [[package]] @@ -1101,9 +1161,9 @@ checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" [[package]] name = "aurora-engine-modexp" -version = "1.1.0" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0aef7712851e524f35fbbb74fa6599c5cd8692056a1c36f9ca0d2001b670e7e5" +checksum = "518bc5745a6264b5fd7b09dffb9667e400ee9e2bbe18555fac75e1fe9afa0df9" dependencies = [ "hex", "num", @@ -1117,7 +1177,7 @@ checksum = "e12882f59de5360c748c4cbf569a042d5fb0eb515f7bea9c1f470b47f6ffbd73" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.98", ] [[package]] @@ -1128,9 +1188,9 @@ checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" [[package]] name = "backon" -version = "1.3.0" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba5289ec98f68f28dd809fd601059e6aa908bb8f6108620930828283d4ee23d7" +checksum = "49fef586913a57ff189f25c9b3d034356a5bf6b3fa9a7f067588fe1698ba1f5d" dependencies = [ "fastrand", "tokio", @@ -1223,7 +1283,7 @@ dependencies = [ "regex", "rustc-hash 1.1.0", "shlex", - "syn 2.0.96", + "syn 2.0.98", ] [[package]] @@ -1272,15 +1332,16 @@ dependencies = [ [[package]] name = "blake3" -version = "1.5.5" +version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8ee0c1824c4dea5b5f81736aff91bae041d2c07ee1192bec91054e10e3e601e" +checksum = "1230237285e3e10cde447185e8975408ae24deaa67205ce684805c25bc0c7937" dependencies = [ "arrayref", "arrayvec", "cc", "cfg-if", "constant_time_eq", + "memmap2", ] [[package]] @@ -1312,9 +1373,9 @@ dependencies = [ [[package]] name = "blst" -version = "0.3.13" +version = "0.3.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4378725facc195f1a538864863f6de233b500a8862747e7f165078a419d5e874" +checksum = "47c79a94619fade3c0b887670333513a67ac28a6a7e653eb260bf0d4103db38d" dependencies = [ "cc", "glob", @@ -1388,9 +1449,9 @@ checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" [[package]] name = "bytes" -version = "1.9.0" +version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "325918d6fe32f23b19878fe4b34794ae41fc19ddbe53b10571a4874d44ffd39b" +checksum = "f61dac84819c6588b558454b194026eb1f09c293b9036ae9b159e74e73ab6cf9" dependencies = [ "serde", ] @@ -1459,9 +1520,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.2.10" +version = "1.2.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13208fcbb66eaeffe09b99fffbe1af420f00a7b35aa99ad683dfc1aa76145229" +checksum = "0c3d1b2e905a3a7b00a6141adb0e4c0bb941d11caf55349d863942a1cc44e3c9" dependencies = [ "jobserver", "libc", @@ -1533,9 +1594,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.5.27" +version = "4.5.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "769b0145982b4b48713e01ec42d61614425f27b7058bda7180a3a41f30104796" +checksum = "92b7b18d71fad5313a1e320fa9897994228ce274b60faa4d694fe0ea89cd9e6d" dependencies = [ "clap_builder", "clap_derive", @@ -1543,9 +1604,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.5.27" +version = "4.5.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b26884eb4b57140e4d2d93652abfa49498b938b3c9179f9fc487b0acc3edad7" +checksum = "a35db2071778a7344791a4fb4f95308b5673d219dee3ae348b86642574ecc90c" dependencies = [ "anstream", "anstyle", @@ -1555,14 +1616,14 @@ dependencies = [ [[package]] name = "clap_derive" -version = "4.5.24" +version = "4.5.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "54b755194d6389280185988721fffba69495eed5ee9feeee9a599b53db80318c" +checksum = "bf4ced95c6f4a675af3da73304b9ac4ed991640c36374e4b46795c49e17cf1ed" dependencies = [ "heck", "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.98", ] [[package]] @@ -1598,7 +1659,7 @@ dependencies = [ "hmac 0.12.1", "once_cell", "pbkdf2", - "rand", + "rand 0.8.5", "sha2 0.10.8", "thiserror 1.0.69", ] @@ -1640,13 +1701,12 @@ dependencies = [ [[package]] name = "comfy-table" -version = "7.1.3" +version = "7.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24f165e7b643266ea80cb858aed492ad9280e3e05ce24d4a99d7d7b889b6a4d9" +checksum = "4a65ebfec4fb190b6f90e944a817d60499ee0744e582530e2c9900a22e591d9a" dependencies = [ "crossterm", - "strum", - "strum_macros", + "unicode-segmentation", "unicode-width 0.2.0", ] @@ -1692,6 +1752,26 @@ version = "0.9.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8" +[[package]] +name = "const_format" +version = "0.2.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "126f97965c8ad46d6d9163268ff28432e8f6a1196a55578867832e3049df63dd" +dependencies = [ + "const_format_proc_macros", +] + +[[package]] +name = "const_format_proc_macros" +version = "0.2.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d57c2eccfb16dbac1f4e61e206105db5820c9d26c3c472bc17c774259ef7744" +dependencies = [ + "proc-macro2", + "quote", + "unicode-xid", +] + [[package]] name = "constant_time_eq" version = "0.3.1" @@ -1853,7 +1933,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0dc92fb57ca44df6db8059111ab3af99a63d5d0f8375d9972e319a379c6bab76" dependencies = [ "generic-array", - "rand_core", + "rand_core 0.6.4", "subtle", "zeroize", ] @@ -1865,7 +1945,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" dependencies = [ "generic-array", - "rand_core", + "rand_core 0.6.4", "typenum", ] @@ -1912,7 +1992,7 @@ checksum = "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.98", ] [[package]] @@ -1936,7 +2016,7 @@ dependencies = [ "proc-macro2", "quote", "strsim", - "syn 2.0.96", + "syn 2.0.98", ] [[package]] @@ -1947,7 +2027,7 @@ checksum = "d336a2a514f6ccccaa3e09b02d41d35330c07ddf03a62165fcec10bb561c7806" dependencies = [ "darling_core", "quote", - "syn 2.0.96", + "syn 2.0.98", ] [[package]] @@ -1962,19 +2042,20 @@ dependencies = [ "lock_api", "once_cell", "parking_lot_core", + "serde", ] [[package]] name = "data-encoding" -version = "2.7.0" +version = "2.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e60eed09d8c01d3cee5b7d30acb059b76614c918fa0f992e0dd6eeb10daad6f" +checksum = "575f75dfd25738df5b91b8e43e14d44bda14637a58fae779fd2b064f8bf3e010" [[package]] name = "data-encoding-macro" -version = "0.1.16" +version = "0.1.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b16d9d0d88a5273d830dac8b78ceb217ffc9b1d5404e5597a3542515329405b" +checksum = "9f9724adfcf41f45bf652b3995837669d73c4d49a1b5ac1ff82905ac7d9b5558" dependencies = [ "data-encoding", "data-encoding-macro-internal", @@ -1982,12 +2063,12 @@ dependencies = [ [[package]] name = "data-encoding-macro-internal" -version = "0.1.14" +version = "0.1.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1145d32e826a7748b69ee8fc62d3e6355ff7f1051df53141e7048162fc90481b" +checksum = "18e4fdb82bd54a12e42fb58a800dcae6b9e13982238ce2296dc3570b92148e1f" dependencies = [ "data-encoding", - "syn 2.0.96", + "syn 2.0.98", ] [[package]] @@ -2046,7 +2127,7 @@ checksum = "30542c1ad912e0e3d22a1935c290e12e8a29d704a420177a31faad4a601a0800" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.98", ] [[package]] @@ -2067,7 +2148,7 @@ dependencies = [ "convert_case", "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.98", "unicode-xid", ] @@ -2160,11 +2241,11 @@ dependencies = [ "hkdf", "lazy_static", "libp2p-identity", - "lru", + "lru 0.12.5", "more-asserts", "multiaddr", "parking_lot", - "rand", + "rand 0.8.5", "smallvec", "socket2", "tokio", @@ -2181,7 +2262,7 @@ checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.98", ] [[package]] @@ -2198,9 +2279,9 @@ checksum = "92773504d58c093f6de2459af4af33faa518c13451eb8f2b5698ed3d36e7c813" [[package]] name = "dyn-clone" -version = "1.0.17" +version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d6ef0072f8a535281e4876be788938b528e9a1d43900b82c2569af7da799125" +checksum = "feeef44e73baff3a26d371801df019877a9866a8c493d315ab00177843314f35" [[package]] name = "ecdsa" @@ -2235,7 +2316,7 @@ checksum = "4a3daa8e81a3963a60642bcc1f90a670680bd4a77535faa384e9d1c79d620871" dependencies = [ "curve25519-dalek", "ed25519", - "rand_core", + "rand_core 0.6.4", "serde", "sha2 0.10.8", "subtle", @@ -2261,32 +2342,13 @@ dependencies = [ "generic-array", "group", "pkcs8", - "rand_core", + "rand_core 0.6.4", "sec1", "serdect", "subtle", "zeroize", ] -[[package]] -name = "engine" -version = "0.0.1" -dependencies = [ - "alloy-eips", - "alloy-primitives", - "alloy-rpc-types-engine", - "arbitrary", - "eyre", - "reth-engine-primitives", - "reth-primitives", - "reth-rpc-api", - "reth-scroll-primitives", - "reth-testing-utils", - "serde", - "tokio", - "tracing", -] - [[package]] name = "enr" version = "0.12.1" @@ -2300,7 +2362,7 @@ dependencies = [ "hex", "k256", "log", - "rand", + "rand 0.8.5", "secp256k1", "serde", "sha3", @@ -2316,7 +2378,7 @@ dependencies = [ "heck", "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.98", ] [[package]] @@ -2327,14 +2389,14 @@ checksum = "2f9ed6b3789237c8a0c1c505af1c7eb2c560df6186f01b098c3a1064ea532f38" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.98", ] [[package]] name = "equivalent" -version = "1.0.1" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" +checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" [[package]] name = "errno" @@ -2361,9 +2423,9 @@ dependencies = [ [[package]] name = "ethereum_ssz" -version = "0.8.2" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "862e41ea8eea7508f70cfd8cd560f0c34bb0af37c719a8e06c2672f0f031d8e5" +checksum = "86da3096d1304f5f28476ce383005385459afeaf0eea08592b65ddbc9b258d16" dependencies = [ "alloy-primitives", "ethereum_serde_utils", @@ -2376,14 +2438,14 @@ dependencies = [ [[package]] name = "ethereum_ssz_derive" -version = "0.8.2" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d31ecf6640112f61dc34b4d8359c081102969af0edd18381fed2052f6db6a410" +checksum = "d832a5c38eba0e7ad92592f7a22d693954637fbb332b4f669590d66a5c3183e5" dependencies = [ "darling", "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.98", ] [[package]] @@ -2413,6 +2475,17 @@ dependencies = [ "bytes", ] +[[package]] +name = "fastrlp" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce8dba4714ef14b8274c371879b175aa55b16b30f269663f19d576f380018dc4" +dependencies = [ + "arrayvec", + "auto_impl", + "bytes", +] + [[package]] name = "fdlimit" version = "0.3.0" @@ -2428,7 +2501,7 @@ name = "ff" version = "0.13.0" source = "git+https://github.com/scroll-tech/ff?branch=feat/sp1#244b1098f6be1d19c5fd3f0ec60117ac2940e6ca" dependencies = [ - "rand_core", + "rand_core 0.6.4", "subtle", ] @@ -2457,7 +2530,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "835c052cb0c08c1acf6ffd71c022172e18723949c8282f2b9f27efbc51e64534" dependencies = [ "byteorder", - "rand", + "rand 0.8.5", "rustc-hex", "static_assertions", ] @@ -2564,7 +2637,7 @@ checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.98", ] [[package]] @@ -2738,15 +2811,15 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f0f9ef7462f7c099f518d754361858f86d8a07af53ba9af0fe635bbccb151a63" dependencies = [ "ff", - "rand_core", + "rand_core 0.6.4", "subtle", ] [[package]] name = "h2" -version = "0.4.7" +version = "0.4.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ccae279728d634d083c00f6099cb58f01cc99c145b84b8be2f6c74618d79922e" +checksum = "5017294ff4bb30944501348f6f8e42e6ad28f42c8bbef7a74029aff064a4e3c2" dependencies = [ "atomic-waker", "bytes", @@ -2842,9 +2915,9 @@ dependencies = [ [[package]] name = "hickory-proto" -version = "0.25.0-alpha.4" +version = "0.25.0-alpha.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d063c0692ee669aa6d261988aa19ca5510f1cc40e4f211024f50c888499a35d7" +checksum = "1d00147af6310f4392a31680db52a3ed45a2e0f68eb18e8c3fe5537ecc96d9e2" dependencies = [ "async-recursion", "async-trait", @@ -2857,7 +2930,7 @@ dependencies = [ "idna", "ipnet", "once_cell", - "rand", + "rand 0.9.0", "serde", "thiserror 2.0.11", "tinyvec", @@ -2868,9 +2941,9 @@ dependencies = [ [[package]] name = "hickory-resolver" -version = "0.25.0-alpha.4" +version = "0.25.0-alpha.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42bc352e4412fb657e795f79b4efcf2bd60b59ee5ca0187f3554194cd1107a27" +checksum = "5762f69ebdbd4ddb2e975cd24690bf21fe6b2604039189c26acddbc427f12887" dependencies = [ "cfg-if", "futures-util", @@ -2879,7 +2952,7 @@ dependencies = [ "moka", "once_cell", "parking_lot", - "rand", + "rand 0.9.0", "resolv-conf", "serde", "smallvec", @@ -3210,7 +3283,7 @@ checksum = "1ec89e9337638ecdc08744df490b221a7399bf8d164eb52a665454e60e075ad6" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.98", ] [[package]] @@ -3267,7 +3340,7 @@ checksum = "a0eb5a3343abf848c0984fe4604b2b105da9539376e24fc0a3b0007411ae4fd9" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.98", ] [[package]] @@ -3364,7 +3437,7 @@ dependencies = [ "indoc", "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.98", ] [[package]] @@ -3434,6 +3507,15 @@ dependencies = [ "either", ] +[[package]] +name = "itertools" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b192c782037fadd9cfa75548310488aabdbf3d2da73885b31bd0abd03351285" +dependencies = [ + "either", +] + [[package]] name = "itoa" version = "1.0.14" @@ -3538,8 +3620,8 @@ dependencies = [ "jsonrpsee-types", "parking_lot", "pin-project", - "rand", - "rustc-hash 2.1.0", + "rand 0.8.5", + "rustc-hash 2.1.1", "serde", "serde_json", "thiserror 1.0.69", @@ -3584,7 +3666,7 @@ dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.98", ] [[package]] @@ -3652,11 +3734,11 @@ dependencies = [ [[package]] name = "jsonwebtoken" -version = "9.3.0" +version = "9.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9ae10193d25051e74945f1ea2d0b42e03cc3b890f7e4cc5faa44997d808193f" +checksum = "5a87cc7a48537badeae96744432de36f4be2b4a34a05a5ef32e9dd8a1c169dde" dependencies = [ - "base64 0.21.7", + "base64 0.22.1", "js-sys", "pem", "ring", @@ -3744,6 +3826,12 @@ dependencies = [ "windows-targets 0.52.6", ] +[[package]] +name = "libm" +version = "0.2.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8355be11b20d696c8f18f6cc018c4e372165b1fa8126cef092399c9951984ffa" + [[package]] name = "libp2p-identity" version = "0.2.10" @@ -3798,7 +3886,7 @@ dependencies = [ "libsecp256k1-core", "libsecp256k1-gen-ecmult", "libsecp256k1-gen-genmult", - "rand", + "rand 0.8.5", "serde", "sha2 0.9.9", "typenum", @@ -3900,6 +3988,15 @@ dependencies = [ "hashbrown 0.15.2", ] +[[package]] +name = "lru" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "227748d55f2f0ab4735d87fd623798cb6b664512fe979705f829c9f81c934465" +dependencies = [ + "hashbrown 0.15.2", +] + [[package]] name = "lz4_flex" version = "0.11.3" @@ -3964,14 +4061,14 @@ dependencies = [ "proc-macro2", "quote", "regex", - "syn 2.0.96", + "syn 2.0.98", ] [[package]] name = "metrics-exporter-prometheus" -version = "0.16.1" +version = "0.16.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12779523996a67c13c84906a876ac6fe4d07a6e1adb54978378e13f199251a62" +checksum = "dd7399781913e5393588a8d8c6a2867bf85fb38eaf2502fdce465aad2dc6f034" dependencies = [ "base64 0.22.1", "indexmap 2.7.1", @@ -4008,7 +4105,7 @@ dependencies = [ "hashbrown 0.15.2", "metrics", "quanta", - "rand", + "rand 0.8.5", "rand_xoshiro", "sketches-ddsketch", ] @@ -4037,9 +4134,9 @@ checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" [[package]] name = "miniz_oxide" -version = "0.8.3" +version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8402cab7aefae129c6977bb0ff1b8fd9a04eb5b51efc50a70bea51cda0c7924" +checksum = "b3b1c9bd4fe1f0f8b387f6eb9eb3b4a1aa26185e5750efb9140301703f62cd1b" dependencies = [ "adler2", ] @@ -4178,6 +4275,7 @@ dependencies = [ "libc", "log", "mio 0.8.11", + "serde", "walkdir", "windows-sys 0.48.0", ] @@ -4278,6 +4376,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" dependencies = [ "autocfg", + "libm", ] [[package]] @@ -4307,7 +4406,7 @@ checksum = "af1844ef2428cc3e1cb900be36181049ef3d3193c63e43026cfe202983b27a56" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.98", ] [[package]] @@ -4344,9 +4443,9 @@ dependencies = [ [[package]] name = "once_cell" -version = "1.20.2" +version = "1.20.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1261fe7e33c73b354eab43b1273a57c8f967d0391e80353e51f764ac02cf6775" +checksum = "945462a4b81e43c4e3ba96bd7b49d834c6f61198356aa858733bc4acf3cbe62e" dependencies = [ "critical-section", "portable-atomic", @@ -4354,15 +4453,15 @@ dependencies = [ [[package]] name = "op-alloy-consensus" -version = "0.9.6" +version = "0.10.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e28dc4e397dd8969f7f98ea6454a5c531349a58c76e12448b0c2de6581df7b8c" +checksum = "bc796860410e85a9cd881ee074c3dc0120b90696d82d09348ebb563d4ade67e4" dependencies = [ "alloy-consensus", - "alloy-eips", + "alloy-eips 0.11.1", "alloy-primitives", "alloy-rlp", - "alloy-serde", + "alloy-serde 0.11.1", "arbitrary", "derive_more", "serde", @@ -4370,49 +4469,20 @@ dependencies = [ "thiserror 2.0.11", ] -[[package]] -name = "op-alloy-network" -version = "0.9.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "818a4ea62c0968fbf4e3bee2aa1349ad7ae6504b8aba73889a40160bebaa6818" -dependencies = [ - "alloy-consensus", - "alloy-network", - "alloy-primitives", - "alloy-rpc-types-eth", - "alloy-signer", - "op-alloy-consensus", - "op-alloy-rpc-types", -] - -[[package]] -name = "op-alloy-rpc-types" -version = "0.9.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b9c83c664b953d474d6b58825800b6ff1d61876a686407e646cbf76891c1f9b" -dependencies = [ - "alloy-consensus", - "alloy-eips", - "alloy-network-primitives", - "alloy-primitives", - "alloy-rpc-types-eth", - "alloy-serde", - "derive_more", - "op-alloy-consensus", - "serde", - "serde_json", -] - [[package]] name = "op-alloy-rpc-types-engine" -version = "0.9.6" +version = "0.10.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8d05b5b5b3cff7f24eec2bc366f86a7ff0934678b1bda36d0ecaadba9504170" +checksum = "24a03ea4f6374aa13524753136eeceee76196acad6b1306399ab8f1856872384" dependencies = [ - "alloy-eips", + "alloy-consensus", + "alloy-eips 0.11.1", "alloy-primitives", "alloy-rpc-types-engine", + "derive_more", + "ethereum_ssz", "op-alloy-consensus", + "snap", "thiserror 2.0.11", ] @@ -4464,30 +4534,32 @@ dependencies = [ [[package]] name = "parity-scale-codec" -version = "3.6.12" +version = "3.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "306800abfa29c7f16596b5970a588435e3d5b3149683d00c12b699cc19f895ee" +checksum = "c9fde3d0718baf5bc92f577d652001da0f8d54cd03a7974e118d04fc888dc23d" dependencies = [ "arbitrary", "arrayvec", "bitvec", "byte-slice-cast", "bytes", + "const_format", "impl-trait-for-tuples", "parity-scale-codec-derive", + "rustversion", "serde", ] [[package]] name = "parity-scale-codec-derive" -version = "3.6.12" +version = "3.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d830939c76d294956402033aee57a6da7b438f2294eb94864c37b0569053a42c" +checksum = "581c837bb6b9541ce7faa9377c20616e4fb7650f6b0f68bc93c827ee504fb7b3" dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.98", ] [[package]] @@ -4568,22 +4640,22 @@ dependencies = [ [[package]] name = "pin-project" -version = "1.1.8" +version = "1.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e2ec53ad785f4d35dac0adea7f7dc6f1bb277ad84a680c7afefeae05d1f5916" +checksum = "dfe2e71e1471fe07709406bf725f710b02927c9c54b2b5b2ec0e8087d97c327d" dependencies = [ "pin-project-internal", ] [[package]] name = "pin-project-internal" -version = "1.1.8" +version = "1.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d56a66c0c55993aa927429d0f8a0abfd74f084e4d9c192cffed01e418d83eefb" +checksum = "f6e859e6e5bd50440ab63c47e3ebabc90f26251f7c73c3d3e837b74a1cc3fa67" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.98", ] [[package]] @@ -4653,7 +4725,7 @@ version = "0.2.20" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "77957b295656769bb8ad2b6a6b09d897d94f05c41b069aede1fcdaa675eaea04" dependencies = [ - "zerocopy", + "zerocopy 0.7.35", ] [[package]] @@ -4714,7 +4786,7 @@ dependencies = [ "proc-macro-error-attr2", "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.98", ] [[package]] @@ -4785,8 +4857,8 @@ dependencies = [ "bitflags 2.8.0", "lazy_static", "num-traits", - "rand", - "rand_chacha", + "rand 0.8.5", + "rand_chacha 0.3.1", "rand_xorshift", "regex-syntax 0.8.5", "rusty-fork", @@ -4812,7 +4884,7 @@ checksum = "4ee1c9ac207483d5e7db4940700de86a9aae46ef90c48b57f99fe7edb8345e49" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.98", ] [[package]] @@ -4855,7 +4927,7 @@ dependencies = [ "pin-project-lite", "quinn-proto", "quinn-udp", - "rustc-hash 2.1.0", + "rustc-hash 2.1.1", "rustls", "socket2", "thiserror 2.0.11", @@ -4871,9 +4943,9 @@ checksum = "a2fe5ef3495d7d2e377ff17b1a8ce2ee2ec2a18cde8b6ad6619d65d0701c135d" dependencies = [ "bytes", "getrandom 0.2.15", - "rand", + "rand 0.8.5", "ring", - "rustc-hash 2.1.0", + "rustc-hash 2.1.1", "rustls", "rustls-pki-types", "slab", @@ -4885,9 +4957,9 @@ dependencies = [ [[package]] name = "quinn-udp" -version = "0.5.9" +version = "0.5.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c40286217b4ba3a71d644d752e6a0b71f13f1b6a2c5311acfcbe0c2418ed904" +checksum = "e46f3055866785f6b92bc6164b76be02ca8f2eb4b002c0354b28cf4c119e5944" dependencies = [ "cfg_aliases", "libc", @@ -4919,11 +4991,22 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" dependencies = [ "libc", - "rand_chacha", - "rand_core", + "rand_chacha 0.3.1", + "rand_core 0.6.4", "serde", ] +[[package]] +name = "rand" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3779b94aeb87e8bd4e834cee3650289ee9e0d5677f976ecdb6d219e5f4f6cd94" +dependencies = [ + "rand_chacha 0.9.0", + "rand_core 0.9.1", + "zerocopy 0.8.18", +] + [[package]] name = "rand_chacha" version = "0.3.1" @@ -4931,7 +5014,17 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" dependencies = [ "ppv-lite86", - "rand_core", + "rand_core 0.6.4", +] + +[[package]] +name = "rand_chacha" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb" +dependencies = [ + "ppv-lite86", + "rand_core 0.9.1", ] [[package]] @@ -4943,13 +5036,23 @@ dependencies = [ "getrandom 0.2.15", ] +[[package]] +name = "rand_core" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a88e0da7a2c97baa202165137c158d0a2e824ac465d13d81046727b34cb247d3" +dependencies = [ + "getrandom 0.3.1", + "zerocopy 0.8.18", +] + [[package]] name = "rand_xorshift" version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d25bf25ec5ae4a3f1b92f929810509a2f53d7dca2f50b794ff57e3face536c8f" dependencies = [ - "rand_core", + "rand_core 0.6.4", ] [[package]] @@ -4958,7 +5061,7 @@ version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6f97cdb2a36ed4183de61b2f824cc45c9f1037f28afe0a322e9fff4c108b5aaa" dependencies = [ - "rand_core", + "rand_core 0.6.4", ] [[package]] @@ -4973,10 +5076,10 @@ dependencies = [ "crossterm", "instability", "itertools 0.13.0", - "lru", + "lru 0.12.5", "paste", - "strum", - "strum_macros", + "strum 0.26.3", + "strum_macros 0.26.4", "unicode-segmentation", "unicode-truncate", "unicode-width 0.1.14", @@ -4984,9 +5087,9 @@ dependencies = [ [[package]] name = "raw-cpuid" -version = "11.3.0" +version = "11.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c6928fa44c097620b706542d428957635951bade7143269085389d42c8a4927e" +checksum = "529468c1335c1c03919960dfefdb1b3648858c20d7ec2d0663e728e4a717efbc" dependencies = [ "bitflags 2.8.0", ] @@ -5139,10 +5242,10 @@ dependencies = [ [[package]] name = "reth-chain-state" version = "1.1.5" -source = "git+https://github.com/scroll-tech/reth.git#6c634147dcf6b91d0905f199992bb46b0a3705d0" +source = "git+https://github.com/scroll-tech/reth.git?branch=feat/add-deref-blanket-engine-api#b4bb326eaecaf33b6452ecdf013a0122cb4f4d86" dependencies = [ "alloy-consensus", - "alloy-eips", + "alloy-eips 0.11.1", "alloy-primitives", "alloy-signer", "alloy-signer-local", @@ -5150,7 +5253,7 @@ dependencies = [ "metrics", "parking_lot", "pin-project", - "rand", + "rand 0.8.5", "reth-chainspec", "reth-errors", "reth-execution-types", @@ -5168,11 +5271,11 @@ dependencies = [ [[package]] name = "reth-chainspec" version = "1.1.5" -source = "git+https://github.com/scroll-tech/reth.git#6c634147dcf6b91d0905f199992bb46b0a3705d0" +source = "git+https://github.com/scroll-tech/reth.git?branch=feat/add-deref-blanket-engine-api#b4bb326eaecaf33b6452ecdf013a0122cb4f4d86" dependencies = [ "alloy-chains", "alloy-consensus", - "alloy-eips", + "alloy-eips 0.11.1", "alloy-genesis", "alloy-primitives", "alloy-trie", @@ -5187,7 +5290,7 @@ dependencies = [ [[package]] name = "reth-cli" version = "1.1.5" -source = "git+https://github.com/scroll-tech/reth.git#6c634147dcf6b91d0905f199992bb46b0a3705d0" +source = "git+https://github.com/scroll-tech/reth.git?branch=feat/add-deref-blanket-engine-api#b4bb326eaecaf33b6452ecdf013a0122cb4f4d86" dependencies = [ "alloy-genesis", "clap", @@ -5201,11 +5304,11 @@ dependencies = [ [[package]] name = "reth-cli-commands" version = "1.1.5" -source = "git+https://github.com/scroll-tech/reth.git#6c634147dcf6b91d0905f199992bb46b0a3705d0" +source = "git+https://github.com/scroll-tech/reth.git?branch=feat/add-deref-blanket-engine-api#b4bb326eaecaf33b6452ecdf013a0122cb4f4d86" dependencies = [ "ahash", "alloy-consensus", - "alloy-eips", + "alloy-eips 0.11.1", "alloy-primitives", "alloy-rlp", "backon", @@ -5245,6 +5348,7 @@ dependencies = [ "reth-node-events", "reth-node-metrics", "reth-primitives", + "reth-primitives-traits", "reth-provider", "reth-prune", "reth-stages", @@ -5261,7 +5365,7 @@ dependencies = [ [[package]] name = "reth-cli-runner" version = "1.1.5" -source = "git+https://github.com/scroll-tech/reth.git#6c634147dcf6b91d0905f199992bb46b0a3705d0" +source = "git+https://github.com/scroll-tech/reth.git?branch=feat/add-deref-blanket-engine-api#b4bb326eaecaf33b6452ecdf013a0122cb4f4d86" dependencies = [ "reth-tasks", "tokio", @@ -5271,14 +5375,14 @@ dependencies = [ [[package]] name = "reth-cli-util" version = "1.1.5" -source = "git+https://github.com/scroll-tech/reth.git#6c634147dcf6b91d0905f199992bb46b0a3705d0" +source = "git+https://github.com/scroll-tech/reth.git?branch=feat/add-deref-blanket-engine-api#b4bb326eaecaf33b6452ecdf013a0122cb4f4d86" dependencies = [ - "alloy-eips", + "alloy-eips 0.11.1", "alloy-primitives", "cfg-if", "eyre", "libc", - "rand", + "rand 0.8.5", "reth-fs-util", "secp256k1", "serde", @@ -5288,10 +5392,10 @@ dependencies = [ [[package]] name = "reth-codecs" version = "1.1.5" -source = "git+https://github.com/scroll-tech/reth.git#6c634147dcf6b91d0905f199992bb46b0a3705d0" +source = "git+https://github.com/scroll-tech/reth.git?branch=feat/add-deref-blanket-engine-api#b4bb326eaecaf33b6452ecdf013a0122cb4f4d86" dependencies = [ "alloy-consensus", - "alloy-eips", + "alloy-eips 0.11.1", "alloy-genesis", "alloy-primitives", "alloy-trie", @@ -5307,18 +5411,18 @@ dependencies = [ [[package]] name = "reth-codecs-derive" version = "1.1.5" -source = "git+https://github.com/scroll-tech/reth.git#6c634147dcf6b91d0905f199992bb46b0a3705d0" +source = "git+https://github.com/scroll-tech/reth.git?branch=feat/add-deref-blanket-engine-api#b4bb326eaecaf33b6452ecdf013a0122cb4f4d86" dependencies = [ "convert_case", "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.98", ] [[package]] name = "reth-config" version = "1.1.5" -source = "git+https://github.com/scroll-tech/reth.git#6c634147dcf6b91d0905f199992bb46b0a3705d0" +source = "git+https://github.com/scroll-tech/reth.git?branch=feat/add-deref-blanket-engine-api#b4bb326eaecaf33b6452ecdf013a0122cb4f4d86" dependencies = [ "eyre", "humantime-serde", @@ -5332,24 +5436,23 @@ dependencies = [ [[package]] name = "reth-consensus" version = "1.1.5" -source = "git+https://github.com/scroll-tech/reth.git#6c634147dcf6b91d0905f199992bb46b0a3705d0" +source = "git+https://github.com/scroll-tech/reth.git?branch=feat/add-deref-blanket-engine-api#b4bb326eaecaf33b6452ecdf013a0122cb4f4d86" dependencies = [ "alloy-consensus", - "alloy-eips", + "alloy-eips 0.11.1", "alloy-primitives", "auto_impl", "derive_more", - "reth-primitives", "reth-primitives-traits", ] [[package]] name = "reth-consensus-common" version = "1.1.5" -source = "git+https://github.com/scroll-tech/reth.git#6c634147dcf6b91d0905f199992bb46b0a3705d0" +source = "git+https://github.com/scroll-tech/reth.git?branch=feat/add-deref-blanket-engine-api#b4bb326eaecaf33b6452ecdf013a0122cb4f4d86" dependencies = [ "alloy-consensus", - "alloy-eips", + "alloy-eips 0.11.1", "alloy-primitives", "reth-chainspec", "reth-consensus", @@ -5359,10 +5462,10 @@ dependencies = [ [[package]] name = "reth-consensus-debug-client" version = "1.1.5" -source = "git+https://github.com/scroll-tech/reth.git#6c634147dcf6b91d0905f199992bb46b0a3705d0" +source = "git+https://github.com/scroll-tech/reth.git?branch=feat/add-deref-blanket-engine-api#b4bb326eaecaf33b6452ecdf013a0122cb4f4d86" dependencies = [ "alloy-consensus", - "alloy-eips", + "alloy-eips 0.11.1", "alloy-primitives", "alloy-provider", "alloy-rpc-types-engine", @@ -5383,7 +5486,7 @@ dependencies = [ [[package]] name = "reth-db" version = "1.1.5" -source = "git+https://github.com/scroll-tech/reth.git#6c634147dcf6b91d0905f199992bb46b0a3705d0" +source = "git+https://github.com/scroll-tech/reth.git?branch=feat/add-deref-blanket-engine-api#b4bb326eaecaf33b6452ecdf013a0122cb4f4d86" dependencies = [ "alloy-consensus", "alloy-primitives", @@ -5405,9 +5508,9 @@ dependencies = [ "reth-storage-errors", "reth-tracing", "reth-trie-common", - "rustc-hash 2.1.0", + "rustc-hash 2.1.1", "serde", - "strum", + "strum 0.26.3", "sysinfo", "tempfile", "thiserror 2.0.11", @@ -5416,7 +5519,7 @@ dependencies = [ [[package]] name = "reth-db-api" version = "1.1.5" -source = "git+https://github.com/scroll-tech/reth.git#6c634147dcf6b91d0905f199992bb46b0a3705d0" +source = "git+https://github.com/scroll-tech/reth.git?branch=feat/add-deref-blanket-engine-api#b4bb326eaecaf33b6452ecdf013a0122cb4f4d86" dependencies = [ "alloy-consensus", "alloy-genesis", @@ -5445,7 +5548,7 @@ dependencies = [ [[package]] name = "reth-db-common" version = "1.1.5" -source = "git+https://github.com/scroll-tech/reth.git#6c634147dcf6b91d0905f199992bb46b0a3705d0" +source = "git+https://github.com/scroll-tech/reth.git?branch=feat/add-deref-blanket-engine-api#b4bb326eaecaf33b6452ecdf013a0122cb4f4d86" dependencies = [ "alloy-consensus", "alloy-genesis", @@ -5474,9 +5577,9 @@ dependencies = [ [[package]] name = "reth-db-models" version = "1.1.5" -source = "git+https://github.com/scroll-tech/reth.git#6c634147dcf6b91d0905f199992bb46b0a3705d0" +source = "git+https://github.com/scroll-tech/reth.git?branch=feat/add-deref-blanket-engine-api#b4bb326eaecaf33b6452ecdf013a0122cb4f4d86" dependencies = [ - "alloy-eips", + "alloy-eips 0.11.1", "alloy-primitives", "arbitrary", "bytes", @@ -5490,7 +5593,7 @@ dependencies = [ [[package]] name = "reth-discv4" version = "1.1.5" -source = "git+https://github.com/scroll-tech/reth.git#6c634147dcf6b91d0905f199992bb46b0a3705d0" +source = "git+https://github.com/scroll-tech/reth.git?branch=feat/add-deref-blanket-engine-api#b4bb326eaecaf33b6452ecdf013a0122cb4f4d86" dependencies = [ "alloy-primitives", "alloy-rlp", @@ -5499,7 +5602,7 @@ dependencies = [ "generic-array", "itertools 0.13.0", "parking_lot", - "rand", + "rand 0.8.5", "reth-ethereum-forks", "reth-net-banlist", "reth-net-nat", @@ -5516,7 +5619,7 @@ dependencies = [ [[package]] name = "reth-discv5" version = "1.1.5" -source = "git+https://github.com/scroll-tech/reth.git#6c634147dcf6b91d0905f199992bb46b0a3705d0" +source = "git+https://github.com/scroll-tech/reth.git?branch=feat/add-deref-blanket-engine-api#b4bb326eaecaf33b6452ecdf013a0122cb4f4d86" dependencies = [ "alloy-primitives", "alloy-rlp", @@ -5526,7 +5629,7 @@ dependencies = [ "futures", "itertools 0.13.0", "metrics", - "rand", + "rand 0.8.5", "reth-chainspec", "reth-ethereum-forks", "reth-metrics", @@ -5540,7 +5643,7 @@ dependencies = [ [[package]] name = "reth-dns-discovery" version = "1.1.5" -source = "git+https://github.com/scroll-tech/reth.git#6c634147dcf6b91d0905f199992bb46b0a3705d0" +source = "git+https://github.com/scroll-tech/reth.git?branch=feat/add-deref-blanket-engine-api#b4bb326eaecaf33b6452ecdf013a0122cb4f4d86" dependencies = [ "alloy-primitives", "data-encoding", @@ -5564,10 +5667,10 @@ dependencies = [ [[package]] name = "reth-downloaders" version = "1.1.5" -source = "git+https://github.com/scroll-tech/reth.git#6c634147dcf6b91d0905f199992bb46b0a3705d0" +source = "git+https://github.com/scroll-tech/reth.git?branch=feat/add-deref-blanket-engine-api#b4bb326eaecaf33b6452ecdf013a0122cb4f4d86" dependencies = [ "alloy-consensus", - "alloy-eips", + "alloy-eips 0.11.1", "alloy-primitives", "alloy-rlp", "futures", @@ -5599,10 +5702,10 @@ dependencies = [ [[package]] name = "reth-e2e-test-utils" version = "1.1.5" -source = "git+https://github.com/scroll-tech/reth.git#6c634147dcf6b91d0905f199992bb46b0a3705d0" +source = "git+https://github.com/scroll-tech/reth.git?branch=feat/add-deref-blanket-engine-api#b4bb326eaecaf33b6452ecdf013a0122cb4f4d86" dependencies = [ "alloy-consensus", - "alloy-eips", + "alloy-eips 0.11.1", "alloy-network", "alloy-primitives", "alloy-rlp", @@ -5647,7 +5750,7 @@ dependencies = [ [[package]] name = "reth-ecies" version = "1.1.5" -source = "git+https://github.com/scroll-tech/reth.git#6c634147dcf6b91d0905f199992bb46b0a3705d0" +source = "git+https://github.com/scroll-tech/reth.git?branch=feat/add-deref-blanket-engine-api#b4bb326eaecaf33b6452ecdf013a0122cb4f4d86" dependencies = [ "aes", "alloy-primitives", @@ -5662,7 +5765,7 @@ dependencies = [ "generic-array", "hmac 0.12.1", "pin-project", - "rand", + "rand 0.8.5", "reth-network-peers", "secp256k1", "sha2 0.10.8", @@ -5678,7 +5781,7 @@ dependencies = [ [[package]] name = "reth-engine-local" version = "1.1.5" -source = "git+https://github.com/scroll-tech/reth.git#6c634147dcf6b91d0905f199992bb46b0a3705d0" +source = "git+https://github.com/scroll-tech/reth.git?branch=feat/add-deref-blanket-engine-api#b4bb326eaecaf33b6452ecdf013a0122cb4f4d86" dependencies = [ "alloy-consensus", "alloy-primitives", @@ -5709,9 +5812,10 @@ dependencies = [ [[package]] name = "reth-engine-primitives" version = "1.1.5" -source = "git+https://github.com/scroll-tech/reth.git#6c634147dcf6b91d0905f199992bb46b0a3705d0" +source = "git+https://github.com/scroll-tech/reth.git?branch=feat/add-deref-blanket-engine-api#b4bb326eaecaf33b6452ecdf013a0122cb4f4d86" dependencies = [ "alloy-consensus", + "alloy-eips 0.11.1", "alloy-primitives", "alloy-rpc-types-engine", "futures", @@ -5730,7 +5834,7 @@ dependencies = [ [[package]] name = "reth-engine-service" version = "1.1.5" -source = "git+https://github.com/scroll-tech/reth.git#6c634147dcf6b91d0905f199992bb46b0a3705d0" +source = "git+https://github.com/scroll-tech/reth.git?branch=feat/add-deref-blanket-engine-api#b4bb326eaecaf33b6452ecdf013a0122cb4f4d86" dependencies = [ "futures", "pin-project", @@ -5753,10 +5857,10 @@ dependencies = [ [[package]] name = "reth-engine-tree" version = "1.1.5" -source = "git+https://github.com/scroll-tech/reth.git#6c634147dcf6b91d0905f199992bb46b0a3705d0" +source = "git+https://github.com/scroll-tech/reth.git?branch=feat/add-deref-blanket-engine-api#b4bb326eaecaf33b6452ecdf013a0122cb4f4d86" dependencies = [ "alloy-consensus", - "alloy-eips", + "alloy-eips 0.11.1", "alloy-primitives", "alloy-rlp", "alloy-rpc-types-engine", @@ -5771,14 +5875,13 @@ dependencies = [ "reth-db", "reth-engine-primitives", "reth-errors", + "reth-ethereum-primitives", "reth-evm", "reth-metrics", - "reth-network", "reth-network-p2p", "reth-payload-builder", "reth-payload-builder-primitives", "reth-payload-primitives", - "reth-primitives", "reth-primitives-traits", "reth-provider", "reth-prune", @@ -5803,28 +5906,29 @@ dependencies = [ [[package]] name = "reth-engine-util" version = "1.1.5" -source = "git+https://github.com/scroll-tech/reth.git#6c634147dcf6b91d0905f199992bb46b0a3705d0" +source = "git+https://github.com/scroll-tech/reth.git?branch=feat/add-deref-blanket-engine-api#b4bb326eaecaf33b6452ecdf013a0122cb4f4d86" dependencies = [ "alloy-consensus", - "alloy-eips", + "alloy-eips 0.11.1", "alloy-primitives", "alloy-rpc-types-engine", "eyre", "futures", "itertools 0.13.0", "pin-project", + "reth-chainspec", "reth-consensus-common", "reth-engine-primitives", "reth-errors", "reth-ethereum-forks", "reth-evm", "reth-fs-util", + "reth-payload-primitives", "reth-payload-validator", "reth-primitives", "reth-primitives-traits", "reth-provider", "reth-revm", - "reth-rpc-types-compat", "reth-trie", "revm-primitives", "serde", @@ -5837,7 +5941,7 @@ dependencies = [ [[package]] name = "reth-errors" version = "1.1.5" -source = "git+https://github.com/scroll-tech/reth.git#6c634147dcf6b91d0905f199992bb46b0a3705d0" +source = "git+https://github.com/scroll-tech/reth.git?branch=feat/add-deref-blanket-engine-api#b4bb326eaecaf33b6452ecdf013a0122cb4f4d86" dependencies = [ "reth-consensus", "reth-execution-errors", @@ -5849,7 +5953,7 @@ dependencies = [ [[package]] name = "reth-eth-wire" version = "1.1.5" -source = "git+https://github.com/scroll-tech/reth.git#6c634147dcf6b91d0905f199992bb46b0a3705d0" +source = "git+https://github.com/scroll-tech/reth.git?branch=feat/add-deref-blanket-engine-api#b4bb326eaecaf33b6452ecdf013a0122cb4f4d86" dependencies = [ "alloy-chains", "alloy-primitives", @@ -5877,11 +5981,11 @@ dependencies = [ [[package]] name = "reth-eth-wire-types" version = "1.1.5" -source = "git+https://github.com/scroll-tech/reth.git#6c634147dcf6b91d0905f199992bb46b0a3705d0" +source = "git+https://github.com/scroll-tech/reth.git?branch=feat/add-deref-blanket-engine-api#b4bb326eaecaf33b6452ecdf013a0122cb4f4d86" dependencies = [ "alloy-chains", "alloy-consensus", - "alloy-eips", + "alloy-eips 0.11.1", "alloy-primitives", "alloy-rlp", "bytes", @@ -5898,7 +6002,7 @@ dependencies = [ [[package]] name = "reth-ethereum-cli" version = "1.1.5" -source = "git+https://github.com/scroll-tech/reth.git#6c634147dcf6b91d0905f199992bb46b0a3705d0" +source = "git+https://github.com/scroll-tech/reth.git?branch=feat/add-deref-blanket-engine-api#b4bb326eaecaf33b6452ecdf013a0122cb4f4d86" dependencies = [ "eyre", "reth-chainspec", @@ -5908,10 +6012,10 @@ dependencies = [ [[package]] name = "reth-ethereum-consensus" version = "1.1.5" -source = "git+https://github.com/scroll-tech/reth.git#6c634147dcf6b91d0905f199992bb46b0a3705d0" +source = "git+https://github.com/scroll-tech/reth.git?branch=feat/add-deref-blanket-engine-api#b4bb326eaecaf33b6452ecdf013a0122cb4f4d86" dependencies = [ "alloy-consensus", - "alloy-eips", + "alloy-eips 0.11.1", "alloy-primitives", "reth-chainspec", "reth-consensus", @@ -5924,19 +6028,17 @@ dependencies = [ [[package]] name = "reth-ethereum-engine-primitives" version = "1.1.5" -source = "git+https://github.com/scroll-tech/reth.git#6c634147dcf6b91d0905f199992bb46b0a3705d0" +source = "git+https://github.com/scroll-tech/reth.git?branch=feat/add-deref-blanket-engine-api#b4bb326eaecaf33b6452ecdf013a0122cb4f4d86" dependencies = [ - "alloy-eips", + "alloy-eips 0.11.1", "alloy-primitives", "alloy-rlp", "alloy-rpc-types-engine", - "reth-chain-state", "reth-chainspec", "reth-engine-primitives", "reth-payload-primitives", "reth-payload-validator", "reth-primitives", - "reth-rpc-types-compat", "serde", "sha2 0.10.8", ] @@ -5944,7 +6046,7 @@ dependencies = [ [[package]] name = "reth-ethereum-forks" version = "1.1.5" -source = "git+https://github.com/scroll-tech/reth.git#6c634147dcf6b91d0905f199992bb46b0a3705d0" +source = "git+https://github.com/scroll-tech/reth.git?branch=feat/add-deref-blanket-engine-api#b4bb326eaecaf33b6452ecdf013a0122cb4f4d86" dependencies = [ "alloy-chains", "alloy-eip2124", @@ -5953,26 +6055,25 @@ dependencies = [ "auto_impl", "dyn-clone", "once_cell", - "rustc-hash 2.1.0", + "rustc-hash 2.1.1", "serde", ] [[package]] name = "reth-ethereum-primitives" version = "1.1.5" -source = "git+https://github.com/scroll-tech/reth.git#6c634147dcf6b91d0905f199992bb46b0a3705d0" +source = "git+https://github.com/scroll-tech/reth.git?branch=feat/add-deref-blanket-engine-api#b4bb326eaecaf33b6452ecdf013a0122cb4f4d86" dependencies = [ "alloy-consensus", - "alloy-eips", + "alloy-eips 0.11.1", "alloy-primitives", "alloy-rlp", "alloy-rpc-types", - "alloy-serde", + "alloy-serde 0.11.1", "arbitrary", "derive_more", "modular-bitfield", - "once_cell", - "rand", + "rand 0.8.5", "reth-codecs", "reth-primitives-traits", "reth-zstd-compressors", @@ -5984,7 +6085,7 @@ dependencies = [ [[package]] name = "reth-etl" version = "1.1.5" -source = "git+https://github.com/scroll-tech/reth.git#6c634147dcf6b91d0905f199992bb46b0a3705d0" +source = "git+https://github.com/scroll-tech/reth.git?branch=feat/add-deref-blanket-engine-api#b4bb326eaecaf33b6452ecdf013a0122cb4f4d86" dependencies = [ "rayon", "reth-db-api", @@ -5994,10 +6095,10 @@ dependencies = [ [[package]] name = "reth-evm" version = "1.1.5" -source = "git+https://github.com/scroll-tech/reth.git#6c634147dcf6b91d0905f199992bb46b0a3705d0" +source = "git+https://github.com/scroll-tech/reth.git?branch=feat/add-deref-blanket-engine-api#b4bb326eaecaf33b6452ecdf013a0122cb4f4d86" dependencies = [ "alloy-consensus", - "alloy-eips", + "alloy-eips 0.11.1", "alloy-primitives", "auto_impl", "futures-util", @@ -6011,7 +6112,6 @@ dependencies = [ "reth-metrics", "reth-primitives", "reth-primitives-traits", - "reth-prune-types", "reth-revm", "reth-storage-errors", "revm", @@ -6021,26 +6121,25 @@ dependencies = [ [[package]] name = "reth-execution-errors" version = "1.1.5" -source = "git+https://github.com/scroll-tech/reth.git#6c634147dcf6b91d0905f199992bb46b0a3705d0" +source = "git+https://github.com/scroll-tech/reth.git?branch=feat/add-deref-blanket-engine-api#b4bb326eaecaf33b6452ecdf013a0122cb4f4d86" dependencies = [ - "alloy-eips", + "alloy-eips 0.11.1", "alloy-primitives", "alloy-rlp", "nybbles", "reth-consensus", "reth-prune-types", "reth-storage-errors", - "revm-primitives", "thiserror 2.0.11", ] [[package]] name = "reth-execution-types" version = "1.1.5" -source = "git+https://github.com/scroll-tech/reth.git#6c634147dcf6b91d0905f199992bb46b0a3705d0" +source = "git+https://github.com/scroll-tech/reth.git?branch=feat/add-deref-blanket-engine-api#b4bb326eaecaf33b6452ecdf013a0122cb4f4d86" dependencies = [ "alloy-consensus", - "alloy-eips", + "alloy-eips 0.11.1", "alloy-primitives", "reth-execution-errors", "reth-primitives", @@ -6055,10 +6154,10 @@ dependencies = [ [[package]] name = "reth-exex" version = "1.1.5" -source = "git+https://github.com/scroll-tech/reth.git#6c634147dcf6b91d0905f199992bb46b0a3705d0" +source = "git+https://github.com/scroll-tech/reth.git?branch=feat/add-deref-blanket-engine-api#b4bb326eaecaf33b6452ecdf013a0122cb4f4d86" dependencies = [ "alloy-consensus", - "alloy-eips", + "alloy-eips 0.11.1", "alloy-primitives", "eyre", "futures", @@ -6083,6 +6182,7 @@ dependencies = [ "reth-tasks", "reth-tracing", "rmp-serde", + "thiserror 2.0.11", "tokio", "tokio-util", "tracing", @@ -6091,9 +6191,9 @@ dependencies = [ [[package]] name = "reth-exex-types" version = "1.1.5" -source = "git+https://github.com/scroll-tech/reth.git#6c634147dcf6b91d0905f199992bb46b0a3705d0" +source = "git+https://github.com/scroll-tech/reth.git?branch=feat/add-deref-blanket-engine-api#b4bb326eaecaf33b6452ecdf013a0122cb4f4d86" dependencies = [ - "alloy-eips", + "alloy-eips 0.11.1", "alloy-primitives", "reth-chain-state", "reth-execution-types", @@ -6106,7 +6206,7 @@ dependencies = [ [[package]] name = "reth-fs-util" version = "1.1.5" -source = "git+https://github.com/scroll-tech/reth.git#6c634147dcf6b91d0905f199992bb46b0a3705d0" +source = "git+https://github.com/scroll-tech/reth.git?branch=feat/add-deref-blanket-engine-api#b4bb326eaecaf33b6452ecdf013a0122cb4f4d86" dependencies = [ "serde", "serde_json", @@ -6116,7 +6216,7 @@ dependencies = [ [[package]] name = "reth-invalid-block-hooks" version = "1.1.5" -source = "git+https://github.com/scroll-tech/reth.git#6c634147dcf6b91d0905f199992bb46b0a3705d0" +source = "git+https://github.com/scroll-tech/reth.git?branch=feat/add-deref-blanket-engine-api#b4bb326eaecaf33b6452ecdf013a0122cb4f4d86" dependencies = [ "alloy-consensus", "alloy-primitives", @@ -6143,7 +6243,7 @@ dependencies = [ [[package]] name = "reth-ipc" version = "1.1.5" -source = "git+https://github.com/scroll-tech/reth.git#6c634147dcf6b91d0905f199992bb46b0a3705d0" +source = "git+https://github.com/scroll-tech/reth.git?branch=feat/add-deref-blanket-engine-api#b4bb326eaecaf33b6452ecdf013a0122cb4f4d86" dependencies = [ "async-trait", "bytes", @@ -6164,7 +6264,7 @@ dependencies = [ [[package]] name = "reth-libmdbx" version = "1.1.5" -source = "git+https://github.com/scroll-tech/reth.git#6c634147dcf6b91d0905f199992bb46b0a3705d0" +source = "git+https://github.com/scroll-tech/reth.git?branch=feat/add-deref-blanket-engine-api#b4bb326eaecaf33b6452ecdf013a0122cb4f4d86" dependencies = [ "bitflags 2.8.0", "byteorder", @@ -6181,7 +6281,7 @@ dependencies = [ [[package]] name = "reth-mdbx-sys" version = "1.1.5" -source = "git+https://github.com/scroll-tech/reth.git#6c634147dcf6b91d0905f199992bb46b0a3705d0" +source = "git+https://github.com/scroll-tech/reth.git?branch=feat/add-deref-blanket-engine-api#b4bb326eaecaf33b6452ecdf013a0122cb4f4d86" dependencies = [ "bindgen", "cc", @@ -6190,7 +6290,7 @@ dependencies = [ [[package]] name = "reth-metrics" version = "1.1.5" -source = "git+https://github.com/scroll-tech/reth.git#6c634147dcf6b91d0905f199992bb46b0a3705d0" +source = "git+https://github.com/scroll-tech/reth.git?branch=feat/add-deref-blanket-engine-api#b4bb326eaecaf33b6452ecdf013a0122cb4f4d86" dependencies = [ "futures", "metrics", @@ -6202,7 +6302,7 @@ dependencies = [ [[package]] name = "reth-net-banlist" version = "1.1.5" -source = "git+https://github.com/scroll-tech/reth.git#6c634147dcf6b91d0905f199992bb46b0a3705d0" +source = "git+https://github.com/scroll-tech/reth.git?branch=feat/add-deref-blanket-engine-api#b4bb326eaecaf33b6452ecdf013a0122cb4f4d86" dependencies = [ "alloy-primitives", ] @@ -6210,7 +6310,7 @@ dependencies = [ [[package]] name = "reth-net-nat" version = "1.1.5" -source = "git+https://github.com/scroll-tech/reth.git#6c634147dcf6b91d0905f199992bb46b0a3705d0" +source = "git+https://github.com/scroll-tech/reth.git?branch=feat/add-deref-blanket-engine-api#b4bb326eaecaf33b6452ecdf013a0122cb4f4d86" dependencies = [ "futures-util", "if-addrs", @@ -6224,10 +6324,10 @@ dependencies = [ [[package]] name = "reth-network" version = "1.1.5" -source = "git+https://github.com/scroll-tech/reth.git#6c634147dcf6b91d0905f199992bb46b0a3705d0" +source = "git+https://github.com/scroll-tech/reth.git?branch=feat/add-deref-blanket-engine-api#b4bb326eaecaf33b6452ecdf013a0122cb4f4d86" dependencies = [ "alloy-consensus", - "alloy-eips", + "alloy-eips 0.11.1", "alloy-primitives", "alloy-rlp", "aquamarine", @@ -6240,7 +6340,7 @@ dependencies = [ "metrics", "parking_lot", "pin-project", - "rand", + "rand 0.8.5", "reth-chainspec", "reth-consensus", "reth-discv4", @@ -6263,7 +6363,7 @@ dependencies = [ "reth-tasks", "reth-tokio-util", "reth-transaction-pool", - "rustc-hash 2.1.0", + "rustc-hash 2.1.1", "schnellru", "secp256k1", "serde", @@ -6279,7 +6379,7 @@ dependencies = [ [[package]] name = "reth-network-api" version = "1.1.5" -source = "git+https://github.com/scroll-tech/reth.git#6c634147dcf6b91d0905f199992bb46b0a3705d0" +source = "git+https://github.com/scroll-tech/reth.git?branch=feat/add-deref-blanket-engine-api#b4bb326eaecaf33b6452ecdf013a0122cb4f4d86" dependencies = [ "alloy-primitives", "alloy-rpc-types-admin", @@ -6302,10 +6402,10 @@ dependencies = [ [[package]] name = "reth-network-p2p" version = "1.1.5" -source = "git+https://github.com/scroll-tech/reth.git#6c634147dcf6b91d0905f199992bb46b0a3705d0" +source = "git+https://github.com/scroll-tech/reth.git?branch=feat/add-deref-blanket-engine-api#b4bb326eaecaf33b6452ecdf013a0122cb4f4d86" dependencies = [ "alloy-consensus", - "alloy-eips", + "alloy-eips 0.11.1", "alloy-primitives", "auto_impl", "derive_more", @@ -6325,7 +6425,7 @@ dependencies = [ [[package]] name = "reth-network-peers" version = "1.1.5" -source = "git+https://github.com/scroll-tech/reth.git#6c634147dcf6b91d0905f199992bb46b0a3705d0" +source = "git+https://github.com/scroll-tech/reth.git?branch=feat/add-deref-blanket-engine-api#b4bb326eaecaf33b6452ecdf013a0122cb4f4d86" dependencies = [ "alloy-primitives", "alloy-rlp", @@ -6340,10 +6440,10 @@ dependencies = [ [[package]] name = "reth-network-types" version = "1.1.5" -source = "git+https://github.com/scroll-tech/reth.git#6c634147dcf6b91d0905f199992bb46b0a3705d0" +source = "git+https://github.com/scroll-tech/reth.git?branch=feat/add-deref-blanket-engine-api#b4bb326eaecaf33b6452ecdf013a0122cb4f4d86" dependencies = [ + "alloy-eip2124", "humantime-serde", - "reth-ethereum-forks", "reth-net-banlist", "reth-network-peers", "serde", @@ -6354,7 +6454,7 @@ dependencies = [ [[package]] name = "reth-nippy-jar" version = "1.1.5" -source = "git+https://github.com/scroll-tech/reth.git#6c634147dcf6b91d0905f199992bb46b0a3705d0" +source = "git+https://github.com/scroll-tech/reth.git?branch=feat/add-deref-blanket-engine-api#b4bb326eaecaf33b6452ecdf013a0122cb4f4d86" dependencies = [ "anyhow", "bincode", @@ -6371,7 +6471,7 @@ dependencies = [ [[package]] name = "reth-node-api" version = "1.1.5" -source = "git+https://github.com/scroll-tech/reth.git#6c634147dcf6b91d0905f199992bb46b0a3705d0" +source = "git+https://github.com/scroll-tech/reth.git?branch=feat/add-deref-blanket-engine-api#b4bb326eaecaf33b6452ecdf013a0122cb4f4d86" dependencies = [ "alloy-rpc-types-engine", "eyre", @@ -6392,10 +6492,10 @@ dependencies = [ [[package]] name = "reth-node-builder" version = "1.1.5" -source = "git+https://github.com/scroll-tech/reth.git#6c634147dcf6b91d0905f199992bb46b0a3705d0" +source = "git+https://github.com/scroll-tech/reth.git?branch=feat/add-deref-blanket-engine-api#b4bb326eaecaf33b6452ecdf013a0122cb4f4d86" dependencies = [ "alloy-consensus", - "alloy-eips", + "alloy-eips 0.11.1", "alloy-primitives", "alloy-rpc-types", "aquamarine", @@ -6454,10 +6554,10 @@ dependencies = [ [[package]] name = "reth-node-core" version = "1.1.5" -source = "git+https://github.com/scroll-tech/reth.git#6c634147dcf6b91d0905f199992bb46b0a3705d0" +source = "git+https://github.com/scroll-tech/reth.git?branch=feat/add-deref-blanket-engine-api#b4bb326eaecaf33b6452ecdf013a0122cb4f4d86" dependencies = [ "alloy-consensus", - "alloy-eips", + "alloy-eips 0.11.1", "alloy-primitives", "alloy-rpc-types-engine", "clap", @@ -6466,7 +6566,7 @@ dependencies = [ "eyre", "futures", "humantime", - "rand", + "rand 0.8.5", "reth-chainspec", "reth-cli-util", "reth-config", @@ -6493,7 +6593,7 @@ dependencies = [ "secp256k1", "serde", "shellexpand", - "strum", + "strum 0.26.3", "thiserror 2.0.11", "toml", "tracing", @@ -6503,10 +6603,10 @@ dependencies = [ [[package]] name = "reth-node-events" version = "1.1.5" -source = "git+https://github.com/scroll-tech/reth.git#6c634147dcf6b91d0905f199992bb46b0a3705d0" +source = "git+https://github.com/scroll-tech/reth.git?branch=feat/add-deref-blanket-engine-api#b4bb326eaecaf33b6452ecdf013a0122cb4f4d86" dependencies = [ "alloy-consensus", - "alloy-eips", + "alloy-eips 0.11.1", "alloy-primitives", "alloy-rpc-types-engine", "derive_more", @@ -6527,7 +6627,7 @@ dependencies = [ [[package]] name = "reth-node-metrics" version = "1.1.5" -source = "git+https://github.com/scroll-tech/reth.git#6c634147dcf6b91d0905f199992bb46b0a3705d0" +source = "git+https://github.com/scroll-tech/reth.git?branch=feat/add-deref-blanket-engine-api#b4bb326eaecaf33b6452ecdf013a0122cb4f4d86" dependencies = [ "eyre", "http", @@ -6548,11 +6648,12 @@ dependencies = [ [[package]] name = "reth-node-types" version = "1.1.5" -source = "git+https://github.com/scroll-tech/reth.git#6c634147dcf6b91d0905f199992bb46b0a3705d0" +source = "git+https://github.com/scroll-tech/reth.git?branch=feat/add-deref-blanket-engine-api#b4bb326eaecaf33b6452ecdf013a0122cb4f4d86" dependencies = [ "reth-chainspec", "reth-db-api", "reth-engine-primitives", + "reth-payload-primitives", "reth-primitives-traits", "reth-trie-db", ] @@ -6560,19 +6661,17 @@ dependencies = [ [[package]] name = "reth-optimism-primitives" version = "1.1.5" -source = "git+https://github.com/scroll-tech/reth.git#6c634147dcf6b91d0905f199992bb46b0a3705d0" +source = "git+https://github.com/scroll-tech/reth.git?branch=feat/add-deref-blanket-engine-api#b4bb326eaecaf33b6452ecdf013a0122cb4f4d86" dependencies = [ "alloy-consensus", - "alloy-eips", + "alloy-eips 0.11.1", "alloy-primitives", "alloy-rlp", "arbitrary", "bytes", "derive_more", - "modular-bitfield", "op-alloy-consensus", - "proptest", - "rand", + "rand 0.8.5", "reth-codecs", "reth-primitives-traits", "reth-zstd-compressors", @@ -6584,7 +6683,7 @@ dependencies = [ [[package]] name = "reth-payload-builder" version = "1.1.5" -source = "git+https://github.com/scroll-tech/reth.git#6c634147dcf6b91d0905f199992bb46b0a3705d0" +source = "git+https://github.com/scroll-tech/reth.git?branch=feat/add-deref-blanket-engine-api#b4bb326eaecaf33b6452ecdf013a0122cb4f4d86" dependencies = [ "alloy-consensus", "alloy-primitives", @@ -6607,7 +6706,7 @@ dependencies = [ [[package]] name = "reth-payload-builder-primitives" version = "1.1.5" -source = "git+https://github.com/scroll-tech/reth.git#6c634147dcf6b91d0905f199992bb46b0a3705d0" +source = "git+https://github.com/scroll-tech/reth.git?branch=feat/add-deref-blanket-engine-api#b4bb326eaecaf33b6452ecdf013a0122cb4f4d86" dependencies = [ "alloy-rpc-types-engine", "async-trait", @@ -6621,16 +6720,16 @@ dependencies = [ [[package]] name = "reth-payload-primitives" version = "1.1.5" -source = "git+https://github.com/scroll-tech/reth.git#6c634147dcf6b91d0905f199992bb46b0a3705d0" +source = "git+https://github.com/scroll-tech/reth.git?branch=feat/add-deref-blanket-engine-api#b4bb326eaecaf33b6452ecdf013a0122cb4f4d86" dependencies = [ - "alloy-eips", + "alloy-eips 0.11.1", "alloy-primitives", "alloy-rpc-types-engine", + "op-alloy-rpc-types-engine", "reth-chain-state", "reth-chainspec", "reth-errors", "reth-primitives", - "revm-primitives", "scroll-alloy-rpc-types-engine", "serde", "thiserror 2.0.11", @@ -6640,7 +6739,7 @@ dependencies = [ [[package]] name = "reth-payload-util" version = "1.1.5" -source = "git+https://github.com/scroll-tech/reth.git#6c634147dcf6b91d0905f199992bb46b0a3705d0" +source = "git+https://github.com/scroll-tech/reth.git?branch=feat/add-deref-blanket-engine-api#b4bb326eaecaf33b6452ecdf013a0122cb4f4d86" dependencies = [ "alloy-consensus", "alloy-primitives", @@ -6650,7 +6749,7 @@ dependencies = [ [[package]] name = "reth-payload-validator" version = "1.1.5" -source = "git+https://github.com/scroll-tech/reth.git#6c634147dcf6b91d0905f199992bb46b0a3705d0" +source = "git+https://github.com/scroll-tech/reth.git?branch=feat/add-deref-blanket-engine-api#b4bb326eaecaf33b6452ecdf013a0122cb4f4d86" dependencies = [ "alloy-rpc-types", "reth-chainspec", @@ -6661,29 +6760,25 @@ dependencies = [ [[package]] name = "reth-primitives" version = "1.1.5" -source = "git+https://github.com/scroll-tech/reth.git#6c634147dcf6b91d0905f199992bb46b0a3705d0" +source = "git+https://github.com/scroll-tech/reth.git?branch=feat/add-deref-blanket-engine-api#b4bb326eaecaf33b6452ecdf013a0122cb4f4d86" dependencies = [ "alloy-consensus", - "alloy-primitives", - "alloy-trie", "arbitrary", "c-kzg", - "derive_more", "once_cell", "reth-ethereum-forks", "reth-ethereum-primitives", "reth-primitives-traits", "reth-static-file-types", - "serde", ] [[package]] name = "reth-primitives-traits" version = "1.1.5" -source = "git+https://github.com/scroll-tech/reth.git#6c634147dcf6b91d0905f199992bb46b0a3705d0" +source = "git+https://github.com/scroll-tech/reth.git?branch=feat/add-deref-blanket-engine-api#b4bb326eaecaf33b6452ecdf013a0122cb4f4d86" dependencies = [ "alloy-consensus", - "alloy-eips", + "alloy-eips 0.11.1", "alloy-genesis", "alloy-primitives", "alloy-rlp", @@ -6712,14 +6807,15 @@ dependencies = [ [[package]] name = "reth-provider" version = "1.1.5" -source = "git+https://github.com/scroll-tech/reth.git#6c634147dcf6b91d0905f199992bb46b0a3705d0" +source = "git+https://github.com/scroll-tech/reth.git?branch=feat/add-deref-blanket-engine-api#b4bb326eaecaf33b6452ecdf013a0122cb4f4d86" dependencies = [ "alloy-consensus", - "alloy-eips", + "alloy-eips 0.11.1", "alloy-primitives", "alloy-rpc-types-engine", "auto_impl", "dashmap", + "eyre", "itertools 0.13.0", "metrics", "notify", @@ -6739,7 +6835,6 @@ dependencies = [ "reth-network-p2p", "reth-nippy-jar", "reth-node-types", - "reth-optimism-primitives", "reth-primitives", "reth-primitives-traits", "reth-prune-types", @@ -6749,7 +6844,7 @@ dependencies = [ "reth-trie", "reth-trie-db", "revm", - "strum", + "strum 0.26.3", "tokio", "tracing", ] @@ -6757,10 +6852,10 @@ dependencies = [ [[package]] name = "reth-prune" version = "1.1.5" -source = "git+https://github.com/scroll-tech/reth.git#6c634147dcf6b91d0905f199992bb46b0a3705d0" +source = "git+https://github.com/scroll-tech/reth.git?branch=feat/add-deref-blanket-engine-api#b4bb326eaecaf33b6452ecdf013a0122cb4f4d86" dependencies = [ "alloy-consensus", - "alloy-eips", + "alloy-eips 0.11.1", "alloy-primitives", "itertools 0.13.0", "metrics", @@ -6777,7 +6872,7 @@ dependencies = [ "reth-prune-types", "reth-static-file-types", "reth-tokio-util", - "rustc-hash 2.1.0", + "rustc-hash 2.1.1", "thiserror 2.0.11", "tokio", "tracing", @@ -6786,7 +6881,7 @@ dependencies = [ [[package]] name = "reth-prune-types" version = "1.1.5" -source = "git+https://github.com/scroll-tech/reth.git#6c634147dcf6b91d0905f199992bb46b0a3705d0" +source = "git+https://github.com/scroll-tech/reth.git?branch=feat/add-deref-blanket-engine-api#b4bb326eaecaf33b6452ecdf013a0122cb4f4d86" dependencies = [ "alloy-primitives", "arbitrary", @@ -6800,14 +6895,11 @@ dependencies = [ [[package]] name = "reth-revm" version = "1.1.5" -source = "git+https://github.com/scroll-tech/reth.git#6c634147dcf6b91d0905f199992bb46b0a3705d0" +source = "git+https://github.com/scroll-tech/reth.git?branch=feat/add-deref-blanket-engine-api#b4bb326eaecaf33b6452ecdf013a0122cb4f4d86" dependencies = [ - "alloy-eips", + "alloy-eips 0.11.1", "alloy-primitives", - "reth-execution-errors", "reth-primitives", - "reth-primitives-traits", - "reth-prune-types", "reth-storage-api", "reth-storage-errors", "reth-trie", @@ -6817,11 +6909,11 @@ dependencies = [ [[package]] name = "reth-rpc" version = "1.1.5" -source = "git+https://github.com/scroll-tech/reth.git#6c634147dcf6b91d0905f199992bb46b0a3705d0" +source = "git+https://github.com/scroll-tech/reth.git?branch=feat/add-deref-blanket-engine-api#b4bb326eaecaf33b6452ecdf013a0122cb4f4d86" dependencies = [ "alloy-consensus", "alloy-dyn-abi", - "alloy-eips", + "alloy-eips 0.11.1", "alloy-genesis", "alloy-network", "alloy-primitives", @@ -6835,7 +6927,7 @@ dependencies = [ "alloy-rpc-types-mev", "alloy-rpc-types-trace", "alloy-rpc-types-txpool", - "alloy-serde", + "alloy-serde 0.11.1", "alloy-signer", "alloy-signer-local", "async-trait", @@ -6848,13 +6940,14 @@ dependencies = [ "jsonwebtoken", "parking_lot", "pin-project", - "rand", + "rand 0.8.5", "reth-chainspec", "reth-consensus", "reth-consensus-common", "reth-engine-primitives", "reth-errors", "reth-evm", + "reth-metrics", "reth-network-api", "reth-network-peers", "reth-network-types", @@ -6886,9 +6979,9 @@ dependencies = [ [[package]] name = "reth-rpc-api" version = "1.1.5" -source = "git+https://github.com/scroll-tech/reth.git#6c634147dcf6b91d0905f199992bb46b0a3705d0" +source = "git+https://github.com/scroll-tech/reth.git?branch=feat/add-deref-blanket-engine-api#b4bb326eaecaf33b6452ecdf013a0122cb4f4d86" dependencies = [ - "alloy-eips", + "alloy-eips 0.11.1", "alloy-json-rpc", "alloy-primitives", "alloy-rpc-types", @@ -6901,7 +6994,7 @@ dependencies = [ "alloy-rpc-types-mev", "alloy-rpc-types-trace", "alloy-rpc-types-txpool", - "alloy-serde", + "alloy-serde 0.11.1", "jsonrpsee", "reth-engine-primitives", "reth-network-peers", @@ -6911,8 +7004,10 @@ dependencies = [ [[package]] name = "reth-rpc-builder" version = "1.1.5" -source = "git+https://github.com/scroll-tech/reth.git#6c634147dcf6b91d0905f199992bb46b0a3705d0" +source = "git+https://github.com/scroll-tech/reth.git?branch=feat/add-deref-blanket-engine-api#b4bb326eaecaf33b6452ecdf013a0122cb4f4d86" dependencies = [ + "alloy-network", + "alloy-provider", "http", "jsonrpsee", "metrics", @@ -6947,9 +7042,9 @@ dependencies = [ [[package]] name = "reth-rpc-engine-api" version = "1.1.5" -source = "git+https://github.com/scroll-tech/reth.git#6c634147dcf6b91d0905f199992bb46b0a3705d0" +source = "git+https://github.com/scroll-tech/reth.git?branch=feat/add-deref-blanket-engine-api#b4bb326eaecaf33b6452ecdf013a0122cb4f4d86" dependencies = [ - "alloy-eips", + "alloy-eips 0.11.1", "alloy-primitives", "alloy-rpc-types-engine", "async-trait", @@ -6977,18 +7072,18 @@ dependencies = [ [[package]] name = "reth-rpc-eth-api" version = "1.1.5" -source = "git+https://github.com/scroll-tech/reth.git#6c634147dcf6b91d0905f199992bb46b0a3705d0" +source = "git+https://github.com/scroll-tech/reth.git?branch=feat/add-deref-blanket-engine-api#b4bb326eaecaf33b6452ecdf013a0122cb4f4d86" dependencies = [ "alloy-consensus", "alloy-dyn-abi", - "alloy-eips", + "alloy-eips 0.11.1", "alloy-json-rpc", "alloy-network", "alloy-primitives", "alloy-rlp", "alloy-rpc-types-eth", "alloy-rpc-types-mev", - "alloy-serde", + "alloy-serde 0.11.1", "async-trait", "auto_impl", "dyn-clone", @@ -7021,10 +7116,10 @@ dependencies = [ [[package]] name = "reth-rpc-eth-types" version = "1.1.5" -source = "git+https://github.com/scroll-tech/reth.git#6c634147dcf6b91d0905f199992bb46b0a3705d0" +source = "git+https://github.com/scroll-tech/reth.git?branch=feat/add-deref-blanket-engine-api#b4bb326eaecaf33b6452ecdf013a0122cb4f4d86" dependencies = [ "alloy-consensus", - "alloy-eips", + "alloy-eips 0.11.1", "alloy-primitives", "alloy-rpc-types-eth", "alloy-sol-types", @@ -7034,7 +7129,7 @@ dependencies = [ "jsonrpsee-core", "jsonrpsee-types", "metrics", - "rand", + "rand 0.8.5", "reth-chain-state", "reth-chainspec", "reth-errors", @@ -7064,7 +7159,7 @@ dependencies = [ [[package]] name = "reth-rpc-layer" version = "1.1.5" -source = "git+https://github.com/scroll-tech/reth.git#6c634147dcf6b91d0905f199992bb46b0a3705d0" +source = "git+https://github.com/scroll-tech/reth.git?branch=feat/add-deref-blanket-engine-api#b4bb326eaecaf33b6452ecdf013a0122cb4f4d86" dependencies = [ "alloy-rpc-types-engine", "http", @@ -7078,9 +7173,9 @@ dependencies = [ [[package]] name = "reth-rpc-server-types" version = "1.1.5" -source = "git+https://github.com/scroll-tech/reth.git#6c634147dcf6b91d0905f199992bb46b0a3705d0" +source = "git+https://github.com/scroll-tech/reth.git?branch=feat/add-deref-blanket-engine-api#b4bb326eaecaf33b6452ecdf013a0122cb4f4d86" dependencies = [ - "alloy-eips", + "alloy-eips 0.11.1", "alloy-primitives", "alloy-rpc-types-engine", "jsonrpsee-core", @@ -7088,16 +7183,16 @@ dependencies = [ "reth-errors", "reth-network-api", "serde", - "strum", + "strum 0.26.3", ] [[package]] name = "reth-rpc-types-compat" version = "1.1.5" -source = "git+https://github.com/scroll-tech/reth.git#6c634147dcf6b91d0905f199992bb46b0a3705d0" +source = "git+https://github.com/scroll-tech/reth.git?branch=feat/add-deref-blanket-engine-api#b4bb326eaecaf33b6452ecdf013a0122cb4f4d86" dependencies = [ "alloy-consensus", - "alloy-eips", + "alloy-eips 0.11.1", "alloy-primitives", "alloy-rpc-types-engine", "alloy-rpc-types-eth", @@ -7110,14 +7205,14 @@ dependencies = [ [[package]] name = "reth-scroll-chainspec" version = "1.1.5" -source = "git+https://github.com/scroll-tech/reth.git#6c634147dcf6b91d0905f199992bb46b0a3705d0" +source = "git+https://github.com/scroll-tech/reth.git?branch=feat/add-deref-blanket-engine-api#b4bb326eaecaf33b6452ecdf013a0122cb4f4d86" dependencies = [ "alloy-chains", "alloy-consensus", - "alloy-eips", + "alloy-eips 0.11.1", "alloy-genesis", "alloy-primitives", - "alloy-serde", + "alloy-serde 0.11.1", "derive_more", "once_cell", "reth-chainspec", @@ -7133,20 +7228,17 @@ dependencies = [ [[package]] name = "reth-scroll-cli" version = "1.1.5" -source = "git+https://github.com/scroll-tech/reth.git#6c634147dcf6b91d0905f199992bb46b0a3705d0" +source = "git+https://github.com/scroll-tech/reth.git?branch=feat/add-deref-blanket-engine-api#b4bb326eaecaf33b6452ecdf013a0122cb4f4d86" dependencies = [ - "alloy-consensus", "clap", "eyre", "reth-cli", "reth-cli-commands", "reth-cli-runner", "reth-db", - "reth-eth-wire", "reth-node-builder", "reth-node-core", "reth-node-metrics", - "reth-primitives", "reth-scroll-chainspec", "reth-scroll-evm", "reth-scroll-node", @@ -7158,7 +7250,7 @@ dependencies = [ [[package]] name = "reth-scroll-consensus" version = "1.1.5" -source = "git+https://github.com/scroll-tech/reth.git#6c634147dcf6b91d0905f199992bb46b0a3705d0" +source = "git+https://github.com/scroll-tech/reth.git?branch=feat/add-deref-blanket-engine-api#b4bb326eaecaf33b6452ecdf013a0122cb4f4d86" dependencies = [ "revm", ] @@ -7166,10 +7258,10 @@ dependencies = [ [[package]] name = "reth-scroll-engine-primitives" version = "1.1.5" -source = "git+https://github.com/scroll-tech/reth.git#6c634147dcf6b91d0905f199992bb46b0a3705d0" +source = "git+https://github.com/scroll-tech/reth.git?branch=feat/add-deref-blanket-engine-api#b4bb326eaecaf33b6452ecdf013a0122cb4f4d86" dependencies = [ "alloy-consensus", - "alloy-eips", + "alloy-eips 0.11.1", "alloy-primitives", "alloy-rlp", "alloy-rpc-types-engine", @@ -7180,7 +7272,6 @@ dependencies = [ "reth-payload-primitives", "reth-primitives", "reth-primitives-traits", - "reth-rpc-types-compat", "reth-scroll-chainspec", "reth-scroll-forks", "reth-scroll-primitives", @@ -7192,11 +7283,10 @@ dependencies = [ [[package]] name = "reth-scroll-evm" version = "1.1.5" -source = "git+https://github.com/scroll-tech/reth.git#6c634147dcf6b91d0905f199992bb46b0a3705d0" +source = "git+https://github.com/scroll-tech/reth.git?branch=feat/add-deref-blanket-engine-api#b4bb326eaecaf33b6452ecdf013a0122cb4f4d86" dependencies = [ "alloy-consensus", - "alloy-eips", - "auto_impl", + "alloy-eips 0.11.1", "derive_more", "reth-chainspec", "reth-consensus", @@ -7219,7 +7309,7 @@ dependencies = [ [[package]] name = "reth-scroll-forks" version = "1.1.5" -source = "git+https://github.com/scroll-tech/reth.git#6c634147dcf6b91d0905f199992bb46b0a3705d0" +source = "git+https://github.com/scroll-tech/reth.git?branch=feat/add-deref-blanket-engine-api#b4bb326eaecaf33b6452ecdf013a0122cb4f4d86" dependencies = [ "alloy-chains", "alloy-primitives", @@ -7231,10 +7321,10 @@ dependencies = [ [[package]] name = "reth-scroll-node" version = "1.1.5" -source = "git+https://github.com/scroll-tech/reth.git#6c634147dcf6b91d0905f199992bb46b0a3705d0" +source = "git+https://github.com/scroll-tech/reth.git?branch=feat/add-deref-blanket-engine-api#b4bb326eaecaf33b6452ecdf013a0122cb4f4d86" dependencies = [ "alloy-consensus", - "alloy-eips", + "alloy-eips 0.11.1", "alloy-primitives", "alloy-rpc-types-engine", "eyre", @@ -7242,8 +7332,6 @@ dependencies = [ "reth-db", "reth-engine-local", "reth-eth-wire-types", - "reth-ethereum-engine-primitives", - "reth-ethereum-forks", "reth-evm", "reth-network", "reth-node-api", @@ -7253,8 +7341,7 @@ dependencies = [ "reth-primitives", "reth-primitives-traits", "reth-provider", - "reth-rpc", - "reth-rpc-server-types", + "reth-rpc-eth-types", "reth-scroll-chainspec", "reth-scroll-engine-primitives", "reth-scroll-evm", @@ -7274,7 +7361,7 @@ dependencies = [ [[package]] name = "reth-scroll-payload" version = "1.1.5" -source = "git+https://github.com/scroll-tech/reth.git#6c634147dcf6b91d0905f199992bb46b0a3705d0" +source = "git+https://github.com/scroll-tech/reth.git?branch=feat/add-deref-blanket-engine-api#b4bb326eaecaf33b6452ecdf013a0122cb4f4d86" dependencies = [ "futures-util", "reth-payload-builder", @@ -7284,10 +7371,10 @@ dependencies = [ [[package]] name = "reth-scroll-primitives" version = "1.1.5" -source = "git+https://github.com/scroll-tech/reth.git#6c634147dcf6b91d0905f199992bb46b0a3705d0" +source = "git+https://github.com/scroll-tech/reth.git?branch=feat/add-deref-blanket-engine-api#b4bb326eaecaf33b6452ecdf013a0122cb4f4d86" dependencies = [ "alloy-consensus", - "alloy-eips", + "alloy-eips 0.11.1", "alloy-primitives", "alloy-rlp", "arbitrary", @@ -7296,7 +7383,7 @@ dependencies = [ "modular-bitfield", "once_cell", "proptest", - "rand", + "rand 0.8.5", "reth-codecs", "reth-primitives-traits", "reth-zstd-compressors", @@ -7309,24 +7396,15 @@ dependencies = [ [[package]] name = "reth-scroll-rpc" version = "1.1.5" -source = "git+https://github.com/scroll-tech/reth.git#6c634147dcf6b91d0905f199992bb46b0a3705d0" +source = "git+https://github.com/scroll-tech/reth.git?branch=feat/add-deref-blanket-engine-api#b4bb326eaecaf33b6452ecdf013a0122cb4f4d86" dependencies = [ "alloy-consensus", - "alloy-eips", + "alloy-eips 0.11.1", "alloy-primitives", - "alloy-rpc-types-debug", "alloy-rpc-types-eth", - "derive_more", - "jsonrpsee-core", "jsonrpsee-types", - "op-alloy-consensus", - "op-alloy-network", - "op-alloy-rpc-types", - "op-alloy-rpc-types-engine", "parking_lot", - "reqwest", "reth-chainspec", - "reth-ethereum-primitives", "reth-evm", "reth-network-api", "reth-node-api", @@ -7335,10 +7413,8 @@ dependencies = [ "reth-primitives-traits", "reth-provider", "reth-rpc", - "reth-rpc-api", "reth-rpc-eth-api", "reth-rpc-eth-types", - "reth-rpc-server-types", "reth-scroll-chainspec", "reth-scroll-evm", "reth-scroll-forks", @@ -7349,19 +7425,17 @@ dependencies = [ "scroll-alloy-consensus", "scroll-alloy-network", "scroll-alloy-rpc-types", - "serde_json", "thiserror 2.0.11", "tokio", - "tracing", ] [[package]] name = "reth-stages" version = "1.1.5" -source = "git+https://github.com/scroll-tech/reth.git#6c634147dcf6b91d0905f199992bb46b0a3705d0" +source = "git+https://github.com/scroll-tech/reth.git?branch=feat/add-deref-blanket-engine-api#b4bb326eaecaf33b6452ecdf013a0122cb4f4d86" dependencies = [ "alloy-consensus", - "alloy-eips", + "alloy-eips 0.11.1", "alloy-primitives", "bincode", "blake3", @@ -7403,9 +7477,9 @@ dependencies = [ [[package]] name = "reth-stages-api" version = "1.1.5" -source = "git+https://github.com/scroll-tech/reth.git#6c634147dcf6b91d0905f199992bb46b0a3705d0" +source = "git+https://github.com/scroll-tech/reth.git?branch=feat/add-deref-blanket-engine-api#b4bb326eaecaf33b6452ecdf013a0122cb4f4d86" dependencies = [ - "alloy-eips", + "alloy-eips 0.11.1", "alloy-primitives", "aquamarine", "auto_impl", @@ -7430,7 +7504,7 @@ dependencies = [ [[package]] name = "reth-stages-types" version = "1.1.5" -source = "git+https://github.com/scroll-tech/reth.git#6c634147dcf6b91d0905f199992bb46b0a3705d0" +source = "git+https://github.com/scroll-tech/reth.git?branch=feat/add-deref-blanket-engine-api#b4bb326eaecaf33b6452ecdf013a0122cb4f4d86" dependencies = [ "alloy-primitives", "arbitrary", @@ -7444,7 +7518,7 @@ dependencies = [ [[package]] name = "reth-static-file" version = "1.1.5" -source = "git+https://github.com/scroll-tech/reth.git#6c634147dcf6b91d0905f199992bb46b0a3705d0" +source = "git+https://github.com/scroll-tech/reth.git?branch=feat/add-deref-blanket-engine-api#b4bb326eaecaf33b6452ecdf013a0122cb4f4d86" dependencies = [ "alloy-primitives", "parking_lot", @@ -7465,22 +7539,22 @@ dependencies = [ [[package]] name = "reth-static-file-types" version = "1.1.5" -source = "git+https://github.com/scroll-tech/reth.git#6c634147dcf6b91d0905f199992bb46b0a3705d0" +source = "git+https://github.com/scroll-tech/reth.git?branch=feat/add-deref-blanket-engine-api#b4bb326eaecaf33b6452ecdf013a0122cb4f4d86" dependencies = [ "alloy-primitives", "clap", "derive_more", "serde", - "strum", + "strum 0.26.3", ] [[package]] name = "reth-storage-api" version = "1.1.5" -source = "git+https://github.com/scroll-tech/reth.git#6c634147dcf6b91d0905f199992bb46b0a3705d0" +source = "git+https://github.com/scroll-tech/reth.git?branch=feat/add-deref-blanket-engine-api#b4bb326eaecaf33b6452ecdf013a0122cb4f4d86" dependencies = [ "alloy-consensus", - "alloy-eips", + "alloy-eips 0.11.1", "alloy-primitives", "alloy-rpc-types-engine", "auto_impl", @@ -7502,14 +7576,15 @@ dependencies = [ [[package]] name = "reth-storage-errors" version = "1.1.5" -source = "git+https://github.com/scroll-tech/reth.git#6c634147dcf6b91d0905f199992bb46b0a3705d0" +source = "git+https://github.com/scroll-tech/reth.git?branch=feat/add-deref-blanket-engine-api#b4bb326eaecaf33b6452ecdf013a0122cb4f4d86" dependencies = [ - "alloy-eips", + "alloy-eips 0.11.1", "alloy-primitives", "alloy-rlp", "derive_more", "reth-fs-util", "reth-primitives-traits", + "reth-prune-types", "reth-static-file-types", "thiserror 2.0.11", ] @@ -7517,7 +7592,7 @@ dependencies = [ [[package]] name = "reth-tasks" version = "1.1.5" -source = "git+https://github.com/scroll-tech/reth.git#6c634147dcf6b91d0905f199992bb46b0a3705d0" +source = "git+https://github.com/scroll-tech/reth.git?branch=feat/add-deref-blanket-engine-api#b4bb326eaecaf33b6452ecdf013a0122cb4f4d86" dependencies = [ "auto_impl", "dyn-clone", @@ -7535,13 +7610,13 @@ dependencies = [ [[package]] name = "reth-testing-utils" version = "1.1.5" -source = "git+https://github.com/scroll-tech/reth.git#6c634147dcf6b91d0905f199992bb46b0a3705d0" +source = "git+https://github.com/scroll-tech/reth.git?branch=feat/add-deref-blanket-engine-api#b4bb326eaecaf33b6452ecdf013a0122cb4f4d86" dependencies = [ "alloy-consensus", - "alloy-eips", + "alloy-eips 0.11.1", "alloy-genesis", "alloy-primitives", - "rand", + "rand 0.8.5", "reth-primitives", "reth-primitives-traits", "secp256k1", @@ -7550,7 +7625,7 @@ dependencies = [ [[package]] name = "reth-tokio-util" version = "1.1.5" -source = "git+https://github.com/scroll-tech/reth.git#6c634147dcf6b91d0905f199992bb46b0a3705d0" +source = "git+https://github.com/scroll-tech/reth.git?branch=feat/add-deref-blanket-engine-api#b4bb326eaecaf33b6452ecdf013a0122cb4f4d86" dependencies = [ "tokio", "tokio-stream", @@ -7560,7 +7635,7 @@ dependencies = [ [[package]] name = "reth-tracing" version = "1.1.5" -source = "git+https://github.com/scroll-tech/reth.git#6c634147dcf6b91d0905f199992bb46b0a3705d0" +source = "git+https://github.com/scroll-tech/reth.git?branch=feat/add-deref-blanket-engine-api#b4bb326eaecaf33b6452ecdf013a0122cb4f4d86" dependencies = [ "clap", "eyre", @@ -7575,10 +7650,10 @@ dependencies = [ [[package]] name = "reth-transaction-pool" version = "1.1.5" -source = "git+https://github.com/scroll-tech/reth.git#6c634147dcf6b91d0905f199992bb46b0a3705d0" +source = "git+https://github.com/scroll-tech/reth.git?branch=feat/add-deref-blanket-engine-api#b4bb326eaecaf33b6452ecdf013a0122cb4f4d86" dependencies = [ "alloy-consensus", - "alloy-eips", + "alloy-eips 0.11.1", "alloy-primitives", "alloy-rlp", "aquamarine", @@ -7588,7 +7663,7 @@ dependencies = [ "metrics", "parking_lot", "paste", - "rand", + "rand 0.8.5", "reth-chain-state", "reth-chainspec", "reth-eth-wire-types", @@ -7602,7 +7677,7 @@ dependencies = [ "reth-tasks", "revm-interpreter", "revm-primitives", - "rustc-hash 2.1.0", + "rustc-hash 2.1.1", "schnellru", "serde", "smallvec", @@ -7615,10 +7690,10 @@ dependencies = [ [[package]] name = "reth-trie" version = "1.1.5" -source = "git+https://github.com/scroll-tech/reth.git#6c634147dcf6b91d0905f199992bb46b0a3705d0" +source = "git+https://github.com/scroll-tech/reth.git?branch=feat/add-deref-blanket-engine-api#b4bb326eaecaf33b6452ecdf013a0122cb4f4d86" dependencies = [ "alloy-consensus", - "alloy-eips", + "alloy-eips 0.11.1", "alloy-primitives", "alloy-rlp", "alloy-trie", @@ -7628,7 +7703,6 @@ dependencies = [ "rayon", "reth-execution-errors", "reth-metrics", - "reth-primitives", "reth-primitives-traits", "reth-stages-types", "reth-storage-errors", @@ -7642,13 +7716,13 @@ dependencies = [ [[package]] name = "reth-trie-common" version = "1.1.5" -source = "git+https://github.com/scroll-tech/reth.git#6c634147dcf6b91d0905f199992bb46b0a3705d0" +source = "git+https://github.com/scroll-tech/reth.git?branch=feat/add-deref-blanket-engine-api#b4bb326eaecaf33b6452ecdf013a0122cb4f4d86" dependencies = [ "alloy-consensus", "alloy-primitives", "alloy-rlp", "alloy-rpc-types-eth", - "alloy-serde", + "alloy-serde 0.11.1", "alloy-trie", "arbitrary", "bytes", @@ -7666,7 +7740,7 @@ dependencies = [ [[package]] name = "reth-trie-db" version = "1.1.5" -source = "git+https://github.com/scroll-tech/reth.git#6c634147dcf6b91d0905f199992bb46b0a3705d0" +source = "git+https://github.com/scroll-tech/reth.git?branch=feat/add-deref-blanket-engine-api#b4bb326eaecaf33b6452ecdf013a0122cb4f4d86" dependencies = [ "alloy-primitives", "alloy-rlp", @@ -7676,10 +7750,11 @@ dependencies = [ "reth-db-api", "reth-execution-errors", "reth-metrics", - "reth-primitives", + "reth-primitives-traits", "reth-storage-errors", "reth-trie", "revm", + "serde", "tracing", "triehash", ] @@ -7687,7 +7762,7 @@ dependencies = [ [[package]] name = "reth-trie-parallel" version = "1.1.5" -source = "git+https://github.com/scroll-tech/reth.git#6c634147dcf6b91d0905f199992bb46b0a3705d0" +source = "git+https://github.com/scroll-tech/reth.git?branch=feat/add-deref-blanket-engine-api#b4bb326eaecaf33b6452ecdf013a0122cb4f4d86" dependencies = [ "alloy-primitives", "alloy-rlp", @@ -7710,7 +7785,7 @@ dependencies = [ [[package]] name = "reth-trie-sparse" version = "1.1.5" -source = "git+https://github.com/scroll-tech/reth.git#6c634147dcf6b91d0905f199992bb46b0a3705d0" +source = "git+https://github.com/scroll-tech/reth.git?branch=feat/add-deref-blanket-engine-api#b4bb326eaecaf33b6452ecdf013a0122cb4f4d86" dependencies = [ "alloy-primitives", "alloy-rlp", @@ -7725,15 +7800,15 @@ dependencies = [ [[package]] name = "reth-zstd-compressors" version = "1.1.5" -source = "git+https://github.com/scroll-tech/reth.git#6c634147dcf6b91d0905f199992bb46b0a3705d0" +source = "git+https://github.com/scroll-tech/reth.git?branch=feat/add-deref-blanket-engine-api#b4bb326eaecaf33b6452ecdf013a0122cb4f4d86" dependencies = [ "zstd", ] [[package]] name = "revm" -version = "19.3.0" -source = "git+https://github.com/scroll-tech/revm.git?branch=scroll-evm-executor/reth/v54#467ffa62439a95f4e977950cb645a035586f90cf" +version = "19.4.0" +source = "git+https://github.com/scroll-tech/revm.git?branch=scroll-evm-executor/reth/v55#8e3fd7b8640a776bd28cc421f33b1f38949490d6" dependencies = [ "auto_impl", "cfg-if", @@ -7746,9 +7821,9 @@ dependencies = [ [[package]] name = "revm-inspectors" -version = "0.14.1" +version = "0.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc873bc873e12a1723493e1a35804fa79b673a0bfb1c19cfee659d46def8be42" +checksum = "6d87cdf1c0d878b48423f8a86232950657abaf72a2d0d14af609467542313b1a" dependencies = [ "alloy-primitives", "alloy-rpc-types-eth", @@ -7757,6 +7832,7 @@ dependencies = [ "anstyle", "colorchoice", "revm", + "serde", "serde_json", "thiserror 2.0.11", ] @@ -7764,7 +7840,7 @@ dependencies = [ [[package]] name = "revm-interpreter" version = "15.1.0" -source = "git+https://github.com/scroll-tech/revm.git?branch=scroll-evm-executor/reth/v54#467ffa62439a95f4e977950cb645a035586f90cf" +source = "git+https://github.com/scroll-tech/revm.git?branch=scroll-evm-executor/reth/v55#8e3fd7b8640a776bd28cc421f33b1f38949490d6" dependencies = [ "cfg-if", "revm-primitives", @@ -7774,7 +7850,7 @@ dependencies = [ [[package]] name = "revm-precompile" version = "16.0.0" -source = "git+https://github.com/scroll-tech/revm.git?branch=scroll-evm-executor/reth/v54#467ffa62439a95f4e977950cb645a035586f90cf" +source = "git+https://github.com/scroll-tech/revm.git?branch=scroll-evm-executor/reth/v55#8e3fd7b8640a776bd28cc421f33b1f38949490d6" dependencies = [ "aurora-engine-modexp", "c-kzg", @@ -7792,7 +7868,7 @@ dependencies = [ [[package]] name = "revm-primitives" version = "15.1.0" -source = "git+https://github.com/scroll-tech/revm.git?branch=scroll-evm-executor/reth/v54#467ffa62439a95f4e977950cb645a035586f90cf" +source = "git+https://github.com/scroll-tech/revm.git?branch=scroll-evm-executor/reth/v55#8e3fd7b8640a776bd28cc421f33b1f38949490d6" dependencies = [ "alloy-eip2930", "alloy-eip7702", @@ -7820,15 +7896,14 @@ dependencies = [ [[package]] name = "ring" -version = "0.17.8" +version = "0.17.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c17fa4cb658e3583423e915b9f3acc01cceaee1860e33d59ebae66adc3a2dc0d" +checksum = "e75ec5e92c4d8aede845126adc388046234541629e76029599ed35a003c7ed24" dependencies = [ "cc", "cfg-if", "getrandom 0.2.15", "libc", - "spin", "untrusted", "windows-sys 0.52.0", ] @@ -7908,6 +7983,31 @@ dependencies = [ "chrono", ] +[[package]] +name = "rollup-node-manager" +version = "0.0.1" +dependencies = [ + "alloy-eips 0.9.2", + "alloy-rpc-types-engine", + "futures", + "reth-engine-primitives", + "reth-network-peers", + "reth-rpc-api", + "reth-scroll-engine-primitives", + "reth-scroll-primitives", + "reth-tasks", + "reth-tokio-util", + "scroll-alloy-network", + "scroll-alloy-provider", + "scroll-engine", + "scroll-network", + "scroll-wire", + "secp256k1", + "tokio", + "tokio-stream", + "tracing", +] + [[package]] name = "route-recognizer" version = "0.3.1" @@ -7916,22 +8016,24 @@ checksum = "afab94fb28594581f62d981211a9a4d53cc8130bbcbbb89a0440d9b8e81a7746" [[package]] name = "ruint" -version = "1.12.3" +version = "1.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c3cc4c2511671f327125da14133d0c5c5d137f006a1017a16f557bc85b16286" +checksum = "825df406ec217a8116bd7b06897c6cc8f65ffefc15d030ae2c9540acc9ed50b6" dependencies = [ "alloy-rlp", "arbitrary", "ark-ff 0.3.0", "ark-ff 0.4.2", "bytes", - "fastrlp", + "fastrlp 0.3.1", + "fastrlp 0.4.0", "num-bigint", + "num-integer", "num-traits", "parity-scale-codec", "primitive-types", "proptest", - "rand", + "rand 0.8.5", "rlp", "ruint-macro", "serde", @@ -7959,11 +8061,11 @@ checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" [[package]] name = "rustc-hash" -version = "2.1.0" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7fb8039b3032c191086b10f11f319a6e99e1e82889c5cc6046f515c9db1d497" +checksum = "357703d41365b4b27c590e3ed91eabb1b663f07c4c084095e60cbed4362dff0d" dependencies = [ - "rand", + "rand 0.8.5", ] [[package]] @@ -8005,9 +8107,9 @@ dependencies = [ [[package]] name = "rustls" -version = "0.23.22" +version = "0.23.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fb9263ab4eb695e42321db096e3b8fbd715a59b154d5c88d82db2175b681ba7" +checksum = "47796c98c480fce5406ef69d1c76378375492c3b0a0de587be0c1d9feb12f395" dependencies = [ "log", "once_cell", @@ -8167,13 +8269,13 @@ checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" [[package]] name = "scroll-alloy-consensus" version = "1.1.5" -source = "git+https://github.com/scroll-tech/reth.git#6c634147dcf6b91d0905f199992bb46b0a3705d0" +source = "git+https://github.com/scroll-tech/reth.git?branch=feat/add-deref-blanket-engine-api#b4bb326eaecaf33b6452ecdf013a0122cb4f4d86" dependencies = [ "alloy-consensus", - "alloy-eips", + "alloy-eips 0.11.1", "alloy-primitives", "alloy-rlp", - "alloy-serde", + "alloy-serde 0.11.1", "arbitrary", "derive_more", "modular-bitfield", @@ -8186,7 +8288,7 @@ dependencies = [ [[package]] name = "scroll-alloy-network" version = "1.1.5" -source = "git+https://github.com/scroll-tech/reth.git#6c634147dcf6b91d0905f199992bb46b0a3705d0" +source = "git+https://github.com/scroll-tech/reth.git?branch=feat/add-deref-blanket-engine-api#b4bb326eaecaf33b6452ecdf013a0122cb4f4d86" dependencies = [ "alloy-consensus", "alloy-network", @@ -8197,17 +8299,38 @@ dependencies = [ "scroll-alloy-rpc-types", ] +[[package]] +name = "scroll-alloy-provider" +version = "1.1.5" +source = "git+https://github.com/scroll-tech/reth.git?branch=feat/add-deref-blanket-engine-api#b4bb326eaecaf33b6452ecdf013a0122cb4f4d86" +dependencies = [ + "alloy-primitives", + "alloy-provider", + "alloy-rpc-client", + "alloy-rpc-types-engine", + "alloy-transport", + "alloy-transport-http", + "async-trait", + "derive_more", + "eyre", + "http-body-util", + "reqwest", + "scroll-alloy-network", + "scroll-alloy-rpc-types-engine", + "tower 0.4.13", +] + [[package]] name = "scroll-alloy-rpc-types" version = "1.1.5" -source = "git+https://github.com/scroll-tech/reth.git#6c634147dcf6b91d0905f199992bb46b0a3705d0" +source = "git+https://github.com/scroll-tech/reth.git?branch=feat/add-deref-blanket-engine-api#b4bb326eaecaf33b6452ecdf013a0122cb4f4d86" dependencies = [ "alloy-consensus", - "alloy-eips", + "alloy-eips 0.11.1", "alloy-network-primitives", "alloy-primitives", "alloy-rpc-types-eth", - "alloy-serde", + "alloy-serde 0.11.1", "derive_more", "scroll-alloy-consensus", "serde", @@ -8217,10 +8340,11 @@ dependencies = [ [[package]] name = "scroll-alloy-rpc-types-engine" version = "1.1.5" -source = "git+https://github.com/scroll-tech/reth.git#6c634147dcf6b91d0905f199992bb46b0a3705d0" +source = "git+https://github.com/scroll-tech/reth.git?branch=feat/add-deref-blanket-engine-api#b4bb326eaecaf33b6452ecdf013a0122cb4f4d86" dependencies = [ "alloy-primitives", "alloy-rpc-types-engine", + "arbitrary", "serde", ] @@ -8228,10 +8352,12 @@ dependencies = [ name = "scroll-bridge" version = "0.0.1" dependencies = [ - "alloy-consensus", + "alloy-chains", "alloy-primitives", + "alloy-rpc-types-engine", "clap", "eyre", + "futures", "reth-cli-util", "reth-e2e-test-utils", "reth-eth-wire-types", @@ -8241,8 +8367,11 @@ dependencies = [ "reth-node-builder", "reth-node-core", "reth-node-types", + "reth-payload-builder", "reth-primitives", "reth-provider", + "reth-rpc-api", + "reth-rpc-builder", "reth-rpc-server-types", "reth-scroll-chainspec", "reth-scroll-cli", @@ -8252,8 +8381,12 @@ dependencies = [ "reth-tasks", "reth-tracing", "reth-transaction-pool", + "rollup-node-manager", "scroll-alloy-consensus", + "scroll-alloy-network", + "scroll-alloy-provider", "scroll-alloy-rpc-types-engine", + "scroll-engine", "scroll-network", "scroll-wire", "secp256k1", @@ -8262,20 +8395,52 @@ dependencies = [ "tracing", ] +[[package]] +name = "scroll-engine" +version = "0.0.1" +dependencies = [ + "alloy-chains", + "alloy-eips 0.9.2", + "alloy-primitives", + "alloy-rpc-types-engine", + "arbitrary", + "async-trait", + "eyre", + "reth-engine-primitives", + "reth-network-peers", + "reth-payload-primitives", + "reth-primitives", + "reth-scroll-chainspec", + "reth-scroll-engine-primitives", + "reth-scroll-primitives", + "reth-testing-utils", + "scroll-alloy-network", + "scroll-alloy-provider", + "scroll-alloy-rpc-types-engine", + "serde", + "tokio", + "tracing", +] + [[package]] name = "scroll-network" version = "0.0.1" dependencies = [ "alloy-primitives", "futures", + "parking_lot", + "reth-discv5", + "reth-eth-wire-types", "reth-network", "reth-network-api", "reth-network-peers", + "reth-network-types", "reth-primitives", "reth-scroll-chainspec", "reth-scroll-node", "reth-scroll-primitives", "reth-storage-api", + "reth-tasks", "scroll-wire", "secp256k1", "tokio", @@ -8293,6 +8458,7 @@ dependencies = [ "reth-eth-wire", "reth-network", "reth-network-api", + "reth-primitives", "reth-scroll-primitives", "secp256k1", "tokio", @@ -8321,7 +8487,7 @@ version = "0.29.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9465315bc9d4566e1724f0fffcbcc446268cb522e60f9a27bcded6b19c108113" dependencies = [ - "rand", + "rand 0.8.5", "secp256k1-sys", "serde", ] @@ -8428,7 +8594,7 @@ checksum = "5a9bf7cf98d04a2b28aead066b7496853d4779c9cc183c440dbac457641e19a0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.98", ] [[package]] @@ -8492,7 +8658,7 @@ dependencies = [ "darling", "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.98", ] [[package]] @@ -8621,7 +8787,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de" dependencies = [ "digest 0.10.7", - "rand_core", + "rand_core 0.6.4", ] [[package]] @@ -8653,9 +8819,9 @@ dependencies = [ [[package]] name = "smallvec" -version = "1.13.2" +version = "1.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" +checksum = "7fcf8323ef1faaee30a44a340193b1ac6814fd9b7b4e88e9d4519a3e4abe1cfd" dependencies = [ "arbitrary", "serde", @@ -8689,7 +8855,7 @@ dependencies = [ "http", "httparse", "log", - "rand", + "rand 0.8.5", "sha1", ] @@ -8733,7 +8899,16 @@ version = "0.26.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8fec0f0aef304996cf250b31b5a10dee7980c85da9d759361292b8bca5a18f06" dependencies = [ - "strum_macros", + "strum_macros 0.26.4", +] + +[[package]] +name = "strum" +version = "0.27.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f64def088c51c9510a8579e3c5d67c65349dcf755e5479ad3d010aa6454e2c32" +dependencies = [ + "strum_macros 0.27.1", ] [[package]] @@ -8746,7 +8921,20 @@ dependencies = [ "proc-macro2", "quote", "rustversion", - "syn 2.0.96", + "syn 2.0.98", +] + +[[package]] +name = "strum_macros" +version = "0.27.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c77a8c5abcaf0f9ce05d62342b7d298c346515365c36b673df4ebe3ced01fde8" +dependencies = [ + "heck", + "proc-macro2", + "quote", + "rustversion", + "syn 2.0.98", ] [[package]] @@ -8758,7 +8946,7 @@ dependencies = [ "byteorder", "crunchy", "lazy_static", - "rand", + "rand 0.8.5", "rustc-hex", ] @@ -8781,9 +8969,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.96" +version = "2.0.98" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d5d0adab1ae378d7f53bdebc67a39f1f151407ef230f0ce2883572f5d8985c80" +checksum = "36147f1a48ae0ec2b5b3bc5b537d267457555a10dc06f3dbc8cb11ba3006d3b1" dependencies = [ "proc-macro2", "quote", @@ -8792,14 +8980,14 @@ dependencies = [ [[package]] name = "syn-solidity" -version = "0.8.19" +version = "0.8.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b84e4d83a0a6704561302b917a932484e1cae2d8c6354c64be8b7bac1c1fe057" +checksum = "9c2de690018098e367beeb793991c7d4dc7270f42c9d2ac4ccc876c1368ca430" dependencies = [ "paste", "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.98", ] [[package]] @@ -8819,7 +9007,7 @@ checksum = "c8af7666ab7b6390ab78131fb5b0fce11d6b7a6951602017c35fa82800708971" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.98", ] [[package]] @@ -8849,9 +9037,9 @@ checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" [[package]] name = "tempfile" -version = "3.16.0" +version = "3.17.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38c246215d7d24f48ae091a2902398798e05d978b24315d6efbc00ede9a8bb91" +checksum = "22e5a0acb1f3f55f65cc4a866c361b2fb2a0ff6366785ae6fbb5f85df07ba230" dependencies = [ "cfg-if", "fastrand", @@ -8887,7 +9075,7 @@ checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.98", ] [[package]] @@ -8898,7 +9086,7 @@ checksum = "26afc1baea8a989337eeb52b6e72a039780ce45c3edfcc9c5b9d112feeb173c2" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.98", ] [[package]] @@ -9013,7 +9201,7 @@ checksum = "6e06d43f1345a3bcd39f6a56dbb7dcab2ba47e68e8ac134855e7e2bdbaf8cab8" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.98", ] [[package]] @@ -9040,9 +9228,9 @@ dependencies = [ [[package]] name = "tokio-tungstenite" -version = "0.24.0" +version = "0.26.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "edc5f74e248dc973e0dbb7b74c7e0d6fcc301c694ff50049504004ef4d0cdcd9" +checksum = "7a9daff607c6d2bf6c16fd681ccb7eecc83e4e2cdc1ca067ffaadfca5de7f084" dependencies = [ "futures-util", "log", @@ -9071,9 +9259,9 @@ dependencies = [ [[package]] name = "toml" -version = "0.8.19" +version = "0.8.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1ed1f98e3fdc28d6d910e6737ae6ab1a93bf1985935a1193e68f93eeb68d24e" +checksum = "cd87a5cdd6ffab733b2f74bc4fd7ee5fff6634124999ac278c35fc78c6120148" dependencies = [ "serde", "serde_spanned", @@ -9092,15 +9280,15 @@ dependencies = [ [[package]] name = "toml_edit" -version = "0.22.23" +version = "0.22.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02a8b472d1a3d7c18e2d61a489aee3453fd9031c33e4f55bd533f4a7adca1bee" +checksum = "17b4795ff5edd201c7cd6dca065ae59972ce77d1b80fa0a84d94950ece7d1474" dependencies = [ "indexmap 2.7.1", "serde", "serde_spanned", "toml_datetime", - "winnow 0.7.0", + "winnow", ] [[package]] @@ -9115,7 +9303,7 @@ dependencies = [ "indexmap 1.9.3", "pin-project", "pin-project-lite", - "rand", + "rand 0.8.5", "slab", "tokio", "tokio-util", @@ -9214,7 +9402,7 @@ checksum = "395ae124c09f9e6918a2310af6038fba074bcf474ac352496d5910dd59a2226d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.98", ] [[package]] @@ -9320,29 +9508,28 @@ checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" [[package]] name = "tungstenite" -version = "0.24.0" +version = "0.26.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "18e5b8366ee7a95b16d32197d0b2604b43a0be89dc5fac9f8e96ccafbaedda8a" +checksum = "4793cb5e56680ecbb1d843515b23b6de9a75eb04b66643e256a396d43be33c13" dependencies = [ - "byteorder", "bytes", "data-encoding", "http", "httparse", "log", - "rand", + "rand 0.9.0", "rustls", "rustls-pki-types", "sha1", - "thiserror 1.0.69", + "thiserror 2.0.11", "utf-8", ] [[package]] name = "typenum" -version = "1.17.0" +version = "1.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" +checksum = "1dccffe3ce07af9386bfd29e80c0ab1a8205a2fc34e4bcd40364df902cfa8f3f" [[package]] name = "ucd-trie" @@ -9388,9 +9575,9 @@ checksum = "75b844d17643ee918803943289730bec8aac480150456169e647ed0b576ba539" [[package]] name = "unicode-ident" -version = "1.0.16" +version = "1.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a210d160f08b701c8721ba1c726c11662f877ea6b7094007e1ca9a1041945034" +checksum = "00e2473a93778eb0bad35909dff6a10d28e63f792f16ed15e404fca9d5eeedbe" [[package]] name = "unicode-segmentation" @@ -9487,11 +9674,11 @@ checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" [[package]] name = "uuid" -version = "1.12.1" +version = "1.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b3758f5e68192bb96cc8f9b7e2c2cfdabb435499a28499a42f8f984092adad4b" +checksum = "8c1f41ffb7cf259f1ecc2876861a17e7142e63ead296f671f81f6ae85903e0d6" dependencies = [ - "getrandom 0.2.15", + "getrandom 0.3.1", ] [[package]] @@ -9528,14 +9715,14 @@ checksum = "d674d135b4a8c1d7e813e2f8d1c9a58308aee4a680323066025e53132218bd91" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.98", ] [[package]] name = "wait-timeout" -version = "0.2.0" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f200f5b12eb75f8c1ed65abd4b2db8a6e1b138a20de009dacee265a2498f3f6" +checksum = "09ac3b126d3914f9849036f826e054cbabdc8519970b8998ddaf3b5bd3c65f11" dependencies = [ "libc", ] @@ -9596,7 +9783,7 @@ dependencies = [ "log", "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.98", "wasm-bindgen-shared", ] @@ -9631,7 +9818,7 @@ checksum = "8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.98", "wasm-bindgen-backend", "wasm-bindgen-shared", ] @@ -9787,7 +9974,7 @@ checksum = "9107ddc059d5b6fbfbffdfa7a7fe3e22a226def0b2608f72e9d552763d3e1ad7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.98", ] [[package]] @@ -9798,7 +9985,7 @@ checksum = "2bbd5b46c938e506ecbce286b6628a02171d56153ba733b6c741fc627ec9579b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.98", ] [[package]] @@ -9809,7 +9996,7 @@ checksum = "29bee4b38ea3cde66011baa44dba677c432a78593e202392d1e9070cf2a7fca7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.98", ] [[package]] @@ -9820,7 +10007,7 @@ checksum = "053c4c462dc91d3b1504c6fe5a726dd15e216ba718e84a0e46a88fbe5ded3515" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.98", ] [[package]] @@ -10012,18 +10199,9 @@ checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" [[package]] name = "winnow" -version = "0.6.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e90edd2ac1aa278a5c4599b1d89cf03074b610800f866d4026dc199d7929a28" -dependencies = [ - "memchr", -] - -[[package]] -name = "winnow" -version = "0.7.0" +version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e49d2d35d3fad69b39b94139037ecfb4f359f08958b9c11e7315ce770462419" +checksum = "59690dea168f2198d1a3b0cac23b8063efcd11012f10ae4698f284808c8ef603" dependencies = [ "memchr", ] @@ -10113,7 +10291,7 @@ checksum = "2380878cad4ac9aac1e2435f3eb4020e8374b5f13c296cb75b4620ff8e229154" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.98", "synstructure", ] @@ -10124,7 +10302,16 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0" dependencies = [ "byteorder", - "zerocopy-derive", + "zerocopy-derive 0.7.35", +] + +[[package]] +name = "zerocopy" +version = "0.8.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "79386d31a42a4996e3336b0919ddb90f81112af416270cff95b5f5af22b839c2" +dependencies = [ + "zerocopy-derive 0.8.18", ] [[package]] @@ -10135,7 +10322,18 @@ checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.98", +] + +[[package]] +name = "zerocopy-derive" +version = "0.8.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76331675d372f91bf8d17e13afbd5fe639200b73d01f0fc748bb059f9cca2db7" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.98", ] [[package]] @@ -10155,7 +10353,7 @@ checksum = "595eed982f7d355beb85837f651fa22e90b3c044842dc7f2c2842c086f295808" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.98", "synstructure", ] @@ -10176,7 +10374,7 @@ checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.98", ] [[package]] @@ -10198,7 +10396,7 @@ checksum = "6eafa6dfb17584ea3e2bd6e76e0cc15ad7af12b09abdd1ca55961bed9b1063c6" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.98", ] [[package]] diff --git a/Cargo.toml b/Cargo.toml index 45c31d20..384e0718 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -9,6 +9,7 @@ exclude = [".github/"] members = [ "bin/bridge", "crates/engine", + "crates/node", "crates/network", "crates/scroll-wire" ] @@ -104,26 +105,36 @@ too_long_first_doc_paragraph = "allow" [workspace.dependencies] # alloy +alloy-chains = { version = "0.1.32", default-features = false } +alloy-eips = { version = "0.9.2", default-features = false } alloy-primitives = { version = "0.8.15", default-features = false } -alloy-rpc-types-engine = { version = "0.9.2", default-features = false } +alloy-rpc-types-engine = { version = "0.11.0", default-features = false } + +# scroll-alloy +scroll-alloy-provider = { git = "https://github.com/scroll-tech/reth.git", branch = "feat/add-deref-blanket-engine-api" } +scroll-alloy-network = { git = "https://github.com/scroll-tech/reth.git", branch = "feat/add-deref-blanket-engine-api" } # reth -reth-eth-wire-types = { git = "https://github.com/scroll-tech/reth.git" } -reth-network = { git = "https://github.com/scroll-tech/reth.git", default-features = false } -reth-network-api = { git = "https://github.com/scroll-tech/reth.git", default-features = false } -reth-network-peers = { git = "https://github.com/scroll-tech/reth.git", default-features = false } -reth-primitives = { git = "https://github.com/scroll-tech/reth.git", default-features = false } -reth-provider = { git = "https://github.com/scroll-tech/reth.git", default-features = false } -reth-tasks = { git = "https://github.com/scroll-tech/reth.git" } +reth-eth-wire-types = { git = "https://github.com/scroll-tech/reth.git", branch = "feat/add-deref-blanket-engine-api" } +reth-network = { git = "https://github.com/scroll-tech/reth.git", branch = "feat/add-deref-blanket-engine-api", default-features = false } +reth-network-api = { git = "https://github.com/scroll-tech/reth.git", branch = "feat/add-deref-blanket-engine-api", default-features = false } +reth-network-peers = { git = "https://github.com/scroll-tech/reth.git", branch = "feat/add-deref-blanket-engine-api", default-features = false } +reth-primitives = { git = "https://github.com/scroll-tech/reth.git", branch = "feat/add-deref-blanket-engine-api", default-features = false } +reth-provider = { git = "https://github.com/scroll-tech/reth.git", branch = "feat/add-deref-blanket-engine-api", default-features = false } +reth-rpc-api = { git = "https://github.com/scroll-tech/reth.git", branch = "feat/add-deref-blanket-engine-api", default-features = false, features = ["client"] } +reth-tasks = { git = "https://github.com/scroll-tech/reth.git", branch = "feat/add-deref-blanket-engine-api" } # reth-scroll -reth-scroll-chainspec = { git = "https://github.com/scroll-tech/reth.git", default-features = false } -reth-scroll-node = { git = "https://github.com/scroll-tech/reth.git", default-features = false } -reth-scroll-primitives = { git = "https://github.com/scroll-tech/reth.git", default-features = false } +reth-scroll-chainspec = { git = "https://github.com/scroll-tech/reth.git", branch = "feat/add-deref-blanket-engine-api", default-features = false } +reth-scroll-engine-primitives = { git = "https://github.com/scroll-tech/reth.git", branch = "feat/add-deref-blanket-engine-api", default-features = false } +reth-scroll-node = { git = "https://github.com/scroll-tech/reth.git", branch = "feat/add-deref-blanket-engine-api", default-features = false } +reth-scroll-primitives = { git = "https://github.com/scroll-tech/reth.git", branch = "feat/add-deref-blanket-engine-api", default-features = false } # rollup node +scroll-engine = { path = "crates/engine" } scroll-network = { path = "crates/network" } scroll-wire = { path = "crates/scroll-wire" } +rollup-node-manager = { path = "crates/node" } # misc eyre = "0.6" @@ -135,9 +146,9 @@ tokio-stream = { version = "0.1", default-features = false } tracing = "0.1.0" [patch.crates-io] -revm = { git = "https://github.com/scroll-tech/revm.git", branch = "scroll-evm-executor/reth/v54" } -revm-primitives = { git = "https://github.com/scroll-tech/revm.git", branch = "scroll-evm-executor/reth/v54" } -revm-interpreter = { git = "https://github.com/scroll-tech/revm.git", branch = "scroll-evm-executor/reth/v54" } +revm = { git = "https://github.com/scroll-tech/revm.git", branch = "scroll-evm-executor/reth/v55" } +revm-primitives = { git = "https://github.com/scroll-tech/revm.git", branch = "scroll-evm-executor/reth/v55" } +revm-interpreter = { git = "https://github.com/scroll-tech/revm.git", branch = "scroll-evm-executor/reth/v55" } ff = { git = "https://github.com/scroll-tech/ff", branch = "feat/sp1" } diff --git a/bin/bridge/Cargo.toml b/bin/bridge/Cargo.toml index 1aaa3c85..5d1ebb3b 100644 --- a/bin/bridge/Cargo.toml +++ b/bin/bridge/Cargo.toml @@ -8,37 +8,47 @@ exclude.workspace = true [dependencies] # alloy -alloy-consensus = { version = "0.9.2", default-features = false } +alloy-chains.workspace = true +alloy-rpc-types-engine.workspace = true # scroll-alloy -scroll-alloy-consensus = { git = "https://github.com/scroll-tech/reth.git" } -scroll-alloy-rpc-types-engine= { git = "https://github.com/scroll-tech/reth.git" } +scroll-alloy-consensus = { git = "https://github.com/scroll-tech/reth.git", branch = "feat/add-deref-blanket-engine-api" } +scroll-alloy-network = { git = "https://github.com/scroll-tech/reth.git", branch = "feat/add-deref-blanket-engine-api" } +scroll-alloy-rpc-types-engine= { git = "https://github.com/scroll-tech/reth.git", branch = "feat/add-deref-blanket-engine-api" } +scroll-alloy-provider.workspace = true # reth -reth-cli-util = { git = "https://github.com/scroll-tech/reth.git" } +reth-cli-util = { git = "https://github.com/scroll-tech/reth.git", branch = "feat/add-deref-blanket-engine-api" } reth-eth-wire-types.workspace = true reth-network.workspace = true reth-network-peers.workspace = true -reth-node-api = { git = "https://github.com/scroll-tech/reth.git", features = ["scroll"] } -reth-node-builder = { git = "https://github.com/scroll-tech/reth.git", features = ["skip-state-root-validation"] } -reth-node-core = { git = "https://github.com/scroll-tech/reth.git" } -reth-node-types = { git = "https://github.com/scroll-tech/reth.git" } +reth-node-api = { git = "https://github.com/scroll-tech/reth.git", branch = "feat/add-deref-blanket-engine-api", features = ["scroll"] } +reth-node-builder = { git = "https://github.com/scroll-tech/reth.git", branch = "feat/add-deref-blanket-engine-api", features = ["skip-state-root-validation"] } +reth-node-core = { git = "https://github.com/scroll-tech/reth.git", branch = "feat/add-deref-blanket-engine-api" } +reth-node-types = { git = "https://github.com/scroll-tech/reth.git", branch = "feat/add-deref-blanket-engine-api" } reth-primitives.workspace = true reth-provider = { workspace = true, features = ["scroll", "skip-state-root-validation"]} -reth-transaction-pool = { git = "https://github.com/scroll-tech/reth.git" } +reth-rpc-api = { workspace = true, features = ["client"] } +reth-rpc-builder = { git = "https://github.com/scroll-tech/reth.git", branch = "feat/add-deref-blanket-engine-api" } +reth-transaction-pool = { git = "https://github.com/scroll-tech/reth.git", branch = "feat/add-deref-blanket-engine-api" } # scroll reth-scroll-chainspec.workspace = true -reth-scroll-cli = { git = "https://github.com/scroll-tech/reth.git", features = ["scroll"] } -reth-scroll-engine-primitives = { git = "https://github.com/scroll-tech/reth.git" } +reth-scroll-cli = { git = "https://github.com/scroll-tech/reth.git", branch = "feat/add-deref-blanket-engine-api", features = ["scroll"] } +reth-scroll-engine-primitives = { git = "https://github.com/scroll-tech/reth.git", branch = "feat/add-deref-blanket-engine-api" } reth-scroll-node = { workspace = true, features = ["skip-state-root-validation"] } -reth-scroll-primitives.workspace = true +reth-scroll-primitives = { workspace = true } scroll-wire.workspace = true scroll-network.workspace = true +scroll-engine = { workspace = true, features = ["test-utils"] } + +# rollup-node +rollup-node-manager.workspace = true # misc clap = { version = "4", features = ["derive", "env"] } eyre.workspace = true +futures.workspace = true secp256k1 = { workspace = true, features = [ "global-context", "recovery", @@ -51,25 +61,48 @@ tracing.workspace = true alloy-primitives = { workspace = true, default-features = false, features = [ "map-foldhash", ] } +alloy-rpc-types-engine.workspace = true # reth -reth-e2e-test-utils = { git = "https://github.com/scroll-tech/reth.git" } -reth-rpc-server-types = { git = "https://github.com/scroll-tech/reth.git" } +reth-e2e-test-utils = { git = "https://github.com/scroll-tech/reth.git", branch = "feat/add-deref-blanket-engine-api" } +reth-payload-builder = { git = "https://github.com/scroll-tech/reth.git", branch = "feat/add-deref-blanket-engine-api" } +reth-rpc-server-types = { git = "https://github.com/scroll-tech/reth.git", branch = "feat/add-deref-blanket-engine-api" } reth-tasks.workspace = true -reth-tracing = { git = "https://github.com/scroll-tech/reth.git" } +reth-tracing = { git = "https://github.com/scroll-tech/reth.git", branch = "feat/add-deref-blanket-engine-api" } -# misc +# misc serde_json = { version = "1.0.94", default-features = false, features = ["alloc"] } +tokio = { workspace = true, features = ["full"] } [features] test-utils = [ - "reth-network/test-utils", - "reth-node-builder/test-utils", - "reth-primitives/test-utils", - "reth-provider/test-utils", - "reth-transaction-pool/test-utils" + "reth-network/test-utils", + "reth-node-builder/test-utils", + "reth-primitives/test-utils", + "reth-provider/test-utils", + "reth-transaction-pool/test-utils", + "scroll-engine/test-utils", + "reth-payload-builder/test-utils", + "reth-payload-builder/test-utils" +] +serde = [ + "alloy-primitives/serde", + "alloy-rpc-types-engine/serde", + "reth-eth-wire-types/serde", + "reth-network/serde", + "reth-provider/serde", + "reth-scroll-primitives/serde", + "scroll-alloy-consensus/serde", + "scroll-alloy-rpc-types-engine/serde", + "scroll-engine/serde", + "scroll-network/serde", + "scroll-wire/serde", + "secp256k1/serde", + "rollup-node-manager/serde", + "alloy-chains/serde" ] [[bin]] name = "bridge" path = "src/main.rs" +required-features = ["serde"] diff --git a/bin/bridge/assets/block_1.json b/bin/bridge/assets/block_1.json new file mode 100644 index 00000000..d7b6daed --- /dev/null +++ b/bin/bridge/assets/block_1.json @@ -0,0 +1,27 @@ +{ + "header" : { + "hash": "0xdde4ef211ec22792a9ce5f81423db83513eed31d371278ce9bd8c85cefcf8bd0", + "parentHash": "0xbbc05efd412b7cd47a2ed0e5ddfcf87af251e414ea4c801d78b6784513180a80", + "sha3Uncles": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "miner": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x08d535cc60f40af5dd3b31e0998d7567c2d568b224bed2ba26070aeb078d1339", + "transactionsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x2", + "number": "0x1", + "gasLimit": "0x989680", + "gasUsed": "0x0", + "timestamp": "0x6524e86e", + "extraData": "0xd883050000846765746888676f312e31392e31856c696e757800000000000000761cf2a06253e7a388f1241e96905015f0c99c29e205b7e73ff87e0d94d9014c4eac1d3e0c2f93c8fdbf051dcab0be9b5b42de458fe11a260d986dcf5d9b413901", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "totalDifficulty": "0x3", + "size": "0x25e" + }, + "body": { + "uncles": [], + "transactions": [], + "ommers": [] + } +} \ No newline at end of file diff --git a/bin/bridge/assets/block_2.json b/bin/bridge/assets/block_2.json new file mode 100644 index 00000000..42e4351f --- /dev/null +++ b/bin/bridge/assets/block_2.json @@ -0,0 +1,228 @@ +{ + "header": { + "hash": "0x926c9f98ddba6f2e18efbdf0fd3df5143af7982a7033e3b7b34e1afd5fcb5008", + "parentHash": "0xdde4ef211ec22792a9ce5f81423db83513eed31d371278ce9bd8c85cefcf8bd0", + "sha3Uncles": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "miner": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x01afd6da38d114b50c1de0bce340858fa9cc68da5d601238800c341df3052c4c", + "transactionsRoot": "0xab53ffe7f604e1b689d1cdfd98a4c7ee8775a00823742d9b887243cc07ee614d", + "receiptsRoot": "0x70b92e4e85c3985ec16ef925b407958c75d9a579c9ad94a0da2eb3e7299b83e1", + "logsBloom": "0x00000000008008000010000000000000500000000000040000800000004000000000000000000000000000000400200002000000000000020000001000000000000100000000000000004000000002000001004200001000000000000000000800000010120000000000000040000800030000800000000000000000000000400000000000000000008000000000008000080000000080000000000004800044400000000000400400021000000400000000000200000000040000000000400040000022000000000000000000040000000c00000420000000400011000020200000000000000000000000000000002004000000000000000000400000020100", + "difficulty": "0x2", + "number": "0x2", + "gasLimit": "0x989680", + "gasUsed": "0x926641", + "timestamp": "0x6524e99d", + "extraData": "0xd883050000846765746888676f312e31392e31856c696e757800000000000000dae7e5950ded57f8a16ef30613fc1fe24153050d64aaf93abd88c6c013ceb17d54f30e1e67d8b748140f2fc2f35871c54e535c16c016ca6240cb00ee567b425c01", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "totalDifficulty": "0x5", + "size": "0xc752" + }, + "body": { + "ommers": [], + "uncles": [], + "transactions": [ + { + "type": "0x0", + "chainId": "0x82750", + "nonce": "0x0", + "gasPrice": "0xf4240", + "gas": "0x8c2d1", + "to": null, + "value": "0x0", + "input": "0x608060405234801561001057600080fd5b5061001a3361001f565b61006f565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6106938061007e6000396000f3fe60806040526004361061007b5760003560e01c80639623609d1161004e5780639623609d1461011157806399a88ec414610124578063f2fde38b14610144578063f3b7dead1461016457600080fd5b8063204e1c7a14610080578063715018a6146100bc5780637eff275e146100d35780638da5cb5b146100f3575b600080fd5b34801561008c57600080fd5b506100a061009b366004610499565b610184565b6040516001600160a01b03909116815260200160405180910390f35b3480156100c857600080fd5b506100d1610215565b005b3480156100df57600080fd5b506100d16100ee3660046104bd565b610229565b3480156100ff57600080fd5b506000546001600160a01b03166100a0565b6100d161011f36600461050c565b610291565b34801561013057600080fd5b506100d161013f3660046104bd565b610300565b34801561015057600080fd5b506100d161015f366004610499565b610336565b34801561017057600080fd5b506100a061017f366004610499565b6103b4565b6000806000836001600160a01b03166040516101aa90635c60da1b60e01b815260040190565b600060405180830381855afa9150503d80600081146101e5576040519150601f19603f3d011682016040523d82523d6000602084013e6101ea565b606091505b5091509150816101f957600080fd5b8080602001905181019061020d91906105e2565b949350505050565b61021d6103da565b6102276000610434565b565b6102316103da565b6040516308f2839760e41b81526001600160a01b038281166004830152831690638f283970906024015b600060405180830381600087803b15801561027557600080fd5b505af1158015610289573d6000803e3d6000fd5b505050505050565b6102996103da565b60405163278f794360e11b81526001600160a01b03841690634f1ef2869034906102c990869086906004016105ff565b6000604051808303818588803b1580156102e257600080fd5b505af11580156102f6573d6000803e3d6000fd5b5050505050505050565b6103086103da565b604051631b2ce7f360e11b81526001600160a01b038281166004830152831690633659cfe69060240161025b565b61033e6103da565b6001600160a01b0381166103a85760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b6103b181610434565b50565b6000806000836001600160a01b03166040516101aa906303e1469160e61b815260040190565b6000546001600160a01b031633146102275760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161039f565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146103b157600080fd5b6000602082840312156104ab57600080fd5b81356104b681610484565b9392505050565b600080604083850312156104d057600080fd5b82356104db81610484565b915060208301356104eb81610484565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b60008060006060848603121561052157600080fd5b833561052c81610484565b9250602084013561053c81610484565b9150604084013567ffffffffffffffff8082111561055957600080fd5b818601915086601f83011261056d57600080fd5b81358181111561057f5761057f6104f6565b604051601f8201601f19908116603f011681019083821181831017156105a7576105a76104f6565b816040528281528960208487010111156105c057600080fd5b8260208601602083013760006020848301015280955050505050509250925092565b6000602082840312156105f457600080fd5b81516104b681610484565b60018060a01b038316815260006020604081840152835180604085015260005b8181101561063b5785810183015185820160600152820161061f565b506000606082860101526060601f19601f83011685010192505050939250505056fea2646970667358221220a6d81929334f4c949e8805deda4b0ba0222d535fa763b25aaeb6410f2a243b1e64736f6c63430008100033", + "signature": { + "r": "0xc1aa76720d76461cb1a35a4fd3f6731141351b5b86fc4e6111e4374578404370", + "s": "0x1c1c2e2787b711c102bb63d232358d16547ea3378c87b41b3b746965fb7e0dfb", + "y_parity": "0x104ec3" + }, + "hash": "0x49399c1da162c12d07215e87fe877d2bbb6b1bc4115f97299351603df84f6cb1", + "blockHash": "0x926c9f98ddba6f2e18efbdf0fd3df5143af7982a7033e3b7b34e1afd5fcb5008", + "blockNumber": "0x2", + "transactionIndex": "0x0", + "from": "0xf9062b8a30e0d7722960e305049fa50b86ba6253" + }, + { + "type": "0x0", + "chainId": "0x82750", + "nonce": "0x1", + "gasPrice": "0xf4240", + "gas": "0x1722e0", + "to": null, + "value": "0x0", + "input": "0x60a060405234801561001057600080fd5b5060405161150b38038061150b83398101604081905261002f91610107565b610037610048565b6001600160a01b0316608052610137565b600054610100900460ff16156100b45760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff90811614610105576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b60006020828403121561011957600080fd5b81516001600160a01b038116811461013057600080fd5b9392505050565b6080516113a461016760003960008181610182015281816107eb015281816109000152610a7701526113a46000f3fe6080604052600436106100f75760003560e01c8063797594b01161008a578063bedb86fb11610059578063bedb86fb146102ad578063c4d66de8146102cd578063e70fc93b146102ed578063f2fde38b1461032857600080fd5b8063797594b01461023c5780638da5cb5b1461025c5780638ef1332e1461027a578063b2267a7b1461029a57600080fd5b80635c975abb116100c65780635c975abb146101dc5780635f7b1577146101f45780636e296e4514610207578063715018a61461022757600080fd5b806302345b501461010b5780632a6cccb2146101505780633b70c18a14610170578063478222c2146101bc57600080fd5b3661010657610104610348565b005b600080fd5b34801561011757600080fd5b5061013b610126366004610f97565b60fc6020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b34801561015c57600080fd5b5061010461016b366004610fcc565b6103a9565b34801561017c57600080fd5b506101a47f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610147565b3480156101c857600080fd5b5060cb546101a4906001600160a01b031681565b3480156101e857600080fd5b5060655460ff1661013b565b610104610202366004610fee565b610413565b34801561021357600080fd5b5060c9546101a4906001600160a01b031681565b34801561023357600080fd5b50610104610466565b34801561024857600080fd5b5060ca546101a4906001600160a01b031681565b34801561026857600080fd5b506033546001600160a01b03166101a4565b34801561028657600080fd5b50610104610295366004611137565b610478565b6101046102a83660046111a9565b610593565b3480156102b957600080fd5b506101046102c8366004611208565b6105ad565b3480156102d957600080fd5b506101046102e8366004610fcc565b6105ce565b3480156102f957600080fd5b5061031a610308366004610f97565b60fb6020526000908152604090205481565b604051908152602001610147565b34801561033457600080fd5b50610104610343366004610fcc565b6106df565b6033546001600160a01b031633146103a75760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b565b6103b1610348565b60cb80546001600160a01b038381166001600160a01b031983168117909355604080519190921680825260208201939093527f4aadc32827849f797733838c61302f7f56d2b6db28caa175eb3f7f8e5aba25f591015b60405180910390a15050565b61041b610755565b61045e868686868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525088925061079b915050565b505050505050565b61046e610348565b6103a760006109d3565b610480610755565b60ca546001600160a01b03167311110000000000000000000000000000000011101933016001600160a01b0316146104fa5760405162461bcd60e51b815260206004820152601f60248201527f43616c6c6572206973206e6f74204c315363726f6c6c4d657373656e67657200604482015260640161039e565b60006105098686868686610a25565b8051602091820120600081815260fc90925260409091205490915060ff16156105865760405162461bcd60e51b815260206004820152602960248201527f4d6573736167652077617320616c7265616479207375636365737366756c6c7960448201526808195e1958dd5d195960ba1b606482015260840161039e565b61045e8686868585610a75565b61059b610755565b6105a78484848461079b565b50505050565b6105b5610348565b80156105c6576105c3610c63565b50565b6105c3610cbd565b600054610100900460ff16158080156105ee5750600054600160ff909116105b806106085750303b158015610608575060005460ff166001145b61066b5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840161039e565b6000805460ff19166001179055801561068e576000805461ff0019166101001790555b610699826000610cf6565b80156106db576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249890602001610407565b5050565b6106e7610348565b6001600160a01b03811661074c5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161039e565b6105c3816109d3565b60655460ff16156103a75760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015260640161039e565b6107a3610d89565b8234146107e75760405162461bcd60e51b81526020600482015260126024820152710dae6ce5cecc2d8eaca40dad2e6dac2e8c6d60731b604482015260640161039e565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166326aad7b76040518163ffffffff1660e01b8152600401602060405180830381865afa158015610847573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061086b919061122a565b9050600061087c3387878588610a25565b8051602091820120600081815260fb909252604090912054909150156108d95760405162461bcd60e51b81526020600482015260126024820152714475706c696361746564206d65737361676560701b604482015260640161039e565b600081815260fb6020526040908190204290555163600a2e7760e01b8152600481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063600a2e77906024016020604051808303816000875af1158015610951573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610975919061122a565b506001600160a01b038616336001600160a01b03167f104371f3b442861a2a7b82a070afbbaab748bb13757bf47769e170e37809ec1e878587896040516109bf9493929190611293565b60405180910390a350506105a76001609755565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60608585858585604051602401610a409594939291906112c2565b60408051601f198184030181529190526020810180516001600160e01b0316634778999760e11b179052905095945050505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316846001600160a01b031603610af65760405162461bcd60e51b815260206004820152601c60248201527f466f7262696420746f2063616c6c206d65737361676520717565756500000000604482015260640161039e565b610aff84610de9565b60c9546001600160a01b0390811690861603610b565760405162461bcd60e51b815260206004820152601660248201527524b73b30b634b21036b2b9b9b0b3b29039b2b73232b960511b604482015260640161039e565b60c980546001600160a01b0319166001600160a01b03878116919091179091556040516000918616908590610b8c908690611307565b60006040518083038185875af1925050503d8060008114610bc9576040519150601f19603f3d011682016040523d82523d6000602084013e610bce565b606091505b505060c980546001600160a01b031916600117905590508015610c3057600082815260fc6020526040808220805460ff191660011790555183917f4641df4a962071e12719d8c8c8e5ac7fc4d97b927346a3d7a335b1f7517e133c91a261045e565b60405182907f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f90600090a2505050505050565b610c6b610755565b6065805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610ca03390565b6040516001600160a01b03909116815260200160405180910390a1565b610cc5610e37565b6065805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33610ca0565b600054610100900460ff16610d1d5760405162461bcd60e51b815260040161039e90611323565b610d25610e80565b610d2d610eaf565b610d35610ede565b60c980546001600160a01b031990811660011790915560ca80546001600160a01b03858116919093161790558116156106db5760cb80546001600160a01b0383166001600160a01b03199091161790555050565b600260975403610ddb5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161039e565b6002609755565b6001609755565b306001600160a01b038216036105c35760405162461bcd60e51b81526020600482015260136024820152722337b93134b2103a379031b0b6361039b2b63360691b604482015260640161039e565b60655460ff166103a75760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b604482015260640161039e565b600054610100900460ff16610ea75760405162461bcd60e51b815260040161039e90611323565b6103a7610f0d565b600054610100900460ff16610ed65760405162461bcd60e51b815260040161039e90611323565b6103a7610f3d565b600054610100900460ff16610f055760405162461bcd60e51b815260040161039e90611323565b6103a7610f70565b600054610100900460ff16610f345760405162461bcd60e51b815260040161039e90611323565b6103a7336109d3565b600054610100900460ff16610f645760405162461bcd60e51b815260040161039e90611323565b6065805460ff19169055565b600054610100900460ff16610de25760405162461bcd60e51b815260040161039e90611323565b600060208284031215610fa957600080fd5b5035919050565b80356001600160a01b0381168114610fc757600080fd5b919050565b600060208284031215610fde57600080fd5b610fe782610fb0565b9392505050565b60008060008060008060a0878903121561100757600080fd5b61101087610fb0565b955060208701359450604087013567ffffffffffffffff8082111561103457600080fd5b818901915089601f83011261104857600080fd5b81358181111561105757600080fd5b8a602082850101111561106957600080fd5b6020830196508095505050506060870135915061108860808801610fb0565b90509295509295509295565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126110bb57600080fd5b813567ffffffffffffffff808211156110d6576110d6611094565b604051601f8301601f19908116603f011681019082821181831017156110fe576110fe611094565b8160405283815286602085880101111561111757600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080600080600060a0868803121561114f57600080fd5b61115886610fb0565b945061116660208701610fb0565b93506040860135925060608601359150608086013567ffffffffffffffff81111561119057600080fd5b61119c888289016110aa565b9150509295509295909350565b600080600080608085870312156111bf57600080fd5b6111c885610fb0565b935060208501359250604085013567ffffffffffffffff8111156111eb57600080fd5b6111f7878288016110aa565b949793965093946060013593505050565b60006020828403121561121a57600080fd5b81358015158114610fe757600080fd5b60006020828403121561123c57600080fd5b5051919050565b60005b8381101561125e578181015183820152602001611246565b50506000910152565b6000815180845261127f816020860160208601611243565b601f01601f19169290920160200192915050565b8481528360208201528260408201526080606082015260006112b86080830184611267565b9695505050505050565b6001600160a01b03868116825285166020820152604081018490526060810183905260a0608082018190526000906112fc90830184611267565b979650505050505050565b60008251611319818460208701611243565b9190910192915050565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b60608201526080019056fea26469706673582212201d1fd6426d1d25f7cacf2c0e55be66ee42a8f5ed274ad6ab7d2e0197bf787f4264736f6c634300081000330000000000000000000000005300000000000000000000000000000000000000", + "r": "0x7dbbf86001584ba1bac036d88d22b4e4c34b6a1bb2da8f0430e7cec61a30baba", + "s": "0x7b1252551e123cf2970443a639dff9705d738d5d38ce48129e087ed9cc1d753d", + "v": "0x104ec4", + "hash": "0x8c0a3963c0415a5fa22a09346378cc1f88f528cc97ada9279715d118ca4cdc5c", + "blockHash": "0x926c9f98ddba6f2e18efbdf0fd3df5143af7982a7033e3b7b34e1afd5fcb5008", + "blockNumber": "0x2", + "transactionIndex": "0x1", + "from": "0xf9062b8a30e0d7722960e305049fa50b86ba6253" + }, + { + "type": "0x0", + "chainId": "0x82750", + "nonce": "0x2", + "gasPrice": "0xf4240", + "gas": "0xbfe3f", + "to": null, + "value": "0x0", + "input": "0x608060405260405162000ebf38038062000ebf833981016040819052620000269162000497565b828162000036828260006200004d565b50620000449050826200008a565b505050620005ca565b6200005883620000e5565b600082511180620000665750805b1562000085576200008383836200012760201b620001691760201c565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f620000b562000156565b604080516001600160a01b03928316815291841660208301520160405180910390a1620000e2816200018f565b50565b620000f08162000244565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606200014f838360405180606001604052806027815260200162000e9860279139620002f8565b9392505050565b60006200018060008051602062000e7883398151915260001b6200037760201b620001951760201c565b546001600160a01b0316919050565b6001600160a01b038116620001fa5760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b806200022360008051602062000e7883398151915260001b6200037760201b620001951760201c565b80546001600160a01b0319166001600160a01b039290921691909117905550565b6200025a816200037a60201b620001981760201c565b620002be5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401620001f1565b80620002237f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b6200037760201b620001951760201c565b6060600080856001600160a01b03168560405162000317919062000577565b600060405180830381855af49150503d806000811462000354576040519150601f19603f3d011682016040523d82523d6000602084013e62000359565b606091505b5090925090506200036d8683838762000389565b9695505050505050565b90565b6001600160a01b03163b151590565b60608315620003fd578251600003620003f5576001600160a01b0385163b620003f55760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401620001f1565b508162000409565b62000409838362000411565b949350505050565b815115620004225781518083602001fd5b8060405162461bcd60e51b8152600401620001f1919062000595565b80516001600160a01b03811681146200045657600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b838110156200048e57818101518382015260200162000474565b50506000910152565b600080600060608486031215620004ad57600080fd5b620004b8846200043e565b9250620004c8602085016200043e565b60408501519092506001600160401b0380821115620004e657600080fd5b818601915086601f830112620004fb57600080fd5b8151818111156200051057620005106200045b565b604051601f8201601f19908116603f011681019083821181831017156200053b576200053b6200045b565b816040528281528960208487010111156200055557600080fd5b6200056883602083016020880162000471565b80955050505050509250925092565b600082516200058b81846020870162000471565b9190910192915050565b6020815260008251806020840152620005b681604085016020870162000471565b601f01601f19169190910160400192915050565b61089e80620005da6000396000f3fe60806040523661001357610011610017565b005b6100115b61001f6101a7565b6001600160a01b0316330361015f5760606001600160e01b0319600035166364d3180d60e11b810161005a576100536101da565b9150610157565b63587086bd60e11b6001600160e01b031982160161007a57610053610231565b63070d7c6960e41b6001600160e01b031982160161009a57610053610277565b621eb96f60e61b6001600160e01b03198216016100b9576100536102a8565b63a39f25e560e01b6001600160e01b03198216016100d9576100536102e8565b60405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b815160208301f35b6101676102fc565b565b606061018e83836040518060600160405280602781526020016108426027913961030c565b9392505050565b90565b6001600160a01b03163b151590565b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b60606101e4610384565b60006101f33660048184610695565b81019061020091906106db565b905061021d8160405180602001604052806000815250600061038f565b505060408051602081019091526000815290565b60606000806102433660048184610695565b810190610250919061070c565b915091506102608282600161038f565b604051806020016040528060008152509250505090565b6060610281610384565b60006102903660048184610695565b81019061029d91906106db565b905061021d816103bb565b60606102b2610384565b60006102bc6101a7565b604080516001600160a01b03831660208201529192500160405160208183030381529060405291505090565b60606102f2610384565b60006102bc610412565b610167610307610412565b610421565b6060600080856001600160a01b03168560405161032991906107f2565b600060405180830381855af49150503d8060008114610364576040519150601f19603f3d011682016040523d82523d6000602084013e610369565b606091505b509150915061037a86838387610445565b9695505050505050565b341561016757600080fd5b610398836104c6565b6000825111806103a55750805b156103b6576103b48383610169565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6103e46101a7565b604080516001600160a01b03928316815291841660208301520160405180910390a161040f81610506565b50565b600061041c6105af565b905090565b3660008037600080366000845af43d6000803e808015610440573d6000f35b3d6000fd5b606083156104b45782516000036104ad576001600160a01b0385163b6104ad5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161014e565b50816104be565b6104be83836105d7565b949350505050565b6104cf81610601565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001600160a01b03811661056b5760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b606482015260840161014e565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc6101cb565b8151156105e75781518083602001fd5b8060405162461bcd60e51b815260040161014e919061080e565b6001600160a01b0381163b61066e5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b606482015260840161014e565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61058e565b600080858511156106a557600080fd5b838611156106b257600080fd5b5050820193919092039150565b80356001600160a01b03811681146106d657600080fd5b919050565b6000602082840312156106ed57600080fd5b61018e826106bf565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561071f57600080fd5b610728836106bf565b9150602083013567ffffffffffffffff8082111561074557600080fd5b818501915085601f83011261075957600080fd5b81358181111561076b5761076b6106f6565b604051601f8201601f19908116603f01168101908382118183101715610793576107936106f6565b816040528281528860208487010111156107ac57600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b60005b838110156107e95781810151838201526020016107d1565b50506000910152565b600082516108048184602087016107ce565b9190910192915050565b602081526000825180602084015261082d8160408501602087016107ce565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220e4b32c109fd08ccf9742c7e09ffa8cda2bad608f5379698a7c1f93a339aee46b64736f6c63430008100033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564000000000000000000000000485149079c421f9e4c465276bbabb2fe0748d138000000000000000000000000a76acf000c890b0dd7aeef57627d9899f955d02600000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000", + "r": "0xbc8ffe69439f93f6d637c9aa587ac88206d1eada667b1af598d0d03b265c9b8d", + "s": "0x640a76c35465afc306a53c21c236a8e2beac1e91df014059d06d41e0548de0ce", + "v": "0x104ec4", + "hash": "0xced82475ea905f72d0cb7ed5731aa1c801d62249a92fbad6724dd3f223b83e96", + "blockHash": "0x926c9f98ddba6f2e18efbdf0fd3df5143af7982a7033e3b7b34e1afd5fcb5008", + "blockNumber": "0x2", + "transactionIndex": "0x2", + "from": "0xf9062b8a30e0d7722960e305049fa50b86ba6253" + }, + { + "type": "0x0", + "chainId": "0x82750", + "nonce": "0x3", + "gasPrice": "0xf4240", + "gas": "0x13b00a", + "to": null, + "value": "0x0", + "input": "0x608060405234801561001057600080fd5b5061001961001e565b6100dd565b600054610100900460ff161561008a5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff908116146100db576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b611084806100ec6000396000f3fe60806040526004361061009c5760003560e01c8063797594b011610064578063797594b01461012d5780638da5cb5b1461014d578063c0c53b8b1461016b578063c7cdea371461018b578063f2fde38b1461019e578063f887ea40146101be57600080fd5b8063232e8748146100a15780632fcc29fa146100b65780633cb747bf146100c95780636dc2418314610105578063715018a614610118575b600080fd5b6100b46100af366004610bb2565b6101de565b005b6100b46100c4366004610c51565b610483565b3480156100d557600080fd5b506099546100e9906001600160a01b031681565b6040516001600160a01b03909116815260200160405180910390f35b6100b4610113366004610cf5565b6104c1565b34801561012457600080fd5b506100b46104d3565b34801561013957600080fd5b506097546100e9906001600160a01b031681565b34801561015957600080fd5b506065546001600160a01b03166100e9565b34801561017757600080fd5b506100b4610186366004610d99565b6104e7565b6100b4610199366004610de4565b610649565b3480156101aa57600080fd5b506100b46101b9366004610e06565b610659565b3480156101ca57600080fd5b506098546100e9906001600160a01b031681565b6099546001600160a01b031633811461023e5760405162461bcd60e51b815260206004820152601760248201527f6f6e6c79206d657373656e6765722063616e2063616c6c00000000000000000060448201526064015b60405180910390fd5b806001600160a01b0316636e296e456040518163ffffffff1660e01b8152600401602060405180830381865afa15801561027c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102a09190610e2a565b6097546001600160a01b039081169116146102fd5760405162461bcd60e51b815260206004820152601860248201527f6f6e6c792063616c6c20627920636f756e7465727061727400000000000000006044820152606401610235565b6103056106d2565b8334146103495760405162461bcd60e51b81526020600482015260126024820152710dae6ce5cecc2d8eaca40dad2e6dac2e8c6d60731b6044820152606401610235565b6000856001600160a01b03168560405160006040518083038185875af1925050503d8060008114610396576040519150601f19603f3d011682016040523d82523d6000602084013e61039b565b606091505b50509050806103e25760405162461bcd60e51b8152602060048201526013602482015272115512081d1c985b9cd9995c8819985a5b1959606a1b6044820152606401610235565b6104228685858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061072b92505050565b856001600160a01b0316876001600160a01b03167f9e86c356e14e24e26e3ce769bf8b87de38e0faa0ed0ca946fa09659aa606bd2d87878760405161046993929190610e47565b60405180910390a35061047b60018055565b505050505050565b6104bc838360005b6040519080825280601f01601f1916602001820160405280156104b5576020820181803683370190505b50846107ab565b505050565b6104cd848484846107ab565b50505050565b6104db610930565b6104e5600061098a565b565b600054610100900460ff16158080156105075750600054600160ff909116105b806105215750303b158015610521575060005460ff166001145b6105845760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610235565b6000805460ff1916600117905580156105a7576000805461ff0019166101001790555b6001600160a01b0383166105f35760405162461bcd60e51b81526020600482015260136024820152727a65726f20726f75746572206164647265737360681b6044820152606401610235565b6105fe8484846109dc565b80156104cd576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a150505050565b6106553383600061048b565b5050565b610661610930565b6001600160a01b0381166106c65760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610235565b6106cf8161098a565b50565b6002600154036107245760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610235565b6002600155565b6000815111801561074657506000826001600160a01b03163b115b156106555760405163109b953160e01b81526001600160a01b0383169063109b953190610777908490600401610ecd565b600060405180830381600087803b15801561079157600080fd5b505af115801561047b573d6000803e3d6000fd5b60018055565b6107b36106d2565b600034116107f75760405162461bcd60e51b81526020600482015260116024820152700eed2e8d0c8e4c2ee40f4cae4de40cae8d607b1b6044820152606401610235565b60985433906001600160a01b031681900361082557828060200190518101906108209190610ee0565b935090505b60008186868660405160240161083e9493929190610f6d565b60408051601f198184030181529181526020820180516001600160e01b0316638eaac8a360e01b179052609954609754915163b2267a7b60e01b81529293506001600160a01b039081169263b2267a7b9234926108a6929116908a9087908a90600401610faa565b6000604051808303818588803b1580156108bf57600080fd5b505af11580156108d3573d6000803e3d6000fd5b5050505050856001600160a01b0316826001600160a01b03167fd8ed6eaa9a7a8980d7901e911fde6686810b989d3082182d1d3a3df6306ce20e878760405161091d929190610fe2565b60405180910390a350506104cd60018055565b6065546001600160a01b031633146104e55760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610235565b606580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b038316610a325760405162461bcd60e51b815260206004820152601860248201527f7a65726f20636f756e74657270617274206164647265737300000000000000006044820152606401610235565b6001600160a01b038116610a815760405162461bcd60e51b81526020600482015260166024820152757a65726f206d657373656e676572206164647265737360501b6044820152606401610235565b610a89610ae8565b610a91610b17565b609780546001600160a01b038086166001600160a01b0319928316179092556099805484841692169190911790558216156104bc57609880546001600160a01b0384166001600160a01b0319909116179055505050565b600054610100900460ff16610b0f5760405162461bcd60e51b815260040161023590611003565b6104e5610b46565b600054610100900460ff16610b3e5760405162461bcd60e51b815260040161023590611003565b6104e5610b6d565b600054610100900460ff166107a55760405162461bcd60e51b815260040161023590611003565b600054610100900460ff16610b945760405162461bcd60e51b815260040161023590611003565b6104e53361098a565b6001600160a01b03811681146106cf57600080fd5b600080600080600060808688031215610bca57600080fd5b8535610bd581610b9d565b94506020860135610be581610b9d565b935060408601359250606086013567ffffffffffffffff80821115610c0957600080fd5b818801915088601f830112610c1d57600080fd5b813581811115610c2c57600080fd5b896020828501011115610c3e57600080fd5b9699959850939650602001949392505050565b600080600060608486031215610c6657600080fd5b8335610c7181610b9d565b95602085013595506040909401359392505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715610cc557610cc5610c86565b604052919050565b600067ffffffffffffffff821115610ce757610ce7610c86565b50601f01601f191660200190565b60008060008060808587031215610d0b57600080fd5b8435610d1681610b9d565b935060208501359250604085013567ffffffffffffffff811115610d3957600080fd5b8501601f81018713610d4a57600080fd5b8035610d5d610d5882610ccd565b610c9c565b818152886020838501011115610d7257600080fd5b81602084016020830137600091810160200191909152949793965093946060013593505050565b600080600060608486031215610dae57600080fd5b8335610db981610b9d565b92506020840135610dc981610b9d565b91506040840135610dd981610b9d565b809150509250925092565b60008060408385031215610df757600080fd5b50508035926020909101359150565b600060208284031215610e1857600080fd5b8135610e2381610b9d565b9392505050565b600060208284031215610e3c57600080fd5b8151610e2381610b9d565b83815260406020820152816040820152818360608301376000818301606090810191909152601f909201601f1916010192915050565b60005b83811015610e98578181015183820152602001610e80565b50506000910152565b60008151808452610eb9816020860160208601610e7d565b601f01601f19169290920160200192915050565b602081526000610e236020830184610ea1565b60008060408385031215610ef357600080fd5b8251610efe81610b9d565b602084015190925067ffffffffffffffff811115610f1b57600080fd5b8301601f81018513610f2c57600080fd5b8051610f3a610d5882610ccd565b818152866020838501011115610f4f57600080fd5b610f60826020830160208601610e7d565b8093505050509250929050565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090610fa090830184610ea1565b9695505050505050565b60018060a01b0385168152836020820152608060408201526000610fd16080830185610ea1565b905082606083015295945050505050565b828152604060208201526000610ffb6040830184610ea1565b949350505050565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b60608201526080019056fea2646970667358221220bd478bc881078784da38133276c5f3aabfefdfe853fb6f4c860c7867832c406964736f6c63430008100033", + "r": "0x4324a13931bf08b052e436da7dc738bfd9c92aa688db2a099ee00cf047a87d19", + "s": "0x1fe9c574fc959f044c98ea4cbb54ecee8bed35eaf9027df9732ef65d318ba7e7", + "v": "0x104ec3", + "hash": "0x8708015dabe66550e68e17dcdb5bc78ad2fa4d28927749aa51101bc8dffc0c12", + "blockHash": "0x926c9f98ddba6f2e18efbdf0fd3df5143af7982a7033e3b7b34e1afd5fcb5008", + "blockNumber": "0x2", + "transactionIndex": "0x3", + "from": "0xf9062b8a30e0d7722960e305049fa50b86ba6253" + }, + { + "type": "0x0", + "chainId": "0x82750", + "nonce": "0x4", + "gasPrice": "0xf4240", + "gas": "0xbfe3f", + "to": null, + "value": "0x0", + "input": "0x608060405260405162000ebf38038062000ebf833981016040819052620000269162000497565b828162000036828260006200004d565b50620000449050826200008a565b505050620005ca565b6200005883620000e5565b600082511180620000665750805b1562000085576200008383836200012760201b620001691760201c565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f620000b562000156565b604080516001600160a01b03928316815291841660208301520160405180910390a1620000e2816200018f565b50565b620000f08162000244565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606200014f838360405180606001604052806027815260200162000e9860279139620002f8565b9392505050565b60006200018060008051602062000e7883398151915260001b6200037760201b620001951760201c565b546001600160a01b0316919050565b6001600160a01b038116620001fa5760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b806200022360008051602062000e7883398151915260001b6200037760201b620001951760201c565b80546001600160a01b0319166001600160a01b039290921691909117905550565b6200025a816200037a60201b620001981760201c565b620002be5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401620001f1565b80620002237f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b6200037760201b620001951760201c565b6060600080856001600160a01b03168560405162000317919062000577565b600060405180830381855af49150503d806000811462000354576040519150601f19603f3d011682016040523d82523d6000602084013e62000359565b606091505b5090925090506200036d8683838762000389565b9695505050505050565b90565b6001600160a01b03163b151590565b60608315620003fd578251600003620003f5576001600160a01b0385163b620003f55760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401620001f1565b508162000409565b62000409838362000411565b949350505050565b815115620004225781518083602001fd5b8060405162461bcd60e51b8152600401620001f1919062000595565b80516001600160a01b03811681146200045657600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b838110156200048e57818101518382015260200162000474565b50506000910152565b600080600060608486031215620004ad57600080fd5b620004b8846200043e565b9250620004c8602085016200043e565b60408501519092506001600160401b0380821115620004e657600080fd5b818601915086601f830112620004fb57600080fd5b8151818111156200051057620005106200045b565b604051601f8201601f19908116603f011681019083821181831017156200053b576200053b6200045b565b816040528281528960208487010111156200055557600080fd5b6200056883602083016020880162000471565b80955050505050509250925092565b600082516200058b81846020870162000471565b9190910192915050565b6020815260008251806020840152620005b681604085016020870162000471565b601f01601f19169190910160400192915050565b61089e80620005da6000396000f3fe60806040523661001357610011610017565b005b6100115b61001f6101a7565b6001600160a01b0316330361015f5760606001600160e01b0319600035166364d3180d60e11b810161005a576100536101da565b9150610157565b63587086bd60e11b6001600160e01b031982160161007a57610053610231565b63070d7c6960e41b6001600160e01b031982160161009a57610053610277565b621eb96f60e61b6001600160e01b03198216016100b9576100536102a8565b63a39f25e560e01b6001600160e01b03198216016100d9576100536102e8565b60405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b815160208301f35b6101676102fc565b565b606061018e83836040518060600160405280602781526020016108426027913961030c565b9392505050565b90565b6001600160a01b03163b151590565b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b60606101e4610384565b60006101f33660048184610695565b81019061020091906106db565b905061021d8160405180602001604052806000815250600061038f565b505060408051602081019091526000815290565b60606000806102433660048184610695565b810190610250919061070c565b915091506102608282600161038f565b604051806020016040528060008152509250505090565b6060610281610384565b60006102903660048184610695565b81019061029d91906106db565b905061021d816103bb565b60606102b2610384565b60006102bc6101a7565b604080516001600160a01b03831660208201529192500160405160208183030381529060405291505090565b60606102f2610384565b60006102bc610412565b610167610307610412565b610421565b6060600080856001600160a01b03168560405161032991906107f2565b600060405180830381855af49150503d8060008114610364576040519150601f19603f3d011682016040523d82523d6000602084013e610369565b606091505b509150915061037a86838387610445565b9695505050505050565b341561016757600080fd5b610398836104c6565b6000825111806103a55750805b156103b6576103b48383610169565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6103e46101a7565b604080516001600160a01b03928316815291841660208301520160405180910390a161040f81610506565b50565b600061041c6105af565b905090565b3660008037600080366000845af43d6000803e808015610440573d6000f35b3d6000fd5b606083156104b45782516000036104ad576001600160a01b0385163b6104ad5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161014e565b50816104be565b6104be83836105d7565b949350505050565b6104cf81610601565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001600160a01b03811661056b5760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b606482015260840161014e565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc6101cb565b8151156105e75781518083602001fd5b8060405162461bcd60e51b815260040161014e919061080e565b6001600160a01b0381163b61066e5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b606482015260840161014e565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61058e565b600080858511156106a557600080fd5b838611156106b257600080fd5b5050820193919092039150565b80356001600160a01b03811681146106d657600080fd5b919050565b6000602082840312156106ed57600080fd5b61018e826106bf565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561071f57600080fd5b610728836106bf565b9150602083013567ffffffffffffffff8082111561074557600080fd5b818501915085601f83011261075957600080fd5b81358181111561076b5761076b6106f6565b604051601f8201601f19908116603f01168101908382118183101715610793576107936106f6565b816040528281528860208487010111156107ac57600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b60005b838110156107e95781810151838201526020016107d1565b50506000910152565b600082516108048184602087016107ce565b9190910192915050565b602081526000825180602084015261082d8160408501602087016107ce565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220e4b32c109fd08ccf9742c7e09ffa8cda2bad608f5379698a7c1f93a339aee46b64736f6c63430008100033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564000000000000000000000000e0a0509a66c509f55c85a20eb8c60676135081f7000000000000000000000000a76acf000c890b0dd7aeef57627d9899f955d02600000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000", + "r": "0x1822a514b1adb6239f4f76d583c23d1d0a282fa2bc8ff3bac1e03f65ffe75feb", + "s": "0x78fa148529b21c5656327bbb2b343adc1422aceba838c38e781bd2ac42a87de0", + "v": "0x104ec3", + "hash": "0xf1505df71efbf7c12e1f48f4d17675e39d9797b1cac73ccbc6b610481313e750", + "blockHash": "0x926c9f98ddba6f2e18efbdf0fd3df5143af7982a7033e3b7b34e1afd5fcb5008", + "blockNumber": "0x2", + "transactionIndex": "0x4", + "from": "0xf9062b8a30e0d7722960e305049fa50b86ba6253" + }, + { + "type": "0x0", + "chainId": "0x82750", + "nonce": "0x5", + "gasPrice": "0xf4240", + "gas": "0x1c05cb", + "to": null, + "value": "0x0", + "input": "0x60c06040523480156200001157600080fd5b50604051620019db380380620019db833981016040819052620000349162000134565b6200003e62000056565b6001600160a01b0391821660a052166080526200016c565b600054610100900460ff1615620000c35760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff9081161462000115576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b80516001600160a01b03811681146200012f57600080fd5b919050565b600080604083850312156200014857600080fd5b620001538362000117565b9150620001636020840162000117565b90509250929050565b60805160a051611819620001c26000396000818160f40152818161028e01528181610322015281816105bc01526109ca0152600081816101bb015281816102c2015281816105470152610ae001526118196000f3fe6080604052600436106100ec5760003560e01c80638da5cb5b1161008a578063c0c53b8b11610059578063c0c53b8b146102e4578063c676ad2914610304578063f2fde38b14610344578063f887ea401461036457600080fd5b80638da5cb5b1461024b578063a93a4af914610269578063ad5c46481461027c578063b32d8c65146102b057600080fd5b80636c07ea43116100c65780636c07ea43146101f0578063715018a614610203578063797594b0146102185780638431f5c11461023857600080fd5b80633cb747bf1461016157806354bbd59c1461019d578063575361b6146101dd57600080fd5b3661015c57337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03161461015a5760405162461bcd60e51b81526020600482015260096024820152680dedcd8f240ae8aa8960bb1b60448201526064015b60405180910390fd5b005b600080fd5b34801561016d57600080fd5b50609954610181906001600160a01b031681565b6040516001600160a01b03909116815260200160405180910390f35b3480156101a957600080fd5b506101816101b8366004611295565b507f000000000000000000000000000000000000000000000000000000000000000090565b61015a6101eb366004611302565b610384565b61015a6101fe36600461137d565b6103d0565b34801561020f57600080fd5b5061015a61040f565b34801561022457600080fd5b50609754610181906001600160a01b031681565b61015a6102463660046113b2565b610423565b34801561025757600080fd5b506065546001600160a01b0316610181565b61015a61027736600461144a565b61078b565b34801561028857600080fd5b506101817f000000000000000000000000000000000000000000000000000000000000000081565b3480156102bc57600080fd5b506101817f000000000000000000000000000000000000000000000000000000000000000081565b3480156102f057600080fd5b5061015a6102ff366004611490565b61079e565b34801561031057600080fd5b5061018161031f366004611295565b507f000000000000000000000000000000000000000000000000000000000000000090565b34801561035057600080fd5b5061015a61035f366004611295565b610900565b34801561037057600080fd5b50609854610181906001600160a01b031681565b6103c886868686868080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250889250610979915050565b505050505050565b61040a83338460005b6040519080825280601f01601f191660200182016040528015610403576020820181803683370190505b5085610979565b505050565b610417610c36565b6104216000610c90565b565b6099546001600160a01b031633811461047e5760405162461bcd60e51b815260206004820152601760248201527f6f6e6c79206d657373656e6765722063616e2063616c6c0000000000000000006044820152606401610151565b806001600160a01b0316636e296e456040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104e091906114f1565b6097546001600160a01b0390811691161461053d5760405162461bcd60e51b815260206004820152601860248201527f6f6e6c792063616c6c20627920636f756e7465727061727400000000000000006044820152606401610151565b610545610ce2565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316886001600160a01b0316146105ba5760405162461bcd60e51b81526020600482015260116024820152700d86240e8ded6cadc40dcdee840ae8aa89607b1b6044820152606401610151565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316876001600160a01b03161461062f5760405162461bcd60e51b81526020600482015260116024820152700d86440e8ded6cadc40dcdee840ae8aa89607b1b6044820152606401610151565b3484146106735760405162461bcd60e51b81526020600482015260126024820152710dae6ce5cecc2d8eaca40dad2e6dac2e8c6d60731b6044820152606401610151565b866001600160a01b031663d0e30db0856040518263ffffffff1660e01b81526004016000604051808303818588803b1580156106ae57600080fd5b505af11580156106c2573d6000803e3d6000fd5b506106dd935050506001600160a01b03891690508686610d3b565b61071d8584848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610d9e92505050565b856001600160a01b0316876001600160a01b0316896001600160a01b03167f165ba69f6ab40c50cade6f65431801e5f9c7d7830b7545391920db039133ba3488888888604051610770949392919061150e565b60405180910390a461078160018055565b5050505050505050565b61079884848460006103d9565b50505050565b600054610100900460ff16158080156107be5750600054600160ff909116105b806107d85750303b1580156107d8575060005460ff166001145b61083b5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610151565b6000805460ff19166001179055801561085e576000805461ff0019166101001790555b6001600160a01b0383166108aa5760405162461bcd60e51b81526020600482015260136024820152727a65726f20726f75746572206164647265737360681b6044820152606401610151565b6108b5848484610e22565b8015610798576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a150505050565b610908610c36565b6001600160a01b03811661096d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610151565b61097681610c90565b50565b610981610ce2565b600083116109c85760405162461bcd60e51b81526020600482015260146024820152731dda5d1a191c985dc81e995c9bc8185b5bdd5b9d60621b6044820152606401610151565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316856001600160a01b031614610a405760405162461bcd60e51b81526020600482015260146024820152731bdb9b1e4815d15512081a5cc8185b1b1bddd95960621b6044820152606401610151565b60985433906001600160a01b0316819003610a6e5782806020019051810190610a69919061157a565b935090505b610a836001600160a01b038716823087610f2e565b604051632e1a7d4d60e01b8152600481018590526001600160a01b03871690632e1a7d4d90602401600060405180830381600087803b158015610ac557600080fd5b505af1158015610ad9573d6000803e3d6000fd5b50506040517f0000000000000000000000000000000000000000000000000000000000000000925060009150610b1d9083908a9086908b908b908b90602401611669565b60408051601f198184030181529190526020810180516001600160e01b031663084bd13b60e41b1790526099549091506001600160a01b031663b2267a7b610b6534896116b8565b6097546040516001600160e01b031960e085901b168152610b98916001600160a01b0316908b9087908b906004016116df565b6000604051808303818588803b158015610bb157600080fd5b505af1158015610bc5573d6000803e3d6000fd5b5050505050826001600160a01b0316886001600160a01b0316836001600160a01b03167fd8d3a3f4ab95694bef40475997598bcf8acd3ed9617a4c1013795429414c27e88a8a8a604051610c1b93929190611717565b60405180910390a4505050610c2f60018055565b5050505050565b6065546001600160a01b031633146104215760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610151565b606580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600260015403610d345760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610151565b6002600155565b6040516001600160a01b03831660248201526044810182905261040a90849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152610f66565b60008151118015610db957506000826001600160a01b03163b115b15610e185760405163109b953160e01b81526001600160a01b0383169063109b953190610dea908490600401611747565b600060405180830381600087803b158015610e0457600080fd5b505af11580156103c8573d6000803e3d6000fd5b5050565b60018055565b6001600160a01b038316610e785760405162461bcd60e51b815260206004820152601860248201527f7a65726f20636f756e74657270617274206164647265737300000000000000006044820152606401610151565b6001600160a01b038116610ec75760405162461bcd60e51b81526020600482015260166024820152757a65726f206d657373656e676572206164647265737360501b6044820152606401610151565b610ecf61103b565b610ed761106a565b609780546001600160a01b038086166001600160a01b03199283161790925560998054848416921691909117905582161561040a57609880546001600160a01b0384166001600160a01b0319909116179055505050565b6040516001600160a01b03808516602483015283166044820152606481018290526107989085906323b872dd60e01b90608401610d67565b6000610fbb826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166110999092919063ffffffff16565b9050805160001480610fdc575080806020019051810190610fdc919061175a565b61040a5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610151565b600054610100900460ff166110625760405162461bcd60e51b81526004016101519061177c565b6104216110b0565b600054610100900460ff166110915760405162461bcd60e51b81526004016101519061177c565b6104216110d7565b60606110a88484600085611107565b949350505050565b600054610100900460ff16610e1c5760405162461bcd60e51b81526004016101519061177c565b600054610100900460ff166110fe5760405162461bcd60e51b81526004016101519061177c565b61042133610c90565b6060824710156111685760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610151565b600080866001600160a01b0316858760405161118491906117c7565b60006040518083038185875af1925050503d80600081146111c1576040519150601f19603f3d011682016040523d82523d6000602084013e6111c6565b606091505b50915091506111d7878383876111e2565b979650505050505050565b6060831561125157825160000361124a576001600160a01b0385163b61124a5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610151565b50816110a8565b6110a883838151156112665781518083602001fd5b8060405162461bcd60e51b81526004016101519190611747565b6001600160a01b038116811461097657600080fd5b6000602082840312156112a757600080fd5b81356112b281611280565b9392505050565b60008083601f8401126112cb57600080fd5b50813567ffffffffffffffff8111156112e357600080fd5b6020830191508360208285010111156112fb57600080fd5b9250929050565b60008060008060008060a0878903121561131b57600080fd5b863561132681611280565b9550602087013561133681611280565b945060408701359350606087013567ffffffffffffffff81111561135957600080fd5b61136589828a016112b9565b979a9699509497949695608090950135949350505050565b60008060006060848603121561139257600080fd5b833561139d81611280565b95602085013595506040909401359392505050565b600080600080600080600060c0888a0312156113cd57600080fd5b87356113d881611280565b965060208801356113e881611280565b955060408801356113f881611280565b9450606088013561140881611280565b93506080880135925060a088013567ffffffffffffffff81111561142b57600080fd5b6114378a828b016112b9565b989b979a50959850939692959293505050565b6000806000806080858703121561146057600080fd5b843561146b81611280565b9350602085013561147b81611280565b93969395505050506040820135916060013590565b6000806000606084860312156114a557600080fd5b83356114b081611280565b925060208401356114c081611280565b915060408401356114d081611280565b809150509250925092565b634e487b7160e01b600052604160045260246000fd5b60006020828403121561150357600080fd5b81516112b281611280565b6001600160a01b0385168152602081018490526060604082018190528101829052818360808301376000818301608090810191909152601f909201601f191601019392505050565b60005b83811015611571578181015183820152602001611559565b50506000910152565b6000806040838503121561158d57600080fd5b825161159881611280565b602084015190925067ffffffffffffffff808211156115b657600080fd5b818501915085601f8301126115ca57600080fd5b8151818111156115dc576115dc6114db565b604051601f8201601f19908116603f01168101908382118183101715611604576116046114db565b8160405282815288602084870101111561161d57600080fd5b61162e836020830160208801611556565b80955050505050509250929050565b60008151808452611655816020860160208601611556565b601f01601f19169290920160200192915050565b6001600160a01b03878116825286811660208301528581166040830152841660608201526080810183905260c060a082018190526000906116ac9083018461163d565b98975050505050505050565b808201808211156116d957634e487b7160e01b600052601160045260246000fd5b92915050565b60018060a01b0385168152836020820152608060408201526000611706608083018561163d565b905082606083015295945050505050565b60018060a01b038416815282602082015260606040820152600061173e606083018461163d565b95945050505050565b6020815260006112b2602083018461163d565b60006020828403121561176c57600080fd5b815180151581146112b257600080fd5b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b600082516117d9818460208701611556565b919091019291505056fea264697066735822122000d73a90df84e6cbe91b3586f45b96f98c908a23e72e3f34b9f71d3c81befba664736f6c634300081000330000000000000000000000005300000000000000000000000000000000000004000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", + "r": "0xb1632b620e6b5cc806b11d9d0898853978d688ddab1e0ed639a4a65399b633c2", + "s": "0x25d60751b950ae8715ae5ea1aa4d26c1deb0bd37deda7168ea19b381b266ce11", + "v": "0x104ec4", + "hash": "0x33f4405571e8a5b88509f31425b846ac23ebb9d565293e7c05f72c4187552026", + "blockHash": "0x926c9f98ddba6f2e18efbdf0fd3df5143af7982a7033e3b7b34e1afd5fcb5008", + "blockNumber": "0x2", + "transactionIndex": "0x5", + "from": "0xf9062b8a30e0d7722960e305049fa50b86ba6253" + }, + { + "type": "0x0", + "chainId": "0x82750", + "nonce": "0x6", + "gasPrice": "0xf4240", + "gas": "0xbfe3f", + "to": null, + "value": "0x0", + "input": "0x608060405260405162000ebf38038062000ebf833981016040819052620000269162000497565b828162000036828260006200004d565b50620000449050826200008a565b505050620005ca565b6200005883620000e5565b600082511180620000665750805b1562000085576200008383836200012760201b620001691760201c565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f620000b562000156565b604080516001600160a01b03928316815291841660208301520160405180910390a1620000e2816200018f565b50565b620000f08162000244565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606200014f838360405180606001604052806027815260200162000e9860279139620002f8565b9392505050565b60006200018060008051602062000e7883398151915260001b6200037760201b620001951760201c565b546001600160a01b0316919050565b6001600160a01b038116620001fa5760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b806200022360008051602062000e7883398151915260001b6200037760201b620001951760201c565b80546001600160a01b0319166001600160a01b039290921691909117905550565b6200025a816200037a60201b620001981760201c565b620002be5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401620001f1565b80620002237f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b6200037760201b620001951760201c565b6060600080856001600160a01b03168560405162000317919062000577565b600060405180830381855af49150503d806000811462000354576040519150601f19603f3d011682016040523d82523d6000602084013e62000359565b606091505b5090925090506200036d8683838762000389565b9695505050505050565b90565b6001600160a01b03163b151590565b60608315620003fd578251600003620003f5576001600160a01b0385163b620003f55760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401620001f1565b508162000409565b62000409838362000411565b949350505050565b815115620004225781518083602001fd5b8060405162461bcd60e51b8152600401620001f1919062000595565b80516001600160a01b03811681146200045657600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b838110156200048e57818101518382015260200162000474565b50506000910152565b600080600060608486031215620004ad57600080fd5b620004b8846200043e565b9250620004c8602085016200043e565b60408501519092506001600160401b0380821115620004e657600080fd5b818601915086601f830112620004fb57600080fd5b8151818111156200051057620005106200045b565b604051601f8201601f19908116603f011681019083821181831017156200053b576200053b6200045b565b816040528281528960208487010111156200055557600080fd5b6200056883602083016020880162000471565b80955050505050509250925092565b600082516200058b81846020870162000471565b9190910192915050565b6020815260008251806020840152620005b681604085016020870162000471565b601f01601f19169190910160400192915050565b61089e80620005da6000396000f3fe60806040523661001357610011610017565b005b6100115b61001f6101a7565b6001600160a01b0316330361015f5760606001600160e01b0319600035166364d3180d60e11b810161005a576100536101da565b9150610157565b63587086bd60e11b6001600160e01b031982160161007a57610053610231565b63070d7c6960e41b6001600160e01b031982160161009a57610053610277565b621eb96f60e61b6001600160e01b03198216016100b9576100536102a8565b63a39f25e560e01b6001600160e01b03198216016100d9576100536102e8565b60405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b815160208301f35b6101676102fc565b565b606061018e83836040518060600160405280602781526020016108426027913961030c565b9392505050565b90565b6001600160a01b03163b151590565b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b60606101e4610384565b60006101f33660048184610695565b81019061020091906106db565b905061021d8160405180602001604052806000815250600061038f565b505060408051602081019091526000815290565b60606000806102433660048184610695565b810190610250919061070c565b915091506102608282600161038f565b604051806020016040528060008152509250505090565b6060610281610384565b60006102903660048184610695565b81019061029d91906106db565b905061021d816103bb565b60606102b2610384565b60006102bc6101a7565b604080516001600160a01b03831660208201529192500160405160208183030381529060405291505090565b60606102f2610384565b60006102bc610412565b610167610307610412565b610421565b6060600080856001600160a01b03168560405161032991906107f2565b600060405180830381855af49150503d8060008114610364576040519150601f19603f3d011682016040523d82523d6000602084013e610369565b606091505b509150915061037a86838387610445565b9695505050505050565b341561016757600080fd5b610398836104c6565b6000825111806103a55750805b156103b6576103b48383610169565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6103e46101a7565b604080516001600160a01b03928316815291841660208301520160405180910390a161040f81610506565b50565b600061041c6105af565b905090565b3660008037600080366000845af43d6000803e808015610440573d6000f35b3d6000fd5b606083156104b45782516000036104ad576001600160a01b0385163b6104ad5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161014e565b50816104be565b6104be83836105d7565b949350505050565b6104cf81610601565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001600160a01b03811661056b5760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b606482015260840161014e565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc6101cb565b8151156105e75781518083602001fd5b8060405162461bcd60e51b815260040161014e919061080e565b6001600160a01b0381163b61066e5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b606482015260840161014e565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61058e565b600080858511156106a557600080fd5b838611156106b257600080fd5b5050820193919092039150565b80356001600160a01b03811681146106d657600080fd5b919050565b6000602082840312156106ed57600080fd5b61018e826106bf565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561071f57600080fd5b610728836106bf565b9150602083013567ffffffffffffffff8082111561074557600080fd5b818501915085601f83011261075957600080fd5b81358181111561076b5761076b6106f6565b604051601f8201601f19908116603f01168101908382118183101715610793576107936106f6565b816040528281528860208487010111156107ac57600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b60005b838110156107e95781810151838201526020016107d1565b50506000910152565b600082516108048184602087016107ce565b9190910192915050565b602081526000825180602084015261082d8160408501602087016107ce565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220e4b32c109fd08ccf9742c7e09ffa8cda2bad608f5379698a7c1f93a339aee46b64736f6c63430008100033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c65640000000000000000000000004966c037d653e31db2c1f9727dd50dc679d51d65000000000000000000000000a76acf000c890b0dd7aeef57627d9899f955d02600000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000", + "r": "0xbfaa0b1dd7e5f72d865eb4b87702bd7e29b51f20da7792cd91d7946be431b71d", + "s": "0x2673edf66326f1f897abf6443375fb8b427caa6e37c7d2ece8d98d56e51d2cd3", + "v": "0x104ec4", + "hash": "0x9021d0900bd824774d2fa08d23a47d61a94d83563cfc81ca834b54bd690e0539", + "blockHash": "0x926c9f98ddba6f2e18efbdf0fd3df5143af7982a7033e3b7b34e1afd5fcb5008", + "blockNumber": "0x2", + "transactionIndex": "0x6", + "from": "0xf9062b8a30e0d7722960e305049fa50b86ba6253" + }, + { + "type": "0x0", + "chainId": "0x82750", + "nonce": "0x7", + "gasPrice": "0xf4240", + "gas": "0x1b8a85", + "to": null, + "value": "0x0", + "input": "0x608060405234801561001057600080fd5b5061001961001e565b6100dd565b600054610100900460ff161561008a5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff908116146100db576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6117ae806100ec6000396000f3fe6080604052600436106100dd5760003560e01c80638da5cb5b1161007f578063e77772fe11610059578063e77772fe14610218578063f2fde38b14610238578063f887ea4014610258578063f8c8765e1461027857600080fd5b80638da5cb5b146101c7578063a93a4af9146101e5578063c676ad29146101f857600080fd5b80636c07ea43116100bb5780636c07ea431461016c578063715018a61461017f578063797594b0146101945780638431f5c1146101b457600080fd5b80633cb747bf146100e257806354bbd59c1461011e578063575361b614610157575b600080fd5b3480156100ee57600080fd5b50609954610102906001600160a01b031681565b6040516001600160a01b03909116815260200160405180910390f35b34801561012a57600080fd5b50610102610139366004611126565b6001600160a01b03908116600090815260fb60205260409020541690565b61016a61016536600461114a565b610298565b005b61016a61017a3660046111f4565b6102e4565b34801561018b57600080fd5b5061016a610323565b3480156101a057600080fd5b50609754610102906001600160a01b031681565b61016a6101c2366004611298565b610337565b3480156101d357600080fd5b506065546001600160a01b0316610102565b61016a6101f336600461136b565b61078c565b34801561020457600080fd5b50610102610213366004611126565b61079f565b34801561022457600080fd5b5060fc54610102906001600160a01b031681565b34801561024457600080fd5b5061016a610253366004611126565b61081a565b34801561026457600080fd5b50609854610102906001600160a01b031681565b34801561028457600080fd5b5061016a6102933660046113b1565b610893565b6102dc86868686868080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250889250610a5d915050565b505050505050565b61031e83338460005b6040519080825280601f01601f191660200182016040528015610317576020820181803683370190505b5085610a5d565b505050565b61032b610cc1565b6103356000610d1b565b565b6099546001600160a01b03163381146103975760405162461bcd60e51b815260206004820152601760248201527f6f6e6c79206d657373656e6765722063616e2063616c6c00000000000000000060448201526064015b60405180910390fd5b806001600160a01b0316636e296e456040518163ffffffff1660e01b8152600401602060405180830381865afa1580156103d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103f9919061140d565b6097546001600160a01b039081169116146104565760405162461bcd60e51b815260206004820152601860248201527f6f6e6c792063616c6c20627920636f756e746572706172740000000000000000604482015260640161038e565b61045e610d6d565b34156104a05760405162461bcd60e51b81526020600482015260116024820152706e6f6e7a65726f206d73672e76616c756560781b604482015260640161038e565b6001600160a01b0387166104f65760405162461bcd60e51b815260206004820152601960248201527f746f6b656e20616464726573732063616e6e6f74206265203000000000000000604482015260640161038e565b60fc546040516361e98ca160e01b81523060048201526001600160a01b03898116602483015260009216906361e98ca190604401602060405180830381865afa158015610547573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061056b919061140d565b9050806001600160a01b0316876001600160a01b0316146105c25760405162461bcd60e51b81526020600482015260116024820152700d86440e8ded6cadc40dad2e6dac2e8c6d607b1b604482015260640161038e565b506000828060200190518101906105d9919061149b565b93509050606080821561060357848060200190518101906105fa91906114f1565b9250905061066b565b6001600160a01b03898116600090815260fb60205260409020548116908b16146106685760405162461bcd60e51b81526020600482015260166024820152750e8ded6cadc40dac2e0e0d2dcce40dad2e6dac2e8c6d60531b604482015260640161038e565b50835b6001600160a01b0389163b6106b2576001600160a01b03898116600090815260fb6020526040902080546001600160a01b031916918c169190911790556106b2828b610dc6565b6040516340c10f1960e01b81526001600160a01b038881166004830152602482018890528a16906340c10f1990604401600060405180830381600087803b1580156106fc57600080fd5b505af1158015610710573d6000803e3d6000fd5b5050505061071e8782610ecc565b876001600160a01b0316896001600160a01b03168b6001600160a01b03167f165ba69f6ab40c50cade6f65431801e5f9c7d7830b7545391920db039133ba348a8a8660405161076f93929190611577565b60405180910390a450505061078360018055565b50505050505050565b61079984848460006102ed565b50505050565b60fc546040516361e98ca160e01b81523060048201526001600160a01b03838116602483015260009216906361e98ca190604401602060405180830381865afa1580156107f0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610814919061140d565b92915050565b610822610cc1565b6001600160a01b0381166108875760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161038e565b61089081610d1b565b50565b600054610100900460ff16158080156108b35750600054600160ff909116105b806108cd5750303b1580156108cd575060005460ff166001145b6109305760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840161038e565b6000805460ff191660011790558015610953576000805461ff0019166101001790555b6001600160a01b03841661099f5760405162461bcd60e51b81526020600482015260136024820152727a65726f20726f75746572206164647265737360681b604482015260640161038e565b6109aa858585610f50565b6001600160a01b0382166109f55760405162461bcd60e51b81526020600482015260126024820152717a65726f20746f6b656e20666163746f727960701b604482015260640161038e565b60fc80546001600160a01b0319166001600160a01b0384161790558015610a56576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050565b610a65610d6d565b60008311610aac5760405162461bcd60e51b81526020600482015260146024820152731dda5d1a191c985dc81e995c9bc8185b5bdd5b9d60621b604482015260640161038e565b60985433906001600160a01b0316819003610ada5782806020019051810190610ad591906115a7565b935090505b6001600160a01b03808716600090815260fb60205260409020541680610b425760405162461bcd60e51b815260206004820152601960248201527f6e6f20636f72726573706f6e64696e67206c3120746f6b656e00000000000000604482015260640161038e565b604051632770a7eb60e21b81526001600160a01b03838116600483015260248201879052881690639dc29fac90604401600060405180830381600087803b158015610b8c57600080fd5b505af1158015610ba0573d6000803e3d6000fd5b505050506000818884898989604051602401610bc1969594939291906115c5565b60408051601f198184030181529181526020820180516001600160e01b031663084bd13b60e41b179052609954609754915163b2267a7b60e01b81529293506001600160a01b039081169263b2267a7b923492610c2a9291169060009087908b90600401611614565b6000604051808303818588803b158015610c4357600080fd5b505af1158015610c57573d6000803e3d6000fd5b5050505050826001600160a01b0316886001600160a01b0316836001600160a01b03167fd8d3a3f4ab95694bef40475997598bcf8acd3ed9617a4c1013795429414c27e88a8a8a604051610cad93929190611577565b60405180910390a4505050610a5660018055565b6065546001600160a01b031633146103355760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161038e565b606580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600260015403610dbf5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161038e565b6002600155565b60fc54604051637bdbcbbf60e01b81523060048201526001600160a01b0383811660248301526000921690637bdbcbbf906044016020604051808303816000875af1158015610e19573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e3d919061140d565b9050600080600085806020019051810190610e58919061164c565b925092509250836001600160a01b031663c820f146838584308a6040518663ffffffff1660e01b8152600401610e929594939291906116ca565b600060405180830381600087803b158015610eac57600080fd5b505af1158015610ec0573d6000803e3d6000fd5b50505050505050505050565b60008151118015610ee757506000826001600160a01b03163b115b15610f465760405163109b953160e01b81526001600160a01b0383169063109b953190610f1890849060040161171a565b600060405180830381600087803b158015610f3257600080fd5b505af11580156102dc573d6000803e3d6000fd5b5050565b60018055565b6001600160a01b038316610fa65760405162461bcd60e51b815260206004820152601860248201527f7a65726f20636f756e7465727061727420616464726573730000000000000000604482015260640161038e565b6001600160a01b038116610ff55760405162461bcd60e51b81526020600482015260166024820152757a65726f206d657373656e676572206164647265737360501b604482015260640161038e565b610ffd61105c565b61100561108b565b609780546001600160a01b038086166001600160a01b03199283161790925560998054848416921691909117905582161561031e57609880546001600160a01b0384166001600160a01b0319909116179055505050565b600054610100900460ff166110835760405162461bcd60e51b815260040161038e9061172d565b6103356110ba565b600054610100900460ff166110b25760405162461bcd60e51b815260040161038e9061172d565b6103356110e1565b600054610100900460ff16610f4a5760405162461bcd60e51b815260040161038e9061172d565b600054610100900460ff166111085760405162461bcd60e51b815260040161038e9061172d565b61033533610d1b565b6001600160a01b038116811461089057600080fd5b60006020828403121561113857600080fd5b813561114381611111565b9392505050565b60008060008060008060a0878903121561116357600080fd5b863561116e81611111565b9550602087013561117e81611111565b945060408701359350606087013567ffffffffffffffff808211156111a257600080fd5b818901915089601f8301126111b657600080fd5b8135818111156111c557600080fd5b8a60208285010111156111d757600080fd5b602083019550809450505050608087013590509295509295509295565b60008060006060848603121561120957600080fd5b833561121481611111565b95602085013595506040909401359392505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561126857611268611229565b604052919050565b600067ffffffffffffffff82111561128a5761128a611229565b50601f01601f191660200190565b60008060008060008060c087890312156112b157600080fd5b86356112bc81611111565b955060208701356112cc81611111565b945060408701356112dc81611111565b935060608701356112ec81611111565b92506080870135915060a087013567ffffffffffffffff81111561130f57600080fd5b8701601f8101891361132057600080fd5b803561133361132e82611270565b61123f565b8181528a602083850101111561134857600080fd5b816020840160208301376000602083830101528093505050509295509295509295565b6000806000806080858703121561138157600080fd5b843561138c81611111565b9350602085013561139c81611111565b93969395505050506040820135916060013590565b600080600080608085870312156113c757600080fd5b84356113d281611111565b935060208501356113e281611111565b925060408501356113f281611111565b9150606085013561140281611111565b939692955090935050565b60006020828403121561141f57600080fd5b815161114381611111565b60005b8381101561144557818101518382015260200161142d565b50506000910152565b600082601f83011261145f57600080fd5b815161146d61132e82611270565b81815284602083860101111561148257600080fd5b61149382602083016020870161142a565b949350505050565b600080604083850312156114ae57600080fd5b825180151581146114be57600080fd5b602084015190925067ffffffffffffffff8111156114db57600080fd5b6114e78582860161144e565b9150509250929050565b6000806040838503121561150457600080fd5b825167ffffffffffffffff8082111561151c57600080fd5b6115288683870161144e565b9350602085015191508082111561153e57600080fd5b506114e78582860161144e565b6000815180845261156381602086016020860161142a565b601f01601f19169290920160200192915050565b60018060a01b038416815282602082015260606040820152600061159e606083018461154b565b95945050505050565b600080604083850312156115ba57600080fd5b82516114be81611111565b6001600160a01b03878116825286811660208301528581166040830152841660608201526080810183905260c060a082018190526000906116089083018461154b565b98975050505050505050565b60018060a01b038516815283602082015260806040820152600061163b608083018561154b565b905082606083015295945050505050565b60008060006060848603121561166157600080fd5b835167ffffffffffffffff8082111561167957600080fd5b6116858783880161144e565b9450602086015191508082111561169b57600080fd5b506116a88682870161144e565b925050604084015160ff811681146116bf57600080fd5b809150509250925092565b60a0815260006116dd60a083018861154b565b82810360208401526116ef818861154b565b60ff96909616604084015250506001600160a01b039283166060820152911660809091015292915050565b602081526000611143602083018461154b565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b60608201526080019056fea264697066735822122096d2549a40a94f896f5eb9e16612157a0bcd53ae937d4778fa160d35202eef6d64736f6c63430008100033", + "r": "0xa980eeb7cd5d57f8903feac5e084147ce1d434a812bc65d7e467424d7e26b25c", + "s": "0x653fb5ba6d0942631a5ecd5b946ce8d6793f5072ddcfda6b208a17ffab5ef42b", + "v": "0x104ec4", + "hash": "0x2fb745d3973d8e26c6fb8ae706a515a5560d904f8ad2471ea0bab8ad9970e791", + "blockHash": "0x926c9f98ddba6f2e18efbdf0fd3df5143af7982a7033e3b7b34e1afd5fcb5008", + "blockNumber": "0x2", + "transactionIndex": "0x7", + "from": "0xf9062b8a30e0d7722960e305049fa50b86ba6253" + }, + { + "type": "0x0", + "chainId": "0x82750", + "nonce": "0x8", + "gasPrice": "0xf4240", + "gas": "0xbfe30", + "to": null, + "value": "0x0", + "input": "0x608060405260405162000ebf38038062000ebf833981016040819052620000269162000497565b828162000036828260006200004d565b50620000449050826200008a565b505050620005ca565b6200005883620000e5565b600082511180620000665750805b1562000085576200008383836200012760201b620001691760201c565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f620000b562000156565b604080516001600160a01b03928316815291841660208301520160405180910390a1620000e2816200018f565b50565b620000f08162000244565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606200014f838360405180606001604052806027815260200162000e9860279139620002f8565b9392505050565b60006200018060008051602062000e7883398151915260001b6200037760201b620001951760201c565b546001600160a01b0316919050565b6001600160a01b038116620001fa5760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b806200022360008051602062000e7883398151915260001b6200037760201b620001951760201c565b80546001600160a01b0319166001600160a01b039290921691909117905550565b6200025a816200037a60201b620001981760201c565b620002be5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401620001f1565b80620002237f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b6200037760201b620001951760201c565b6060600080856001600160a01b03168560405162000317919062000577565b600060405180830381855af49150503d806000811462000354576040519150601f19603f3d011682016040523d82523d6000602084013e62000359565b606091505b5090925090506200036d8683838762000389565b9695505050505050565b90565b6001600160a01b03163b151590565b60608315620003fd578251600003620003f5576001600160a01b0385163b620003f55760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401620001f1565b508162000409565b62000409838362000411565b949350505050565b815115620004225781518083602001fd5b8060405162461bcd60e51b8152600401620001f1919062000595565b80516001600160a01b03811681146200045657600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b838110156200048e57818101518382015260200162000474565b50506000910152565b600080600060608486031215620004ad57600080fd5b620004b8846200043e565b9250620004c8602085016200043e565b60408501519092506001600160401b0380821115620004e657600080fd5b818601915086601f830112620004fb57600080fd5b8151818111156200051057620005106200045b565b604051601f8201601f19908116603f011681019083821181831017156200053b576200053b6200045b565b816040528281528960208487010111156200055557600080fd5b6200056883602083016020880162000471565b80955050505050509250925092565b600082516200058b81846020870162000471565b9190910192915050565b6020815260008251806020840152620005b681604085016020870162000471565b601f01601f19169190910160400192915050565b61089e80620005da6000396000f3fe60806040523661001357610011610017565b005b6100115b61001f6101a7565b6001600160a01b0316330361015f5760606001600160e01b0319600035166364d3180d60e11b810161005a576100536101da565b9150610157565b63587086bd60e11b6001600160e01b031982160161007a57610053610231565b63070d7c6960e41b6001600160e01b031982160161009a57610053610277565b621eb96f60e61b6001600160e01b03198216016100b9576100536102a8565b63a39f25e560e01b6001600160e01b03198216016100d9576100536102e8565b60405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b815160208301f35b6101676102fc565b565b606061018e83836040518060600160405280602781526020016108426027913961030c565b9392505050565b90565b6001600160a01b03163b151590565b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b60606101e4610384565b60006101f33660048184610695565b81019061020091906106db565b905061021d8160405180602001604052806000815250600061038f565b505060408051602081019091526000815290565b60606000806102433660048184610695565b810190610250919061070c565b915091506102608282600161038f565b604051806020016040528060008152509250505090565b6060610281610384565b60006102903660048184610695565b81019061029d91906106db565b905061021d816103bb565b60606102b2610384565b60006102bc6101a7565b604080516001600160a01b03831660208201529192500160405160208183030381529060405291505090565b60606102f2610384565b60006102bc610412565b610167610307610412565b610421565b6060600080856001600160a01b03168560405161032991906107f2565b600060405180830381855af49150503d8060008114610364576040519150601f19603f3d011682016040523d82523d6000602084013e610369565b606091505b509150915061037a86838387610445565b9695505050505050565b341561016757600080fd5b610398836104c6565b6000825111806103a55750805b156103b6576103b48383610169565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6103e46101a7565b604080516001600160a01b03928316815291841660208301520160405180910390a161040f81610506565b50565b600061041c6105af565b905090565b3660008037600080366000845af43d6000803e808015610440573d6000f35b3d6000fd5b606083156104b45782516000036104ad576001600160a01b0385163b6104ad5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161014e565b50816104be565b6104be83836105d7565b949350505050565b6104cf81610601565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001600160a01b03811661056b5760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b606482015260840161014e565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc6101cb565b8151156105e75781518083602001fd5b8060405162461bcd60e51b815260040161014e919061080e565b6001600160a01b0381163b61066e5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b606482015260840161014e565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61058e565b600080858511156106a557600080fd5b838611156106b257600080fd5b5050820193919092039150565b80356001600160a01b03811681146106d657600080fd5b919050565b6000602082840312156106ed57600080fd5b61018e826106bf565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561071f57600080fd5b610728836106bf565b9150602083013567ffffffffffffffff8082111561074557600080fd5b818501915085601f83011261075957600080fd5b81358181111561076b5761076b6106f6565b604051601f8201601f19908116603f01168101908382118183101715610793576107936106f6565b816040528281528860208487010111156107ac57600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b60005b838110156107e95781810151838201526020016107d1565b50506000910152565b600082516108048184602087016107ce565b9190910192915050565b602081526000825180602084015261082d8160408501602087016107ce565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220e4b32c109fd08ccf9742c7e09ffa8cda2bad608f5379698a7c1f93a339aee46b64736f6c63430008100033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564000000000000000000000000caa86d504b7670f4bce0b323c2aaf7002cf6c478000000000000000000000000a76acf000c890b0dd7aeef57627d9899f955d02600000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000", + "r": "0x244d652ce57ad3807bed929eb40dd0f6bb910beee593b5a5321217d96d1ad2c6", + "s": "0x3c725bcbc0125e8f08fddc432399a133f31512475af06b2fbdaed6fd0addc971", + "v": "0x104ec3", + "hash": "0xaac223f86591581be57fc2296c6895a55d4f5488340e63577fa0b909e950747d", + "blockHash": "0x926c9f98ddba6f2e18efbdf0fd3df5143af7982a7033e3b7b34e1afd5fcb5008", + "blockNumber": "0x2", + "transactionIndex": "0x8", + "from": "0xf9062b8a30e0d7722960e305049fa50b86ba6253" + }, + { + "type": "0x0", + "chainId": "0x82750", + "nonce": "0x9", + "gasPrice": "0xf4240", + "gas": "0x1724c5", + "to": null, + "value": "0x0", + "input": "0x608060405234801561001057600080fd5b5061001961001e565b6100dd565b600054610100900460ff161561008a5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff908116146100db576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6113aa806100ec6000396000f3fe60806040526004361061012a5760003560e01c80636dc24183116100ab5780638da5cb5b1161006f5780638da5cb5b146102e5578063a93a4af914610303578063c676ad2914610316578063c7cdea3714610336578063ce8c3e0614610349578063f2fde38b1461036957600080fd5b80636dc2418314610259578063705b05b81461026c578063715018a6146102a25780638431f5c1146102b75780638c00ce73146102c557600080fd5b806354bbd59c116100f257806354bbd59c146101d3578063575361b6146101f35780635dfd5b9a14610206578063635c8637146102265780636c07ea431461024657600080fd5b8063232e87481461012f5780632fcc29fa146101445780633d1d31c71461015757806343c6674114610177578063485cc955146101b3575b600080fd5b61014261013d366004610d69565b610389565b005b610142610152366004610ddc565b6103cf565b34801561016357600080fd5b50610142610172366004610e11565b61040d565b34801561018357600080fd5b50610197610192366004610e11565b610467565b6040516001600160a01b03909116815260200160405180910390f35b3480156101bf57600080fd5b506101426101ce366004610e2e565b61049d565b3480156101df57600080fd5b506101976101ee366004610e11565b610661565b610142610201366004610f1e565b6106f7565b34801561021257600080fd5b50610142610221366004610e11565b6107e7565b34801561023257600080fd5b5061014261024136600461101b565b610841565b610142610254366004610ddc565b6109f9565b61014261026736600461107f565b610a33565b34801561027857600080fd5b50610197610287366004610e11565b6067602052600090815260409020546001600160a01b031681565b3480156102ae57600080fd5b50610142610b17565b61014261013d3660046110e0565b3480156102d157600080fd5b50606554610197906001600160a01b031681565b3480156102f157600080fd5b506033546001600160a01b0316610197565b610142610311366004611178565b610b2b565b34801561032257600080fd5b50610197610331366004610e11565b610b3e565b6101426103443660046111be565b610b77565b34801561035557600080fd5b50606654610197906001600160a01b031681565b34801561037557600080fd5b50610142610384366004610e11565b610b87565b60405162461bcd60e51b81526020600482015260166024820152751cda1bdd5b19081b995d995c8818994818d85b1b195960521b60448201526064015b60405180910390fd5b610408838360005b6040519080825280601f01601f191660200182016040528015610401576020820181803683370190505b5084610a33565b505050565b610415610c00565b606580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907fa1bfcc6dd729ad197a1180f44d5c12bcc630943df0874b9ed53da23165621b6a90600090a35050565b6001600160a01b038082166000908152606760205260408120549091168061049757506066546001600160a01b03165b92915050565b600054610100900460ff16158080156104bd5750600054600160ff909116105b806104d75750303b1580156104d7575060005460ff166001145b61053a5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016103c6565b6000805460ff19166001179055801561055d576000805461ff0019166101001790555b610565610c5a565b6001600160a01b038216156105be57606680546001600160a01b0319166001600160a01b0384169081179091556040516000907f2904fcae71038f87b116fd2875871e153722cabddd71de1b77473de263cd74d1908290a35b6001600160a01b0383161561061757606580546001600160a01b0319166001600160a01b0385169081179091556040516000907fa1bfcc6dd729ad197a1180f44d5c12bcc630943df0874b9ed53da23165621b6a908290a35b8015610408576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a1505050565b60008061066d83610467565b90506001600160a01b0381166106865750600092915050565b60405163152ef56760e21b81526001600160a01b0384811660048301528216906354bbd59c90602401602060405180830381865afa1580156106cc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106f091906111e0565b9392505050565b600061070286610467565b90506001600160a01b0381166107515760405162461bcd60e51b81526020600482015260146024820152736e6f206761746577617920617661696c61626c6560601b60448201526064016103c6565b60003384604051602001610766929190611243565b60408051601f1981840301815290829052632ba9b0db60e11b825291506001600160a01b0383169063575361b69034906107ac908b908b908b9088908b9060040161126f565b6000604051808303818588803b1580156107c557600080fd5b505af11580156107d9573d6000803e3d6000fd5b505050505050505050505050565b6107ef610c00565b606680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f2904fcae71038f87b116fd2875871e153722cabddd71de1b77473de263cd74d190600090a35050565b610849610c00565b805182511461088c5760405162461bcd60e51b815260206004820152600f60248201526e0d8cadccee8d040dad2e6dac2e8c6d608b1b60448201526064016103c6565b60005b8251811015610408576000606760008584815181106108b0576108b06112b4565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060009054906101000a90046001600160a01b03169050828281518110610900576109006112b4565b60200260200101516067600086858151811061091e5761091e6112b4565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555082828151811061097c5761097c6112b4565b60200260200101516001600160a01b0316816001600160a01b03168584815181106109a9576109a96112b4565b60200260200101516001600160a01b03167f0ead4808404683f66d413d788a768219ea9785c97889221193103841a5841eaf60405160405180910390a450806109f1816112ca565b91505061088f565b61040883338460005b6040519080825280601f01601f191660200182016040528015610a2c576020820181803683370190505b50856106f7565b6065546001600160a01b031680610a845760405162461bcd60e51b8152602060048201526015602482015274657468206761746577617920617661696c61626c6560581b60448201526064016103c6565b60003384604051602001610a99929190611243565b60408051601f1981840301815290829052636dc2418360e01b825291506001600160a01b03831690636dc24183903490610add908a908a9087908a906004016112f1565b6000604051808303818588803b158015610af657600080fd5b505af1158015610b0a573d6000803e3d6000fd5b5050505050505050505050565b610b1f610c00565b610b296000610c89565b565b610b388484846000610a02565b50505050565b60405162461bcd60e51b815260206004820152600b60248201526a1d5b9cdd5c1c1bdc9d195960aa1b60448201526000906064016103c6565b610b83338360006103d7565b5050565b610b8f610c00565b6001600160a01b038116610bf45760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016103c6565b610bfd81610c89565b50565b6033546001600160a01b03163314610b295760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016103c6565b600054610100900460ff16610c815760405162461bcd60e51b81526004016103c690611329565b610b29610cdb565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff16610d025760405162461bcd60e51b81526004016103c690611329565b610b2933610c89565b6001600160a01b0381168114610bfd57600080fd5b60008083601f840112610d3257600080fd5b50813567ffffffffffffffff811115610d4a57600080fd5b602083019150836020828501011115610d6257600080fd5b9250929050565b600080600080600060808688031215610d8157600080fd5b8535610d8c81610d0b565b94506020860135610d9c81610d0b565b935060408601359250606086013567ffffffffffffffff811115610dbf57600080fd5b610dcb88828901610d20565b969995985093965092949392505050565b600080600060608486031215610df157600080fd5b8335610dfc81610d0b565b95602085013595506040909401359392505050565b600060208284031215610e2357600080fd5b81356106f081610d0b565b60008060408385031215610e4157600080fd5b8235610e4c81610d0b565b91506020830135610e5c81610d0b565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715610ea657610ea6610e67565b604052919050565b600082601f830112610ebf57600080fd5b813567ffffffffffffffff811115610ed957610ed9610e67565b610eec601f8201601f1916602001610e7d565b818152846020838601011115610f0157600080fd5b816020850160208301376000918101602001919091529392505050565b600080600080600060a08688031215610f3657600080fd5b8535610f4181610d0b565b94506020860135610f5181610d0b565b935060408601359250606086013567ffffffffffffffff811115610f7457600080fd5b610f8088828901610eae565b95989497509295608001359392505050565b600082601f830112610fa357600080fd5b8135602067ffffffffffffffff821115610fbf57610fbf610e67565b8160051b610fce828201610e7d565b9283528481018201928281019087851115610fe857600080fd5b83870192505b8483101561101057823561100181610d0b565b82529183019190830190610fee565b979650505050505050565b6000806040838503121561102e57600080fd5b823567ffffffffffffffff8082111561104657600080fd5b61105286838701610f92565b9350602085013591508082111561106857600080fd5b5061107585828601610f92565b9150509250929050565b6000806000806080858703121561109557600080fd5b84356110a081610d0b565b935060208501359250604085013567ffffffffffffffff8111156110c357600080fd5b6110cf87828801610eae565b949793965093946060013593505050565b600080600080600080600060c0888a0312156110fb57600080fd5b873561110681610d0b565b9650602088013561111681610d0b565b9550604088013561112681610d0b565b9450606088013561113681610d0b565b93506080880135925060a088013567ffffffffffffffff81111561115957600080fd5b6111658a828b01610d20565b989b979a50959850939692959293505050565b6000806000806080858703121561118e57600080fd5b843561119981610d0b565b935060208501356111a981610d0b565b93969395505050506040820135916060013590565b600080604083850312156111d157600080fd5b50508035926020909101359150565b6000602082840312156111f257600080fd5b81516106f081610d0b565b6000815180845260005b8181101561122357602081850181015186830182015201611207565b506000602082860101526020601f19601f83011685010191505092915050565b6001600160a01b0383168152604060208201819052600090611267908301846111fd565b949350505050565b6001600160a01b038681168252851660208201526040810184905260a0606082018190526000906112a2908301856111fd565b90508260808301529695505050505050565b634e487b7160e01b600052603260045260246000fd5b6000600182016112ea57634e487b7160e01b600052601160045260246000fd5b5060010190565b60018060a01b038516815283602082015260806040820152600061131860808301856111fd565b905082606083015295945050505050565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b60608201526080019056fea2646970667358221220ce2e0d016c64f4e4a88f0d19a6441bb3548c53828cf565a1f625dcef210ec92964736f6c63430008100033", + "r": "0x30be0e9e721ea83db2884b938ebc766350431f20913711748af9c51b5d496d90", + "s": "0x65e015c07061d5670219ae29ce70711b39882baf8f1b806a21dd36bdf10e09bc", + "v": "0x104ec4", + "hash": "0x9f480f8e5b4f2e9d62a1ed42868d525a7709b011c54143713da93918540c5fe4", + "blockHash": "0x926c9f98ddba6f2e18efbdf0fd3df5143af7982a7033e3b7b34e1afd5fcb5008", + "blockNumber": "0x2", + "transactionIndex": "0x9", + "from": "0xf9062b8a30e0d7722960e305049fa50b86ba6253" + }, + { + "type": "0x0", + "chainId": "0x82750", + "nonce": "0xa", + "gasPrice": "0xf4240", + "gas": "0xbfe3f", + "to": null, + "value": "0x0", + "input": "0x608060405260405162000ebf38038062000ebf833981016040819052620000269162000497565b828162000036828260006200004d565b50620000449050826200008a565b505050620005ca565b6200005883620000e5565b600082511180620000665750805b1562000085576200008383836200012760201b620001691760201c565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f620000b562000156565b604080516001600160a01b03928316815291841660208301520160405180910390a1620000e2816200018f565b50565b620000f08162000244565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606200014f838360405180606001604052806027815260200162000e9860279139620002f8565b9392505050565b60006200018060008051602062000e7883398151915260001b6200037760201b620001951760201c565b546001600160a01b0316919050565b6001600160a01b038116620001fa5760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b806200022360008051602062000e7883398151915260001b6200037760201b620001951760201c565b80546001600160a01b0319166001600160a01b039290921691909117905550565b6200025a816200037a60201b620001981760201c565b620002be5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401620001f1565b80620002237f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b6200037760201b620001951760201c565b6060600080856001600160a01b03168560405162000317919062000577565b600060405180830381855af49150503d806000811462000354576040519150601f19603f3d011682016040523d82523d6000602084013e62000359565b606091505b5090925090506200036d8683838762000389565b9695505050505050565b90565b6001600160a01b03163b151590565b60608315620003fd578251600003620003f5576001600160a01b0385163b620003f55760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401620001f1565b508162000409565b62000409838362000411565b949350505050565b815115620004225781518083602001fd5b8060405162461bcd60e51b8152600401620001f1919062000595565b80516001600160a01b03811681146200045657600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b838110156200048e57818101518382015260200162000474565b50506000910152565b600080600060608486031215620004ad57600080fd5b620004b8846200043e565b9250620004c8602085016200043e565b60408501519092506001600160401b0380821115620004e657600080fd5b818601915086601f830112620004fb57600080fd5b8151818111156200051057620005106200045b565b604051601f8201601f19908116603f011681019083821181831017156200053b576200053b6200045b565b816040528281528960208487010111156200055557600080fd5b6200056883602083016020880162000471565b80955050505050509250925092565b600082516200058b81846020870162000471565b9190910192915050565b6020815260008251806020840152620005b681604085016020870162000471565b601f01601f19169190910160400192915050565b61089e80620005da6000396000f3fe60806040523661001357610011610017565b005b6100115b61001f6101a7565b6001600160a01b0316330361015f5760606001600160e01b0319600035166364d3180d60e11b810161005a576100536101da565b9150610157565b63587086bd60e11b6001600160e01b031982160161007a57610053610231565b63070d7c6960e41b6001600160e01b031982160161009a57610053610277565b621eb96f60e61b6001600160e01b03198216016100b9576100536102a8565b63a39f25e560e01b6001600160e01b03198216016100d9576100536102e8565b60405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b815160208301f35b6101676102fc565b565b606061018e83836040518060600160405280602781526020016108426027913961030c565b9392505050565b90565b6001600160a01b03163b151590565b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b60606101e4610384565b60006101f33660048184610695565b81019061020091906106db565b905061021d8160405180602001604052806000815250600061038f565b505060408051602081019091526000815290565b60606000806102433660048184610695565b810190610250919061070c565b915091506102608282600161038f565b604051806020016040528060008152509250505090565b6060610281610384565b60006102903660048184610695565b81019061029d91906106db565b905061021d816103bb565b60606102b2610384565b60006102bc6101a7565b604080516001600160a01b03831660208201529192500160405160208183030381529060405291505090565b60606102f2610384565b60006102bc610412565b610167610307610412565b610421565b6060600080856001600160a01b03168560405161032991906107f2565b600060405180830381855af49150503d8060008114610364576040519150601f19603f3d011682016040523d82523d6000602084013e610369565b606091505b509150915061037a86838387610445565b9695505050505050565b341561016757600080fd5b610398836104c6565b6000825111806103a55750805b156103b6576103b48383610169565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6103e46101a7565b604080516001600160a01b03928316815291841660208301520160405180910390a161040f81610506565b50565b600061041c6105af565b905090565b3660008037600080366000845af43d6000803e808015610440573d6000f35b3d6000fd5b606083156104b45782516000036104ad576001600160a01b0385163b6104ad5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161014e565b50816104be565b6104be83836105d7565b949350505050565b6104cf81610601565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001600160a01b03811661056b5760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b606482015260840161014e565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc6101cb565b8151156105e75781518083602001fd5b8060405162461bcd60e51b815260040161014e919061080e565b6001600160a01b0381163b61066e5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b606482015260840161014e565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61058e565b600080858511156106a557600080fd5b838611156106b257600080fd5b5050820193919092039150565b80356001600160a01b03811681146106d657600080fd5b919050565b6000602082840312156106ed57600080fd5b61018e826106bf565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561071f57600080fd5b610728836106bf565b9150602083013567ffffffffffffffff8082111561074557600080fd5b818501915085601f83011261075957600080fd5b81358181111561076b5761076b6106f6565b604051601f8201601f19908116603f01168101908382118183101715610793576107936106f6565b816040528281528860208487010111156107ac57600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b60005b838110156107e95781810151838201526020016107d1565b50506000910152565b600082516108048184602087016107ce565b9190910192915050565b602081526000825180602084015261082d8160408501602087016107ce565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220e4b32c109fd08ccf9742c7e09ffa8cda2bad608f5379698a7c1f93a339aee46b64736f6c63430008100033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c65640000000000000000000000003808d0f2f25839e73e0fbf711368fc4ae80c7763000000000000000000000000a76acf000c890b0dd7aeef57627d9899f955d02600000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000", + "r": "0x5ee1be89df232cead9cfa38c9ef87825b251ad49139ade3ab582a6c26a061a10", + "s": "0x590f1bd864326dd09146ebf7dc9674449f45a82691abad085fd4942f75d7cc1c", + "v": "0x104ec3", + "hash": "0xa2062a4530b194a438bb9f9e87cdce59f70775a52e8336892364445847c43ca2", + "blockHash": "0x926c9f98ddba6f2e18efbdf0fd3df5143af7982a7033e3b7b34e1afd5fcb5008", + "blockNumber": "0x2", + "transactionIndex": "0xa", + "from": "0xf9062b8a30e0d7722960e305049fa50b86ba6253" + } + ] + } +} \ No newline at end of file diff --git a/bin/bridge/assets/block_3.json b/bin/bridge/assets/block_3.json new file mode 100644 index 00000000..1beefdd0 --- /dev/null +++ b/bin/bridge/assets/block_3.json @@ -0,0 +1 @@ +{"hash":"0xe5820cc9d553fc54272e56a904b1ed187154061edcc343fee8c18e73f8124380","parentHash":"0x926c9f98ddba6f2e18efbdf0fd3df5143af7982a7033e3b7b34e1afd5fcb5008","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","miner":"0x0000000000000000000000000000000000000000","stateRoot":"0x168bd0665e679987bfb1e816c6297d2fb8ab862464edb80c10673973beffc430","transactionsRoot":"0xb179b916d64e5624974213ceaec9443323ebe76edd1761898d43a9cc09c4f955","receiptsRoot":"0xe255cdb3707028528556ab102b488e55164c292b02620c13a220c1f269ed64a6","logsBloom":"0x00000008000000000000000000000000400000080000000000800000000000000010000000000000000000000000000002000000000010020000000000008000000000000200000000004000000002020001000000000000000000000000000000000000420008000000000008000800800000800000000000000842000000400000000000000000000000000000000000000000000080000000000000800000000400400100000000000000000401000000000000000000000000040000000000000022000000080280000000040001000800000400000003000000002020800000000020000000000000000000000004000000000000000000000000000080","difficulty":"0x2","number":"0x3","gasLimit":"0x989680","gasUsed":"0x7b3796","timestamp":"0x6524e9a0","extraData":"0xd883050000846765746888676f312e31392e31856c696e75780000000000000069fdffcdca2883a93523b7381ba07949bf499a8408ba5ea1c77d526eb0d3b6c61bc9de3268fb7183bf6e458ab8dff91cb056a7046e07891175d4210bbc3b23d100","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","totalDifficulty":"0x7","size":"0xa17e","uncles":[],"transactions":["0x1c5d3df3108efe97eab526f1b3f1b414ea55733f0da5a7be051f207f8c7b7921","0xa5d2de3c230e06b5f4b94281140e0c8ffe4c197ce27375ec1fe52b17a75c8ac1","0x76e8abfd7738ec3aa0fd94c584ae789e16f1568b6923b1044a90c747b97a94f4","0xcfb787fe58eeb8a0f1d7ebb1360968111e84cd6f64d929a3277a1fb5e232ccd3","0xd2b1f2fae1b423f9026eae06307ff93395a6ff03faef40d84a6a2b5a4eb79fc8","0x56af44f6a76a5788776564b7d36720e0e9f5cd4695653d0f83871259c1480325","0x9822e5bdc6d3d02278849181af0603800fa5896f478b1a577f6a299143557596","0x81ea4d0324828c7bd1a25754601e471f5707cf09af3f267fabf1aa43f2c45907"]} diff --git a/bin/bridge/assets/block_4.json b/bin/bridge/assets/block_4.json new file mode 100644 index 00000000..ec522e3f --- /dev/null +++ b/bin/bridge/assets/block_4.json @@ -0,0 +1 @@ +{"hash":"0x30af93536b9f2899c2f5e77be24a4447a8e49c5683c74c4aab8c880c1508fdc5","parentHash":"0xe5820cc9d553fc54272e56a904b1ed187154061edcc343fee8c18e73f8124380","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","miner":"0x0000000000000000000000000000000000000000","stateRoot":"0x2b3219c3d89d50b5aa4e56743c4e22501d34b885e468365ba3b1cc818297db74","transactionsRoot":"0xac43898202c105693835927a9eb49fad87db8af91e52044feb0688041c3ea448","receiptsRoot":"0x53b1fee25eb457a237179c2a5e8147aa415f65177b5b0ec8a3c8979f7ee097d3","logsBloom":"0x00000104000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000004000000000000000000000000000000000000000000000000000020010000000000000000800000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000800000000000100000000000020000000000000000000000000000000000000000000000000000000000000000000","difficulty":"0x2","number":"0x4","gasLimit":"0x989680","gasUsed":"0x1175ab","timestamp":"0x6524ea2d","extraData":"0xd883050000846765746888676f312e31392e31856c696e757800000000000000716dfe47618ce3f1dbb241561b5de55ebf0e559e97f01975cc384ecf2c071d614a080ee5f9751838361dce948c3295d9fd3133cb2200eb9c75e827e670c3da8e01","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","totalDifficulty":"0x9","size":"0x1641","uncles":[],"transactions":["0x3e563ebcdbc5e5c23027959eac31aaec796e0819e3d376f8537e5636a515aa44"]} diff --git a/bin/bridge/assets/block_5.json b/bin/bridge/assets/block_5.json new file mode 100644 index 00000000..f40715fb --- /dev/null +++ b/bin/bridge/assets/block_5.json @@ -0,0 +1 @@ +{"hash":"0x60a2bf6889af0cd88339d2213bc79fb14960124e7bb1d5c51642883a60b3046e","parentHash":"0x30af93536b9f2899c2f5e77be24a4447a8e49c5683c74c4aab8c880c1508fdc5","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","miner":"0x0000000000000000000000000000000000000000","stateRoot":"0x13e8b06fb4cfb0b421742ad842517e44d1eacfce22bea127755624f919584516","transactionsRoot":"0xafbe90b483dea7e739ac13c2d6593d62d8978bad35ace4981ff3764a9022f03f","receiptsRoot":"0x8629b1c2233806f9692ba8983b894c0e0c53eeb215c8afc2ee008f2fbae9c512","logsBloom":"0x000000040002000008000000000000000a0000000001000000000000022000000200000000000200000000000001041000000000000000020200000010200040000000000000000000004010000000000000000000000000000001000001020000400000020000400000010000000800000000000000000000020400000000000000000000000000000000000000000000000000000000081000000400000100000000000020000000000000000210000000000000000000001000000000000400000000000000004000000000000000000a00000000900100000100200020000000000001001000000000000000000100000000000000000000000000000000","difficulty":"0x2","number":"0x5","gasLimit":"0x989680","gasUsed":"0x5b0b84","timestamp":"0x6524ea30","extraData":"0xd883050000846765746888676f312e31392e31856c696e757800000000000000a5726c8b2321b41c353d774b723ce2e67676e61b5d2b2e3700b679d03614fd6b419672dcf9978d47a17dba04a92353470455f2c443618399d499fb03b776bc3d01","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","totalDifficulty":"0xb","size":"0x7106","uncles":[],"transactions":["0xcb784f5f1820e6b9637fa5bc691aca865e2e83d114ac35d8dfdbe426e11c8c94","0xc8546d7872c8972762d79851682a3528835ee4909d159945eaf4d2e3784c8c3d","0xe1ee99e99f6ad2455f4599d5add445cc9cd5f92b585c078fae610a686132e997"]} diff --git a/bin/bridge/assets/jwt.hex b/bin/bridge/assets/jwt.hex new file mode 100644 index 00000000..8ad93047 --- /dev/null +++ b/bin/bridge/assets/jwt.hex @@ -0,0 +1 @@ +cee25419f4013499e38abda2ef6527177b30d10433ae0c9fadd9dac556b4aaad \ No newline at end of file diff --git a/bin/bridge/src/import.rs b/bin/bridge/src/import.rs index b2fbefd4..34c2f806 100644 --- a/bin/bridge/src/import.rs +++ b/bin/bridge/src/import.rs @@ -1,11 +1,8 @@ -use reth_network::{ - import::{BlockImport as RethBlockImport, BlockValidation}, - NetworkPrimitives, -}; +use reth_network::{import::BlockImport as RethBlockImport, NetworkPrimitives}; use reth_network_peers::PeerId; use reth_scroll_node::ScrollNetworkPrimitives; use reth_scroll_primitives::ScrollBlock; -use scroll_wire::Event; +use scroll_network::NewBlockWithPeer; use secp256k1::ecdsa::Signature; use std::{ sync::Arc, @@ -18,25 +15,17 @@ const ECDSA_SIGNATURE_LEN: usize = 64; /// A block import implementation for the eth-wire protocol that sends block to the scroll-wire /// protocol. -/// -/// The block import implementation delegates the block import to the inner block import and then -/// sends the block to the scroll-wire protocol if the block is valid. #[derive(Debug)] pub struct BridgeBlockImport { /// A sender for sending events to the scroll-wire protocol. - to_scroll_network_manager: UnboundedSender, - /// The inner block import. - inner: Box>, + new_block_tx: UnboundedSender, } impl BridgeBlockImport { /// Creates a new [`BridgeBlockImport`] instance with the provided events sender and inner block /// import. - pub fn new( - events: UnboundedSender, - inner_block_import: Box>, - ) -> Self { - Self { to_scroll_network_manager: events, inner: inner_block_import } + pub fn new(new_block_tx: UnboundedSender) -> Self { + Self { new_block_tx } } /// Bridges a new block from the eth-wire protocol to the scroll-wire protocol. @@ -57,14 +46,13 @@ impl BridgeBlockImport { .and_then(|i| Signature::from_compact(&extra_data[i..]).ok()) { let block = block.block.clone(); - trace!(target: "bridge::import", peer_id = %peer_id, block = ?block, "Received new block from eth-wire protocol"); + trace!(target: "scroll::bridge::import", peer_id = %peer_id, block = ?block.hash_slow(), "Received new block from eth-wire protocol"); // We trigger a new block event to be sent to the rollup node's network manager. If this // results in an error it means the network manager has been dropped. - let _ = - self.to_scroll_network_manager.send(Event::NewBlock { peer_id, block, signature }); + let _ = self.new_block_tx.send(NewBlockWithPeer { peer_id, block, signature }); } else { - warn!(target: "bridge::import", peer_id = %peer_id, "Failed to extract signature from block extra data"); + warn!(target: "scroll::bridge::import", peer_id = %peer_id, "Failed to extract signature from block extra data"); } } } @@ -80,32 +68,17 @@ impl RethBlockImport for BridgeBlockImport >, ) { // We then delegate the block import to the inner block import. - self.inner.on_new_block(peer_id, incoming_block); + self.bridge_new_block_to_scroll_wire(peer_id, incoming_block.block); } - /// This function is called when the block import is polled. - /// - /// If the block import is ready we check if the block is valid and if it is we send the block - /// to the scroll-wire protocol and then return the outcome. fn poll( &mut self, - cx: &mut Context<'_>, + _cx: &mut Context<'_>, ) -> Poll< reth_network::import::BlockImportOutcome< ::Block, >, > { - if let Poll::Ready(outcome) = self.inner.poll(cx) { - match outcome.result { - Ok(BlockValidation::ValidBlock { ref block }) | - Ok(BlockValidation::ValidHeader { ref block }) => { - self.bridge_new_block_to_scroll_wire(outcome.peer, block.block.clone()); - Poll::Ready(outcome) - } - Err(_) => Poll::Ready(outcome), - } - } else { - Poll::Pending - } + Poll::Pending } } diff --git a/bin/bridge/src/main.rs b/bin/bridge/src/main.rs index ab558982..8f77958c 100644 --- a/bin/bridge/src/main.rs +++ b/bin/bridge/src/main.rs @@ -7,7 +7,6 @@ fn main() { use reth_provider::providers::BlockchainProvider; use reth_scroll_cli::{Cli, ScrollChainSpecParser, ScrollRollupArgs}; use reth_scroll_node::{ScrollAddOns, ScrollNode}; - use scroll_bridge::ScrollBridgeNetworkBuilder; reth_cli_util::sigsegv_handler::install(); // Enable backtraces unless a RUST_BACKTRACE value has already been explicitly provided. @@ -26,7 +25,7 @@ fn main() { .with_types_and_provider::>() // Override the network builder with the `ScrollBridgeNetworkBuilder` .with_components( - ScrollNode::components().network(ScrollBridgeNetworkBuilder::default()), + ScrollNode::components().network(scroll_bridge::ScrollBridgeNetworkBuilder), ) .with_add_ons(ScrollAddOns::default()) .launch_with_fn(|builder| { diff --git a/bin/bridge/src/network.rs b/bin/bridge/src/network.rs index 3f63e24c..d867f866 100644 --- a/bin/bridge/src/network.rs +++ b/bin/bridge/src/network.rs @@ -2,31 +2,20 @@ use reth_network::{config::NetworkMode, NetworkConfig, NetworkManager, PeersInfo use reth_node_api::TxTy; use reth_node_builder::{components::NetworkBuilder, BuilderContext, FullNodeTypes}; use reth_node_types::NodeTypes; +use reth_rpc_builder::config::RethRpcServerConfig; use reth_scroll_chainspec::ScrollChainSpec; use reth_scroll_primitives::ScrollPrimitives; use reth_transaction_pool::{PoolTransaction, TransactionPool}; -use scroll_network::{NetworkManager as ScrollNetworkManager, NoopBlockImport}; +use rollup_node_manager::{PoAConsensus, RollupNodeManager}; +use scroll_alloy_provider::ScrollAuthEngineApiProvider; +use scroll_engine::{test_utils::NoopExecutionPayloadProvider, EngineDriver, ForkchoiceState}; +use scroll_network::NetworkManager as ScrollNetworkManager; use scroll_wire::{ProtocolHandler, ScrollWireConfig}; use tracing::info; /// The network builder for the eth-wire to scroll-wire bridge. #[derive(Debug, Default)] -pub struct ScrollBridgeNetworkBuilder { - block_import: - Option>>, -} - -impl ScrollBridgeNetworkBuilder { - /// Creates a new [`ScrollBridgeNetworkBuilder`] with the provided block import. - #[cfg(feature = "test-utils")] - pub fn new( - block_import: Box< - dyn reth_network::import::BlockImport, - >, - ) -> Self { - Self { block_import: Some(block_import) } - } -} +pub struct ScrollBridgeNetworkBuilder; impl NetworkBuilder for ScrollBridgeNetworkBuilder where @@ -57,10 +46,7 @@ where let config = ctx.network_config()?; let mut config = NetworkConfig { network_mode: NetworkMode::Work, - block_import: Box::new(super::BridgeBlockImport::new( - new_block_tx, - self.block_import.unwrap_or(config.block_import), - )), + block_import: Box::new(super::BridgeBlockImport::new(new_block_tx.clone())), ..config }; @@ -72,14 +58,34 @@ where let handle = ctx.start_network(network, pool); // Create the scroll network manager. - let scroll_wire_manager = - ScrollNetworkManager::from_parts(handle.clone(), Box::new(NoopBlockImport), events) - .with_new_block_source(new_block_rx); + let scroll_network_manager = ScrollNetworkManager::from_parts(handle.clone(), events); // Spawn the scroll network manager. - ctx.task_executor().spawn(scroll_wire_manager); + let consensus = PoAConsensus::new(vec![]); + let payload_provider = NoopExecutionPayloadProvider; + + let auth_port = ctx.config().rpc.auth_port; + let auth_secret = ctx.config().rpc.auth_jwt_secret(ctx.config().datadir().jwt())?; + + let engine_api = ScrollAuthEngineApiProvider::new( + auth_secret, + format!("http://localhost:{auth_port}").parse()?, + ); + let engine = EngineDriver::new(engine_api, payload_provider); + + let rollup_node_manager = RollupNodeManager::new( + scroll_network_manager, + engine, + ForkchoiceState::genesis( + ctx.config().chain.chain.try_into().expect("must be a named chain"), + ), + consensus, + new_block_rx, + ); + + ctx.task_executor().spawn(rollup_node_manager); - info!(target: "reth::cli", enode=%handle.local_node_record(), "P2P networking initialized"); + info!(target: "scroll::reth::cli", enode=%handle.local_node_record(), "P2P networking initialized"); Ok(handle) } } diff --git a/bin/bridge/tests/e2e.rs b/bin/bridge/tests/e2e.rs index 86f288ad..5a9fd159 100644 --- a/bin/bridge/tests/e2e.rs +++ b/bin/bridge/tests/e2e.rs @@ -1,6 +1,7 @@ #![cfg(feature = "test-utils")] use alloy_primitives::B256; +use futures::StreamExt; use reth_e2e_test_utils::{node::NodeTestContext, NodeHelperType}; use reth_network::{NetworkConfigBuilder, PeersInfo}; use reth_network_peers::PeerId; @@ -9,71 +10,16 @@ use reth_node_builder::{Node, NodeBuilder, NodeConfig, NodeHandle}; use reth_node_core::args::{DiscoveryArgs, NetworkArgs, RpcServerArgs}; use reth_provider::providers::BlockchainProvider; use reth_rpc_server_types::RpcModuleSelection; -use reth_scroll_chainspec::{ScrollChainSpec, ScrollChainSpecBuilder}; +use reth_scroll_chainspec::ScrollChainSpec; use reth_scroll_engine_primitives::ScrollPayloadBuilderAttributes; -use reth_scroll_node::ScrollNode; +use reth_scroll_node::{ScrollNetworkPrimitives, ScrollNode}; use reth_tasks::TaskManager; use scroll_alloy_rpc_types_engine::ScrollPayloadAttributes; -use scroll_network::{BlockImport, SCROLL_MAINNET}; +use scroll_network::{NewBlockWithPeer, SCROLL_MAINNET}; use scroll_wire::ScrollWireConfig; -use secp256k1::ecdsa::Signature; -use std::{ - collections::VecDeque, - sync::Arc, - task::{Context, Poll}, -}; +use std::{path::PathBuf, sync::Arc}; use tracing::trace; -/// A block import type that always returns a valid outcome. -#[derive(Debug, Default)] -pub struct ValidRethBlockImport { - /// A buffer for storing the blocks that are received. - blocks: VecDeque<( - PeerId, - reth_network::message::NewBlockMessage, - )>, - waker: Option, -} - -impl reth_network::import::BlockImport - for ValidRethBlockImport -{ - fn on_new_block( - &mut self, - peer_id: PeerId, - incoming_block: reth_network::message::NewBlockMessage< - alloy_consensus::Block, - >, - ) { - trace!(target: "network::import::ValidRethBlockImport", peer_id = %peer_id, block = ?incoming_block.block, "Received new block"); - self.blocks.push_back((peer_id, incoming_block)); - - if let Some(waker) = self.waker.take() { - waker.wake(); - } - } - - fn poll( - &mut self, - cx: &mut Context<'_>, - ) -> Poll< - reth_network::import::BlockImportOutcome< - alloy_consensus::Block, - >, - > { - // If there are blocks in the buffer we return the first block. - if let Some((peer, new_block)) = self.blocks.pop_front() { - Poll::Ready(reth_network::import::BlockImportOutcome { - peer, - result: Ok(reth_network::import::BlockValidation::ValidBlock { block: new_block }), - }) - } else { - self.waker = Some(cx.waker().clone()); - Poll::Pending - } - } -} - /// We test the bridge from the eth-wire protocol to the scroll-wire protocol. /// /// This test will launch three nodes: @@ -89,13 +35,7 @@ async fn can_bridge_blocks() { reth_tracing::init_test_tracing(); // Create the chain spec for scroll mainnet with Darwin v2 activated and a test genesis. - let chain_spec = Arc::new( - ScrollChainSpecBuilder::default() - .chain(SCROLL_MAINNET.chain) - .genesis(serde_json::from_str(include_str!("../assets/genesis.json")).unwrap()) - .darwin_v2_activated() - .build(Default::default()), - ); + let chain_spec = (*SCROLL_MAINNET).clone(); // Setup the bridge node and a standard node. let (mut bridge_node, tasks, bridge_peer_id) = @@ -109,29 +49,20 @@ async fn can_bridge_blocks() { .with_pow() .build_with_noop_provider(chain_spec.clone()); let scroll_wire_config = ScrollWireConfig::new(false); - let (tx, mut rx) = tokio::sync::mpsc::unbounded_channel(); - let scroll_network = scroll_network::NetworkManager::new( - network_config, - scroll_wire_config, - TestBlockImport::new(tx), - ) - .await; + let mut scroll_network = + scroll_network::NetworkManager::new(network_config, scroll_wire_config).await; let scroll_network_handle = scroll_network.handle(); - // Spawn the scroll NetworkManager. - tasks.executor().spawn(scroll_network); - // Connect the scroll-wire node to the scroll NetworkManager. bridge_node.network.add_peer(scroll_network_handle.local_node_record()).await; bridge_node.network.next_session_established().await; // Create a standard NetworkManager to send blocks to the bridge node. - let network_config = - NetworkConfigBuilder::::with_rng_secret_key() - .disable_discovery() - .with_pow() - .with_unused_listener_port() - .build_with_noop_provider(chain_spec); + let network_config = NetworkConfigBuilder::::with_rng_secret_key() + .disable_discovery() + .with_pow() + .with_unused_listener_port() + .build_with_noop_provider(chain_spec); // Create the standard NetworkManager. let network = reth_network::NetworkManager::new(network_config) @@ -149,58 +80,25 @@ async fn can_bridge_blocks() { tokio::time::sleep(tokio::time::Duration::from_secs(5)).await; // Send a block from the standard NetworkManager to the bridge node. - let signature = Signature::from_compact(&[0u8; 64][..]).unwrap(); - let mut block: reth_primitives::Block = - reth_primitives::Block::default(); - block.header.extra_data = signature.serialize_compact().into(); - let hash = block.hash_slow(); - let new_block = reth_eth_wire_types::NewBlock { block, ..Default::default() }; - network_handle.announce_block(new_block, hash); - - // wait for the block to be gossiped and received by the scroll-wire network manager from - // the bridge. - if let Some(msg) = rx.recv().await { - match msg { - scroll_wire::Event::NewBlock { block, signature: sig, peer_id } => { - assert_eq!(block.hash_slow(), hash); - assert_eq!(signature, sig); - assert_eq!(peer_id, bridge_peer_id); - } - _ => panic!("Unexpected message"), - } + let block_1: reth_scroll_primitives::ScrollBlock = + serde_json::from_str(include_str!("../assets/block_1.json")).unwrap(); + let block_1_hash = block_1.hash_slow(); + let new_block_1 = reth_eth_wire_types::NewBlock { block: block_1, ..Default::default() }; + + trace!("Announcing block to eth-wire network"); + network_handle.announce_block(new_block_1, block_1_hash); + + // Assert block received from the bridge node on the scroll wire protocol is correct + if let Some(scroll_network::NetworkManagerEvent::NewBlock(NewBlockWithPeer { + peer_id, + block, + signature: _, + })) = scroll_network.next().await + { + assert_eq!(peer_id, bridge_peer_id); + assert_eq!(block.hash_slow(), block_1_hash); } else { - panic!("No message received"); - } -} - -#[derive(Debug)] -struct TestBlockImport { - sender: tokio::sync::mpsc::UnboundedSender, -} - -impl TestBlockImport { - pub fn new(sender: tokio::sync::mpsc::UnboundedSender) -> Self { - Self { sender } - } -} - -impl BlockImport for TestBlockImport { - fn on_new_block( - &mut self, - peer_id: reth_network_peers::PeerId, - block: reth_scroll_primitives::ScrollBlock, - signature: secp256k1::ecdsa::Signature, - ) { - trace!(target: "bridge::import::TestBlockImport", peer_id = %peer_id, block = ?block, "Received new block from eth-wire protocol"); - let new_block = scroll_wire::Event::NewBlock { peer_id, block, signature }; - self.sender.send(new_block).unwrap(); - } - - fn poll( - &mut self, - _cx: &mut std::task::Context<'_>, - ) -> std::task::Poll { - std::task::Poll::Pending + panic!("Failed to receive block from scroll-wire network"); } } @@ -222,13 +120,13 @@ pub async fn build_bridge_node( // Create the node config let node_config = NodeConfig::new(chain_spec.clone()) .with_network(network_config.clone()) - .with_unused_ports() - .with_rpc( - RpcServerArgs::default() - .with_unused_ports() - .with_http() - .with_http_api(RpcModuleSelection::All), - ) + .with_rpc({ + let mut args = + RpcServerArgs::default().with_http().with_http_api(RpcModuleSelection::All); + args.auth_jwtsecret = + Some(PathBuf::from(env!("CARGO_MANIFEST_DIR")).join("assets/jwt.hex")); + args + }) .set_dev(false); // Create the node for a bridge node that will bridge messages from the eth-wire protocol @@ -237,11 +135,9 @@ pub async fn build_bridge_node( let NodeHandle { node, node_exit_future: _ } = NodeBuilder::new(node_config.clone()) .testing_node(exec.clone()) .with_types_and_provider::>() - .with_components(node.components_builder().network( - scroll_bridge::ScrollBridgeNetworkBuilder::new(Box::new( - ValidRethBlockImport::default(), - )), - )) + .with_components( + node.components_builder().network(scroll_bridge::ScrollBridgeNetworkBuilder), + ) .with_add_ons(node.add_ons()) .launch() .await?; diff --git a/crates/engine/Cargo.toml b/crates/engine/Cargo.toml index 625bd55e..e78a4945 100644 --- a/crates/engine/Cargo.toml +++ b/crates/engine/Cargo.toml @@ -1,5 +1,5 @@ [package] -name = "engine" +name = "scroll-engine" version.workspace = true edition.workspace = true rust-version.workspace = true @@ -11,19 +11,29 @@ workspace = true [dependencies] # alloy -alloy-eips = { version = "0.9.2", default-features = false } +alloy-chains.workspace = true +alloy-eips.workspace = true alloy-primitives.workspace = true alloy-rpc-types-engine.workspace = true +# scroll-alloy +scroll-alloy-network.workspace = true +scroll-alloy-provider.workspace = true +scroll-alloy-rpc-types-engine = { git = "https://github.com/scroll-tech/reth.git", branch = "feat/add-deref-blanket-engine-api" } + # reth -reth-engine-primitives = { git = "https://github.com/scroll-tech/reth.git", default-features = false, features = ["scroll"] } -reth-primitives.workspace = true -reth-rpc-api = { git = "https://github.com/scroll-tech/reth.git", default-features = false, features = ["client"] } +reth-engine-primitives = { git = "https://github.com/scroll-tech/reth.git", branch = "feat/add-deref-blanket-engine-api", default-features = false, features = ["scroll"] } +reth-network-peers.workspace = true +reth-payload-primitives = { git = "https://github.com/scroll-tech/reth.git", branch = "feat/add-deref-blanket-engine-api" } +reth-primitives = { workspace = true } # reth-scroll -reth-scroll-primitives = { workspace = true, features = ["serde", "scroll", "reth-codec"] } +reth-scroll-chainspec.workspace = true +reth-scroll-primitives = { workspace = true, features = ["scroll"] } +reth-scroll-engine-primitives = { git = "https://github.com/scroll-tech/reth.git", branch = "feat/add-deref-blanket-engine-api", default-features = false, features = ["scroll"] } # misc +async-trait = "0.1.68" eyre.workspace = true serde = { workspace = true, features = ["derive"] } tokio.workspace = true @@ -34,16 +44,27 @@ arbitrary = { version = "1.3", optional = true } [dev-dependencies] arbitrary = "1.3" -reth-testing-utils = { git = "https://github.com/scroll-tech/reth.git" } +reth-testing-utils = { git = "https://github.com/scroll-tech/reth.git", branch = "feat/add-deref-blanket-engine-api" } [features] arbitrary = [ - "alloy-primitives/arbitrary", - "reth-primitives/arbitrary", - "alloy-eips/arbitrary", - "reth-scroll-primitives/arbitrary" + "alloy-primitives/arbitrary", + "reth-primitives/arbitrary", + "alloy-eips/arbitrary", + "reth-scroll-primitives/arbitrary", + "scroll-alloy-rpc-types-engine/arbitrary", + "alloy-chains/arbitrary" +] +test-utils = [ + "arbitrary", + "dep:arbitrary", + "reth-primitives/test-utils" ] -test_utils = [ - "arbitrary", - "dep:arbitrary" +serde = [ + "alloy-eips/serde", + "alloy-primitives/serde", + "alloy-rpc-types-engine/serde", + "reth-scroll-primitives/serde", + "scroll-alloy-rpc-types-engine/serde", + "alloy-chains/serde" ] diff --git a/crates/engine/src/engine.rs b/crates/engine/src/engine.rs index 8cc78192..a2b3ff1f 100644 --- a/crates/engine/src/engine.rs +++ b/crates/engine/src/engine.rs @@ -1,239 +1,235 @@ -use crate::{ - block_info::BlockInfo, - payload::{matching_payloads, ScrollPayloadAttributes}, -}; +use crate::{block_info::BlockInfo, payload::matching_payloads}; +use super::error::EngineDriverError; use crate::ExecutionPayloadProvider; use alloy_rpc_types_engine::{ - ExecutionPayload, ExecutionPayloadV1, ForkchoiceState, PayloadId, PayloadStatusEnum, + ExecutionPayload, ExecutionPayloadV1, ForkchoiceState, ForkchoiceUpdated, PayloadId, + PayloadStatusEnum, }; -use eyre::{bail, eyre, Result}; -use reth_engine_primitives::EngineTypes; -use reth_rpc_api::EngineApiClient; +use eyre::Result; +use reth_payload_primitives::PayloadTypes; +use reth_scroll_engine_primitives::ScrollEngineTypes; +use scroll_alloy_provider::ScrollEngineApi; + use tokio::time::Duration; -use tracing::{debug, error, info, instrument, trace, warn}; +use tracing::{debug, error, info, instrument, trace}; const ENGINE_BACKOFF_INTERVAL: Duration = Duration::from_secs(1); /// The main interface to the Engine API of the EN. /// Internally maintains the fork state of the chain. -#[derive(Debug, Clone)] -pub struct EngineDriver { +#[derive(Debug)] +pub struct EngineDriver { /// The engine API client. client: EC, /// The execution payload provider execution_payload_provider: P, - /// The unsafe L2 block info. - unsafe_block_info: BlockInfo, - /// The safe L2 block info. - safe_block_info: BlockInfo, - /// The finalized L2 block info. - finalized_block_info: BlockInfo, - /// Marker - _types: std::marker::PhantomData, } -impl EngineDriver +impl EngineDriver where - EC: EngineApiClient + Sync, - ET: EngineTypes< - PayloadAttributes = ScrollPayloadAttributes, - ExecutionPayloadEnvelopeV1 = ExecutionPayloadV1, - >, - P: ExecutionPayloadProvider, + EC: ScrollEngineApi + Unpin + Send + Sync + 'static, + P: ExecutionPayloadProvider + Unpin + Send + Sync + 'static, { + /// Create a new [`EngineDriver`] from the provided [`ScrollEngineApi`] and + /// [`ExecutionPayloadProvider`]. + pub const fn new(client: EC, execution_payload_provider: P) -> Self { + Self { client, execution_payload_provider } + } + /// Initialize the driver and wait for the Engine server to be ready. pub async fn init_and_wait_for_engine( client: EC, execution_payload_provider: P, - unsafe_head: BlockInfo, - safe_head: BlockInfo, - finalized_head: BlockInfo, + fcs: ForkchoiceState, ) -> Self { - let fcs = ForkchoiceState { - head_block_hash: unsafe_head.hash, - safe_block_hash: safe_head.hash, - finalized_block_hash: finalized_head.hash, - }; - // wait on engine loop { match client.fork_choice_updated_v1(fcs, None).await { Err(err) => { - debug!(target: "engine::driver", ?err, "waiting on engine client"); + debug!(target: "scroll::engine::driver", ?err, "waiting on engine client"); tokio::time::sleep(ENGINE_BACKOFF_INTERVAL).await; } Ok(status) => { - info!(target: "engine::driver", payload_status = ?status.payload_status.status, "engine ready"); + info!(target: "scroll::engine::driver", payload_status = ?status.payload_status.status, "engine ready"); break; } } } - Self { - client, - execution_payload_provider, - unsafe_block_info: unsafe_head, - safe_block_info: safe_head, - finalized_block_info: finalized_head, - _types: std::marker::PhantomData, - } - } - - /// Set the finalized L2 block info. - pub fn set_finalized_block_info(&mut self, finalized_info: BlockInfo) { - self.finalized_block_info = finalized_info; - } - - /// Set the safe L2 block info. - pub fn set_safe_block_info(&mut self, safe_info: BlockInfo) { - self.safe_block_info = safe_info; - } - - /// Set the unsafe L2 block info. - pub fn set_unsafe_block_info(&mut self, unsafe_info: BlockInfo) { - self.unsafe_block_info = unsafe_info; - } - - /// Returns a [`ForkchoiceState`] from the current state of the [`EngineDriver`]. - const fn forkchoice_state(&self) -> ForkchoiceState { - ForkchoiceState { - head_block_hash: self.unsafe_block_info.hash, - safe_block_hash: self.safe_block_info.hash, - finalized_block_hash: self.finalized_block_info.hash, - } + Self { client, execution_payload_provider } } /// Handles an execution payload: /// - Sends the payload to the EL via `engine_newPayloadV1`. /// - Sets the current fork choice for the EL via `engine_forkchoiceUpdatedV1`. - #[instrument(skip_all, level = "trace", fields(head = %self.unsafe_block_info.hash, safe = %self.safe_block_info.hash, finalized = %self.safe_block_info.hash, payload_block_hash = %execution_payload.block_hash(), payload_block_num = %execution_payload.block_number()))] + #[instrument(skip_all, level = "trace", + fields( + payload_block_hash = %execution_payload.block_hash(), + payload_block_num = %execution_payload.block_number(), + fcs = ?fcs + ))] pub async fn handle_execution_payload( - &mut self, + &self, execution_payload: ExecutionPayload, - ) -> Result<()> { - let unsafe_block_info = (&execution_payload).into(); + fcs: ForkchoiceState, + ) -> Result<(PayloadStatusEnum, PayloadStatusEnum), EngineDriverError> { + // Convert the payload to the V1 format. let execution_payload = execution_payload.into_v1(); - self.new_payload(execution_payload).await?; - self.set_unsafe_block_info(unsafe_block_info); - self.forkchoice_updated(None).await?; - Ok(()) + // Issue the new payload to the EN. + let payload_status = self.new_payload(execution_payload).await?; + + // Invoke the FCU with the new state. + let fcu = self.forkchoice_updated(fcs, None).await?; + + // We should never have a case where the fork choice is syncing as we have already validated + // the payload and provided it to the EN. + debug_assert!(fcu.is_valid()); + + Ok((payload_status, fcu.payload_status.status)) } /// Handles a payload attributes: /// - Retrieves the execution payload for block at safe head + 1. /// - If the payload is missing or doesn't match the attributes: - /// - Starts payload building task on the EL via `engine_forkchoiceUpdatedV1`, passing - /// the provided payload attributes. - /// - Retrieve the payload with `engine_getPayloadV1`. - /// - Sends the constructed payload to the EL via `engine_newPayloadV1`. - /// - Sets the current fork choice for the EL via `engine_forkchoiceUpdatedV1`. + /// - Starts payload building task on the EL via `engine_forkchoiceUpdatedV1`, passing the + /// provided payload attributes. + /// - Retrieve the payload with `engine_getPayloadV1`. + /// - Sends the constructed payload to the EL via `engine_newPayloadV1`. + /// - Sets the current fork choice for the EL via `engine_forkchoiceUpdatedV1`. /// - If the execution payload matches the attributes: - /// - Sets the current fork choice for the EL via `engine_forkchoiceUpdatedV1`, - /// advancing the safe head by one. - #[instrument(skip_all, level = "trace", fields(head = %self.unsafe_block_info.hash, safe = %self.safe_block_info.hash, finalized = %self.safe_block_info.hash))] + /// - Sets the current fork choice for the EL via `engine_forkchoiceUpdatedV1`, advancing + /// the safe head by one. + #[instrument(skip_all, level = "trace", fields(safe_block_info = ?safe_block_info, fcs = ?fcs, payload_attributes = ?payload_attributes))] pub async fn handle_payload_attributes( &mut self, - mut payload_attributes: ScrollPayloadAttributes, - ) -> Result<()> { + safe_block_info: BlockInfo, + mut fcs: ForkchoiceState, + mut payload_attributes: ::PayloadAttributes, + ) -> Result<(BlockInfo, bool), EngineDriverError> { let maybe_execution_payload = self .execution_payload_provider - .execution_payload_by_block((self.safe_block_info.number + 1).into()) - .await?; - let payload_attributes_already_inserted_in_chain = - maybe_execution_payload.as_ref().is_some_and(|ep| { - matching_payloads(&payload_attributes, ep, self.safe_block_info.hash) - }); + .execution_payload_by_block((safe_block_info.number + 1).into()) + .await + .map_err(|_| EngineDriverError::ExecutionPayloadProviderUnavailable)?; + let payload_attributes_already_inserted_in_chain = maybe_execution_payload + .as_ref() + .is_some_and(|ep| matching_payloads(&payload_attributes, ep, safe_block_info.hash)); if payload_attributes_already_inserted_in_chain { // if the payload attributes match the execution payload at block safe + 1, // this payload has already been passed to the EN in the form of a P2P gossiped // execution payload. We can advance the safe head by one by issuing a // forkchoiceUpdated. - self.set_safe_block_info(maybe_execution_payload.expect("exists").into()); - self.forkchoice_updated(None).await?; + let safe_block_info: BlockInfo = + maybe_execution_payload.expect("execution payload exists").into(); + fcs.safe_block_hash = safe_block_info.hash; + self.forkchoice_updated(fcs, None).await?; + Ok((safe_block_info, false)) } else { // Otherwise, we construct a block from the payload attributes on top of the current // safe head. - self.set_unsafe_block_info(self.safe_block_info); + fcs.head_block_hash = fcs.safe_block_hash; // start payload building with `no_tx_pool = true`. payload_attributes.no_tx_pool = true; - let id = self - .forkchoice_updated(Some(payload_attributes)) - .await? - .ok_or_else(|| eyre!("missing payload id"))?; + let fc_updated = self.forkchoice_updated(fcs, Some(payload_attributes)).await?; // retrieve the execution payload - let execution_payload = self.get_payload(id).await?; + let execution_payload = self + .get_payload(fc_updated.payload_id.expect("payload attributes has been set")) + .await?; - // issue the execution payload to the EL and set the new forkchoice - let safe_block_info = (&execution_payload).into(); - self.new_payload(execution_payload.into_v1()).await?; + // issue the execution payload to the EL + let safe_block_info: BlockInfo = (&execution_payload).into(); + let result = self.new_payload(execution_payload.into_v1()).await?; - self.set_safe_block_info(safe_block_info); - self.set_unsafe_block_info(safe_block_info); - self.forkchoice_updated(None).await?; - } + // we should only have a valid payload when deriving from payload attributes (should not + // be syncing)! + debug_assert!(result.is_valid()); + + // update the fork choice state with the new block hash. + fcs.head_block_hash = safe_block_info.hash; + fcs.safe_block_hash = safe_block_info.hash; + self.forkchoice_updated(fcs, None).await?; - Ok(()) + Ok((safe_block_info, true)) + } } /// Calls `engine_newPayloadV1` and logs the result. - async fn new_payload(&self, execution_payload: ExecutionPayloadV1) -> Result<()> { + async fn new_payload( + &self, + execution_payload: ExecutionPayloadV1, + ) -> Result { // TODO: should never enter the `Syncing`, `Accepted` or `Invalid` variants when called from // `handle_payload_attributes`. - match self.client.new_payload_v1(execution_payload).await?.status { + let response = self + .client + .new_payload_v1(execution_payload) + .await + .map_err(|_| EngineDriverError::EngineUnavailable)?; + + match &response.status { PayloadStatusEnum::Invalid { validation_error } => { - error!(target: "engine::driver", ?validation_error, "failed to issue new execution payload"); - bail!("invalid payload: {validation_error}") + error!(target: "scroll::engine::driver", ?validation_error, "execution payload is invalid"); + return Err(EngineDriverError::InvalidExecutionPayload) } PayloadStatusEnum::Syncing => { - debug!(target: "engine::driver", "EN syncing"); + debug!(target: "scroll::engine::driver", "execution client is syncing"); } PayloadStatusEnum::Accepted => { - warn!(target: "engine::driver", "execution payload part of side chain"); + error!(target: "scroll::engine::driver", "execution payload part of side chain"); } PayloadStatusEnum::Valid => { - trace!(target: "engine::driver", "execution payload valid"); + trace!(target: "scroll::engine::driver", "execution payload valid"); } - } + }; - Ok(()) + Ok(response.status) } /// Calls `engine_forkchoiceUpdatedV1` and logs the result. async fn forkchoice_updated( &self, - attributes: Option, - ) -> Result> { - let fc = self.forkchoice_state(); - let forkchoice_updated = self.client.fork_choice_updated_v1(fc, attributes).await?; + fcs: ForkchoiceState, + attributes: Option<::PayloadAttributes>, + ) -> Result { + let forkchoice_updated = self + .client + .fork_choice_updated_v1(fcs, attributes) + .await + .map_err(|_| EngineDriverError::EngineUnavailable)?; // TODO: should never enter the `Syncing`, `Accepted` or `Invalid` variants when called from // `handle_payload_attributes`. match &forkchoice_updated.payload_status.status { PayloadStatusEnum::Invalid { validation_error } => { - error!(target: "engine::driver", ?validation_error, "failed to issue forkchoice"); - bail!("invalid fork choice: {validation_error}") + error!(target: "scroll::engine::driver", ?validation_error, "failed to issue forkchoice"); + return Err(EngineDriverError::InvalidFcu) } PayloadStatusEnum::Syncing => { - debug!(target: "engine::driver", "EN syncing"); + debug!(target: "scroll::engine::driver", "head has been seen before, but not part of the chain"); } PayloadStatusEnum::Accepted => { - warn!(target: "engine::driver", "payload attributes part of side chain"); + unreachable!("forkchoice update should never return an `Accepted` status"); } PayloadStatusEnum::Valid => { - trace!(target: "engine::driver", "execution payload valid"); + trace!(target: "scroll::engine::driver", "forkchoice updated"); } - } + }; - Ok(forkchoice_updated.payload_id) + Ok(forkchoice_updated) } /// Calls `engine_getPayloadV1`. - async fn get_payload(&self, id: PayloadId) -> Result { - Ok(self.client.get_payload_v1(id).await?.into()) + async fn get_payload(&self, id: PayloadId) -> Result { + Ok(self + .client + .get_payload_v1(id) + .await + .map_err(|_| EngineDriverError::EngineUnavailable)? + .into()) } } diff --git a/crates/engine/src/error.rs b/crates/engine/src/error.rs new file mode 100644 index 00000000..da265f9e --- /dev/null +++ b/crates/engine/src/error.rs @@ -0,0 +1,14 @@ +/// The error type for the engine API. +#[derive(Debug)] +pub enum EngineDriverError { + /// The engine is unavailable. + EngineUnavailable, + /// The execution payload is invalid. + InvalidExecutionPayload, + /// The engine failed to execute the fork choice update. + InvalidFcu, + /// The execution payload provider is unavailable. + ExecutionPayloadProviderUnavailable, + /// The engine driver is syncing. + Syncing, +} diff --git a/crates/engine/src/fcs.rs b/crates/engine/src/fcs.rs new file mode 100644 index 00000000..90133267 --- /dev/null +++ b/crates/engine/src/fcs.rs @@ -0,0 +1,82 @@ +use crate::BlockInfo; +use alloy_chains::NamedChain; +use alloy_rpc_types_engine::ForkchoiceState as AlloyForkchoiceState; +use reth_scroll_chainspec::{SCROLL_MAINNET_GENESIS_HASH, SCROLL_SEPOLIA_GENESIS_HASH}; + +/// The fork choice state. +/// +/// The state is composed of the [`BlockInfo`] for `unsafe`, `safe` block, and the `finalized` +/// blocks. +#[derive(Debug, Clone)] +pub struct ForkchoiceState { + unsafe_: BlockInfo, + safe: BlockInfo, + finalized: BlockInfo, +} + +impl ForkchoiceState { + /// Creates a new [`ForkchoiceState`] instance from the given [`BlockInfo`] instance. + pub const fn from_block_info(block_info: BlockInfo) -> Self { + Self::new(block_info, block_info, block_info) + } + + /// Creates a new [`ForkchoiceState`] instance. + pub const fn new(unsafe_: BlockInfo, safe: BlockInfo, finalized: BlockInfo) -> Self { + Self { unsafe_, safe, finalized } + } + + /// Creates a [`ForkchoiceState`] instance that represents the genesis state of the provided + /// chain. + pub const fn genesis(chain: NamedChain) -> Self { + let block_info = match chain { + NamedChain::Scroll => BlockInfo { hash: SCROLL_MAINNET_GENESIS_HASH, number: 0 }, + NamedChain::ScrollSepolia => BlockInfo { hash: SCROLL_SEPOLIA_GENESIS_HASH, number: 0 }, + _ => panic!("unsupported chain"), + }; + Self::new(block_info, block_info, block_info) + } + + /// Updates the `unsafe` block info. + pub fn update_unsafe_block_info(&mut self, unsafe_: BlockInfo) { + self.unsafe_ = unsafe_; + } + + /// Updates the `safe` block info. + pub fn update_safe_block_info(&mut self, safe: BlockInfo) { + self.safe = safe; + } + + /// Updates the `finalized` block info. + pub fn update_finalized_block_info(&mut self, finalized: BlockInfo) { + self.finalized = finalized; + } + + /// Returns the block info for the `unsafe` block. + pub const fn unsafe_block_info(&self) -> &BlockInfo { + &self.unsafe_ + } + + /// Returns the block info for the `safe` block. + pub const fn safe_block_info(&self) -> &BlockInfo { + &self.safe + } + + /// Returns the block info for the `finalized` block. + pub const fn finalized_block_info(&self) -> &BlockInfo { + &self.finalized + } + + /// Returns the [`AlloyForkchoiceState`] representation of the fork choice state. + pub const fn get_alloy_fcs(&self) -> AlloyForkchoiceState { + AlloyForkchoiceState { + head_block_hash: self.unsafe_.hash, + safe_block_hash: self.safe.hash, + finalized_block_hash: self.finalized.hash, + } + } + + /// Returns `true` if the fork choice state is the genesis state. + pub const fn is_genesis(&self) -> bool { + self.unsafe_.number == 0 + } +} diff --git a/crates/engine/src/lib.rs b/crates/engine/src/lib.rs index 67be3edb..e2f9fcc4 100644 --- a/crates/engine/src/lib.rs +++ b/crates/engine/src/lib.rs @@ -7,8 +7,14 @@ pub use block_info::BlockInfo; mod engine; pub use engine::EngineDriver; +mod error; +pub use error::EngineDriverError; + +mod fcs; +pub use fcs::ForkchoiceState; + mod payload; -pub use payload::{ExecutionPayloadProvider, ScrollPayloadAttributes}; +pub use payload::ExecutionPayloadProvider; -#[cfg(any(test, feature = "test_utils"))] -mod test_utils; +#[cfg(any(test, feature = "test-utils"))] +pub mod test_utils; diff --git a/crates/engine/src/payload.rs b/crates/engine/src/payload.rs index 774039c6..0f56b80c 100644 --- a/crates/engine/src/payload.rs +++ b/crates/engine/src/payload.rs @@ -1,21 +1,11 @@ use alloy_eips::BlockId; -use alloy_primitives::{Bytes, B256}; -use alloy_rpc_types_engine::{ExecutionPayload, PayloadAttributes}; -use eyre::Result; -use serde::{Deserialize, Serialize}; -use std::future::Future; +use alloy_primitives::B256; +use alloy_rpc_types_engine::ExecutionPayload; +use scroll_alloy_rpc_types_engine::ScrollPayloadAttributes; + use tracing::debug; -/// The payload attributes for block building tailored for Scroll. -#[derive(Debug, Clone, Default, Serialize, Deserialize)] -pub struct ScrollPayloadAttributes { - /// The payload attributes. - pub(crate) payload_attributes: PayloadAttributes, - /// An optional array of transaction to be forced included in the block (includes l1 messages). - pub(crate) transactions: Option>, - /// Indicates whether the payload building job should happen with or without pool transactions. - pub(crate) no_tx_pool: bool, -} +use crate::EngineDriverError; /// Returns true if the [`ScrollPayloadAttributes`] matches the [`ExecutionPayload`]: /// - provided parent hash matches the parent hash of the [`ExecutionPayload`] @@ -29,7 +19,7 @@ pub(crate) fn matching_payloads( ) -> bool { if payload.parent_hash() != parent_hash { debug!( - target: "engine::driver", + target: "scroll::engine::driver", expected = ?parent_hash, got = ?payload.parent_hash(), "mismatch in parent hash" @@ -43,7 +33,7 @@ pub(crate) fn matching_payloads( if !matching_transactions { debug!( - target: "engine::driver", + target: "scroll::engine::driver", expected = ?attributes.transactions, got = ?payload_transactions, "mismatch in transactions" @@ -53,7 +43,7 @@ pub(crate) fn matching_payloads( if payload.timestamp() != attributes.payload_attributes.timestamp { debug!( - target: "engine::driver", + target: "scroll::engine::driver", expected = ?attributes.payload_attributes.timestamp, got = ?payload.timestamp(), "mismatch in timestamp" @@ -63,7 +53,7 @@ pub(crate) fn matching_payloads( if payload.prev_randao() != attributes.payload_attributes.prev_randao { debug!( - target: "engine::driver", + target: "scroll::engine::driver", expected = ?attributes.payload_attributes.prev_randao, got = ?payload.prev_randao(), "mismatch in prev_randao" @@ -75,17 +65,19 @@ pub(crate) fn matching_payloads( } /// Implementers of the trait can provide the L2 execution payload for a block id. +#[async_trait::async_trait] pub trait ExecutionPayloadProvider { /// Returns the [`ExecutionPayload`] for the provided [`BlockId`], or [None]. - fn execution_payload_by_block( + async fn execution_payload_by_block( &self, block_id: BlockId, - ) -> impl Future>> + Send; + ) -> Result, EngineDriverError>; } #[cfg(test)] mod tests { use super::*; + use alloy_primitives::Bytes; use alloy_rpc_types_engine::ExecutionPayloadV1; use arbitrary::{Arbitrary, Unstructured}; use reth_testing_utils::{generators, generators::Rng}; @@ -110,7 +102,7 @@ mod tests { } #[test] - fn test_matching_payloads() -> Result<()> { + fn test_matching_payloads() -> eyre::Result<()> { let mut bytes = [0u8; 1024]; generators::rng().fill(bytes.as_mut_slice()); let mut unstructured = Unstructured::new(&bytes); @@ -139,7 +131,7 @@ mod tests { } #[test] - fn test_mismatched_payloads() -> Result<()> { + fn test_mismatched_payloads() -> eyre::Result<()> { let mut bytes = [0u8; 1024]; generators::rng().fill(bytes.as_mut_slice()); let mut unstructured = Unstructured::new(&bytes); diff --git a/crates/engine/src/test_utils.rs b/crates/engine/src/test_utils.rs index a233d4c3..6921806c 100644 --- a/crates/engine/src/test_utils.rs +++ b/crates/engine/src/test_utils.rs @@ -1,20 +1,20 @@ -use crate::ScrollPayloadAttributes; -use alloy_primitives::{Address, B256}; -use alloy_rpc_types_engine::PayloadAttributes; -use arbitrary::Unstructured; +//! Test utilities for the engine crate. -impl<'a> arbitrary::Arbitrary<'a> for ScrollPayloadAttributes { - fn arbitrary(u: &mut Unstructured<'a>) -> arbitrary::Result { - Ok(Self { - payload_attributes: PayloadAttributes { - timestamp: u64::arbitrary(u)?, - prev_randao: B256::arbitrary(u)?, - suggested_fee_recipient: Address::arbitrary(u)?, - withdrawals: Some(Vec::arbitrary(u)?), - parent_beacon_block_root: Some(B256::arbitrary(u)?), - }, - transactions: Some(Vec::arbitrary(u)?), - no_tx_pool: bool::arbitrary(u)?, - }) +use crate::EngineDriverError; + +use super::ExecutionPayloadProvider; +use alloy_rpc_types_engine::ExecutionPayload; + +/// A default execution payload for testing that returns `Ok(None)` for all block IDs. +#[derive(Debug)] +pub struct NoopExecutionPayloadProvider; + +#[async_trait::async_trait] +impl ExecutionPayloadProvider for NoopExecutionPayloadProvider { + async fn execution_payload_by_block( + &self, + _block_id: alloy_eips::BlockId, + ) -> Result, EngineDriverError> { + Ok(None) } } diff --git a/crates/network/Cargo.toml b/crates/network/Cargo.toml index 20c8f55c..f0931ff8 100644 --- a/crates/network/Cargo.toml +++ b/crates/network/Cargo.toml @@ -13,21 +13,39 @@ alloy-primitives = { workspace = true, features = [ ] } # reth +reth-discv5 = { git = "https://github.com/scroll-tech/reth.git", branch = "feat/add-deref-blanket-engine-api" } +reth-eth-wire-types.workspace = true reth-network.workspace = true reth-network-api.workspace = true +reth-network-types = { git = "https://github.com/scroll-tech/reth.git", branch = "feat/add-deref-blanket-engine-api" } reth-network-peers.workspace = true reth-primitives.workspace = true -reth-storage-api = { git = "https://github.com/scroll-tech/reth.git" } +reth-storage-api = { git = "https://github.com/scroll-tech/reth.git", branch = "feat/add-deref-blanket-engine-api" } +reth-tasks.workspace = true # scroll reth-scroll-chainspec.workspace = true -reth-scroll-node = { workspace = true, features = ["skip-state-root-validation", "scroll"] } +reth-scroll-node = { workspace = true, features = ["scroll", "skip-state-root-validation"] } reth-scroll-primitives.workspace = true scroll-wire.workspace = true # misc futures.workspace = true +parking_lot = "0.12" secp256k1 = { workspace = true, features = ["global-context", "rand-std", "recovery"] } tokio = { workspace = true, features = ["full"] } tokio-stream.workspace = true tracing.workspace = true + +[features] +serde = [ + "alloy-primitives/serde", + "parking_lot/serde", + "reth-eth-wire-types/serde", + "reth-network/serde", + "reth-network-api/serde", + "reth-network-types/serde", + "reth-scroll-primitives/serde", + "scroll-wire/serde", + "secp256k1/serde" +] diff --git a/crates/network/src/event.rs b/crates/network/src/event.rs new file mode 100644 index 00000000..d5b83416 --- /dev/null +++ b/crates/network/src/event.rs @@ -0,0 +1,17 @@ +use reth_network_api::PeerId; +use reth_scroll_primitives::ScrollBlock; +use secp256k1::ecdsa::Signature; + +/// A new block with the peer id that it was received from. +#[derive(Debug, Clone)] +pub struct NewBlockWithPeer { + pub peer_id: PeerId, + pub block: ScrollBlock, + pub signature: Signature, +} + +/// An event that is emitted by the network manager to its subscribers. +#[derive(Debug)] +pub enum NetworkManagerEvent { + NewBlock(NewBlockWithPeer), +} diff --git a/crates/network/src/handle.rs b/crates/network/src/handle.rs index 31027f0b..ddd79607 100644 --- a/crates/network/src/handle.rs +++ b/crates/network/src/handle.rs @@ -50,6 +50,10 @@ impl NetworkHandle { let _ = self.inner.to_manager_tx.send(msg); } + pub fn block_import_outcome(&self, outcome: super::BlockImportOutcome) { + self.send_message(NetworkHandleMessage::BlockImportOutcome(outcome)); + } + /// Announces a block to the network. pub fn announce_block(&self, block: ScrollBlock, signature: Signature) { self.send_message(NetworkHandleMessage::AnnounceBlock { block, signature }); @@ -74,7 +78,9 @@ impl NetworkHandle { /// A message type used for communication between the [`NetworkHandle`] and the /// [`super::NetworkManager`]. +#[derive(Debug)] pub enum NetworkHandleMessage { AnnounceBlock { block: ScrollBlock, signature: Signature }, + BlockImportOutcome(super::BlockImportOutcome), Shutdown(oneshot::Sender<()>), } diff --git a/crates/network/src/import.rs b/crates/network/src/import.rs index a9183760..b4891efd 100644 --- a/crates/network/src/import.rs +++ b/crates/network/src/import.rs @@ -1,32 +1,19 @@ use reth_network_peers::PeerId; use scroll_wire::NewBlock; -use secp256k1::ecdsa::Signature; -use std::task::{Context, Poll}; -use tracing::trace; -/// A trait for importing new blocks from the network. -pub trait BlockImport: std::fmt::Debug + Send + Sync { - /// Called when a new block is received from the network. - fn on_new_block( - &mut self, - peer_id: PeerId, - block: reth_scroll_primitives::ScrollBlock, - signature: Signature, - ); - - /// Polls the block import type for results of block import. - fn poll(&mut self, cx: &mut Context<'_>) -> Poll; -} +pub type BlockImportResult = Result; /// The outcome of a block import operation. +#[derive(Debug)] pub struct BlockImportOutcome { /// The peer that the block was received from. pub peer: PeerId, /// The result of the block import operation. - pub result: Result, + pub result: BlockImportResult, } /// The result of a block validation operation. +#[derive(Debug)] pub enum BlockValidation { /// The block header is valid. ValidHeader { new_block: NewBlock }, @@ -35,36 +22,36 @@ pub enum BlockValidation { } /// An error that can occur during block import. +#[derive(Debug)] pub enum BlockImportError { /// An error occurred during consensus. Consensus(ConsensusError), + /// An error occurred during block validation. + Validation(BlockValidationError), } /// A consensus related error that can occur during block import. +#[derive(Debug)] pub enum ConsensusError { - /// The block is invalid. - Block, - /// The state root is invalid. - StateRoot, /// The signature is invalid. Signature, } -/// A block import type that does nothing. +/// An error that can occur during block validation. #[derive(Debug)] -pub struct NoopBlockImport; +pub enum BlockValidationError { + /// The block is invalid. + InvalidBlock, +} -impl BlockImport for NoopBlockImport { - fn on_new_block( - &mut self, - peer_id: PeerId, - block: reth_scroll_primitives::ScrollBlock, - _signature: Signature, - ) { - trace!(target: "network::import::NoopBlockImport", peer_id = %peer_id, block = ?block, "Received new block"); +impl From for BlockImportError { + fn from(error: ConsensusError) -> Self { + Self::Consensus(error) } +} - fn poll(&mut self, _cx: &mut std::task::Context<'_>) -> std::task::Poll { - std::task::Poll::Pending +impl From for BlockImportError { + fn from(error: BlockValidationError) -> Self { + Self::Validation(error) } } diff --git a/crates/network/src/lib.rs b/crates/network/src/lib.rs index 8303cad1..bc53c466 100644 --- a/crates/network/src/lib.rs +++ b/crates/network/src/lib.rs @@ -1,9 +1,15 @@ -mod import; -pub use import::{BlockImport, BlockImportOutcome, BlockValidation, NoopBlockImport}; +mod event; +pub use event::{NetworkManagerEvent, NewBlockWithPeer}; mod handle; pub use handle::{NetworkHandle, NetworkHandleMessage}; +mod import; +pub use import::{ + BlockImportError, BlockImportOutcome, BlockImportResult, BlockValidation, BlockValidationError, + ConsensusError, +}; + mod manager; pub use manager::NetworkManager; diff --git a/crates/network/src/main.rs b/crates/network/src/main.rs deleted file mode 100644 index 9d322d3e..00000000 --- a/crates/network/src/main.rs +++ /dev/null @@ -1,46 +0,0 @@ -use reth_network::{NetworkInfo, Peers}; -use reth_scroll_chainspec::SCROLL_MAINNET; -use scroll_network::{NetworkConfigBuilder, NetworkManager, NoopBlockImport}; -use scroll_wire::ScrollWireConfig; -use secp256k1::ecdsa::Signature; - -#[tokio::main] -async fn main() { - let config_1 = - NetworkConfigBuilder::::with_rng_secret_key() - .disable_discovery() - .build_with_noop_provider((*SCROLL_MAINNET).clone()); - let scroll_wire_config = ScrollWireConfig::new(false); - let network_1 = - NetworkManager::new(config_1, scroll_wire_config.clone(), NoopBlockImport).await; - let network_1_handle = network_1.handle(); - let peer_1_id = *network_1_handle.peer_id(); - let peer_1_addr = network_1_handle.inner().local_addr(); - - let config_2 = - NetworkConfigBuilder::::with_rng_secret_key() - .disable_discovery() - .listener_addr(std::net::SocketAddr::V4(std::net::SocketAddrV4::new( - std::net::Ipv4Addr::UNSPECIFIED, - 0, - ))) - .build_with_noop_provider((*SCROLL_MAINNET).clone()); - let network_2 = NetworkManager::new(config_2, scroll_wire_config, NoopBlockImport).await; - let network_2_handle = network_2.handle(); - let peer_2_id = *network_2_handle.peer_id(); - let peer_2_addr = network_2_handle.inner().local_addr(); - - tokio::spawn(network_1); - tokio::spawn(network_2); - - network_1_handle.inner().add_peer(peer_2_id, peer_2_addr); - network_2_handle.inner().add_peer(peer_1_id, peer_1_addr); - - let signature = Signature::from_compact(&[0u8; 64][..]).unwrap(); - let block = reth_primitives::Block::default(); - - for _ in 0..100 { - network_1_handle.announce_block(block.clone(), signature); - tokio::time::sleep(tokio::time::Duration::from_secs(5)).await; - } -} diff --git a/crates/network/src/manager.rs b/crates/network/src/manager.rs index 4ac2d2e4..d2e20b7d 100644 --- a/crates/network/src/manager.rs +++ b/crates/network/src/manager.rs @@ -1,9 +1,12 @@ +use crate::{BlockImportError, BlockValidationError}; + use super::{ - BlockImport, BlockImportOutcome, BlockValidation, NetworkHandle, NetworkHandleMessage, + BlockImportOutcome, BlockValidation, NetworkHandle, NetworkHandleMessage, NetworkManagerEvent, + NewBlockWithPeer, }; use alloy_primitives::FixedBytes; use core::task::Poll; -use futures::{FutureExt, StreamExt}; +use futures::{FutureExt, Stream, StreamExt}; use reth_network::{ cache::LruCache, NetworkConfig as RethNetworkConfig, NetworkHandle as RethNetworkHandle, NetworkManager as RethNetworkManager, Peers, @@ -11,43 +14,29 @@ use reth_network::{ use reth_scroll_node::ScrollNetworkPrimitives; use reth_storage_api::BlockNumReader as BlockNumReaderT; use scroll_wire::{ - Event, NewBlock, ProtocolHandler, ScrollWireConfig, ScrollWireManager, LRU_CACHE_SIZE, + NewBlock, ProtocolHandler, ScrollWireConfig, ScrollWireEvent, ScrollWireManager, LRU_CACHE_SIZE, }; -use std::future::Future; -use tokio::sync::mpsc::{self, UnboundedReceiver, UnboundedSender}; +use tokio::sync::mpsc::{self, UnboundedReceiver}; use tokio_stream::wrappers::UnboundedReceiverStream; use tracing::trace; /// [`NetworkManager`] manages the state of the scroll p2p network. /// -/// This is an endless [`Future`] that drives the state of the entire network forward and includes -/// the following components: -/// - inner_network_handle: Responsible for peer discover, managing connections between peers and -/// operation of the eth-wire protocol. -/// - block_import: Responsible for importing blocks that have been gossiped over the scroll-wire -/// protocol. -/// - to_manager_tx: Used to interact with this [`NetworkManager`] by sending messages using the +/// This manager drives the state of the entire network forward and includes the following +/// components: +/// - `handle`: Used to interact with this [`NetworkManager`] by sending messages using the /// [`NetworkHandle`]. -/// - from_handle_rx: Receives commands from the [`NetworkHandle`]. -/// - scroll_wire: The scroll-wire protocol that manages connections and state of the scroll-wire -/// protocol. -/// - eth_wire_block_source: An optional source of new blocks from the eth-wire protocol, this is -/// used to bridge new blocks announced on the eth-wire protocol to the scroll-wire protocol. +/// - `from_handle_rx`: Receives commands from the [`NetworkHandle`]. +/// - `scroll_wire`: The type that manages connections and state of the scroll wire protocol. +#[derive(Debug)] pub struct NetworkManager { - /// A handle to the inner reth network manager. - inner_network_handle: RethNetworkHandle, - /// Handles block imports for new blocks received from the network. - block_import: Box, - /// The sender half of the channel set up between this type and the [`NetworkHandle`], - /// sends commands to the [`NetworkHandle`]. - to_manager_tx: UnboundedSender, + /// A handle used to interact with the network manager. + handle: NetworkHandle, /// Receiver half of the channel set up between this type and the [`NetworkHandle`], receives /// [`NetworkHandleMessage`]s. from_handle_rx: UnboundedReceiverStream, - /// The scroll-wire protocol. + /// The scroll wire protocol manager. scroll_wire: ScrollWireManager, - /// An optional source of new blocks from the eth-wire protocol. - eth_wire_block_source: Option>, } impl NetworkManager { @@ -57,8 +46,7 @@ impl NetworkManager { /// [`RethNetworkManager`] are instantiated externally. pub fn from_parts( inner_network_handle: RethNetworkHandle, - block_import: Box, - events: UnboundedReceiver, + events: UnboundedReceiver, ) -> Self { // Create the channel for sending messages to the network manager from the network handle. let (to_manager_tx, from_handle_rx) = mpsc::unbounded_channel(); @@ -66,21 +54,15 @@ impl NetworkManager { // Create the scroll-wire protocol manager. let scroll_wire = ScrollWireManager::new(events); - Self { - inner_network_handle, - block_import, - to_manager_tx, - from_handle_rx: from_handle_rx.into(), - scroll_wire, - eth_wire_block_source: None, - } + let handle = NetworkHandle::new(to_manager_tx, inner_network_handle); + + Self { handle, from_handle_rx: from_handle_rx.into(), scroll_wire } } /// Creates a new [`NetworkManager`] instance from the provided configuration and block import. pub async fn new( mut network_config: RethNetworkConfig, scroll_wire_config: ScrollWireConfig, - block_import: impl BlockImport + 'static, ) -> Self { // Create the scroll-wire protocol handler. let (scroll_wire_handler, events) = ProtocolHandler::new(scroll_wire_config); @@ -96,32 +78,25 @@ impl NetworkManager { // Create the channel for sending messages to the network manager. let (to_manager_tx, from_handle_rx) = mpsc::unbounded_channel(); + let handle = NetworkHandle::new(to_manager_tx, inner_network_handle); + // Create the scroll-wire protocol manager. let scroll_wire = ScrollWireManager::new(events); // Spawn the inner network manager. tokio::spawn(inner_network_manager); - Self { - inner_network_handle, - block_import: Box::new(block_import), - to_manager_tx, - from_handle_rx: from_handle_rx.into(), - scroll_wire, - eth_wire_block_source: None, - } + Self { handle, from_handle_rx: from_handle_rx.into(), scroll_wire } } - /// Sets the new block source. This is used to bridge new blocks announced on the eth-wire - /// protocol. - pub fn with_new_block_source(mut self, source: UnboundedReceiver) -> Self { - self.eth_wire_block_source = Some(source.into()); - self + /// Returns a new [`NetworkHandle`] instance. + pub fn handle(&self) -> &NetworkHandle { + &self.handle } - /// Returns a new [`NetworkHandle`] instance. - pub fn handle(&self) -> NetworkHandle { - NetworkHandle::new(self.to_manager_tx.clone(), self.inner_network_handle.clone()) + /// Returns an inner network handle [`RethNetworkHandle`]. + pub fn inner_network_handle(&self) -> &RethNetworkHandle { + self.handle.inner() } /// Announces a new block to the network. @@ -139,17 +114,17 @@ impl NetworkManager { // Announce block to the filtered set of peers for peer_id in peers { - trace!(target: "network::manager", peer_id = %peer_id, block_hash = %hash, "Announcing new block to peer"); + trace!(target: "scroll::network::manager", peer_id = %peer_id, block_hash = %hash, "Announcing new block to peer"); self.scroll_wire.announce_block(peer_id, &block, hash); } } /// Handler for received events from the [`ScrollWireManager`]. - fn on_scroll_wire_event(&mut self, event: Event) { + fn on_scroll_wire_event(&mut self, event: ScrollWireEvent) -> NetworkManagerEvent { match event { - Event::NewBlock { peer_id, block, signature } => { - trace!(target: "network::manager", peer_id = ?peer_id, block = ?block, signature = ?signature, "Received new block"); - self.block_import.on_new_block(peer_id, block, signature); + ScrollWireEvent::NewBlock { peer_id, block, signature } => { + trace!(target: "scroll::network::manager", peer_id = ?peer_id, block = ?block.hash_slow(), signature = ?signature, "Received new block"); + NetworkManagerEvent::NewBlock(NewBlockWithPeer { peer_id, block, signature }) } // Only `NewBlock` events are expected from the scroll-wire protocol. _ => { @@ -164,6 +139,9 @@ impl NetworkManager { NetworkHandleMessage::AnnounceBlock { block, signature } => { self.announce_block(NewBlock::new(signature, block)) } + NetworkHandleMessage::BlockImportOutcome(outcome) => { + self.on_block_import_result(outcome); + } NetworkHandleMessage::Shutdown(tx) => { tx.send(()).unwrap() // self.perform_network_shutdown().await; @@ -178,6 +156,7 @@ impl NetworkManager { match result { Ok(BlockValidation::ValidBlock { new_block: msg }) | Ok(BlockValidation::ValidHeader { new_block: msg }) => { + trace!(target: "scroll::network::manager", peer_id = ?peer, block = ?msg.block, "Block import successful - announcing block to network"); let hash = msg.block.hash_slow(); self.scroll_wire .state_mut() @@ -186,58 +165,34 @@ impl NetworkManager { .insert(hash); self.announce_block(msg); } - Err(_) => { - self.inner_network_handle + Err(BlockImportError::Consensus(err)) => { + trace!(target: "scroll::network::manager", peer_id = ?peer, ?err, "Block import failed - consensus error - penalizing peer"); + self.inner_network_handle() + .reputation_change(peer, reth_network_api::ReputationChangeKind::BadBlock); + } + Err(BlockImportError::Validation(BlockValidationError::InvalidBlock)) => { + trace!(target: "scroll::network::manager", peer_id = ?peer, "Block import failed - invalid block - penalizing peer"); + self.inner_network_handle() .reputation_change(peer, reth_network_api::ReputationChangeKind::BadBlock); } } } pub async fn perform_network_shutdown(&mut self) { - self.inner_network_handle.shutdown().await.unwrap() + self.inner_network_handle().shutdown().await.unwrap() } } -impl Future for NetworkManager { - type Output = (); +impl Stream for NetworkManager { + type Item = NetworkManagerEvent; - fn poll( + fn poll_next( self: std::pin::Pin<&mut Self>, cx: &mut std::task::Context<'_>, - ) -> std::task::Poll<()> { + ) -> std::task::Poll> { let this = self.get_mut(); - // Handle the block import results. - while let Poll::Ready(outcome) = this.block_import.poll(cx) { - this.on_block_import_result(outcome); - } - - // Next we handle the scroll-wire events. - while let Poll::Ready(event) = this.scroll_wire.poll_unpin(cx) { - this.on_scroll_wire_event(event); - } - - // Next we handle the messages from the eth-wire protocol. - while let Some(Poll::Ready(Some(event))) = - this.eth_wire_block_source.as_mut().map(|x| x.poll_next_unpin(cx)) - { - // we should assert that the eth-wire protocol is only sending new blocks. All new - // blocks from the eth-wire protocol are valid and do not need to be validated. - match event { - Event::NewBlock { peer_id: _, block, signature } => { - let block = NewBlock { - block, - signature: signature.serialize_compact().to_vec().into(), - }; - this.announce_block(block); - } - _ => { - unreachable!("eth wire source should only send new blocks"); - } - } - } - - // Next we handle the messages from the network handle. + // We handle the messages from the network handle. loop { match this.from_handle_rx.poll_next_unpin(cx) { // A message has been received from the network handle. @@ -248,13 +203,18 @@ impl Future for NetworkManager { std::task::Poll::Ready(None) => { // return std::task::Poll::Ready(()); // For now we will return pending to keep the network running. - return std::task::Poll::Pending; + break; } // No additional messages exist break. - std::task::Poll::Pending => { - return std::task::Poll::Pending; - } + std::task::Poll::Pending => break, } } + + // Next we handle the scroll-wire events. + if let Poll::Ready(event) = this.scroll_wire.poll_unpin(cx) { + return std::task::Poll::Ready(Some(this.on_scroll_wire_event(event))); + } + + std::task::Poll::Pending } } diff --git a/crates/node/Cargo.toml b/crates/node/Cargo.toml new file mode 100644 index 00000000..290f8c30 --- /dev/null +++ b/crates/node/Cargo.toml @@ -0,0 +1,53 @@ +[package] +name = "rollup-node-manager" +version.workspace = true +edition.workspace = true +rust-version.workspace = true +license.workspace = true +exclude.workspace = true + +[dependencies] +# alloy +alloy-eips.workspace = true +alloy-rpc-types-engine.workspace = true + +# scroll-alloy +scroll-alloy-network.workspace = true +scroll-alloy-provider.workspace = true + +# reth +reth-engine-primitives = { git = "https://github.com/scroll-tech/reth.git", branch = "feat/add-deref-blanket-engine-api", default-features = false, features = ["scroll"] } +reth-network-peers.workspace = true +reth-rpc-api.workspace = true +reth-tasks.workspace = true +reth-tokio-util = { git = "https://github.com/scroll-tech/reth.git", branch = "feat/add-deref-blanket-engine-api", default-features = false } + +# reth-scroll +reth-scroll-engine-primitives.workspace = true +reth-scroll-primitives.workspace = true + +# scroll +scroll-engine.workspace = true +scroll-network.workspace = true +scroll-wire.workspace = true + +# misc +futures.workspace = true +secp256k1 = { workspace = true, features = ["global-context", "rand-std", "recovery"] } +tokio-stream.workspace = true +tokio.workspace = true +tracing.workspace = true + +[lints] +workspace = true + +[features] +serde = [ + "alloy-rpc-types-engine/serde", + "reth-scroll-primitives/serde", + "scroll-engine/serde", + "scroll-network/serde", + "scroll-wire/serde", + "secp256k1/serde", + "alloy-eips/serde" +] diff --git a/crates/node/src/consensus.rs b/crates/node/src/consensus.rs new file mode 100644 index 00000000..08baeac3 --- /dev/null +++ b/crates/node/src/consensus.rs @@ -0,0 +1,38 @@ +use reth_scroll_primitives::ScrollBlock; +use scroll_network::ConsensusError; +use secp256k1::{ecdsa::Signature, PublicKey}; + +/// A trait for consensus implementations. +pub trait Consensus { + /// Validates a new block with the given signature. + fn validate_new_block( + &self, + block: &ScrollBlock, + signature: &Signature, + ) -> Result<(), ConsensusError>; +} + +/// A Proof of Authority consensus instance. +#[derive(Debug)] +pub struct PoAConsensus { + _authorized_signers: Vec, +} + +impl PoAConsensus { + /// Creates a new [`PoAConsensus`] consensus instance with the given authorized signers. + pub const fn new(authorized_signers: Vec) -> Self { + Self { _authorized_signers: authorized_signers } + } +} + +impl Consensus for PoAConsensus { + fn validate_new_block( + &self, + _block: &ScrollBlock, + _signature: &Signature, + ) -> Result<(), ConsensusError> { + // TODO: recover the public key from the signature and check if it is in the authorized + // signers --- CURRENTLY NOOP --- + Ok(()) + } +} diff --git a/crates/node/src/event.rs b/crates/node/src/event.rs new file mode 100644 index 00000000..a9f898d6 --- /dev/null +++ b/crates/node/src/event.rs @@ -0,0 +1,8 @@ +use scroll_network::NewBlockWithPeer; + +/// An event that can be emitted by the rollup node manager. +#[derive(Debug, Clone)] +pub enum RollupEvent { + /// A new block has been received from the network. + NewBlockReceived(NewBlockWithPeer), +} diff --git a/crates/node/src/lib.rs b/crates/node/src/lib.rs new file mode 100644 index 00000000..8375ac32 --- /dev/null +++ b/crates/node/src/lib.rs @@ -0,0 +1,247 @@ +//! This library contains the main manager for the rollup node. + +use alloy_rpc_types_engine::{ + ExecutionPayload, ExecutionPayloadV1, ForkchoiceState as AlloyForkchoiceState, + PayloadStatusEnum, +}; +use futures::{stream::FuturesOrdered, StreamExt}; +use reth_tokio_util::{EventSender, EventStream}; +use scroll_alloy_network::Scroll as ScrollNetwork; +use scroll_alloy_provider::ScrollEngineApi; +use scroll_engine::{ + BlockInfo, EngineDriver, EngineDriverError, ExecutionPayloadProvider, ForkchoiceState, +}; +use scroll_network::{ + BlockImportError, BlockImportOutcome, BlockValidation, BlockValidationError, NetworkManager, + NetworkManagerEvent, NewBlockWithPeer, +}; +use scroll_wire::NewBlock; +use std::{ + future::Future, + pin::Pin, + sync::Arc, + task::{Context, Poll}, +}; +use tokio::sync::mpsc::UnboundedReceiver; +use tokio_stream::wrappers::UnboundedReceiverStream; +use tracing::{error, trace}; + +mod event; +pub use event::RollupEvent; + +mod consensus; +use consensus::Consensus; +pub use consensus::PoAConsensus; + +/// The size of the event channel. +const EVENT_CHANNEL_SIZE: usize = 100; + +/// A future that resolves to a tuple of the block info and the block import outcome. +type PendingBlockImportFuture = + Pin, Option)> + Send>>; + +/// The main manager for the rollup node. +/// +/// This is an endless [`Future`] that drives the state of the entire network forward and includes +/// the following components: +/// - `network`: Responsible for peer discover, managing connections between peers and operation of +/// the eth-wire protocol. +/// - `engine`: Responsible for importing blocks that have been gossiped over the scroll-wire +/// protocol. +/// - `consensus`: The consensus algorithm used by the rollup node. +/// - `new_block_rx`: Receives new blocks from the network. +/// - `forkchoice_state`: The forkchoice state of the rollup node. +/// - `pending_block_imports`: A collection of pending block imports. +/// - `event_sender`: An event sender for sending events to subscribers of the rollup node manager. +#[derive(Debug)] +pub struct RollupNodeManager { + /// The network manager that manages the scroll p2p network. + network: NetworkManager, + /// The engine driver used to communicate with the engine. + engine: Arc>, + /// The consensus algorithm used by the rollup node. + consensus: C, + /// The receiver for new blocks received from the network (used to bridge from eth-wire). + new_block_rx: UnboundedReceiverStream, + /// The forkchoice state of the rollup node. + forkchoice_state: ForkchoiceState, + /// A collection of pending block imports. + pending_block_imports: FuturesOrdered, + /// An event sender for sending events to subscribers of the rollup node manager. + event_sender: Option>, +} + +impl RollupNodeManager +where + C: Consensus + Unpin, + EC: ScrollEngineApi + Unpin + Sync + Send + 'static, + P: ExecutionPayloadProvider + Unpin + Send + Sync + 'static, +{ + /// Create a new [`RollupNodeManager`] instance. + pub fn new( + network: NetworkManager, + engine: EngineDriver, + forkchoice_state: ForkchoiceState, + consensus: C, + new_block_rx: UnboundedReceiver, + ) -> Self { + Self { + network, + engine: Arc::new(engine), + consensus, + new_block_rx: new_block_rx.into(), + forkchoice_state, + pending_block_imports: FuturesOrdered::new(), + event_sender: None, + } + } + + /// Returns a new event listener for the rollup node manager. + pub fn event_listener(&mut self) -> EventStream { + if let Some(event_sender) = &self.event_sender { + return event_sender.new_listener() + }; + + let event_sender = EventSender::new(EVENT_CHANNEL_SIZE); + let event_listener = event_sender.new_listener(); + self.event_sender = Some(event_sender); + + event_listener + } + + /// Handles a new block received from the network. + /// + /// We will first validate the consensus of the block, then we will send the block to the engine + /// to validate the correctness of the block. + pub fn handle_new_block(&mut self, block_with_peer: NewBlockWithPeer, cx: &mut Context<'_>) { + if let Some(event_sender) = self.event_sender.as_ref() { + event_sender.notify(RollupEvent::NewBlockReceived(block_with_peer.clone())); + } + + let NewBlockWithPeer { peer_id: peer, block, signature } = block_with_peer; + trace!(target: "scroll::node::manager", "Received new block from peer {:?} - hash {:?}", peer, block.hash_slow()); + + // Validate the consensus of the block. + // TODO: Should we spawn a task to validate the consensus of the block? + // Is the consensus validation blocking? + if let Err(err) = self.consensus.validate_new_block(&block, &signature) { + error!(target: "scroll::node::manager", ?err, "consensus checks failed on block {:?} from peer {:?}", block.hash_slow(), peer); + self.network + .handle() + .block_import_outcome(BlockImportOutcome { peer, result: Err(err.into()) }); + return; + } + + // If the forkchoice state is at genesis, update the forkchoice state with the parent of the + // block. + if self.forkchoice_state.is_genesis() { + let block_num_hash = block.parent_num_hash(); + self.forkchoice_state = ForkchoiceState::from_block_info(BlockInfo { + number: block_num_hash.number, + hash: block_num_hash.hash, + }); + } + + // Send the block to the engine to validate the correctness of the block. + let mut fcs = self.get_alloy_fcs(); + let engine = self.engine.clone(); + let future = Box::pin(async move { + trace!(target: "scroll::node::manager", "handling block import future for block {:?}", block.hash_slow()); + + // convert the block to an execution payload and update the forkchoice state + let execution_payload: ExecutionPayload = + ExecutionPayloadV1::from_block_slow(&block).into(); + let unsafe_block_info: BlockInfo = (&execution_payload).into(); + fcs.head_block_hash = unsafe_block_info.hash; + + // process the execution payload + // TODO: needs testing + let (unsafe_block_info, import_outcome) = + match engine.handle_execution_payload(execution_payload, fcs).await { + Err(EngineDriverError::InvalidExecutionPayload) => ( + Some(unsafe_block_info), + Some(Err(BlockImportError::Validation(BlockValidationError::InvalidBlock))), + ), + Ok((PayloadStatusEnum::Valid, PayloadStatusEnum::Valid)) => ( + Some(unsafe_block_info), + Some(Ok(BlockValidation::ValidBlock { + new_block: NewBlock { + block, + signature: signature.serialize_compact().to_vec().into(), + }, + })), + ), + _ => (None, None), + }; + + (unsafe_block_info, import_outcome.map(|result| BlockImportOutcome { peer, result })) + }); + + self.pending_block_imports.push_back(future); + cx.waker().wake_by_ref(); + } + + const fn get_alloy_fcs(&self) -> AlloyForkchoiceState { + self.forkchoice_state.get_alloy_fcs() + } + + /// Handles a network manager event. + /// + /// Currently the network manager only emits a `NewBlock` event. + fn handle_network_manager_event(&mut self, event: NetworkManagerEvent, cx: &mut Context<'_>) { + match event { + NetworkManagerEvent::NewBlock(block) => self.handle_new_block(block, cx), + } + } + + /// Handles a block import outcome. + fn handle_block_import_outcome( + &mut self, + unsafe_block_info: Option, + outcome: Option, + ) { + trace!(target: "scroll::node::manager", ?outcome, "handling block import outcome"); + + // If we have an unsafe block info, update the forkchoice state. + if let Some(unsafe_block_info) = unsafe_block_info { + self.forkchoice_state.update_unsafe_block_info(unsafe_block_info); + } + + // If we have an outcome, send it to the network manager. + if let Some(outcome) = outcome { + self.network.handle().block_import_outcome(outcome); + } + } +} + +impl Future for RollupNodeManager +where + C: Consensus + Unpin, + EC: ScrollEngineApi + Unpin + Sync + Send + 'static, + P: ExecutionPayloadProvider + Unpin + Send + Sync + 'static, +{ + type Output = (); + + fn poll(self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll { + let this = self.get_mut(); + + // Handle pending block imports. + while let Poll::Ready(Some((block_info, outcome))) = + this.pending_block_imports.poll_next_unpin(cx) + { + this.handle_block_import_outcome(block_info, outcome); + } + + // Handle blocks received from the eth-wire protocol. + while let Poll::Ready(Some(block)) = this.new_block_rx.poll_next_unpin(cx) { + this.handle_new_block(block, cx); + } + + // Handle network manager events. + while let Poll::Ready(Some(event)) = this.network.poll_next_unpin(cx) { + this.handle_network_manager_event(event, cx); + } + + Poll::Pending + } +} diff --git a/crates/scroll-wire/Cargo.toml b/crates/scroll-wire/Cargo.toml index 476bb457..494cd7ae 100644 --- a/crates/scroll-wire/Cargo.toml +++ b/crates/scroll-wire/Cargo.toml @@ -17,9 +17,10 @@ alloy-primitives = { workspace = true, features = [ alloy-rlp = { version = "0.3.10", default-features = false } # reth -reth-eth-wire = { git = "https://github.com/scroll-tech/reth.git" } +reth-eth-wire = { git = "https://github.com/scroll-tech/reth.git", branch = "feat/add-deref-blanket-engine-api" } reth-network.workspace = true reth-network-api.workspace = true +reth-primitives.workspace = true # scroll reth-scroll-primitives = { workspace = true, features = ["serde"] } @@ -33,3 +34,13 @@ secp256k1 = { workspace = true, features = [ tokio = { workspace = true, features = ["full"] } tokio-stream.workspace = true tracing.workspace = true + +[features] +serde = [ + "alloy-primitives/serde", + "reth-eth-wire/serde", + "reth-network/serde", + "reth-network-api/serde", + "reth-scroll-primitives/serde", + "secp256k1/serde" +] diff --git a/crates/scroll-wire/src/connection/handler.rs b/crates/scroll-wire/src/connection/handler.rs index f682a3ec..761c9965 100644 --- a/crates/scroll-wire/src/connection/handler.rs +++ b/crates/scroll-wire/src/connection/handler.rs @@ -1,31 +1,31 @@ -use super::{Connection, ScrollWireConfig}; +use super::{ScrollWireConfig, ScrollWireConnection}; use crate::{ - protocol::{Message, ProtocolState}, - Event, + protocol::{ProtocolState, ScrollMessage}, + ScrollWireEvent, }; use reth_network::protocol::{ConnectionHandler as ConnectionHandlerTrait, OnNotSupported}; use tracing::trace; /// The connection handler for the `ScrollWire` protocol. #[derive(Debug)] -pub struct ConnectionHandler { +pub struct ScrollConnectionHandler { state: ProtocolState, config: ScrollWireConfig, } -impl ConnectionHandler { - /// Creates a new [`ConnectionHandler`] with the provided state and config. +impl ScrollConnectionHandler { + /// Creates a new [`ScrollConnectionHandler`] with the provided state and config. pub const fn from_parts(state: ProtocolState, config: ScrollWireConfig) -> Self { Self { state, config } } } -impl ConnectionHandlerTrait for ConnectionHandler { - type Connection = Connection; +impl ConnectionHandlerTrait for ScrollConnectionHandler { + type Connection = ScrollWireConnection; /// The protocol that this connection handler is for. fn protocol(&self) -> reth_eth_wire::protocol::Protocol { - Message::protocol() + ScrollMessage::protocol() } /// Called when a incoming connection is invoked by a peer. @@ -36,10 +36,10 @@ impl ConnectionHandlerTrait for ConnectionHandler { _peer_id: reth_network_api::PeerId, ) -> OnNotSupported { if self.config.connect_unsupported_peer() { - trace!(target: "scroll_wire::connection::handler", "Peer does not support the ScrollWire protocol, keeping connection alive."); + trace!(target: "scroll::wire::connection::handler", "Peer does not support the ScrollWire protocol, keeping connection alive."); OnNotSupported::KeepAlive } else { - trace!(target: "scroll_wire::connection::handler", "Peer does not support the ScrollWire protocol, disconnecting."); + trace!(target: "scroll::wire::connection::handler", "Peer does not support the ScrollWire protocol, disconnecting."); OnNotSupported::Disconnect } } @@ -51,7 +51,7 @@ impl ConnectionHandlerTrait for ConnectionHandler { peer_id: reth_network_api::PeerId, conn: reth_eth_wire::multiplex::ProtocolConnection, ) -> Self::Connection { - trace!(target: "scroll_wire::connection::handler", peer_id = %peer_id, direction = ?direction, "Connection established with peer"); + trace!(target: "scroll::wire::connection::handler", peer_id = %peer_id, direction = ?direction, "Connection established with peer"); // Create a new channel for sending messages to the connection. let (msg_tx, msg_rx) = tokio::sync::mpsc::unbounded_channel(); @@ -59,9 +59,13 @@ impl ConnectionHandlerTrait for ConnectionHandler { // Emit a ConnectionEstablished containing the sender to send messages to the connection. self.state .event_sender() - .send(Event::ConnectionEstablished { direction, peer_id, to_connection: msg_tx }) + .send(ScrollWireEvent::ConnectionEstablished { + direction, + peer_id, + to_connection: msg_tx, + }) .expect("Failed to send ConnectionEstablished event - receiver dropped"); - Connection::new(peer_id, conn, direction, msg_rx, self.state) + ScrollWireConnection::new(peer_id, conn, direction, msg_rx, self.state) } } diff --git a/crates/scroll-wire/src/connection/mod.rs b/crates/scroll-wire/src/connection/mod.rs index 0c719a07..418d5497 100644 --- a/crates/scroll-wire/src/connection/mod.rs +++ b/crates/scroll-wire/src/connection/mod.rs @@ -1,5 +1,5 @@ use crate::{ - protocol::{Event, Message, MessagePayload, ProtocolState}, + protocol::{ProtocolState, ScrollMessage, ScrollMessagePayload, ScrollWireEvent}, ScrollWireConfig, }; use alloy_rlp::BytesMut; @@ -17,30 +17,31 @@ use tokio_stream::wrappers::UnboundedReceiverStream; use tracing::trace; mod handler; -pub(crate) use handler::ConnectionHandler; +pub(crate) use handler::ScrollConnectionHandler; /// Connection between two peers using the scroll wire protocol. #[derive(Debug)] -pub struct Connection { +pub struct ScrollWireConnection { /// The inbound connection from the peer. pub conn: ProtocolConnection, /// The direction of the connection. pub direction: Direction, /// A stream of messages to be announced to the peer. - pub outbound: UnboundedReceiverStream, + pub outbound: UnboundedReceiverStream, /// A channel to emit events. - pub events: UnboundedSender, + pub events: UnboundedSender, /// The peer id of the connection. pub peer_id: PeerId, } -impl Connection { - /// Creates a new [`Connection`] with the provided [`ProtocolConnection`] and [`ProtocolState`]. +impl ScrollWireConnection { + /// Creates a new [`ScrollWireConnection`] with the provided [`ProtocolConnection`] and + /// [`ProtocolState`]. pub fn new( peer_id: PeerId, conn: ProtocolConnection, direction: Direction, - outbound: UnboundedReceiver, + outbound: UnboundedReceiver, state: ProtocolState, ) -> Self { Self { @@ -53,7 +54,7 @@ impl Connection { } } -impl Stream for Connection { +impl Stream for ScrollWireConnection { type Item = BytesMut; fn poll_next(self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll> { @@ -72,18 +73,18 @@ impl Stream for Connection { }; // We decode the message, if the message can not be decoded then we disconnect. - let Some(msg) = Message::decode(&mut &msg[..]) else { + let Some(msg) = ScrollMessage::decode(&mut &msg[..]) else { return Poll::Ready(None); }; // We handle the message. match msg.payload { - MessagePayload::NewBlock(new_block) => { + ScrollMessagePayload::NewBlock(new_block) => { // If the signature can be decoded then we send a new block event. - trace!(target: "scroll_wire::connection", peer_id = %this.peer_id, block = ?new_block.block, "Received new block from peer"); + trace!(target: "scroll::wire::connection", peer_id = %this.peer_id, block = ?new_block.block.hash_slow(), "Received new block from peer"); if let Ok(signature) = Signature::from_compact(&new_block.signature[..]) { this.events - .send(Event::NewBlock { + .send(ScrollWireEvent::NewBlock { block: new_block.block, signature, peer_id: this.peer_id, @@ -91,6 +92,7 @@ impl Stream for Connection { .unwrap(); } else { // If the signature can not be decoded then we disconnect. + trace!(target: "scroll::wire::connection", peer_id = %this.peer_id, "Received new block with invalid signature from peer - dropping the scroll-wire connection." ); return Poll::Ready(None); } } diff --git a/crates/scroll-wire/src/lib.rs b/crates/scroll-wire/src/lib.rs index 9dc8a41b..203dcec4 100644 --- a/crates/scroll-wire/src/lib.rs +++ b/crates/scroll-wire/src/lib.rs @@ -8,4 +8,4 @@ mod manager; pub use manager::{ScrollWireManager, LRU_CACHE_SIZE}; mod protocol; -pub use protocol::{Event, NewBlock, ProtocolHandler}; +pub use protocol::{NewBlock, ProtocolHandler, ScrollWireEvent}; diff --git a/crates/scroll-wire/src/manager.rs b/crates/scroll-wire/src/manager.rs index 141b2547..597762e7 100644 --- a/crates/scroll-wire/src/manager.rs +++ b/crates/scroll-wire/src/manager.rs @@ -1,4 +1,4 @@ -use crate::protocol::{Event, Message, NewBlock}; +use crate::protocol::{NewBlock, ScrollMessage, ScrollWireEvent}; use alloy_primitives::B256; use futures::StreamExt; use reth_network::cache::LruCache; @@ -19,10 +19,10 @@ pub const LRU_CACHE_SIZE: u32 = 100; /// A manager for the `ScrollWire` protocol. #[derive(Debug)] pub struct ScrollWireManager { - /// A stream of [`Event`]s produced by the scroll wire protocol. - events: UnboundedReceiverStream, + /// A stream of [`ScrollWireEvent`]s produced by the scroll wire protocol. + events: UnboundedReceiverStream, /// A map of connections to peers. - connections: HashMap>, + connections: HashMap>, /// A map of the state of the scroll wire protocol. Currently the state for each peer /// is just a cache of the last 100 blocks seen by each peer. state: HashMap>, @@ -30,8 +30,8 @@ pub struct ScrollWireManager { impl ScrollWireManager { /// Creates a new [`ScrollWireManager`] instance. - pub fn new(events: UnboundedReceiver) -> Self { - trace!(target: "scroll_wire::manager", "Creating new ScrollWireManager instance"); + pub fn new(events: UnboundedReceiver) -> Self { + trace!(target: "scroll::wire::manager", "Creating new ScrollWireManager instance"); Self { events: events.into(), connections: HashMap::new(), state: HashMap::new() } } @@ -40,13 +40,13 @@ impl ScrollWireManager { if let Entry::Occupied(to_connection) = self.connections.entry(peer_id) { // We send the block to the peer. If we receive an error we remove the peer from the // connections map and delete its state as the connection is no longer valid. - if to_connection.get().send(Message::new_block(block.clone())).is_err() { - trace!(target: "scroll_wire::manager", peer_id = %peer_id, "Failed to send block to peer - dropping peer."); + if to_connection.get().send(ScrollMessage::new_block(block.clone())).is_err() { + trace!(target: "scroll::wire::manager", peer_id = %peer_id, "Failed to send block to peer - dropping peer."); self.state.remove(&peer_id); to_connection.remove(); } else { // Upon successful sending of the block we update the state of the peer. - trace!(target: "scroll_wire::manager", peer_id = %peer_id, "Announced block to peer"); + trace!(target: "scroll::wire::manager", peer_id = %peer_id, "Announced block to peer"); self.state .entry(peer_id) .or_insert_with(|| LruCache::new(LRU_CACHE_SIZE)) @@ -67,7 +67,7 @@ impl ScrollWireManager { } impl Future for ScrollWireManager { - type Output = Event; + type Output = ScrollWireEvent; fn poll(self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll { let this = self.get_mut(); @@ -75,15 +75,20 @@ impl Future for ScrollWireManager { // Process events from the network. while let Poll::Ready(new_block) = this.events.poll_next_unpin(cx) { match new_block { - Some(Event::NewBlock { peer_id, block, signature }) => { + Some(ScrollWireEvent::NewBlock { peer_id, block, signature }) => { // We announce the block to the network. - println!("Received new block with signature [{signature:?}] from the network: {block:?} "); - return Poll::Ready(Event::NewBlock { peer_id, block, signature }); + trace!(target: "scroll::wire::manager", "Received new block with signature [{signature:?}] from the network: {:?} ", block.hash_slow()); + return Poll::Ready(ScrollWireEvent::NewBlock { peer_id, block, signature }); } - Some(Event::ConnectionEstablished { direction, peer_id, to_connection }) => { - println!( + Some(ScrollWireEvent::ConnectionEstablished { + direction, + peer_id, + to_connection, + }) => { + trace!( "Established connection with peer: {:?} for direction: {:?}", - peer_id, direction + peer_id, + direction ); this.connections.insert(peer_id, to_connection); this.state.insert(peer_id, LruCache::new(100)); diff --git a/crates/scroll-wire/src/protocol/event.rs b/crates/scroll-wire/src/protocol/event.rs index 1d469eee..e3ff4774 100644 --- a/crates/scroll-wire/src/protocol/event.rs +++ b/crates/scroll-wire/src/protocol/event.rs @@ -1,12 +1,12 @@ -use crate::protocol::Message; +use crate::protocol::ScrollMessage; use reth_network::Direction; use reth_network_api::PeerId; use secp256k1::ecdsa::Signature; use tokio::sync::mpsc::UnboundedSender; -/// The events that can be emitted by the `ScrollWire` protocol. +/// The events that can be emitted by the scroll wire protocol. #[derive(Debug)] -pub enum Event { +pub enum ScrollWireEvent { /// A new connection has been established. ConnectionEstablished { /// The direction of the connection. @@ -14,7 +14,7 @@ pub enum Event { /// The peer id of the connection. peer_id: PeerId, /// A sender for sending messages to the connection. - to_connection: UnboundedSender, + to_connection: UnboundedSender, }, /// A new block received from the network NewBlock { @@ -27,17 +27,17 @@ pub enum Event { }, } -impl Event { - /// Creates a new [`Event::ConnectionEstablished`] event. +impl ScrollWireEvent { + /// Creates a new [`ScrollWireEvent::ConnectionEstablished`] event. pub const fn connection_established( direction: Direction, peer_id: PeerId, - to_connection: UnboundedSender, + to_connection: UnboundedSender, ) -> Self { Self::ConnectionEstablished { direction, peer_id, to_connection } } - /// Creates a new [`Event::NewBlock`] event. + /// Creates a new [`ScrollWireEvent::NewBlock`] event. pub const fn new_block( peer_id: PeerId, block: reth_scroll_primitives::ScrollBlock, diff --git a/crates/scroll-wire/src/protocol/handler.rs b/crates/scroll-wire/src/protocol/handler.rs index 954fdaae..405ea61d 100644 --- a/crates/scroll-wire/src/protocol/handler.rs +++ b/crates/scroll-wire/src/protocol/handler.rs @@ -1,27 +1,21 @@ -use super::Event; -use crate::{connection::ConnectionHandler, ScrollWireConfig}; +use super::ScrollWireEvent; +use crate::{connection::ScrollConnectionHandler, ScrollWireConfig}; use reth_network::protocol::ProtocolHandler as ProtocolHandlerTrait; use reth_network_api::PeerId; use tokio::sync::mpsc; -/// A Receiver for [`Event`]. -pub(super) type ScrollWireEventReceiver = mpsc::UnboundedReceiver; - -/// A Sender for [`Event`]. -pub(super) type ScrollWireEventSender = mpsc::UnboundedSender; - /// The state of the protocol. /// -/// This contains a sender for emitting [`Event`]s. +/// This contains a sender for emitting [`ScrollWireEvent`]s. #[derive(Debug, Clone)] pub struct ProtocolState { - /// A sender for emitting [`Event`]s. - event_sender: ScrollWireEventSender, + /// A sender for emitting [`ScrollWireEvent`]s. + event_sender: mpsc::UnboundedSender, } impl ProtocolState { - /// Returns a reference to the sender for emitting [`Event`]s. - pub const fn event_sender(&self) -> &ScrollWireEventSender { + /// Returns a reference to the sender for emitting [`ScrollWireEvent`]s. + pub const fn event_sender(&self) -> &mpsc::UnboundedSender { &self.event_sender } } @@ -38,9 +32,9 @@ pub struct ProtocolHandler { } impl ProtocolHandler { - /// Creates a tuple of ([`ProtocolHandler`], [`mpsc::UnboundedReceiver`]) from the - /// provided configuration. - pub fn new(config: ScrollWireConfig) -> (Self, ScrollWireEventReceiver) { + /// Creates a tuple of (`protocol_handler`, `event_receiver`) from the provided + /// configuration. + pub fn new(config: ScrollWireConfig) -> (Self, mpsc::UnboundedReceiver) { let (events_tx, events_rx) = mpsc::unbounded_channel(); let state = ProtocolState { event_sender: events_tx }; (Self { state, config }, events_rx) @@ -53,11 +47,11 @@ impl ProtocolHandler { } impl ProtocolHandlerTrait for ProtocolHandler { - type ConnectionHandler = ConnectionHandler; + type ConnectionHandler = ScrollConnectionHandler; /// Called when a incoming connection is invoked by a peer. fn on_incoming(&self, _socket_addr: std::net::SocketAddr) -> Option { - Some(ConnectionHandler::from_parts(self.state.clone(), self.config.clone())) + Some(ScrollConnectionHandler::from_parts(self.state.clone(), self.config.clone())) } /// Called when a connection is established with a peer. @@ -66,6 +60,6 @@ impl ProtocolHandlerTrait for ProtocolHandler { _socket_addr: std::net::SocketAddr, _peer_id: PeerId, ) -> Option { - Some(ConnectionHandler::from_parts(self.state.clone(), self.config.clone())) + Some(ScrollConnectionHandler::from_parts(self.state.clone(), self.config.clone())) } } diff --git a/crates/scroll-wire/src/protocol/mod.rs b/crates/scroll-wire/src/protocol/mod.rs index 3d158e79..5ea528bf 100644 --- a/crates/scroll-wire/src/protocol/mod.rs +++ b/crates/scroll-wire/src/protocol/mod.rs @@ -1,5 +1,5 @@ mod event; -pub use event::Event; +pub use event::ScrollWireEvent; mod handler; pub use handler::ProtocolHandler; @@ -7,4 +7,4 @@ pub(crate) use handler::ProtocolState; mod proto; pub use proto::NewBlock; -pub(crate) use proto::{Message, MessagePayload}; +pub(crate) use proto::{ScrollMessage, ScrollMessagePayload}; diff --git a/crates/scroll-wire/src/protocol/proto.rs b/crates/scroll-wire/src/protocol/proto.rs index 92e98d80..0c8980ec 100644 --- a/crates/scroll-wire/src/protocol/proto.rs +++ b/crates/scroll-wire/src/protocol/proto.rs @@ -8,13 +8,13 @@ use secp256k1::ecdsa::Signature; /// and is a requirement for `RLPx` multiplexing. #[repr(u8)] #[derive(Copy, Clone, Debug, PartialEq, Eq)] -pub enum MessageId { +pub enum ScrollMessageId { NewBlock = 0, } /// The different message payloads that can be sent over the `ScrollWire` protocol. #[derive(Clone, Debug, PartialEq, Eq)] -pub enum MessagePayload { +pub enum ScrollMessagePayload { NewBlock(NewBlock), } @@ -34,7 +34,7 @@ impl NewBlock { } } -impl TryFrom for MessageId { +impl TryFrom for ScrollMessageId { type Error = (); fn try_from(value: u8) -> Result { @@ -45,54 +45,54 @@ impl TryFrom for MessageId { } } -/// The `ScrollWire` message type. +/// The scroll wire message type. #[derive(Clone, Debug)] -pub struct Message { - pub id: MessageId, - pub payload: MessagePayload, +pub struct ScrollMessage { + pub id: ScrollMessageId, + pub payload: ScrollMessagePayload, } -impl Message { - /// Returns the capability of the `ScrollWire` protocol. +impl ScrollMessage { + /// Returns the capability of the scroll wire protocol. pub const fn capability() -> Capability { - Capability::new_static("scroll-wire", 1) + Capability::new_static("scroll", 1) } - /// Returns the capability of the `ScrollWire` protocol. + /// Returns the capability of the scroll wire protocol. pub const fn protocol() -> Protocol { Protocol::new(Self::capability(), 1) } /// Creates a new block message with the provided signature and block. pub const fn new_block(block: NewBlock) -> Self { - Self { id: MessageId::NewBlock, payload: MessagePayload::NewBlock(block) } + Self { id: ScrollMessageId::NewBlock, payload: ScrollMessagePayload::NewBlock(block) } } - /// Encodes the message into a `BytesMut` buffer. + /// Encodes the message into a [`BytesMut`] buffer. pub fn encoded(&self) -> BytesMut { let mut buffer = BytesMut::new(); buffer.put_u8(self.id as u8); match &self.payload { - MessagePayload::NewBlock(new_block) => { + ScrollMessagePayload::NewBlock(new_block) => { new_block.encode(&mut buffer); } } buffer } - /// Decodes a message from a `Bytes` buffer. + /// Decodes a message from a bytes buffer. pub fn decode(buffer: &mut &[u8]) -> Option { if buffer.is_empty() { return None; } - let id: MessageId = buffer[0].try_into().ok()?; + let id: ScrollMessageId = buffer[0].try_into().ok()?; buffer.advance(1); let kind = match id { - MessageId::NewBlock => { + ScrollMessageId::NewBlock => { let new_block = NewBlock::decode(buffer).ok()?; - MessagePayload::NewBlock(new_block) + ScrollMessagePayload::NewBlock(new_block) } };