diff --git a/Cargo.lock b/Cargo.lock index 6bb9519f..49a17773 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -114,9 +114,9 @@ checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923" [[package]] name = "alloy-chains" -version = "0.1.66" +version = "0.1.69" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8e42c54af787e3521229df1787d7b8300910dc6d9d04d378eb593b26388bd11" +checksum = "28e2652684758b0d9b389d248b209ed9fd9989ef489a550265fe4bb8454fe7eb" dependencies = [ "alloy-primitives", "alloy-rlp", @@ -129,14 +129,14 @@ dependencies = [ [[package]] name = "alloy-consensus" -version = "0.12.6" +version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6fbf458101ed6c389e9bb70a34ebc56039868ad10472540614816cdedc8f5265" +checksum = "27d301f5bcfd37e3aac727c360d8b50c33ddff9169ce0370198dedda36a9927d" dependencies = [ "alloy-eips", "alloy-primitives", "alloy-rlp", - "alloy-serde", + "alloy-serde 0.13.0", "alloy-trie", "arbitrary", "auto_impl", @@ -153,23 +153,24 @@ dependencies = [ [[package]] name = "alloy-consensus-any" -version = "0.12.6" +version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc982af629e511292310fe85b433427fd38cb3105147632b574abc997db44c91" +checksum = "9f4f97a85a45965e0e4f9f5b94bbafaa3e4ee6868bdbcf2e4a9acb4b358038fe" dependencies = [ "alloy-consensus", "alloy-eips", "alloy-primitives", "alloy-rlp", - "alloy-serde", + "alloy-serde 0.13.0", + "arbitrary", "serde", ] [[package]] name = "alloy-dyn-abi" -version = "0.8.24" +version = "0.8.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ada55b5ab26624766bb8c65f72516dee93eaf28d5d87fc18ff4324cd8c2a948d" +checksum = "eb8e762aefd39a397ff485bc86df673465c4ad3ec8819cc60833a8a3ba5cdc87" dependencies = [ "alloy-json-abi", "alloy-primitives", @@ -229,16 +230,16 @@ dependencies = [ [[package]] name = "alloy-eips" -version = "0.12.6" +version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e86967eb559920e4b9102e4cb825fe30f2e9467988353ce4809f0d3f2c90cd4" +checksum = "10b11c382ca8075128d1ae6822b60921cf484c911d9a5831797a01218f98125f" dependencies = [ "alloy-eip2124", "alloy-eip2930", "alloy-eip7702", "alloy-primitives", "alloy-rlp", - "alloy-serde", + "alloy-serde 0.13.0", "arbitrary", "auto_impl", "c-kzg", @@ -246,16 +247,15 @@ dependencies = [ "either", "ethereum_ssz", "ethereum_ssz_derive", - "once_cell", "serde", "sha2 0.10.8", ] [[package]] name = "alloy-evm" -version = "0.1.0-alpha.3" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f40fe575395f20dc9527c2dc65350786492e9723d2035e9f716269b65be34c9c" +checksum = "c5a215c77c40db56f5639185fb3534fbc35c8567c5f54de6c25fc5c395fc4547" dependencies = [ "alloy-consensus", "alloy-eips", @@ -264,6 +264,7 @@ dependencies = [ "alloy-sol-types", "auto_impl", "derive_more 2.0.1", + "op-alloy-consensus", "op-revm", "revm", "thiserror 2.0.12", @@ -271,22 +272,22 @@ dependencies = [ [[package]] name = "alloy-genesis" -version = "0.12.6" +version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a40de6f5b53ecf5fd7756072942f41335426d9a3704cd961f77d854739933bcf" +checksum = "7bd9e75c5dd40319ebbe807ebe9dfb10c24e4a70d9c7d638e62921d8dd093c8b" dependencies = [ "alloy-eips", "alloy-primitives", - "alloy-serde", + "alloy-serde 0.13.0", "alloy-trie", "serde", ] [[package]] name = "alloy-hardforks" -version = "0.1.1" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1692158e9d100486fa6c2429edb42680298678ee74644b058c44f8484a278fea" +checksum = "473ee2ab7f5262b36e8fbc1b5327d5c9d488ab247e31ac739b929dbe2444ae79" dependencies = [ "alloy-chains", "alloy-eip2124", @@ -298,9 +299,9 @@ dependencies = [ [[package]] name = "alloy-json-abi" -version = "0.8.24" +version = "0.8.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df4054f177d1600f17e2bc152f6a927592641b19861e6005cc51bdf7d4fa27a6" +checksum = "fe6beff64ad0aa6ad1019a3db26fef565aefeb011736150ab73ed3366c3cfd1b" dependencies = [ "alloy-primitives", "alloy-sol-type-parser", @@ -310,9 +311,9 @@ dependencies = [ [[package]] name = "alloy-json-rpc" -version = "0.12.6" +version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "27434beae2514d4a2aa90f53832cbdf6f23e4b5e2656d95eaf15f9276e2418b6" +checksum = "bbcf26d02a72e23d5bc245425ea403c93ba17d254f20f9c23556a249c6c7e143" dependencies = [ "alloy-primitives", "alloy-sol-types", @@ -324,9 +325,9 @@ dependencies = [ [[package]] name = "alloy-network" -version = "0.12.6" +version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26a33a38c7486b1945f8d093ff027add2f3a8f83c7300dbad6165cc49150085e" +checksum = "b44dd4429e190f727358571175ebf323db360a303bf4e1731213f510ced1c2e6" dependencies = [ "alloy-consensus", "alloy-consensus-any", @@ -336,7 +337,7 @@ dependencies = [ "alloy-primitives", "alloy-rpc-types-any", "alloy-rpc-types-eth", - "alloy-serde", + "alloy-serde 0.13.0", "alloy-signer", "alloy-sol-types", "async-trait", @@ -350,22 +351,22 @@ dependencies = [ [[package]] name = "alloy-network-primitives" -version = "0.12.6" +version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db973a7a23cbe96f2958e5687c51ce2d304b5c6d0dc5ccb3de8667ad8476f50b" +checksum = "86f736e1d1eb1b770dbd32919bdf46d4dcd4617f2eed07947dfb32649962baba" dependencies = [ "alloy-consensus", "alloy-eips", "alloy-primitives", - "alloy-serde", + "alloy-serde 0.13.0", "serde", ] [[package]] name = "alloy-primitives" -version = "0.8.24" +version = "0.8.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7283185baefbe66136649dc316c9dcc6f0e9f1d635ae19783615919f83bc298a" +checksum = "8c77490fe91a0ce933a1f219029521f20fc28c2c0ca95d53fa4da9c00b8d9d4e" dependencies = [ "alloy-rlp", "arbitrary", @@ -394,9 +395,9 @@ dependencies = [ [[package]] name = "alloy-provider" -version = "0.12.6" +version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b03bde77ad73feae14aa593bcabb932c8098c0f0750ead973331cfc0003a4e1" +checksum = "a557f9e3ec89437b06db3bfc97d20782b1f7cc55b5b602b6a82bf3f64d7efb0e" dependencies = [ "alloy-chains", "alloy-consensus", @@ -408,6 +409,7 @@ dependencies = [ "alloy-pubsub", "alloy-rpc-client", "alloy-rpc-types-eth", + "alloy-signer", "alloy-sol-types", "alloy-transport", "alloy-transport-http", @@ -417,6 +419,7 @@ dependencies = [ "async-trait", "auto_impl", "dashmap 6.1.0", + "either", "futures", "futures-utils-wasm", "lru 0.13.0", @@ -434,15 +437,16 @@ dependencies = [ [[package]] name = "alloy-pubsub" -version = "0.12.6" +version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "721aca709a9231815ad5903a2d284042cc77e7d9d382696451b30c9ee0950001" +checksum = "f0a261caff6c2ec6fe1d6eb77ba41159024c8387d05e4138804a387d403def55" dependencies = [ "alloy-json-rpc", "alloy-primitives", "alloy-transport", "bimap", "futures", + "parking_lot", "serde", "serde_json", "tokio", @@ -475,9 +479,9 @@ dependencies = [ [[package]] name = "alloy-rpc-client" -version = "0.12.6" +version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "445a3298c14fae7afb5b9f2f735dead989f3dd83020c2ab8e48ed95d7b6d1acb" +checksum = "cec6dc89c4c3ef166f9fa436d1831f8142c16cf2e637647c936a6aaaabd8d898" dependencies = [ "alloy-json-rpc", "alloy-primitives", @@ -503,22 +507,22 @@ dependencies = [ [[package]] name = "alloy-rpc-types" -version = "0.12.6" +version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9157deaec6ba2ad7854f16146e4cd60280e76593eed79fdcb06e0fa8b6c60f77" +checksum = "3849f8131a18cc5d7f95f301d68a6af5aa2db28ad8522fb9db1f27b3794e8b68" dependencies = [ "alloy-primitives", "alloy-rpc-types-engine", "alloy-rpc-types-eth", - "alloy-serde", + "alloy-serde 0.13.0", "serde", ] [[package]] name = "alloy-rpc-types-admin" -version = "0.12.6" +version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25c053dc0acbdb922d1d088b3457eae249263ccd06d459aa68c3f9dcf6962632" +checksum = "1d13e905b0348666e10119d39b1ffb7ab4e000b4f4e5ffed920b57f8745b2440" dependencies = [ "alloy-genesis", "alloy-primitives", @@ -528,32 +532,32 @@ dependencies = [ [[package]] name = "alloy-rpc-types-anvil" -version = "0.12.6" +version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a80ee83ef97e7ffd667a81ebdb6154558dfd5e8f20d8249a10a12a1671a04b3" +checksum = "19051fd5e8de7e1f95ec228c9303debd776dcc7caf8d1ece3191f711f5c06541" dependencies = [ "alloy-primitives", "alloy-rpc-types-eth", - "alloy-serde", + "alloy-serde 0.13.0", "serde", ] [[package]] name = "alloy-rpc-types-any" -version = "0.12.6" +version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "604dea1f00fd646debe8033abe8e767c732868bf8a5ae9df6321909ccbc99c56" +checksum = "ecd6d480e4e6e456f30eeeb3aef1512aaecb68df2a35d1f78865dbc4d20dc0fd" dependencies = [ "alloy-consensus-any", "alloy-rpc-types-eth", - "alloy-serde", + "alloy-serde 0.13.0", ] [[package]] name = "alloy-rpc-types-beacon" -version = "0.12.6" +version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "645455186916281e0b3f063fd07d007711257cf90c3499ff3569a39ffdfc9d2f" +checksum = "2b821fd7c93738d5ec972d4d329eb05c896721f467556fbae171294ddd9ac829" dependencies = [ "alloy-eips", "alloy-primitives", @@ -569,9 +573,9 @@ dependencies = [ [[package]] name = "alloy-rpc-types-debug" -version = "0.12.6" +version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08b113a0087d226291b9768ed331818fa0b0744cc1207ae7c150687cf3fde1bd" +checksum = "805eb9fa07f92f1225253e842b5454b4b3e258813445c1a1c9d8dd0fd90817c1" dependencies = [ "alloy-primitives", "serde", @@ -579,15 +583,15 @@ dependencies = [ [[package]] name = "alloy-rpc-types-engine" -version = "0.12.6" +version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "874ac9d1249ece0453e262d9ba72da9dbb3b7a2866220ded5940c2e47f1aa04d" +checksum = "689521777149dabe210ef122605fb00050e038f2e85b8c9897534739f1a904f8" dependencies = [ "alloy-consensus", "alloy-eips", "alloy-primitives", "alloy-rlp", - "alloy-serde", + "alloy-serde 0.13.0", "derive_more 2.0.1", "ethereum_ssz", "ethereum_ssz_derive", @@ -600,9 +604,9 @@ dependencies = [ [[package]] name = "alloy-rpc-types-eth" -version = "0.12.6" +version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e13d71eac04513a71af4b3df580f52f2b4dcbff9d971cc9a52519acf55514cb" +checksum = "9a8b6d55bdaa0c4a08650d4b32f174494cbade56adf6f2fcfa2a4f3490cb5511" dependencies = [ "alloy-consensus", "alloy-consensus-any", @@ -610,7 +614,7 @@ dependencies = [ "alloy-network-primitives", "alloy-primitives", "alloy-rlp", - "alloy-serde", + "alloy-serde 0.13.0", "alloy-sol-types", "arbitrary", "itertools 0.14.0", @@ -622,27 +626,27 @@ dependencies = [ [[package]] name = "alloy-rpc-types-mev" -version = "0.12.6" +version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "505d73db6217e6abcdeba4bf025fb9db79577d6b06e092d24e7c11ed0360743b" +checksum = "93d1e3fbbf9b2eb2509546b4e47f67ee8a3b246ef3f7eb678bcb97d399c755b4" dependencies = [ "alloy-eips", "alloy-primitives", "alloy-rpc-types-eth", - "alloy-serde", + "alloy-serde 0.13.0", "serde", "serde_json", ] [[package]] name = "alloy-rpc-types-trace" -version = "0.12.6" +version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4747763aee39c1b0f5face79bde9be8932be05b2db7d8bdcebb93490f32c889c" +checksum = "6019cd6a89230d765a621a7b1bc8af46a6a9cde2d2e540e6f9ce930e0fb7c6db" dependencies = [ "alloy-primitives", "alloy-rpc-types-eth", - "alloy-serde", + "alloy-serde 0.13.0", "serde", "serde_json", "thiserror 2.0.12", @@ -650,13 +654,13 @@ dependencies = [ [[package]] name = "alloy-rpc-types-txpool" -version = "0.12.6" +version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70132ebdbea1eaa68c4d6f7a62c2fadf0bdce83b904f895ab90ca4ec96f63468" +checksum = "ee36e5404642696af511f09991f9f54a11b90e86e55efad868f8f56350eff5b0" dependencies = [ "alloy-primitives", "alloy-rpc-types-eth", - "alloy-serde", + "alloy-serde 0.13.0", "serde", ] @@ -665,6 +669,17 @@ name = "alloy-serde" version = "0.12.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3a1cd73fc054de6353c7f22ff9b846b0f0f145cd0112da07d4119e41e9959207" +dependencies = [ + "alloy-primitives", + "serde", + "serde_json", +] + +[[package]] +name = "alloy-serde" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1824791912f468a481dedc1db50feef3e85a078f6d743a62db2ee9c2ca674882" dependencies = [ "alloy-primitives", "arbitrary", @@ -674,9 +689,9 @@ dependencies = [ [[package]] name = "alloy-signer" -version = "0.12.6" +version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c96fbde54bee943cd94ebacc8a62c50b38c7dfd2552dcd79ff61aea778b1bfcc" +checksum = "3d087fe5aea96a93fbe71be8aaed5c57c3caac303c09e674bc5b1647990d648b" dependencies = [ "alloy-primitives", "async-trait", @@ -689,9 +704,9 @@ dependencies = [ [[package]] name = "alloy-signer-local" -version = "0.12.6" +version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc6e72002cc1801d8b41e9892165e3a6551b7bd382bd9d0414b21e90c0c62551" +checksum = "2940353d2425bb75965cd5101075334e6271051e35610f903bf8099a52b0b1a9" dependencies = [ "alloy-consensus", "alloy-network", @@ -707,9 +722,9 @@ dependencies = [ [[package]] name = "alloy-sol-macro" -version = "0.8.24" +version = "0.8.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f99b007e002f1082b28827cc47d9c72562d412a98c06f29aa438118ff3036c43" +checksum = "e10ae8e9a91d328ae954c22542415303919aabe976fe7a92eb06db1b68fd59f2" dependencies = [ "alloy-sol-macro-expander", "alloy-sol-macro-input", @@ -721,9 +736,9 @@ dependencies = [ [[package]] name = "alloy-sol-macro-expander" -version = "0.8.24" +version = "0.8.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c0a9cb9b1afbcd3325e0fff9fdf98e6d095643fae9e5584e80597f0b79b6d6e" +checksum = "83ad5da86c127751bc607c174d6c9fe9b85ef0889a9ca0c641735d77d4f98f26" dependencies = [ "alloy-sol-macro-input", "const-hex", @@ -739,9 +754,9 @@ dependencies = [ [[package]] name = "alloy-sol-macro-input" -version = "0.8.24" +version = "0.8.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "530c4863e707b95f99b37792cdfa94d30004ec552aed41e200a1d9264d44e669" +checksum = "ba3d30f0d3f9ba3b7686f3ff1de9ee312647aac705604417a2f40c604f409a9e" dependencies = [ "const-hex", "dunce", @@ -755,9 +770,9 @@ dependencies = [ [[package]] name = "alloy-sol-type-parser" -version = "0.8.24" +version = "0.8.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74b210dd863afa9da93c488601a1f23bee1e3ce47e15519582320c205645a7a0" +checksum = "6d162f8524adfdfb0e4bd0505c734c985f3e2474eb022af32eef0d52a4f3935c" dependencies = [ "serde", "winnow", @@ -765,9 +780,9 @@ dependencies = [ [[package]] name = "alloy-sol-types" -version = "0.8.24" +version = "0.8.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f5ff802859e2797d022dc812b5b4ee40d829e0fb446c269a87826c7f0021976" +checksum = "d43d5e60466a440230c07761aa67671d4719d46f43be8ea6e7ed334d8db4a9ab" dependencies = [ "alloy-json-abi", "alloy-primitives", @@ -778,9 +793,9 @@ dependencies = [ [[package]] name = "alloy-transport" -version = "0.12.6" +version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9aec325c2af8562ef355c02aeb527c755a07e9d8cf6a1e65dda8d0bf23e29b2c" +checksum = "6818b4c82a474cc01ac9e88ccfcd9f9b7bc893b2f8aea7e890a28dcd55c0a7aa" dependencies = [ "alloy-json-rpc", "base64 0.22.1", @@ -800,9 +815,9 @@ dependencies = [ [[package]] name = "alloy-transport-http" -version = "0.12.6" +version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a082c9473c6642cce8b02405a979496126a03b096997888e86229afad05db06c" +checksum = "4cc3079a33483afa1b1365a3add3ea3e21c75b10f704870198ba7846627d10f2" dependencies = [ "alloy-json-rpc", "alloy-rpc-types-engine", @@ -820,9 +835,9 @@ dependencies = [ [[package]] name = "alloy-transport-ipc" -version = "0.12.6" +version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "45a78cfda2cac16fa83f6b5dd8b4643caec6161433b25b67e484ce05d2194513" +checksum = "66c6f8e20aa6b748357bed157c14e561a176d0f6cffed7f99ee37758a7d16202" dependencies = [ "alloy-json-rpc", "alloy-pubsub", @@ -840,9 +855,9 @@ dependencies = [ [[package]] name = "alloy-transport-ws" -version = "0.12.6" +version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae865917bdabaae21f418010fe7e8837c6daa6611fde25f8d78a1778d6ecb523" +checksum = "5ef7a4301e8967c1998f193755fd9429e0ca81730e2e134e30c288c43dbf96f0" dependencies = [ "alloy-pubsub", "alloy-transport", @@ -970,6 +985,51 @@ dependencies = [ "derive_arbitrary", ] +[[package]] +name = "ark-bls12-381" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3df4dcc01ff89867cd86b0da835f23c3f02738353aaee7dde7495af71363b8d5" +dependencies = [ + "ark-ec", + "ark-ff 0.5.0", + "ark-serialize 0.5.0", + "ark-std 0.5.0", +] + +[[package]] +name = "ark-bn254" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d69eab57e8d2663efa5c63135b2af4f396d66424f88954c21104125ab6b3e6bc" +dependencies = [ + "ark-ec", + "ark-ff 0.5.0", + "ark-r1cs-std", + "ark-std 0.5.0", +] + +[[package]] +name = "ark-ec" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43d68f2d516162846c1238e755a7c4d131b892b70cc70c471a8e3ca3ed818fce" +dependencies = [ + "ahash 0.8.11", + "ark-ff 0.5.0", + "ark-poly", + "ark-serialize 0.5.0", + "ark-std 0.5.0", + "educe", + "fnv", + "hashbrown 0.15.2", + "itertools 0.13.0", + "num-bigint", + "num-integer", + "num-traits", + "zeroize", +] + [[package]] name = "ark-ff" version = "0.3.0" @@ -1008,6 +1068,26 @@ dependencies = [ "zeroize", ] +[[package]] +name = "ark-ff" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a177aba0ed1e0fbb62aa9f6d0502e9b46dad8c2eab04c14258a1212d2557ea70" +dependencies = [ + "ark-ff-asm 0.5.0", + "ark-ff-macros 0.5.0", + "ark-serialize 0.5.0", + "ark-std 0.5.0", + "arrayvec", + "digest 0.10.7", + "educe", + "itertools 0.13.0", + "num-bigint", + "num-traits", + "paste", + "zeroize", +] + [[package]] name = "ark-ff-asm" version = "0.3.0" @@ -1028,6 +1108,16 @@ dependencies = [ "syn 1.0.109", ] +[[package]] +name = "ark-ff-asm" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62945a2f7e6de02a31fe400aa489f0e0f5b2502e69f95f853adb82a96c7a6b60" +dependencies = [ + "quote", + "syn 2.0.100", +] + [[package]] name = "ark-ff-macros" version = "0.3.0" @@ -1053,6 +1143,63 @@ dependencies = [ "syn 1.0.109", ] +[[package]] +name = "ark-ff-macros" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09be120733ee33f7693ceaa202ca41accd5653b779563608f1234f78ae07c4b3" +dependencies = [ + "num-bigint", + "num-traits", + "proc-macro2", + "quote", + "syn 2.0.100", +] + +[[package]] +name = "ark-poly" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "579305839da207f02b89cd1679e50e67b4331e2f9294a57693e5051b7703fe27" +dependencies = [ + "ahash 0.8.11", + "ark-ff 0.5.0", + "ark-serialize 0.5.0", + "ark-std 0.5.0", + "educe", + "fnv", + "hashbrown 0.15.2", +] + +[[package]] +name = "ark-r1cs-std" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "941551ef1df4c7a401de7068758db6503598e6f01850bdb2cfdb614a1f9dbea1" +dependencies = [ + "ark-ec", + "ark-ff 0.5.0", + "ark-relations", + "ark-std 0.5.0", + "educe", + "num-bigint", + "num-integer", + "num-traits", + "tracing", +] + +[[package]] +name = "ark-relations" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec46ddc93e7af44bcab5230937635b06fb5744464dd6a7e7b083e80ebd274384" +dependencies = [ + "ark-ff 0.5.0", + "ark-std 0.5.0", + "tracing", + "tracing-subscriber 0.2.25", +] + [[package]] name = "ark-serialize" version = "0.3.0" @@ -1074,6 +1221,30 @@ dependencies = [ "num-bigint", ] +[[package]] +name = "ark-serialize" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f4d068aaf107ebcd7dfb52bc748f8030e0fc930ac8e360146ca54c1203088f7" +dependencies = [ + "ark-serialize-derive", + "ark-std 0.5.0", + "arrayvec", + "digest 0.10.7", + "num-bigint", +] + +[[package]] +name = "ark-serialize-derive" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "213888f660fddcca0d257e88e54ac05bca01885f258ccdf695bafd77031bb69d" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.100", +] + [[package]] name = "ark-std" version = "0.3.0" @@ -1094,6 +1265,16 @@ dependencies = [ "rand 0.8.5", ] +[[package]] +name = "ark-std" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "246a225cc6131e9ee4f24619af0f19d67761fff15d7ccc22e42b80846e69449a" +dependencies = [ + "num-traits", + "rand 0.8.5", +] + [[package]] name = "arrayref" version = "0.3.9" @@ -1711,10 +1892,11 @@ dependencies = [ [[package]] name = "c-kzg" -version = "1.0.3" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0307f72feab3300336fb803a57134159f6e20139af1357f36c54cb90d8e8928" +checksum = "4e7e3c397401eb76228c89561cf22f85f41c95aa799ee9d860de3ea1cbc728fc" dependencies = [ + "arbitrary", "blst", "cc", "glob", @@ -2364,7 +2546,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "18e4fdb82bd54a12e42fb58a800dcae6b9e13982238ce2296dc3570b92148e1f" dependencies = [ "data-encoding", - "syn 2.0.100", + "syn 1.0.109", ] [[package]] @@ -2496,7 +2678,6 @@ dependencies = [ "proc-macro2", "quote", "syn 2.0.100", - "unicode-xid", ] [[package]] @@ -2689,6 +2870,18 @@ dependencies = [ "zeroize", ] +[[package]] +name = "educe" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d7bc049e1bd8cdeb31b68bbd586a9464ecf9f3944af3958a7a9d0f8b9799417" +dependencies = [ + "enum-ordinalize", + "proc-macro2", + "quote", + "syn 2.0.100", +] + [[package]] name = "either" version = "1.15.0" @@ -2759,6 +2952,26 @@ dependencies = [ "syn 2.0.100", ] +[[package]] +name = "enum-ordinalize" +version = "4.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fea0dcfa4e54eeb516fe454635a95753ddd39acda650ce703031c6973e315dd5" +dependencies = [ + "enum-ordinalize-derive", +] + +[[package]] +name = "enum-ordinalize-derive" +version = "4.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d28318a75d4aead5c4db25382e8ef717932d0346600cacae6357eb5941bc5ff" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.100", +] + [[package]] name = "enumn" version = "0.1.14" @@ -4432,7 +4645,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fc2f4eb4bc735547cfed7c0a4922cbd04a4655978c09b54f1f7b228750664c34" dependencies = [ "cfg-if", - "windows-targets 0.52.6", + "windows-targets 0.48.5", ] [[package]] @@ -4617,7 +4830,7 @@ dependencies = [ "generator", "scoped-tls", "tracing", - "tracing-subscriber", + "tracing-subscriber 0.3.19", ] [[package]] @@ -5152,17 +5365,17 @@ dependencies = [ [[package]] name = "op-alloy-consensus" -version = "0.11.2" +version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "971eaae9cfc8b6aabb62cef8d7d49640d2e8e948e5aa3177788c4dea3d226452" +checksum = "91764ebe0eddf6e3cfff41650332ff4e01defe372386027703f2e7e334734a05" dependencies = [ "alloy-consensus", "alloy-eips", "alloy-primitives", "alloy-rlp", - "alloy-serde", + "alloy-serde 0.13.0", "arbitrary", - "derive_more 1.0.0", + "derive_more 2.0.1", "serde", "serde_with", "thiserror 2.0.12", @@ -5170,16 +5383,16 @@ dependencies = [ [[package]] name = "op-alloy-rpc-types-engine" -version = "0.11.2" +version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b59251cd112cb10792a041ea68d9423391e0e9e3576605ee52800890fdaa483c" +checksum = "fc26f8288839926d0137d39d70628bb5ac00fca449bab24c54cebd66c71b9cf4" dependencies = [ "alloy-consensus", "alloy-eips", "alloy-primitives", "alloy-rpc-types-engine", - "alloy-serde", - "derive_more 1.0.0", + "alloy-serde 0.13.0", + "derive_more 2.0.1", "ethereum_ssz", "op-alloy-consensus", "serde", @@ -5189,9 +5402,9 @@ dependencies = [ [[package]] name = "op-revm" -version = "1.0.0-alpha.6" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "983c408745202267f1f483d091fb498986613ccd6c95e44d634cc0d7a2a9f275" +checksum = "e981d234dcfd3a3de7480e5a5cf7439071af39d15b7d258188cc4c69b9d1f26e" dependencies = [ "auto_impl", "once_cell", @@ -6172,7 +6385,7 @@ dependencies = [ [[package]] name = "reth-basic-payload-builder" version = "1.3.4" -source = "git+https://github.com/scroll-tech/reth.git#112588276c4efe2383d636ed418387d69057bbeb" +source = "git+https://github.com/scroll-tech/reth.git#2ef1d127253cc8589248e5a783859432d7f3a584" dependencies = [ "alloy-consensus", "alloy-eips", @@ -6196,7 +6409,7 @@ dependencies = [ [[package]] name = "reth-chain-state" version = "1.3.4" -source = "git+https://github.com/scroll-tech/reth.git#112588276c4efe2383d636ed418387d69057bbeb" +source = "git+https://github.com/scroll-tech/reth.git#2ef1d127253cc8589248e5a783859432d7f3a584" dependencies = [ "alloy-consensus", "alloy-eips", @@ -6226,7 +6439,7 @@ dependencies = [ [[package]] name = "reth-chainspec" version = "1.3.4" -source = "git+https://github.com/scroll-tech/reth.git#112588276c4efe2383d636ed418387d69057bbeb" +source = "git+https://github.com/scroll-tech/reth.git#2ef1d127253cc8589248e5a783859432d7f3a584" dependencies = [ "alloy-chains", "alloy-consensus", @@ -6246,7 +6459,7 @@ dependencies = [ [[package]] name = "reth-cli" version = "1.3.4" -source = "git+https://github.com/scroll-tech/reth.git#112588276c4efe2383d636ed418387d69057bbeb" +source = "git+https://github.com/scroll-tech/reth.git#2ef1d127253cc8589248e5a783859432d7f3a584" dependencies = [ "alloy-genesis", "clap", @@ -6260,7 +6473,7 @@ dependencies = [ [[package]] name = "reth-cli-commands" version = "1.3.4" -source = "git+https://github.com/scroll-tech/reth.git#112588276c4efe2383d636ed418387d69057bbeb" +source = "git+https://github.com/scroll-tech/reth.git#2ef1d127253cc8589248e5a783859432d7f3a584" dependencies = [ "ahash 0.8.11", "alloy-consensus", @@ -6321,7 +6534,7 @@ dependencies = [ [[package]] name = "reth-cli-runner" version = "1.3.4" -source = "git+https://github.com/scroll-tech/reth.git#112588276c4efe2383d636ed418387d69057bbeb" +source = "git+https://github.com/scroll-tech/reth.git#2ef1d127253cc8589248e5a783859432d7f3a584" dependencies = [ "reth-tasks", "tokio", @@ -6331,7 +6544,7 @@ dependencies = [ [[package]] name = "reth-cli-util" version = "1.3.4" -source = "git+https://github.com/scroll-tech/reth.git#112588276c4efe2383d636ed418387d69057bbeb" +source = "git+https://github.com/scroll-tech/reth.git#2ef1d127253cc8589248e5a783859432d7f3a584" dependencies = [ "alloy-eips", "alloy-primitives", @@ -6348,7 +6561,7 @@ dependencies = [ [[package]] name = "reth-codecs" version = "1.3.4" -source = "git+https://github.com/scroll-tech/reth.git#112588276c4efe2383d636ed418387d69057bbeb" +source = "git+https://github.com/scroll-tech/reth.git#2ef1d127253cc8589248e5a783859432d7f3a584" dependencies = [ "alloy-consensus", "alloy-eips", @@ -6368,7 +6581,7 @@ dependencies = [ [[package]] name = "reth-codecs-derive" version = "1.3.4" -source = "git+https://github.com/scroll-tech/reth.git#112588276c4efe2383d636ed418387d69057bbeb" +source = "git+https://github.com/scroll-tech/reth.git#2ef1d127253cc8589248e5a783859432d7f3a584" dependencies = [ "convert_case", "proc-macro2", @@ -6379,7 +6592,7 @@ dependencies = [ [[package]] name = "reth-config" version = "1.3.4" -source = "git+https://github.com/scroll-tech/reth.git#112588276c4efe2383d636ed418387d69057bbeb" +source = "git+https://github.com/scroll-tech/reth.git#2ef1d127253cc8589248e5a783859432d7f3a584" dependencies = [ "eyre", "humantime-serde", @@ -6393,7 +6606,7 @@ dependencies = [ [[package]] name = "reth-consensus" version = "1.3.4" -source = "git+https://github.com/scroll-tech/reth.git#112588276c4efe2383d636ed418387d69057bbeb" +source = "git+https://github.com/scroll-tech/reth.git#2ef1d127253cc8589248e5a783859432d7f3a584" dependencies = [ "alloy-consensus", "alloy-primitives", @@ -6406,7 +6619,7 @@ dependencies = [ [[package]] name = "reth-consensus-common" version = "1.3.4" -source = "git+https://github.com/scroll-tech/reth.git#112588276c4efe2383d636ed418387d69057bbeb" +source = "git+https://github.com/scroll-tech/reth.git#2ef1d127253cc8589248e5a783859432d7f3a584" dependencies = [ "alloy-consensus", "alloy-eips", @@ -6418,7 +6631,7 @@ dependencies = [ [[package]] name = "reth-consensus-debug-client" version = "1.3.4" -source = "git+https://github.com/scroll-tech/reth.git#112588276c4efe2383d636ed418387d69057bbeb" +source = "git+https://github.com/scroll-tech/reth.git#2ef1d127253cc8589248e5a783859432d7f3a584" dependencies = [ "alloy-consensus", "alloy-eips", @@ -6441,7 +6654,7 @@ dependencies = [ [[package]] name = "reth-db" version = "1.3.4" -source = "git+https://github.com/scroll-tech/reth.git#112588276c4efe2383d636ed418387d69057bbeb" +source = "git+https://github.com/scroll-tech/reth.git#2ef1d127253cc8589248e5a783859432d7f3a584" dependencies = [ "alloy-primitives", "derive_more 2.0.1", @@ -6467,7 +6680,7 @@ dependencies = [ [[package]] name = "reth-db-api" version = "1.3.4" -source = "git+https://github.com/scroll-tech/reth.git#112588276c4efe2383d636ed418387d69057bbeb" +source = "git+https://github.com/scroll-tech/reth.git#2ef1d127253cc8589248e5a783859432d7f3a584" dependencies = [ "alloy-consensus", "alloy-genesis", @@ -6496,7 +6709,7 @@ dependencies = [ [[package]] name = "reth-db-common" version = "1.3.4" -source = "git+https://github.com/scroll-tech/reth.git#112588276c4efe2383d636ed418387d69057bbeb" +source = "git+https://github.com/scroll-tech/reth.git#2ef1d127253cc8589248e5a783859432d7f3a584" dependencies = [ "alloy-consensus", "alloy-genesis", @@ -6525,7 +6738,7 @@ dependencies = [ [[package]] name = "reth-db-models" version = "1.3.4" -source = "git+https://github.com/scroll-tech/reth.git#112588276c4efe2383d636ed418387d69057bbeb" +source = "git+https://github.com/scroll-tech/reth.git#2ef1d127253cc8589248e5a783859432d7f3a584" dependencies = [ "alloy-eips", "alloy-primitives", @@ -6540,7 +6753,7 @@ dependencies = [ [[package]] name = "reth-discv4" version = "1.3.4" -source = "git+https://github.com/scroll-tech/reth.git#112588276c4efe2383d636ed418387d69057bbeb" +source = "git+https://github.com/scroll-tech/reth.git#2ef1d127253cc8589248e5a783859432d7f3a584" dependencies = [ "alloy-primitives", "alloy-rlp", @@ -6566,7 +6779,7 @@ dependencies = [ [[package]] name = "reth-discv5" version = "1.3.4" -source = "git+https://github.com/scroll-tech/reth.git#112588276c4efe2383d636ed418387d69057bbeb" +source = "git+https://github.com/scroll-tech/reth.git#2ef1d127253cc8589248e5a783859432d7f3a584" dependencies = [ "alloy-primitives", "alloy-rlp", @@ -6590,7 +6803,7 @@ dependencies = [ [[package]] name = "reth-dns-discovery" version = "1.3.4" -source = "git+https://github.com/scroll-tech/reth.git#112588276c4efe2383d636ed418387d69057bbeb" +source = "git+https://github.com/scroll-tech/reth.git#2ef1d127253cc8589248e5a783859432d7f3a584" dependencies = [ "alloy-primitives", "data-encoding", @@ -6614,7 +6827,7 @@ dependencies = [ [[package]] name = "reth-downloaders" version = "1.3.4" -source = "git+https://github.com/scroll-tech/reth.git#112588276c4efe2383d636ed418387d69057bbeb" +source = "git+https://github.com/scroll-tech/reth.git#2ef1d127253cc8589248e5a783859432d7f3a584" dependencies = [ "alloy-consensus", "alloy-eips", @@ -6649,13 +6862,12 @@ dependencies = [ [[package]] name = "reth-e2e-test-utils" version = "1.3.4" -source = "git+https://github.com/scroll-tech/reth.git#112588276c4efe2383d636ed418387d69057bbeb" +source = "git+https://github.com/scroll-tech/reth.git#2ef1d127253cc8589248e5a783859432d7f3a584" dependencies = [ "alloy-consensus", "alloy-eips", "alloy-network", "alloy-primitives", - "alloy-rlp", "alloy-rpc-types-engine", "alloy-rpc-types-eth", "alloy-signer", @@ -6664,12 +6876,10 @@ dependencies = [ "eyre", "futures-util", "jsonrpsee", - "op-alloy-rpc-types-engine", "reth-chainspec", "reth-db", "reth-engine-local", "reth-ethereum-primitives", - "reth-network", "reth-network-api", "reth-network-peers", "reth-node-api", @@ -6679,10 +6889,8 @@ dependencies = [ "reth-payload-builder", "reth-payload-builder-primitives", "reth-payload-primitives", - "reth-primitives-traits", "reth-provider", "reth-rpc-api", - "reth-rpc-builder", "reth-rpc-eth-api", "reth-rpc-layer", "reth-rpc-server-types", @@ -6701,7 +6909,7 @@ dependencies = [ [[package]] name = "reth-ecies" version = "1.3.4" -source = "git+https://github.com/scroll-tech/reth.git#112588276c4efe2383d636ed418387d69057bbeb" +source = "git+https://github.com/scroll-tech/reth.git#2ef1d127253cc8589248e5a783859432d7f3a584" dependencies = [ "aes", "alloy-primitives", @@ -6732,7 +6940,7 @@ dependencies = [ [[package]] name = "reth-engine-local" version = "1.3.4" -source = "git+https://github.com/scroll-tech/reth.git#112588276c4efe2383d636ed418387d69057bbeb" +source = "git+https://github.com/scroll-tech/reth.git#2ef1d127253cc8589248e5a783859432d7f3a584" dependencies = [ "alloy-consensus", "alloy-primitives", @@ -6762,7 +6970,7 @@ dependencies = [ [[package]] name = "reth-engine-primitives" version = "1.3.4" -source = "git+https://github.com/scroll-tech/reth.git#112588276c4efe2383d636ed418387d69057bbeb" +source = "git+https://github.com/scroll-tech/reth.git#2ef1d127253cc8589248e5a783859432d7f3a584" dependencies = [ "alloy-consensus", "alloy-primitives", @@ -6786,7 +6994,7 @@ dependencies = [ [[package]] name = "reth-engine-service" version = "1.3.4" -source = "git+https://github.com/scroll-tech/reth.git#112588276c4efe2383d636ed418387d69057bbeb" +source = "git+https://github.com/scroll-tech/reth.git#2ef1d127253cc8589248e5a783859432d7f3a584" dependencies = [ "futures", "pin-project", @@ -6809,7 +7017,7 @@ dependencies = [ [[package]] name = "reth-engine-tree" version = "1.3.4" -source = "git+https://github.com/scroll-tech/reth.git#112588276c4efe2383d636ed418387d69057bbeb" +source = "git+https://github.com/scroll-tech/reth.git#2ef1d127253cc8589248e5a783859432d7f3a584" dependencies = [ "alloy-consensus", "alloy-eips", @@ -6859,7 +7067,7 @@ dependencies = [ [[package]] name = "reth-engine-util" version = "1.3.4" -source = "git+https://github.com/scroll-tech/reth.git#112588276c4efe2383d636ed418387d69057bbeb" +source = "git+https://github.com/scroll-tech/reth.git#2ef1d127253cc8589248e5a783859432d7f3a584" dependencies = [ "alloy-consensus", "alloy-rpc-types-engine", @@ -6886,7 +7094,7 @@ dependencies = [ [[package]] name = "reth-errors" version = "1.3.4" -source = "git+https://github.com/scroll-tech/reth.git#112588276c4efe2383d636ed418387d69057bbeb" +source = "git+https://github.com/scroll-tech/reth.git#2ef1d127253cc8589248e5a783859432d7f3a584" dependencies = [ "reth-consensus", "reth-execution-errors", @@ -6898,7 +7106,7 @@ dependencies = [ [[package]] name = "reth-eth-wire" version = "1.3.4" -source = "git+https://github.com/scroll-tech/reth.git#112588276c4efe2383d636ed418387d69057bbeb" +source = "git+https://github.com/scroll-tech/reth.git#2ef1d127253cc8589248e5a783859432d7f3a584" dependencies = [ "alloy-chains", "alloy-primitives", @@ -6926,7 +7134,7 @@ dependencies = [ [[package]] name = "reth-eth-wire-types" version = "1.3.4" -source = "git+https://github.com/scroll-tech/reth.git#112588276c4efe2383d636ed418387d69057bbeb" +source = "git+https://github.com/scroll-tech/reth.git#2ef1d127253cc8589248e5a783859432d7f3a584" dependencies = [ "alloy-chains", "alloy-consensus", @@ -6947,7 +7155,7 @@ dependencies = [ [[package]] name = "reth-ethereum-cli" version = "1.3.4" -source = "git+https://github.com/scroll-tech/reth.git#112588276c4efe2383d636ed418387d69057bbeb" +source = "git+https://github.com/scroll-tech/reth.git#2ef1d127253cc8589248e5a783859432d7f3a584" dependencies = [ "eyre", "reth-chainspec", @@ -6957,7 +7165,7 @@ dependencies = [ [[package]] name = "reth-ethereum-consensus" version = "1.3.4" -source = "git+https://github.com/scroll-tech/reth.git#112588276c4efe2383d636ed418387d69057bbeb" +source = "git+https://github.com/scroll-tech/reth.git#2ef1d127253cc8589248e5a783859432d7f3a584" dependencies = [ "alloy-consensus", "alloy-eips", @@ -6973,7 +7181,7 @@ dependencies = [ [[package]] name = "reth-ethereum-engine-primitives" version = "1.3.4" -source = "git+https://github.com/scroll-tech/reth.git#112588276c4efe2383d636ed418387d69057bbeb" +source = "git+https://github.com/scroll-tech/reth.git#2ef1d127253cc8589248e5a783859432d7f3a584" dependencies = [ "alloy-eips", "alloy-primitives", @@ -6990,7 +7198,7 @@ dependencies = [ [[package]] name = "reth-ethereum-forks" version = "1.3.4" -source = "git+https://github.com/scroll-tech/reth.git#112588276c4efe2383d636ed418387d69057bbeb" +source = "git+https://github.com/scroll-tech/reth.git#2ef1d127253cc8589248e5a783859432d7f3a584" dependencies = [ "alloy-eip2124", "alloy-hardforks", @@ -7004,7 +7212,7 @@ dependencies = [ [[package]] name = "reth-ethereum-payload-builder" version = "1.3.4" -source = "git+https://github.com/scroll-tech/reth.git#112588276c4efe2383d636ed418387d69057bbeb" +source = "git+https://github.com/scroll-tech/reth.git#2ef1d127253cc8589248e5a783859432d7f3a584" dependencies = [ "alloy-consensus", "alloy-eips", @@ -7031,7 +7239,7 @@ dependencies = [ [[package]] name = "reth-ethereum-primitives" version = "1.3.4" -source = "git+https://github.com/scroll-tech/reth.git#112588276c4efe2383d636ed418387d69057bbeb" +source = "git+https://github.com/scroll-tech/reth.git#2ef1d127253cc8589248e5a783859432d7f3a584" dependencies = [ "alloy-consensus", "alloy-eips", @@ -7039,7 +7247,6 @@ dependencies = [ "alloy-primitives", "alloy-rlp", "alloy-rpc-types-eth", - "alloy-serde", "arbitrary", "derive_more 2.0.1", "modular-bitfield", @@ -7056,7 +7263,7 @@ dependencies = [ [[package]] name = "reth-etl" version = "1.3.4" -source = "git+https://github.com/scroll-tech/reth.git#112588276c4efe2383d636ed418387d69057bbeb" +source = "git+https://github.com/scroll-tech/reth.git#2ef1d127253cc8589248e5a783859432d7f3a584" dependencies = [ "rayon", "reth-db-api", @@ -7066,7 +7273,7 @@ dependencies = [ [[package]] name = "reth-evm" version = "1.3.4" -source = "git+https://github.com/scroll-tech/reth.git#112588276c4efe2383d636ed418387d69057bbeb" +source = "git+https://github.com/scroll-tech/reth.git#2ef1d127253cc8589248e5a783859432d7f3a584" dependencies = [ "alloy-consensus", "alloy-eips", @@ -7093,7 +7300,7 @@ dependencies = [ [[package]] name = "reth-evm-ethereum" version = "1.3.4" -source = "git+https://github.com/scroll-tech/reth.git#112588276c4efe2383d636ed418387d69057bbeb" +source = "git+https://github.com/scroll-tech/reth.git#2ef1d127253cc8589248e5a783859432d7f3a584" dependencies = [ "alloy-consensus", "alloy-eips", @@ -7111,7 +7318,7 @@ dependencies = [ [[package]] name = "reth-execution-errors" version = "1.3.4" -source = "git+https://github.com/scroll-tech/reth.git#112588276c4efe2383d636ed418387d69057bbeb" +source = "git+https://github.com/scroll-tech/reth.git#2ef1d127253cc8589248e5a783859432d7f3a584" dependencies = [ "alloy-evm", "alloy-primitives", @@ -7124,7 +7331,7 @@ dependencies = [ [[package]] name = "reth-execution-types" version = "1.3.4" -source = "git+https://github.com/scroll-tech/reth.git#112588276c4efe2383d636ed418387d69057bbeb" +source = "git+https://github.com/scroll-tech/reth.git#2ef1d127253cc8589248e5a783859432d7f3a584" dependencies = [ "alloy-consensus", "alloy-eips", @@ -7142,7 +7349,7 @@ dependencies = [ [[package]] name = "reth-exex" version = "1.3.4" -source = "git+https://github.com/scroll-tech/reth.git#112588276c4efe2383d636ed418387d69057bbeb" +source = "git+https://github.com/scroll-tech/reth.git#2ef1d127253cc8589248e5a783859432d7f3a584" dependencies = [ "alloy-consensus", "alloy-eips", @@ -7180,7 +7387,7 @@ dependencies = [ [[package]] name = "reth-exex-types" version = "1.3.4" -source = "git+https://github.com/scroll-tech/reth.git#112588276c4efe2383d636ed418387d69057bbeb" +source = "git+https://github.com/scroll-tech/reth.git#2ef1d127253cc8589248e5a783859432d7f3a584" dependencies = [ "alloy-eips", "alloy-primitives", @@ -7194,7 +7401,7 @@ dependencies = [ [[package]] name = "reth-fs-util" version = "1.3.4" -source = "git+https://github.com/scroll-tech/reth.git#112588276c4efe2383d636ed418387d69057bbeb" +source = "git+https://github.com/scroll-tech/reth.git#2ef1d127253cc8589248e5a783859432d7f3a584" dependencies = [ "serde", "serde_json", @@ -7204,7 +7411,7 @@ dependencies = [ [[package]] name = "reth-invalid-block-hooks" version = "1.3.4" -source = "git+https://github.com/scroll-tech/reth.git#112588276c4efe2383d636ed418387d69057bbeb" +source = "git+https://github.com/scroll-tech/reth.git#2ef1d127253cc8589248e5a783859432d7f3a584" dependencies = [ "alloy-consensus", "alloy-primitives", @@ -7230,7 +7437,7 @@ dependencies = [ [[package]] name = "reth-ipc" version = "1.3.4" -source = "git+https://github.com/scroll-tech/reth.git#112588276c4efe2383d636ed418387d69057bbeb" +source = "git+https://github.com/scroll-tech/reth.git#2ef1d127253cc8589248e5a783859432d7f3a584" dependencies = [ "async-trait", "bytes", @@ -7251,7 +7458,7 @@ dependencies = [ [[package]] name = "reth-libmdbx" version = "1.3.4" -source = "git+https://github.com/scroll-tech/reth.git#112588276c4efe2383d636ed418387d69057bbeb" +source = "git+https://github.com/scroll-tech/reth.git#2ef1d127253cc8589248e5a783859432d7f3a584" dependencies = [ "bitflags 2.9.0", "byteorder", @@ -7268,7 +7475,7 @@ dependencies = [ [[package]] name = "reth-mdbx-sys" version = "1.3.4" -source = "git+https://github.com/scroll-tech/reth.git#112588276c4efe2383d636ed418387d69057bbeb" +source = "git+https://github.com/scroll-tech/reth.git#2ef1d127253cc8589248e5a783859432d7f3a584" dependencies = [ "bindgen", "cc", @@ -7277,7 +7484,7 @@ dependencies = [ [[package]] name = "reth-metrics" version = "1.3.4" -source = "git+https://github.com/scroll-tech/reth.git#112588276c4efe2383d636ed418387d69057bbeb" +source = "git+https://github.com/scroll-tech/reth.git#2ef1d127253cc8589248e5a783859432d7f3a584" dependencies = [ "futures", "metrics", @@ -7289,7 +7496,7 @@ dependencies = [ [[package]] name = "reth-net-banlist" version = "1.3.4" -source = "git+https://github.com/scroll-tech/reth.git#112588276c4efe2383d636ed418387d69057bbeb" +source = "git+https://github.com/scroll-tech/reth.git#2ef1d127253cc8589248e5a783859432d7f3a584" dependencies = [ "alloy-primitives", ] @@ -7297,7 +7504,7 @@ dependencies = [ [[package]] name = "reth-net-nat" version = "1.3.4" -source = "git+https://github.com/scroll-tech/reth.git#112588276c4efe2383d636ed418387d69057bbeb" +source = "git+https://github.com/scroll-tech/reth.git#2ef1d127253cc8589248e5a783859432d7f3a584" dependencies = [ "futures-util", "if-addrs", @@ -7311,7 +7518,7 @@ dependencies = [ [[package]] name = "reth-network" version = "1.3.4" -source = "git+https://github.com/scroll-tech/reth.git#112588276c4efe2383d636ed418387d69057bbeb" +source = "git+https://github.com/scroll-tech/reth.git#2ef1d127253cc8589248e5a783859432d7f3a584" dependencies = [ "alloy-consensus", "alloy-eips", @@ -7334,7 +7541,6 @@ dependencies = [ "reth-discv5", "reth-dns-discovery", "reth-ecies", - "reth-engine-primitives", "reth-eth-wire", "reth-eth-wire-types", "reth-ethereum-forks", @@ -7356,7 +7562,6 @@ dependencies = [ "secp256k1 0.30.0", "serde", "smallvec", - "tempfile", "thiserror 2.0.12", "tokio", "tokio-stream", @@ -7367,7 +7572,7 @@ dependencies = [ [[package]] name = "reth-network-api" version = "1.3.4" -source = "git+https://github.com/scroll-tech/reth.git#112588276c4efe2383d636ed418387d69057bbeb" +source = "git+https://github.com/scroll-tech/reth.git#2ef1d127253cc8589248e5a783859432d7f3a584" dependencies = [ "alloy-primitives", "alloy-rpc-types-admin", @@ -7390,7 +7595,7 @@ dependencies = [ [[package]] name = "reth-network-p2p" version = "1.3.4" -source = "git+https://github.com/scroll-tech/reth.git#112588276c4efe2383d636ed418387d69057bbeb" +source = "git+https://github.com/scroll-tech/reth.git#2ef1d127253cc8589248e5a783859432d7f3a584" dependencies = [ "alloy-consensus", "alloy-eips", @@ -7413,7 +7618,7 @@ dependencies = [ [[package]] name = "reth-network-peers" version = "1.3.4" -source = "git+https://github.com/scroll-tech/reth.git#112588276c4efe2383d636ed418387d69057bbeb" +source = "git+https://github.com/scroll-tech/reth.git#2ef1d127253cc8589248e5a783859432d7f3a584" dependencies = [ "alloy-primitives", "alloy-rlp", @@ -7428,7 +7633,7 @@ dependencies = [ [[package]] name = "reth-network-types" version = "1.3.4" -source = "git+https://github.com/scroll-tech/reth.git#112588276c4efe2383d636ed418387d69057bbeb" +source = "git+https://github.com/scroll-tech/reth.git#2ef1d127253cc8589248e5a783859432d7f3a584" dependencies = [ "alloy-eip2124", "humantime-serde", @@ -7442,7 +7647,7 @@ dependencies = [ [[package]] name = "reth-nippy-jar" version = "1.3.4" -source = "git+https://github.com/scroll-tech/reth.git#112588276c4efe2383d636ed418387d69057bbeb" +source = "git+https://github.com/scroll-tech/reth.git#2ef1d127253cc8589248e5a783859432d7f3a584" dependencies = [ "anyhow", "bincode", @@ -7459,7 +7664,7 @@ dependencies = [ [[package]] name = "reth-node-api" version = "1.3.4" -source = "git+https://github.com/scroll-tech/reth.git#112588276c4efe2383d636ed418387d69057bbeb" +source = "git+https://github.com/scroll-tech/reth.git#2ef1d127253cc8589248e5a783859432d7f3a584" dependencies = [ "alloy-rpc-types-engine", "eyre", @@ -7483,7 +7688,7 @@ dependencies = [ [[package]] name = "reth-node-builder" version = "1.3.4" -source = "git+https://github.com/scroll-tech/reth.git#112588276c4efe2383d636ed418387d69057bbeb" +source = "git+https://github.com/scroll-tech/reth.git#2ef1d127253cc8589248e5a783859432d7f3a584" dependencies = [ "alloy-consensus", "alloy-eips", @@ -7546,7 +7751,7 @@ dependencies = [ [[package]] name = "reth-node-core" version = "1.3.4" -source = "git+https://github.com/scroll-tech/reth.git#112588276c4efe2383d636ed418387d69057bbeb" +source = "git+https://github.com/scroll-tech/reth.git#2ef1d127253cc8589248e5a783859432d7f3a584" dependencies = [ "alloy-consensus", "alloy-eips", @@ -7596,7 +7801,7 @@ dependencies = [ [[package]] name = "reth-node-ethereum" version = "1.3.4" -source = "git+https://github.com/scroll-tech/reth.git#112588276c4efe2383d636ed418387d69057bbeb" +source = "git+https://github.com/scroll-tech/reth.git#2ef1d127253cc8589248e5a783859432d7f3a584" dependencies = [ "alloy-eips", "alloy-rpc-types-engine", @@ -7632,7 +7837,7 @@ dependencies = [ [[package]] name = "reth-node-events" version = "1.3.4" -source = "git+https://github.com/scroll-tech/reth.git#112588276c4efe2383d636ed418387d69057bbeb" +source = "git+https://github.com/scroll-tech/reth.git#2ef1d127253cc8589248e5a783859432d7f3a584" dependencies = [ "alloy-consensus", "alloy-eips", @@ -7656,7 +7861,7 @@ dependencies = [ [[package]] name = "reth-node-metrics" version = "1.3.4" -source = "git+https://github.com/scroll-tech/reth.git#112588276c4efe2383d636ed418387d69057bbeb" +source = "git+https://github.com/scroll-tech/reth.git#2ef1d127253cc8589248e5a783859432d7f3a584" dependencies = [ "eyre", "http", @@ -7676,7 +7881,7 @@ dependencies = [ [[package]] name = "reth-node-types" version = "1.3.4" -source = "git+https://github.com/scroll-tech/reth.git#112588276c4efe2383d636ed418387d69057bbeb" +source = "git+https://github.com/scroll-tech/reth.git#2ef1d127253cc8589248e5a783859432d7f3a584" dependencies = [ "reth-chainspec", "reth-db-api", @@ -7689,7 +7894,7 @@ dependencies = [ [[package]] name = "reth-optimism-primitives" version = "1.3.4" -source = "git+https://github.com/scroll-tech/reth.git#112588276c4efe2383d636ed418387d69057bbeb" +source = "git+https://github.com/scroll-tech/reth.git#2ef1d127253cc8589248e5a783859432d7f3a584" dependencies = [ "alloy-consensus", "alloy-eips", @@ -7697,7 +7902,7 @@ dependencies = [ "alloy-primitives", "alloy-rlp", "alloy-rpc-types-eth", - "alloy-serde", + "alloy-serde 0.13.0", "arbitrary", "bytes", "derive_more 2.0.1", @@ -7716,7 +7921,7 @@ dependencies = [ [[package]] name = "reth-payload-builder" version = "1.3.4" -source = "git+https://github.com/scroll-tech/reth.git#112588276c4efe2383d636ed418387d69057bbeb" +source = "git+https://github.com/scroll-tech/reth.git#2ef1d127253cc8589248e5a783859432d7f3a584" dependencies = [ "alloy-consensus", "alloy-primitives", @@ -7737,7 +7942,7 @@ dependencies = [ [[package]] name = "reth-payload-builder-primitives" version = "1.3.4" -source = "git+https://github.com/scroll-tech/reth.git#112588276c4efe2383d636ed418387d69057bbeb" +source = "git+https://github.com/scroll-tech/reth.git#2ef1d127253cc8589248e5a783859432d7f3a584" dependencies = [ "pin-project", "reth-payload-primitives", @@ -7749,7 +7954,7 @@ dependencies = [ [[package]] name = "reth-payload-primitives" version = "1.3.4" -source = "git+https://github.com/scroll-tech/reth.git#112588276c4efe2383d636ed418387d69057bbeb" +source = "git+https://github.com/scroll-tech/reth.git#2ef1d127253cc8589248e5a783859432d7f3a584" dependencies = [ "alloy-eips", "alloy-primitives", @@ -7769,7 +7974,7 @@ dependencies = [ [[package]] name = "reth-payload-util" version = "1.3.4" -source = "git+https://github.com/scroll-tech/reth.git#112588276c4efe2383d636ed418387d69057bbeb" +source = "git+https://github.com/scroll-tech/reth.git#2ef1d127253cc8589248e5a783859432d7f3a584" dependencies = [ "alloy-consensus", "alloy-primitives", @@ -7779,7 +7984,7 @@ dependencies = [ [[package]] name = "reth-payload-validator" version = "1.3.4" -source = "git+https://github.com/scroll-tech/reth.git#112588276c4efe2383d636ed418387d69057bbeb" +source = "git+https://github.com/scroll-tech/reth.git#2ef1d127253cc8589248e5a783859432d7f3a584" dependencies = [ "alloy-consensus", "alloy-rpc-types-engine", @@ -7789,7 +7994,7 @@ dependencies = [ [[package]] name = "reth-primitives" version = "1.3.4" -source = "git+https://github.com/scroll-tech/reth.git#112588276c4efe2383d636ed418387d69057bbeb" +source = "git+https://github.com/scroll-tech/reth.git#2ef1d127253cc8589248e5a783859432d7f3a584" dependencies = [ "alloy-consensus", "arbitrary", @@ -7804,7 +8009,7 @@ dependencies = [ [[package]] name = "reth-primitives-traits" version = "1.3.4" -source = "git+https://github.com/scroll-tech/reth.git#112588276c4efe2383d636ed418387d69057bbeb" +source = "git+https://github.com/scroll-tech/reth.git#2ef1d127253cc8589248e5a783859432d7f3a584" dependencies = [ "alloy-consensus", "alloy-eips", @@ -7838,7 +8043,7 @@ dependencies = [ [[package]] name = "reth-provider" version = "1.3.4" -source = "git+https://github.com/scroll-tech/reth.git#112588276c4efe2383d636ed418387d69057bbeb" +source = "git+https://github.com/scroll-tech/reth.git#2ef1d127253cc8589248e5a783859432d7f3a584" dependencies = [ "alloy-consensus", "alloy-eips", @@ -7859,6 +8064,7 @@ dependencies = [ "reth-db-api", "reth-errors", "reth-ethereum-engine-primitives", + "reth-ethereum-primitives", "reth-evm", "reth-execution-types", "reth-fs-util", @@ -7866,10 +8072,10 @@ dependencies = [ "reth-network-p2p", "reth-nippy-jar", "reth-node-types", - "reth-primitives", "reth-primitives-traits", "reth-prune-types", "reth-stages-types", + "reth-static-file-types", "reth-storage-api", "reth-storage-errors", "reth-trie", @@ -7884,7 +8090,7 @@ dependencies = [ [[package]] name = "reth-prune" version = "1.3.4" -source = "git+https://github.com/scroll-tech/reth.git#112588276c4efe2383d636ed418387d69057bbeb" +source = "git+https://github.com/scroll-tech/reth.git#2ef1d127253cc8589248e5a783859432d7f3a584" dependencies = [ "alloy-consensus", "alloy-eips", @@ -7912,7 +8118,7 @@ dependencies = [ [[package]] name = "reth-prune-types" version = "1.3.4" -source = "git+https://github.com/scroll-tech/reth.git#112588276c4efe2383d636ed418387d69057bbeb" +source = "git+https://github.com/scroll-tech/reth.git#2ef1d127253cc8589248e5a783859432d7f3a584" dependencies = [ "alloy-primitives", "arbitrary", @@ -7926,7 +8132,7 @@ dependencies = [ [[package]] name = "reth-revm" version = "1.3.4" -source = "git+https://github.com/scroll-tech/reth.git#112588276c4efe2383d636ed418387d69057bbeb" +source = "git+https://github.com/scroll-tech/reth.git#2ef1d127253cc8589248e5a783859432d7f3a584" dependencies = [ "alloy-primitives", "reth-primitives-traits", @@ -7939,7 +8145,7 @@ dependencies = [ [[package]] name = "reth-rpc" version = "1.3.4" -source = "git+https://github.com/scroll-tech/reth.git#112588276c4efe2383d636ed418387d69057bbeb" +source = "git+https://github.com/scroll-tech/reth.git#2ef1d127253cc8589248e5a783859432d7f3a584" dependencies = [ "alloy-consensus", "alloy-dyn-abi", @@ -7958,7 +8164,7 @@ dependencies = [ "alloy-rpc-types-mev", "alloy-rpc-types-trace", "alloy-rpc-types-txpool", - "alloy-serde", + "alloy-serde 0.13.0", "alloy-signer", "alloy-signer-local", "async-trait", @@ -7972,19 +8178,20 @@ dependencies = [ "parking_lot", "pin-project", "rand 0.8.5", + "reth-chain-state", "reth-chainspec", "reth-consensus", "reth-engine-primitives", "reth-errors", "reth-ethereum-primitives", "reth-evm", + "reth-execution-types", "reth-metrics", "reth-network-api", "reth-network-peers", "reth-network-types", "reth-node-api", "reth-primitives-traits", - "reth-provider", "reth-revm", "reth-rpc-api", "reth-rpc-engine-api", @@ -7992,6 +8199,7 @@ dependencies = [ "reth-rpc-eth-types", "reth-rpc-server-types", "reth-rpc-types-compat", + "reth-storage-api", "reth-tasks", "reth-transaction-pool", "revm", @@ -8010,7 +8218,7 @@ dependencies = [ [[package]] name = "reth-rpc-api" version = "1.3.4" -source = "git+https://github.com/scroll-tech/reth.git#112588276c4efe2383d636ed418387d69057bbeb" +source = "git+https://github.com/scroll-tech/reth.git#2ef1d127253cc8589248e5a783859432d7f3a584" dependencies = [ "alloy-eips", "alloy-genesis", @@ -8026,7 +8234,7 @@ dependencies = [ "alloy-rpc-types-mev", "alloy-rpc-types-trace", "alloy-rpc-types-txpool", - "alloy-serde", + "alloy-serde 0.13.0", "jsonrpsee", "reth-engine-primitives", "reth-network-peers", @@ -8036,7 +8244,7 @@ dependencies = [ [[package]] name = "reth-rpc-builder" version = "1.3.4" -source = "git+https://github.com/scroll-tech/reth.git#112588276c4efe2383d636ed418387d69057bbeb" +source = "git+https://github.com/scroll-tech/reth.git#2ef1d127253cc8589248e5a783859432d7f3a584" dependencies = [ "alloy-network", "alloy-provider", @@ -8073,7 +8281,7 @@ dependencies = [ [[package]] name = "reth-rpc-engine-api" version = "1.3.4" -source = "git+https://github.com/scroll-tech/reth.git#112588276c4efe2383d636ed418387d69057bbeb" +source = "git+https://github.com/scroll-tech/reth.git#2ef1d127253cc8589248e5a783859432d7f3a584" dependencies = [ "alloy-eips", "alloy-primitives", @@ -8104,7 +8312,7 @@ dependencies = [ [[package]] name = "reth-rpc-eth-api" version = "1.3.4" -source = "git+https://github.com/scroll-tech/reth.git#112588276c4efe2383d636ed418387d69057bbeb" +source = "git+https://github.com/scroll-tech/reth.git#2ef1d127253cc8589248e5a783859432d7f3a584" dependencies = [ "alloy-consensus", "alloy-dyn-abi", @@ -8115,7 +8323,7 @@ dependencies = [ "alloy-rlp", "alloy-rpc-types-eth", "alloy-rpc-types-mev", - "alloy-serde", + "alloy-serde 0.13.0", "async-trait", "auto_impl", "dyn-clone", @@ -8147,7 +8355,7 @@ dependencies = [ [[package]] name = "reth-rpc-eth-types" version = "1.3.4" -source = "git+https://github.com/scroll-tech/reth.git#112588276c4efe2383d636ed418387d69057bbeb" +source = "git+https://github.com/scroll-tech/reth.git#2ef1d127253cc8589248e5a783859432d7f3a584" dependencies = [ "alloy-consensus", "alloy-eips", @@ -8189,7 +8397,7 @@ dependencies = [ [[package]] name = "reth-rpc-layer" version = "1.3.4" -source = "git+https://github.com/scroll-tech/reth.git#112588276c4efe2383d636ed418387d69057bbeb" +source = "git+https://github.com/scroll-tech/reth.git#2ef1d127253cc8589248e5a783859432d7f3a584" dependencies = [ "alloy-rpc-types-engine", "http", @@ -8203,7 +8411,7 @@ dependencies = [ [[package]] name = "reth-rpc-server-types" version = "1.3.4" -source = "git+https://github.com/scroll-tech/reth.git#112588276c4efe2383d636ed418387d69057bbeb" +source = "git+https://github.com/scroll-tech/reth.git#2ef1d127253cc8589248e5a783859432d7f3a584" dependencies = [ "alloy-eips", "alloy-primitives", @@ -8219,7 +8427,7 @@ dependencies = [ [[package]] name = "reth-rpc-types-compat" version = "1.3.4" -source = "git+https://github.com/scroll-tech/reth.git#112588276c4efe2383d636ed418387d69057bbeb" +source = "git+https://github.com/scroll-tech/reth.git#2ef1d127253cc8589248e5a783859432d7f3a584" dependencies = [ "alloy-consensus", "alloy-primitives", @@ -8232,14 +8440,14 @@ dependencies = [ [[package]] name = "reth-scroll-chainspec" version = "1.3.4" -source = "git+https://github.com/scroll-tech/reth.git#112588276c4efe2383d636ed418387d69057bbeb" +source = "git+https://github.com/scroll-tech/reth.git#2ef1d127253cc8589248e5a783859432d7f3a584" dependencies = [ "alloy-chains", "alloy-consensus", "alloy-eips", "alloy-genesis", "alloy-primitives", - "alloy-serde", + "alloy-serde 0.13.0", "derive_more 2.0.1", "once_cell", "reth-chainspec", @@ -8256,7 +8464,7 @@ dependencies = [ [[package]] name = "reth-scroll-cli" version = "1.3.4" -source = "git+https://github.com/scroll-tech/reth.git#112588276c4efe2383d636ed418387d69057bbeb" +source = "git+https://github.com/scroll-tech/reth.git#2ef1d127253cc8589248e5a783859432d7f3a584" dependencies = [ "clap", "eyre", @@ -8279,7 +8487,7 @@ dependencies = [ [[package]] name = "reth-scroll-consensus" version = "1.3.4" -source = "git+https://github.com/scroll-tech/reth.git#112588276c4efe2383d636ed418387d69057bbeb" +source = "git+https://github.com/scroll-tech/reth.git#2ef1d127253cc8589248e5a783859432d7f3a584" dependencies = [ "alloy-consensus", "alloy-primitives", @@ -8299,7 +8507,7 @@ dependencies = [ [[package]] name = "reth-scroll-engine-primitives" version = "1.3.4" -source = "git+https://github.com/scroll-tech/reth.git#112588276c4efe2383d636ed418387d69057bbeb" +source = "git+https://github.com/scroll-tech/reth.git#2ef1d127253cc8589248e5a783859432d7f3a584" dependencies = [ "alloy-consensus", "alloy-eips", @@ -8324,7 +8532,7 @@ dependencies = [ [[package]] name = "reth-scroll-evm" version = "1.3.4" -source = "git+https://github.com/scroll-tech/reth.git#112588276c4efe2383d636ed418387d69057bbeb" +source = "git+https://github.com/scroll-tech/reth.git#2ef1d127253cc8589248e5a783859432d7f3a584" dependencies = [ "alloy-consensus", "alloy-eips", @@ -8352,7 +8560,7 @@ dependencies = [ [[package]] name = "reth-scroll-forks" version = "1.3.4" -source = "git+https://github.com/scroll-tech/reth.git#112588276c4efe2383d636ed418387d69057bbeb" +source = "git+https://github.com/scroll-tech/reth.git#2ef1d127253cc8589248e5a783859432d7f3a584" dependencies = [ "alloy-chains", "alloy-primitives", @@ -8366,26 +8574,32 @@ dependencies = [ [[package]] name = "reth-scroll-node" version = "1.3.4" -source = "git+https://github.com/scroll-tech/reth.git#112588276c4efe2383d636ed418387d69057bbeb" +source = "git+https://github.com/scroll-tech/reth.git#2ef1d127253cc8589248e5a783859432d7f3a584" dependencies = [ "alloy-consensus", "alloy-eips", + "alloy-genesis", "alloy-primitives", "alloy-rpc-types-engine", "eyre", "reth-basic-payload-builder", "reth-chainspec", + "reth-db", + "reth-e2e-test-utils", + "reth-engine-local", "reth-eth-wire-types", "reth-evm", "reth-network", "reth-node-api", "reth-node-builder", + "reth-node-core", "reth-node-types", "reth-payload-builder", "reth-primitives", "reth-primitives-traits", "reth-provider", "reth-rpc-eth-types", + "reth-rpc-server-types", "reth-scroll-chainspec", "reth-scroll-consensus", "reth-scroll-engine-primitives", @@ -8393,6 +8607,8 @@ dependencies = [ "reth-scroll-payload", "reth-scroll-primitives", "reth-scroll-rpc", + "reth-scroll-txpool", + "reth-tasks", "reth-tracing", "reth-transaction-pool", "reth-trie-db", @@ -8401,27 +8617,48 @@ dependencies = [ "scroll-alloy-evm", "scroll-alloy-hardforks", "scroll-alloy-rpc-types-engine", + "serde_json", "thiserror 2.0.12", "tokio", + "tracing", ] [[package]] name = "reth-scroll-payload" version = "1.3.4" -source = "git+https://github.com/scroll-tech/reth.git#112588276c4efe2383d636ed418387d69057bbeb" +source = "git+https://github.com/scroll-tech/reth.git#2ef1d127253cc8589248e5a783859432d7f3a584" dependencies = [ + "alloy-consensus", + "alloy-primitives", + "alloy-rlp", + "futures-util", "reth-basic-payload-builder", + "reth-chain-state", + "reth-chainspec", + "reth-evm", + "reth-execution-types", + "reth-payload-builder", "reth-payload-primitives", "reth-payload-util", "reth-primitives-traits", + "reth-revm", + "reth-scroll-chainspec", "reth-scroll-engine-primitives", + "reth-scroll-forks", + "reth-scroll-primitives", + "reth-storage-api", "reth-transaction-pool", + "revm", + "scroll-alloy-consensus", + "scroll-alloy-hardforks", + "thiserror 2.0.12", + "tracing", ] [[package]] name = "reth-scroll-primitives" version = "1.3.4" -source = "git+https://github.com/scroll-tech/reth.git#112588276c4efe2383d636ed418387d69057bbeb" +source = "git+https://github.com/scroll-tech/reth.git#2ef1d127253cc8589248e5a783859432d7f3a584" dependencies = [ "alloy-consensus", "alloy-eips", @@ -8449,7 +8686,7 @@ dependencies = [ [[package]] name = "reth-scroll-rpc" version = "1.3.4" -source = "git+https://github.com/scroll-tech/reth.git#112588276c4efe2383d636ed418387d69057bbeb" +source = "git+https://github.com/scroll-tech/reth.git#2ef1d127253cc8589248e5a783859432d7f3a584" dependencies = [ "alloy-consensus", "alloy-primitives", @@ -8481,10 +8718,38 @@ dependencies = [ "tokio", ] +[[package]] +name = "reth-scroll-txpool" +version = "1.3.4" +source = "git+https://github.com/scroll-tech/reth.git#2ef1d127253cc8589248e5a783859432d7f3a584" +dependencies = [ + "alloy-consensus", + "alloy-eips", + "alloy-primitives", + "alloy-rpc-types-eth", + "c-kzg", + "derive_more 2.0.1", + "futures-util", + "metrics", + "parking_lot", + "reth-chain-state", + "reth-chainspec", + "reth-metrics", + "reth-primitives-traits", + "reth-revm", + "reth-scroll-evm", + "reth-scroll-forks", + "reth-scroll-primitives", + "reth-storage-api", + "reth-transaction-pool", + "revm-scroll", + "scroll-alloy-consensus", +] + [[package]] name = "reth-stages" version = "1.3.4" -source = "git+https://github.com/scroll-tech/reth.git#112588276c4efe2383d636ed418387d69057bbeb" +source = "git+https://github.com/scroll-tech/reth.git#2ef1d127253cc8589248e5a783859432d7f3a584" dependencies = [ "alloy-consensus", "alloy-eips", @@ -8530,7 +8795,7 @@ dependencies = [ [[package]] name = "reth-stages-api" version = "1.3.4" -source = "git+https://github.com/scroll-tech/reth.git#112588276c4efe2383d636ed418387d69057bbeb" +source = "git+https://github.com/scroll-tech/reth.git#2ef1d127253cc8589248e5a783859432d7f3a584" dependencies = [ "alloy-eips", "alloy-primitives", @@ -8557,7 +8822,7 @@ dependencies = [ [[package]] name = "reth-stages-types" version = "1.3.4" -source = "git+https://github.com/scroll-tech/reth.git#112588276c4efe2383d636ed418387d69057bbeb" +source = "git+https://github.com/scroll-tech/reth.git#2ef1d127253cc8589248e5a783859432d7f3a584" dependencies = [ "alloy-primitives", "arbitrary", @@ -8571,13 +8836,12 @@ dependencies = [ [[package]] name = "reth-static-file" version = "1.3.4" -source = "git+https://github.com/scroll-tech/reth.git#112588276c4efe2383d636ed418387d69057bbeb" +source = "git+https://github.com/scroll-tech/reth.git#2ef1d127253cc8589248e5a783859432d7f3a584" dependencies = [ "alloy-primitives", "parking_lot", "rayon", "reth-codecs", - "reth-db", "reth-db-api", "reth-primitives-traits", "reth-provider", @@ -8592,7 +8856,7 @@ dependencies = [ [[package]] name = "reth-static-file-types" version = "1.3.4" -source = "git+https://github.com/scroll-tech/reth.git#112588276c4efe2383d636ed418387d69057bbeb" +source = "git+https://github.com/scroll-tech/reth.git#2ef1d127253cc8589248e5a783859432d7f3a584" dependencies = [ "alloy-primitives", "clap", @@ -8604,7 +8868,7 @@ dependencies = [ [[package]] name = "reth-storage-api" version = "1.3.4" -source = "git+https://github.com/scroll-tech/reth.git#112588276c4efe2383d636ed418387d69057bbeb" +source = "git+https://github.com/scroll-tech/reth.git#2ef1d127253cc8589248e5a783859432d7f3a584" dependencies = [ "alloy-consensus", "alloy-eips", @@ -8628,7 +8892,7 @@ dependencies = [ [[package]] name = "reth-storage-errors" version = "1.3.4" -source = "git+https://github.com/scroll-tech/reth.git#112588276c4efe2383d636ed418387d69057bbeb" +source = "git+https://github.com/scroll-tech/reth.git#2ef1d127253cc8589248e5a783859432d7f3a584" dependencies = [ "alloy-eips", "alloy-primitives", @@ -8644,7 +8908,7 @@ dependencies = [ [[package]] name = "reth-tasks" version = "1.3.4" -source = "git+https://github.com/scroll-tech/reth.git#112588276c4efe2383d636ed418387d69057bbeb" +source = "git+https://github.com/scroll-tech/reth.git#2ef1d127253cc8589248e5a783859432d7f3a584" dependencies = [ "auto_impl", "dyn-clone", @@ -8662,7 +8926,7 @@ dependencies = [ [[package]] name = "reth-testing-utils" version = "1.3.4" -source = "git+https://github.com/scroll-tech/reth.git#112588276c4efe2383d636ed418387d69057bbeb" +source = "git+https://github.com/scroll-tech/reth.git#2ef1d127253cc8589248e5a783859432d7f3a584" dependencies = [ "alloy-consensus", "alloy-eips", @@ -8677,7 +8941,7 @@ dependencies = [ [[package]] name = "reth-tokio-util" version = "1.3.4" -source = "git+https://github.com/scroll-tech/reth.git#112588276c4efe2383d636ed418387d69057bbeb" +source = "git+https://github.com/scroll-tech/reth.git#2ef1d127253cc8589248e5a783859432d7f3a584" dependencies = [ "tokio", "tokio-stream", @@ -8687,7 +8951,7 @@ dependencies = [ [[package]] name = "reth-tracing" version = "1.3.4" -source = "git+https://github.com/scroll-tech/reth.git#112588276c4efe2383d636ed418387d69057bbeb" +source = "git+https://github.com/scroll-tech/reth.git#2ef1d127253cc8589248e5a783859432d7f3a584" dependencies = [ "clap", "eyre", @@ -8696,13 +8960,13 @@ dependencies = [ "tracing-appender", "tracing-journald", "tracing-logfmt", - "tracing-subscriber", + "tracing-subscriber 0.3.19", ] [[package]] name = "reth-transaction-pool" version = "1.3.4" -source = "git+https://github.com/scroll-tech/reth.git#112588276c4efe2383d636ed418387d69057bbeb" +source = "git+https://github.com/scroll-tech/reth.git#2ef1d127253cc8589248e5a783859432d7f3a584" dependencies = [ "alloy-consensus", "alloy-eips", @@ -8741,7 +9005,7 @@ dependencies = [ [[package]] name = "reth-trie" version = "1.3.4" -source = "git+https://github.com/scroll-tech/reth.git#112588276c4efe2383d636ed418387d69057bbeb" +source = "git+https://github.com/scroll-tech/reth.git#2ef1d127253cc8589248e5a783859432d7f3a584" dependencies = [ "alloy-consensus", "alloy-eips", @@ -8766,13 +9030,13 @@ dependencies = [ [[package]] name = "reth-trie-common" version = "1.3.4" -source = "git+https://github.com/scroll-tech/reth.git#112588276c4efe2383d636ed418387d69057bbeb" +source = "git+https://github.com/scroll-tech/reth.git#2ef1d127253cc8589248e5a783859432d7f3a584" dependencies = [ "alloy-consensus", "alloy-primitives", "alloy-rlp", "alloy-rpc-types-eth", - "alloy-serde", + "alloy-serde 0.13.0", "alloy-trie", "arbitrary", "bytes", @@ -8792,26 +9056,20 @@ dependencies = [ [[package]] name = "reth-trie-db" version = "1.3.4" -source = "git+https://github.com/scroll-tech/reth.git#112588276c4efe2383d636ed418387d69057bbeb" +source = "git+https://github.com/scroll-tech/reth.git#2ef1d127253cc8589248e5a783859432d7f3a584" dependencies = [ "alloy-primitives", - "alloy-rlp", - "derive_more 2.0.1", - "metrics", "reth-db-api", "reth-execution-errors", - "reth-metrics", "reth-primitives-traits", "reth-trie", - "revm", "tracing", - "triehash", ] [[package]] name = "reth-trie-parallel" version = "1.3.4" -source = "git+https://github.com/scroll-tech/reth.git#112588276c4efe2383d636ed418387d69057bbeb" +source = "git+https://github.com/scroll-tech/reth.git#2ef1d127253cc8589248e5a783859432d7f3a584" dependencies = [ "alloy-primitives", "alloy-rlp", @@ -8836,7 +9094,7 @@ dependencies = [ [[package]] name = "reth-trie-sparse" version = "1.3.4" -source = "git+https://github.com/scroll-tech/reth.git#112588276c4efe2383d636ed418387d69057bbeb" +source = "git+https://github.com/scroll-tech/reth.git#2ef1d127253cc8589248e5a783859432d7f3a584" dependencies = [ "alloy-primitives", "alloy-rlp", @@ -8848,22 +9106,21 @@ dependencies = [ "reth-tracing", "reth-trie-common", "smallvec", - "thiserror 2.0.12", ] [[package]] name = "reth-zstd-compressors" version = "1.3.4" -source = "git+https://github.com/scroll-tech/reth.git#112588276c4efe2383d636ed418387d69057bbeb" +source = "git+https://github.com/scroll-tech/reth.git#2ef1d127253cc8589248e5a783859432d7f3a584" dependencies = [ "zstd", ] [[package]] name = "revm" -version = "20.0.0-alpha.7" +version = "21.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4502328b029ff68ddbbe42994faf7384c8aac0a47d53c3323ea52c7696fe2154" +checksum = "7db41167e2a1fddb734984cc26e4bf0a0cb298829d1c488b4de37bda764e1d47" dependencies = [ "revm-bytecode", "revm-context", @@ -8880,9 +9137,9 @@ dependencies = [ [[package]] name = "revm-bytecode" -version = "1.0.0-alpha.5" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f018d50979559e6c0fcad3f0e5c5bd54e4ebff3d6f0d4da82ac83fe7f5bc3ac0" +checksum = "fdc3ae92c0c071f4a5ac3ef398fed50bacf8ebd5495d2afded34c60874afa7a3" dependencies = [ "bitvec", "phf", @@ -8892,9 +9149,9 @@ dependencies = [ [[package]] name = "revm-context" -version = "1.0.0-alpha.6" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "247e37d3df5918952a004f637b6b6a018daee83163c540f8b2c3b14ae05e9e78" +checksum = "c5fd5d8a35cf33d2494e32a966ebee6bc23dea9b1fbc3477c5b58e42ddceaa5b" dependencies = [ "cfg-if", "derive-where", @@ -8908,9 +9165,9 @@ dependencies = [ [[package]] name = "revm-context-interface" -version = "1.0.0-alpha.6" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef08da7b423908efbfd5733bb3fb08916319fdec0a879f6d1fb5c8ae1994b239" +checksum = "c8253163a7868c86b88dc76a193724b8c6252bf260dc1cf11d814a5f4fa7a804" dependencies = [ "alloy-eip2930", "alloy-eip7702", @@ -8923,9 +9180,9 @@ dependencies = [ [[package]] name = "revm-database" -version = "1.0.0-alpha.5" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cefe6672af9849f9fd6ef836aff4b32020952992454e66597d32da68341fb89e" +checksum = "fbb40baf1ec91bfda68a37a9be72c5d089e2b662532689209cb2e0febe1eb64c" dependencies = [ "alloy-eips", "auto_impl", @@ -8938,9 +9195,9 @@ dependencies = [ [[package]] name = "revm-database-interface" -version = "1.0.0-alpha.5" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8b4ab0ff9891593c719abdfadc8968450e1e2e0a8320339dd6968813a23db9d" +checksum = "0c541612673da04df1ab3a6a56127851e93a5d05539eb915a6c541d24e7c5902" dependencies = [ "auto_impl", "revm-primitives", @@ -8950,9 +9207,9 @@ dependencies = [ [[package]] name = "revm-handler" -version = "1.0.0-alpha.7" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12d95e6f9ccc5e9129d2ee3672125f0e1d7cc4c6a488d99818f7c6559e2bf4bc" +checksum = "3f55164c03c05eace53cf7f64df5dff14c7769956e6f2b9e4acb88301dc7537c" dependencies = [ "auto_impl", "revm-bytecode", @@ -8968,9 +9225,9 @@ dependencies = [ [[package]] name = "revm-inspector" -version = "1.0.0-alpha.7" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5289f17f28b3ab3be2d1be9e604eca7a1a554e7da336ddbe8860798e2bea88bc" +checksum = "62f67d36e1abebe20b891b7ef57de3af2addfbc2d9cd4ea3f49ade8a67d0e79d" dependencies = [ "auto_impl", "revm-context", @@ -8985,9 +9242,9 @@ dependencies = [ [[package]] name = "revm-inspectors" -version = "0.17.0-alpha.1" +version = "0.18.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1504e2851a11562fb350a9f408e5783351650aef11790aea0b0d0d9ab961c40" +checksum = "8a32ec21c38a85f83773e6b3cdb7060aae8ac9edb291118fbfd4da7f2a50e620" dependencies = [ "alloy-primitives", "alloy-rpc-types-eth", @@ -9003,9 +9260,9 @@ dependencies = [ [[package]] name = "revm-interpreter" -version = "16.0.0-alpha.7" +version = "17.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a97985e55a551d5d86c07a4469ecdd3b8c0d793cb330bb4a4f747e1ee0af864" +checksum = "3cd45ea4fdee2c3f430df4ddb4936dc85c49dc5a7ce9838a8b9ad6861ab153c6" dependencies = [ "revm-bytecode", "revm-context-interface", @@ -9015,10 +9272,15 @@ dependencies = [ [[package]] name = "revm-precompile" -version = "17.0.0-alpha.7" +version = "18.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c5d46dad4a7db8e6de9015f2419c160b41fa5e721345c1678a66db6d9f5ef619" +checksum = "ac48995560dd5ea15e3788106bdf8893186d945bd40d674fb63aa351cf2e58fa" dependencies = [ + "ark-bls12-381", + "ark-bn254", + "ark-ec", + "ark-ff 0.5.0", + "ark-serialize 0.5.0", "aurora-engine-modexp", "blst", "c-kzg", @@ -9031,14 +9293,13 @@ dependencies = [ "ripemd", "secp256k1 0.30.0", "sha2 0.10.8", - "substrate-bn", ] [[package]] name = "revm-primitives" -version = "16.0.0-alpha.5" +version = "17.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b385df11c27aa339c2d80cb22b8d5621ad95e7464cd319c8b5343448ea8ad673" +checksum = "bb9b235b3c03299a531717ae4f9ee6bdb4c1a1755c9f8ce751298d1c99d95fc3" dependencies = [ "alloy-primitives", "enumn", @@ -9048,7 +9309,7 @@ dependencies = [ [[package]] name = "revm-scroll" version = "0.1.0" -source = "git+https://github.com/scroll-tech/scroll-revm#da81341ae9027a46114b16ff98937686bb417bab" +source = "git+https://github.com/scroll-tech/scroll-revm#07234e9655ec76bd66277c774132188d1a7d4ea2" dependencies = [ "auto_impl", "enumn", @@ -9061,9 +9322,9 @@ dependencies = [ [[package]] name = "revm-state" -version = "1.0.0-alpha.5" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "217e158f471dd39065b14db956c3d40437f311163efd05254dc9a66b9dc426ba" +checksum = "dfdff0435bd0cb9e1f9dcc44eaea581973b0550cb897ce368d43259922b1c241" dependencies = [ "bitflags 2.9.0", "revm-bytecode", @@ -9206,7 +9467,9 @@ dependencies = [ "alloy-chains", "alloy-primitives", "alloy-provider", + "alloy-rpc-client", "alloy-rpc-types-engine", + "alloy-transport", "clap", "eyre", "futures", @@ -9236,6 +9499,7 @@ dependencies = [ "reth-transaction-pool", "rollup-node-indexer", "rollup-node-manager", + "rollup-node-providers", "rollup-node-watcher", "scroll-alloy-consensus", "scroll-alloy-provider", @@ -9282,6 +9546,9 @@ dependencies = [ "rollup-node-watcher", "scroll-alloy-network", "scroll-alloy-provider", + "scroll-alloy-rpc-types-engine", + "scroll-db", + "scroll-derivation-pipeline", "scroll-engine", "scroll-network", "scroll-wire", @@ -9310,8 +9577,9 @@ dependencies = [ "alloy-primitives", "alloy-rpc-types-beacon", "alloy-rpc-types-engine", - "alloy-serde", + "alloy-serde 0.12.6", "async-trait", + "auto_impl", "eyre", "lru 0.13.0", "reqwest", @@ -9346,7 +9614,7 @@ dependencies = [ "thiserror 2.0.12", "tokio", "tracing", - "tracing-subscriber", + "tracing-subscriber 0.3.19", ] [[package]] @@ -9646,13 +9914,13 @@ checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" [[package]] name = "scroll-alloy-consensus" version = "1.3.4" -source = "git+https://github.com/scroll-tech/reth.git#112588276c4efe2383d636ed418387d69057bbeb" +source = "git+https://github.com/scroll-tech/reth.git#2ef1d127253cc8589248e5a783859432d7f3a584" dependencies = [ "alloy-consensus", "alloy-eips", "alloy-primitives", "alloy-rlp", - "alloy-serde", + "alloy-serde 0.13.0", "arbitrary", "derive_more 2.0.1", "modular-bitfield", @@ -9664,7 +9932,7 @@ dependencies = [ [[package]] name = "scroll-alloy-evm" version = "1.3.4" -source = "git+https://github.com/scroll-tech/reth.git#112588276c4efe2383d636ed418387d69057bbeb" +source = "git+https://github.com/scroll-tech/reth.git#2ef1d127253cc8589248e5a783859432d7f3a584" dependencies = [ "alloy-consensus", "alloy-eips", @@ -9681,7 +9949,7 @@ dependencies = [ [[package]] name = "scroll-alloy-hardforks" version = "1.3.4" -source = "git+https://github.com/scroll-tech/reth.git#112588276c4efe2383d636ed418387d69057bbeb" +source = "git+https://github.com/scroll-tech/reth.git#2ef1d127253cc8589248e5a783859432d7f3a584" dependencies = [ "alloy-hardforks", "auto_impl", @@ -9691,7 +9959,7 @@ dependencies = [ [[package]] name = "scroll-alloy-network" version = "1.3.4" -source = "git+https://github.com/scroll-tech/reth.git#112588276c4efe2383d636ed418387d69057bbeb" +source = "git+https://github.com/scroll-tech/reth.git#2ef1d127253cc8589248e5a783859432d7f3a584" dependencies = [ "alloy-consensus", "alloy-network", @@ -9705,7 +9973,7 @@ dependencies = [ [[package]] name = "scroll-alloy-provider" version = "1.3.4" -source = "git+https://github.com/scroll-tech/reth.git#112588276c4efe2383d636ed418387d69057bbeb" +source = "git+https://github.com/scroll-tech/reth.git#2ef1d127253cc8589248e5a783859432d7f3a584" dependencies = [ "alloy-primitives", "alloy-provider", @@ -9726,14 +9994,14 @@ dependencies = [ [[package]] name = "scroll-alloy-rpc-types" version = "1.3.4" -source = "git+https://github.com/scroll-tech/reth.git#112588276c4efe2383d636ed418387d69057bbeb" +source = "git+https://github.com/scroll-tech/reth.git#2ef1d127253cc8589248e5a783859432d7f3a584" dependencies = [ "alloy-consensus", "alloy-eips", "alloy-network-primitives", "alloy-primitives", "alloy-rpc-types-eth", - "alloy-serde", + "alloy-serde 0.13.0", "derive_more 2.0.1", "scroll-alloy-consensus", "serde", @@ -9743,7 +10011,7 @@ dependencies = [ [[package]] name = "scroll-alloy-rpc-types-engine" version = "1.3.4" -source = "git+https://github.com/scroll-tech/reth.git#112588276c4efe2383d636ed418387d69057bbeb" +source = "git+https://github.com/scroll-tech/reth.git#2ef1d127253cc8589248e5a783859432d7f3a584" dependencies = [ "alloy-primitives", "alloy-rpc-types-engine", @@ -9775,14 +10043,13 @@ dependencies = [ "alloy-primitives", "arbitrary", "async-trait", + "auto_impl", "futures", "rand 0.9.0", "rollup-node-primitives", "scroll-alloy-consensus", "scroll-migration", "sea-orm", - "serde", - "serde_json", "thiserror 2.0.12", "tokio", "tracing", @@ -9797,14 +10064,16 @@ dependencies = [ "alloy-rpc-types-engine", "async-trait", "eyre", - "reth-scroll-chainspec", + "futures", "rollup-node-primitives", "rollup-node-providers", "scroll-alloy-consensus", "scroll-alloy-rpc-types-engine", "scroll-codec", + "scroll-db", "thiserror 2.0.12", "tokio", + "tracing", ] [[package]] @@ -9829,6 +10098,7 @@ dependencies = [ "scroll-alloy-network", "scroll-alloy-provider", "scroll-alloy-rpc-types-engine", + "thiserror 2.0.12", "tokio", "tracing", ] @@ -9948,7 +10218,7 @@ dependencies = [ "regex", "sea-schema", "tracing", - "tracing-subscriber", + "tracing-subscriber 0.3.19", "url", ] @@ -9979,7 +10249,7 @@ dependencies = [ "sea-orm-cli", "sea-schema", "tracing", - "tracing-subscriber", + "tracing-subscriber 0.3.19", ] [[package]] @@ -10788,19 +11058,6 @@ dependencies = [ "syn 2.0.100", ] -[[package]] -name = "substrate-bn" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72b5bbfa79abbae15dd642ea8176a21a635ff3c00059961d1ea27ad04e5b441c" -dependencies = [ - "byteorder", - "crunchy", - "lazy_static", - "rand 0.8.5", - "rustc-hex", -] - [[package]] name = "subtle" version = "2.6.1" @@ -10831,9 +11088,9 @@ dependencies = [ [[package]] name = "syn-solidity" -version = "0.8.24" +version = "0.8.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "36dbbf0d465ab9fdfea3093e755ae8839bdc1263dbe18d35064d02d6060f949e" +checksum = "4560533fbd6914b94a8fb5cc803ed6801c3455668db3b810702c57612bac9412" dependencies = [ "paste", "proc-macro2", @@ -11048,9 +11305,9 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.44.1" +version = "1.44.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f382da615b842244d4b8738c82ed1275e6c5dd90c459a30941cd07080b06c91a" +checksum = "e6b88822cbe49de4185e3a4cbf8321dd487cf5fe0c5c65695fef6346371e9c48" dependencies = [ "backtrace", "bytes", @@ -11272,7 +11529,7 @@ dependencies = [ "crossbeam-channel", "thiserror 1.0.69", "time", - "tracing-subscriber", + "tracing-subscriber 0.3.19", ] [[package]] @@ -11316,7 +11573,7 @@ checksum = "fc0b4143302cf1022dac868d521e36e8b27691f72c84b3311750d5188ebba657" dependencies = [ "libc", "tracing-core", - "tracing-subscriber", + "tracing-subscriber 0.3.19", ] [[package]] @@ -11339,7 +11596,7 @@ dependencies = [ "time", "tracing", "tracing-core", - "tracing-subscriber", + "tracing-subscriber 0.3.19", ] [[package]] @@ -11352,6 +11609,15 @@ dependencies = [ "tracing-core", ] +[[package]] +name = "tracing-subscriber" +version = "0.2.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0e0d2eaa99c3c2e41547cfa109e910a68ea03823cccad4a0525dcbc9b01e8c71" +dependencies = [ + "tracing-core", +] + [[package]] name = "tracing-subscriber" version = "0.3.19" diff --git a/Cargo.toml b/Cargo.toml index c5332e73..7c2e6142 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -116,16 +116,17 @@ large_enum_variant = "allow" [workspace.dependencies] # alloy alloy-chains = { version = "0.1.32", default-features = false } -alloy-consensus = { version = "0.12.2", default-features = false } -alloy-eips = { version = "0.12.2", default-features = false } -alloy-json-rpc = { version = "0.12.2", default-features = false } -alloy-network = { version = "0.12.2", default-features = false } -alloy-primitives = { version = "0.8.20", default-features = false } -alloy-provider = { version = "0.12.2", default-features = false } -alloy-rpc-types-engine = { version = "0.12.2", default-features = false } -alloy-rpc-types-eth = { version = "0.12.2", default-features = false } -alloy-sol-types = { version = "0.8.20", default-features = false } -alloy-transport = { version = "0.12.2", default-features = false } +alloy-consensus = { version = "0.13.0", default-features = false } +alloy-eips = { version = "0.13.0", default-features = false } +alloy-json-rpc = { version = "0.13.0", default-features = false } +alloy-network = { version = "0.13.0", default-features = false } +alloy-primitives = { version = "0.8.25", default-features = false } +alloy-provider = { version = "0.13.0", default-features = false } +alloy-rpc-client = { version = "0.13.0", default-features = false } +alloy-rpc-types-engine = { version = "0.13.0", default-features = false } +alloy-rpc-types-eth = { version = "0.13.0", default-features = false } +alloy-sol-types = { version = "0.8.25", default-features = false } +alloy-transport = { version = "0.13.0", default-features = false } # scroll-alloy scroll-alloy-consensus = { git = "https://github.com/scroll-tech/reth.git", default-features = false } @@ -167,10 +168,12 @@ scroll-migration = { path = "crates/database/migration" } # misc arbitrary = { version = "1.4", default-features = false } async-trait = "0.1" +auto_impl = "1.2" derive_more = { version = "2.0", default-features = false } eyre = "0.6" futures = { version = "0.3", default-features = false } rand = { version = "0.9" } +reqwest = "0.12" secp256k1 = { version = "0.29", default-features = false } thiserror = "2.0" tokio = { version = "1.39", default-features = false } diff --git a/bin/rollup/Cargo.toml b/bin/rollup/Cargo.toml index 7cea7f67..1a75a541 100644 --- a/bin/rollup/Cargo.toml +++ b/bin/rollup/Cargo.toml @@ -11,11 +11,13 @@ exclude.workspace = true alloy-chains.workspace = true alloy-provider.workspace = true alloy-rpc-types-engine.workspace = true +alloy-rpc-client.workspace = true +alloy-transport.workspace = true # scroll-alloy scroll-alloy-consensus.workspace = true -scroll-alloy-rpc-types-engine.workspace = true scroll-alloy-provider.workspace = true +scroll-alloy-rpc-types-engine.workspace = true # reth reth-cli-util = { git = "https://github.com/scroll-tech/reth.git" } @@ -39,15 +41,16 @@ reth-scroll-cli = { git = "https://github.com/scroll-tech/reth.git" } reth-scroll-engine-primitives = { git = "https://github.com/scroll-tech/reth.git" } reth-scroll-node = { workspace = true, features = ["skip-state-root-validation"] } reth-scroll-primitives = { workspace = true } -scroll-wire.workspace = true -scroll-network.workspace = true -scroll-engine = { workspace = true, features = ["test-utils"] } scroll-db = { workspace = true } +scroll-engine = { workspace = true, features = ["test-utils"] } scroll-migration.workspace = true +scroll-network.workspace = true +scroll-wire.workspace = true # rollup-node -rollup-node-manager.workspace = true rollup-node-indexer.workspace = true +rollup-node-manager.workspace = true +rollup-node-providers.workspace = true rollup-node-watcher.workspace = true # misc @@ -72,6 +75,7 @@ reth-tracing = { git = "https://github.com/scroll-tech/reth.git" } # misc futures.workspace = true +reqwest.workspace = true serde_json = { version = "1.0.94", default-features = false, features = ["alloc"] } tokio = { workspace = true, features = ["full"] } @@ -85,9 +89,11 @@ test-utils = [ "scroll-engine/test-utils", "reth-payload-builder/test-utils", "reth-payload-builder/test-utils", + "reth-scroll-node/test-utils", "rollup-node-watcher/test-utils", "scroll-db/test-utils", "scroll-db/test-utils", + "rollup-node-providers/test-utils", ] serde = [ "alloy-primitives/serde", diff --git a/bin/rollup/src/args.rs b/bin/rollup/src/args.rs index 8c31a4b4..1ce668f4 100644 --- a/bin/rollup/src/args.rs +++ b/bin/rollup/src/args.rs @@ -1,3 +1,4 @@ +use crate::constants; use std::path::PathBuf; /// A struct that represents the arguments for the rollup node. @@ -5,13 +6,37 @@ use std::path::PathBuf; pub struct ScrollRollupNodeArgs { /// A bool to represent if new blocks should be bridged from the eth wire protocol to the /// scroll wire protocol. + #[arg(long, default_value_t = false)] pub enable_eth_scroll_wire_bridge: bool, /// A bool that represents if the scroll wire protocol should be enabled. + #[arg(long, default_value_t = false)] pub enable_scroll_wire: bool, /// Database path + #[arg(long)] pub database_path: Option, - /// The URL for the L1 RPC URL. - pub l1_rpc_url: Option, /// The EngineAPI URL. + #[arg(long)] pub engine_api_url: Option, + /// The provider arguments + #[command(flatten)] + pub l1_provider_args: L1ProviderArgs, +} + +#[derive(Debug, clap::Args)] +pub struct L1ProviderArgs { + /// The URL for the L1 RPC URL. + #[arg(long)] + pub l1_rpc_url: Option, + /// The URL for the Beacon RPC URL. + #[arg(long)] + pub beacon_rpc_url: reqwest::Url, + /// The compute units per second for the provider. + #[arg(long)] + pub compute_units_per_second: u64, + /// The max amount of retries for the provider. + #[arg(long, default_value_t = constants::PROVIDER_MAX_RETRIES)] + pub max_retries: u32, + /// The initial backoff for the provider. + #[arg(long, default_value_t = constants::PROVIDER_INITIAL_BACKOFF)] + pub initial_backoff: u64, } diff --git a/bin/rollup/src/constants.rs b/bin/rollup/src/constants.rs new file mode 100644 index 00000000..0021dadb --- /dev/null +++ b/bin/rollup/src/constants.rs @@ -0,0 +1,11 @@ +/// The block number at which to start the L1 watcher. +pub const WATCHER_START_BLOCK_NUMBER: u64 = 18318215; + +/// The size of the blob cache for the provider. +pub const PROVIDER_BLOB_CACHE_SIZE: usize = 100; + +/// The max retries for the L1 provider. +pub const PROVIDER_MAX_RETRIES: u32 = 10; + +/// The initial backoff for the L1 provider. +pub const PROVIDER_INITIAL_BACKOFF: u64 = 100; diff --git a/bin/rollup/src/lib.rs b/bin/rollup/src/lib.rs index 038f7e16..6dbb651a 100644 --- a/bin/rollup/src/lib.rs +++ b/bin/rollup/src/lib.rs @@ -1,7 +1,10 @@ //! Scroll Network Bridge Components. mod args; -pub use args::ScrollRollupNodeArgs; +pub use args::{L1ProviderArgs, ScrollRollupNodeArgs}; + +mod constants; +pub use constants::{PROVIDER_INITIAL_BACKOFF, PROVIDER_MAX_RETRIES, WATCHER_START_BLOCK_NUMBER}; mod import; pub use import::BridgeBlockImport; diff --git a/bin/rollup/src/network.rs b/bin/rollup/src/network.rs index 385974b7..9c91e032 100644 --- a/bin/rollup/src/network.rs +++ b/bin/rollup/src/network.rs @@ -1,4 +1,6 @@ use alloy_provider::ProviderBuilder; +use alloy_rpc_client::RpcClient; +use alloy_transport::layers::RetryBackoffLayer; use migration::MigratorTrait; use reth_network::{config::NetworkMode, NetworkManager, PeersInfo}; use reth_node_api::TxTy; @@ -8,18 +10,21 @@ use reth_rpc_builder::config::RethRpcServerConfig; use reth_scroll_chainspec::ScrollChainSpec; use reth_scroll_primitives::ScrollPrimitives; use reth_transaction_pool::{PoolTransaction, TransactionPool}; -use rollup_node_indexer::Indexer; use rollup_node_manager::{PoAConsensus, RollupNodeManager}; +use rollup_node_providers::{beacon_provider, DatabaseL1MessageProvider, OnlineL1Provider}; use rollup_node_watcher::L1Watcher; use scroll_alloy_provider::ScrollAuthEngineApiProvider; use scroll_db::{Database, DatabaseConnectionProvider}; use scroll_engine::{test_utils::NoopExecutionPayloadProvider, EngineDriver, ForkchoiceState}; use scroll_network::NetworkManager as ScrollNetworkManager; use scroll_wire::{ProtocolHandler, ScrollWireConfig}; -use std::{path::PathBuf, sync::Arc}; +use std::sync::Arc; use tracing::info; -use crate::ScrollRollupNodeArgs; +use crate::{ + constants::PROVIDER_BLOB_CACHE_SIZE, L1ProviderArgs, ScrollRollupNodeArgs, + WATCHER_START_BLOCK_NUMBER, +}; /// The network builder for the eth-wire to scroll-wire bridge. #[derive(Debug)] @@ -99,11 +104,14 @@ where // Instantiate the database let database_path = if let Some(db_path) = self.config.database_path { - db_path + db_path.to_string_lossy().to_string() } else { - PathBuf::from("sqlite://").join(ctx.config().datadir().db().join("scroll.db")) + // append the path using strings as using `join(...)` overwrites "sqlite://" + // if the path is absolute. + let path = ctx.config().datadir().db().join("scroll.db"); + "sqlite://".to_string() + &*path.to_string_lossy() }; - let db = Database::new(database_path.to_str().unwrap()).await?; + let db = Database::new(&database_path).await?; // Run the database migrations migration::Migrator::up(db.get_connection(), None).await?; @@ -111,22 +119,38 @@ where // Wrap the database in an Arc let db = Arc::new(db); - // Spawn the indexer - let indexer = Indexer::new(db.clone()); - // Spawn the L1Watcher - let l1_notification_rx = if let Some(l1_rpc_url) = self.config.l1_rpc_url { - Some(L1Watcher::spawn(ProviderBuilder::new().on_http(l1_rpc_url), 20035952).await) + let l1_provider_args = self.config.l1_provider_args; + let l1_notification_rx = if let Some(l1_rpc_url) = l1_provider_args.l1_rpc_url { + let L1ProviderArgs { max_retries, initial_backoff, compute_units_per_second, .. } = + l1_provider_args; + let client = RpcClient::builder() + .layer(RetryBackoffLayer::new( + max_retries, + initial_backoff, + compute_units_per_second, + )) + .http(l1_rpc_url); + let provider = ProviderBuilder::new().on_client(client); + Some(L1Watcher::spawn(provider, WATCHER_START_BLOCK_NUMBER).await) } else { None }; + // Construct the l1 provider. + let beacon_provider = beacon_provider(l1_provider_args.beacon_rpc_url.to_string()); + let l1_messages_provider = DatabaseL1MessageProvider::new(db.clone()); + let l1_provider = + OnlineL1Provider::new(beacon_provider, PROVIDER_BLOB_CACHE_SIZE, l1_messages_provider) + .await; + // Spawn the rollup node manager let rollup_node_manager = RollupNodeManager::new( scroll_network_manager, engine, + l1_provider, + db, l1_notification_rx, - indexer, ForkchoiceState::genesis( ctx.config().chain.chain.try_into().expect("must be a named chain"), ), diff --git a/bin/rollup/tests/e2e.rs b/bin/rollup/tests/e2e.rs index 42ace7dd..e121039f 100644 --- a/bin/rollup/tests/e2e.rs +++ b/bin/rollup/tests/e2e.rs @@ -14,7 +14,7 @@ use reth_scroll_chainspec::ScrollChainSpec; use reth_scroll_engine_primitives::ScrollPayloadBuilderAttributes; use reth_scroll_node::{ScrollNetworkPrimitives, ScrollNode}; use reth_tasks::TaskManager; -use rollup_node::ScrollRollupNodeArgs; +use rollup_node::{L1ProviderArgs, ScrollRollupNodeArgs}; use scroll_alloy_rpc_types_engine::ScrollPayloadAttributes; use scroll_network::{NewBlockWithPeer, SCROLL_MAINNET}; use scroll_wire::ScrollWireConfig; @@ -136,7 +136,14 @@ pub async fn build_bridge_node( enable_eth_scroll_wire_bridge: true, enable_scroll_wire: true, database_path: Some(PathBuf::from("sqlite::memory:")), - l1_rpc_url: None, + l1_provider_args: L1ProviderArgs { + l1_rpc_url: None, + // + beacon_rpc_url: reqwest::Url::parse("https://eth-beacon-chain.drpc.org/rest/")?, + compute_units_per_second: 100, + max_retries: 10, + initial_backoff: 100, + }, engine_api_url: None, }; let node = ScrollNode; diff --git a/crates/codec/src/lib.rs b/crates/codec/src/lib.rs index a5231e45..30b9b8f0 100644 --- a/crates/codec/src/lib.rs +++ b/crates/codec/src/lib.rs @@ -84,7 +84,7 @@ fn get_codec_version(calldata: &[u8]) -> Result { const CODEC_VERSION_LEN: usize = 32; const CODEC_VERSION_OFFSET_END: usize = CODEC_VERSION_OFFSET_START + CODEC_VERSION_LEN; const HIGH_BYTES_MASK: U256 = - U256::from_limbs([u64::MAX, u64::MAX, u64::MAX, 0xffffffffffffff00]); + U256::from_limbs([0xffffffffffffff00, u64::MAX, u64::MAX, u64::MAX]); let version = calldata .get(CODEC_VERSION_OFFSET_START..CODEC_VERSION_OFFSET_END) diff --git a/crates/database/db/Cargo.toml b/crates/database/db/Cargo.toml index cce33a32..f3ca4ec7 100644 --- a/crates/database/db/Cargo.toml +++ b/crates/database/db/Cargo.toml @@ -22,10 +22,9 @@ rollup-node-primitives.workspace = true # misc async-trait.workspace = true +auto_impl.workspace = true futures.workspace = true sea-orm = { version = "1.1.0", features = ["sqlx-sqlite", "runtime-tokio-native-tls", "macros"] } -serde = { version = "1.0", features = ["derive"] } -serde_json = "1.0" thiserror.workspace = true tokio = { workspace = true, features = ["macros", "sync"] } tracing.workspace = true diff --git a/crates/database/db/src/connection.rs b/crates/database/db/src/connection.rs index 27afad12..5722e592 100644 --- a/crates/database/db/src/connection.rs +++ b/crates/database/db/src/connection.rs @@ -1,5 +1,6 @@ /// The [`DatabaseConnectionProvider`] trait provides a way to get a connection to the database. /// This is implemented by the [`crate::Database`] and [`crate::DatabaseTransaction`] types. +#[auto_impl::auto_impl(Arc)] pub trait DatabaseConnectionProvider { /// The type of the database connection. type Connection: sea_orm::ConnectionTrait + sea_orm::StreamTrait; diff --git a/crates/database/db/src/db.rs b/crates/database/db/src/db.rs index 4a6bedea..acfbded8 100644 --- a/crates/database/db/src/db.rs +++ b/crates/database/db/src/db.rs @@ -45,12 +45,16 @@ impl From for Database { #[cfg(test)] mod test { - use crate::{operations::DatabaseOperations, test_utils::setup_test_db}; + use crate::{ + models, operations::DatabaseOperations, test_utils::setup_test_db, + DatabaseConnectionProvider, + }; use arbitrary::{Arbitrary, Unstructured}; use futures::StreamExt; use rand::Rng; use rollup_node_primitives::{BatchCommitData, L1MessageWithBlockNumber}; + use sea_orm::{ColumnTrait, EntityTrait, QueryFilter}; #[tokio::test] async fn test_database_round_trip_batch_commit() { @@ -62,16 +66,46 @@ mod test { rand::rng().fill(bytes.as_mut_slice()); let mut u = Unstructured::new(&bytes); - // Generate a random BatchInputV1. + // Generate a random BatchCommitData. let batch_commit = BatchCommitData::arbitrary(&mut u).unwrap(); - // Round trip the BatchInput through the database. + // Round trip the BatchCommitData through the database. db.insert_batch(batch_commit.clone()).await.unwrap(); let batch_commit_from_db = db.get_batch_by_index(batch_commit.index).await.unwrap().unwrap(); assert_eq!(batch_commit, batch_commit_from_db); } + #[tokio::test] + async fn test_database_finalize_batch_commit() { + // Set up the test database. + let db = setup_test_db().await; + + // Generate unstructured bytes. + let mut bytes = [0u8; 1024]; + rand::rng().fill(bytes.as_mut_slice()); + let mut u = Unstructured::new(&bytes); + + // Generate a random BatchCommitData. + let batch_commit = BatchCommitData::arbitrary(&mut u).unwrap(); + + // Store the batch and finalize it. + let finalized_block_number = u64::arbitrary(&mut u).unwrap(); + db.insert_batch(batch_commit.clone()).await.unwrap(); + db.finalize_batch(batch_commit.hash, finalized_block_number).await.unwrap(); + + // Verify the finalized_block_number is correctly updated. + let finalized_block_number_from_db = models::batch_commit::Entity::find() + .filter(models::batch_commit::Column::Hash.eq(batch_commit.hash.to_vec())) + .one(db.get_connection()) + .await + .unwrap() + .unwrap() + .finalized_block_number + .unwrap(); + assert_eq!(finalized_block_number, finalized_block_number_from_db as u64); + } + #[tokio::test] async fn test_database_round_trip_l1_message() { // Set up the test database. diff --git a/crates/database/db/src/models/batch_commit.rs b/crates/database/db/src/models/batch_commit.rs index f061140c..7ae72894 100644 --- a/crates/database/db/src/models/batch_commit.rs +++ b/crates/database/db/src/models/batch_commit.rs @@ -14,7 +14,7 @@ pub struct Model { block_timestamp: i64, calldata: Vec, blob_hash: Option>, - finalized_block_number: Option, + pub(crate) finalized_block_number: Option, } /// The relation for the batch input model. diff --git a/crates/database/db/src/operations.rs b/crates/database/db/src/operations.rs index d138ee6e..2e125393 100644 --- a/crates/database/db/src/operations.rs +++ b/crates/database/db/src/operations.rs @@ -32,7 +32,7 @@ pub trait DatabaseOperations: DatabaseConnectionProvider { .one(self.get_connection()) .await? { - tracing::trace!(target: "scroll::db", batch_hash = ?batch_hash, block_number, "Finalizing batch input in database."); + tracing::trace!(target: "scroll::db", batch_hash = ?batch_hash, block_number, "Finalizing batch commit in database."); let mut batch: models::batch_commit::ActiveModel = batch.into(); batch.finalized_block_number = Set(Some(block_number as i64)); batch.update(self.get_connection()).await?; diff --git a/crates/database/migration/src/m20220101_000001_create_batch_commit_table.rs b/crates/database/migration/src/m20220101_000001_create_batch_commit_table.rs index bbb41f1d..7dc9f233 100644 --- a/crates/database/migration/src/m20220101_000001_create_batch_commit_table.rs +++ b/crates/database/migration/src/m20220101_000001_create_batch_commit_table.rs @@ -20,7 +20,7 @@ impl MigrationTrait for Migration { .col(big_unsigned(BatchCommit::BlockTimestamp)) .col(binary(BatchCommit::Calldata)) .col(binary_len_null(BatchCommit::BlobHash, HASH_LENGTH)) - .col(boolean_null(BatchCommit::FinalizedBlockNumber)) + .col(big_unsigned_null(BatchCommit::FinalizedBlockNumber)) .to_owned(), ) .await diff --git a/crates/derivation-pipeline/Cargo.toml b/crates/derivation-pipeline/Cargo.toml index 2d3aaec6..f6262393 100644 --- a/crates/derivation-pipeline/Cargo.toml +++ b/crates/derivation-pipeline/Cargo.toml @@ -16,7 +16,6 @@ alloy-primitives = { workspace = true, default-features = false } alloy-rpc-types-engine = { workspace = true, default-features = false } # scroll -reth-scroll-chainspec = { workspace = true, default-features = false } scroll-alloy-consensus = { workspace = true, default-features = false } scroll-alloy-rpc-types-engine.workspace = true @@ -24,13 +23,17 @@ scroll-alloy-rpc-types-engine.workspace = true rollup-node-primitives.workspace = true rollup-node-providers.workspace = true scroll-codec.workspace = true +scroll-db.workspace = true # misc +futures.workspace = true thiserror.workspace = true +tracing.workspace = true [dev-dependencies] async-trait.workspace = true eyre.workspace = true +scroll-db = { workspace = true, features = ["test-utils"] } scroll-codec = { workspace = true, features = ["test-utils"] } tokio = { workspace = true, features = ["macros"] } @@ -42,7 +45,7 @@ std = [ "alloy-primitives/std", "alloy-rpc-types-engine/std", "alloy-eips/std", - "reth-scroll-chainspec/std", "scroll-alloy-consensus/std", "scroll-alloy-rpc-types-engine/std", + "futures/std", ] diff --git a/crates/derivation-pipeline/src/error.rs b/crates/derivation-pipeline/src/error.rs index f3f762ec..46f51a5e 100644 --- a/crates/derivation-pipeline/src/error.rs +++ b/crates/derivation-pipeline/src/error.rs @@ -1,18 +1,25 @@ use rollup_node_providers::L1ProviderError; use scroll_codec::CodecError; +use scroll_db::DatabaseError; /// An error occurred during the derivation process. #[derive(Debug, thiserror::Error)] pub enum DerivationPipelineError { - /// An error in the codec. - #[error(transparent)] - Codec(#[from] CodecError), /// Missing L1 messages cursor. #[error("missing l1 message queue cursor")] MissingL1MessageQueueCursor, /// Missing L1 message. #[error("missing l1 message")] MissingL1Message, + /// Unknown batch. + #[error("unknown batch for index {0}")] + UnknownBatch(u64), + /// An error in the codec. + #[error(transparent)] + Codec(#[from] CodecError), + /// An error in the database. + #[error(transparent)] + Database(#[from] DatabaseError), /// An error at the L1 provider. #[error(transparent)] L1Provider(#[from] L1ProviderError), diff --git a/crates/derivation-pipeline/src/lib.rs b/crates/derivation-pipeline/src/lib.rs index 6efb1000..6aa4bf1b 100644 --- a/crates/derivation-pipeline/src/lib.rs +++ b/crates/derivation-pipeline/src/lib.rs @@ -6,27 +6,160 @@ #![cfg_attr(not(feature = "std"), no_std)] mod data_source; + +pub use error::DerivationPipelineError; mod error; #[cfg(not(feature = "std"))] extern crate alloc as std; -use crate::{data_source::CodecDataSource, error::DerivationPipelineError}; -use std::vec::Vec; +use crate::data_source::CodecDataSource; +use std::{boxed::Box, collections::VecDeque, sync::Arc, vec::Vec}; -use alloy_primitives::B256; +use alloy_primitives::{Address, B256}; use alloy_rpc_types_engine::PayloadAttributes; -use reth_scroll_chainspec::SCROLL_FEE_VAULT_ADDRESS; +use core::{ + fmt::Debug, + future::Future, + pin::Pin, + task::{Context, Poll, Waker}, +}; +use futures::{ready, stream::FuturesOrdered, Stream, StreamExt}; use rollup_node_primitives::BatchCommitData; use rollup_node_providers::L1Provider; use scroll_alloy_rpc_types_engine::ScrollPayloadAttributes; use scroll_codec::Codec; +use scroll_db::{Database, DatabaseOperations}; + +/// A future that resolves to a stream of [`ScrollPayloadAttributes`]. +type DerivationPipelineFuture = Pin< + Box< + dyn Future, (u64, DerivationPipelineError)>> + + Send, + >, +>; + +/// Limit the amount of pipeline futures allowed to be polled concurrently. +const MAX_CONCURRENT_DERIVATION_PIPELINE_FUTS: usize = 20; + +/// A structure holding the current unresolved futures for the derivation pipeline. +#[derive(Debug)] +pub struct DerivationPipeline

{ + /// The current derivation pipeline futures polled. + pipeline_futures: FuturesOrdered, + /// A reference to the database. + database: Arc, + /// A L1 provider. + l1_provider: P, + /// The queue of batches to handle. + batch_index_queue: VecDeque, + /// The queue of polled attributes. + attributes_queue: VecDeque, + /// The waker for the pipeline. + waker: Option, +} + +impl

DerivationPipeline

+where + P: L1Provider + Clone + Send + Sync + 'static, +{ + /// Returns a new instance of the [`DerivationPipeline`]. + pub fn new(l1_provider: P, database: Arc) -> Self { + Self { + database, + l1_provider, + batch_index_queue: Default::default(), + pipeline_futures: Default::default(), + attributes_queue: Default::default(), + waker: None, + } + } + + /// Handles a new batch commit index by pushing it in its internal queue. + /// Wakes the waker in order to trigger a call to poll. + pub fn handle_batch_commit(&mut self, index: u64) { + self.batch_index_queue.push_back(index); + if let Some(waker) = self.waker.take() { + waker.wake() + } + } + + /// Handles the next batch index in the batch index queue, pushing the future in the pipeline + /// futures. + fn handle_next_batch(&mut self) -> Option { + let database = self.database.clone(); + let provider = self.l1_provider.clone(); + + if let Some(index) = self.batch_index_queue.pop_front() { + let fut = Box::pin(async move { + let batch = database + .get_batch_by_index(index) + .await + .map_err(|err| (index, err.into()))? + .ok_or((index, DerivationPipelineError::UnknownBatch(index)))?; + + derive(batch, provider).await.map_err(|err| (index, err)) + }); + return Some(fut); + } + None + } +} + +impl

Stream for DerivationPipeline

+where + P: L1Provider + Clone + Unpin + Send + Sync + 'static, +{ + type Item = ScrollPayloadAttributes; + + fn poll_next(self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll> { + let this = self.get_mut(); + + // return attributes from the queue if any. + if let Some(attribute) = this.attributes_queue.pop_front() { + return Poll::Ready(Some(attribute)) + } + + // if futures are empty and the batch queue is empty, store the waker + // and return. + if this.pipeline_futures.is_empty() && this.batch_index_queue.is_empty() { + this.waker = Some(cx.waker().clone()); + return Poll::Pending + } + + // if the futures can still grow, handle the next batch. + if this.pipeline_futures.len() < MAX_CONCURRENT_DERIVATION_PIPELINE_FUTS { + if let Some(fut) = this.handle_next_batch() { + this.pipeline_futures.push_back(fut) + } + } + + // poll the futures and handle result. + if let Some(res) = ready!(this.pipeline_futures.poll_next_unpin(cx)) { + match res { + Ok(attributes) => { + this.attributes_queue.extend(attributes); + cx.waker().wake_by_ref(); + } + Err((index, err)) => { + tracing::error!(target: "scroll::node::derivation_pipeline", ?index, ?err, "failed to derive payload attributes for batch"); + // retry polling the same batch index. + this.batch_index_queue.push_front(index); + if let Some(fut) = this.handle_next_batch() { + this.pipeline_futures.push_front(fut) + } + } + } + } + Poll::Pending + } +} /// Returns a vector of [`ScrollPayloadAttributes`] from the [`BatchCommitData`] and a /// [`L1Provider`]. pub async fn derive( batch: BatchCommitData, - l1_provider: &mut P, + l1_provider: P, ) -> Result, DerivationPipelineError> { // fetch the blob then decode the input batch. let blob = if let Some(hash) = batch.blob_versioned_hash { @@ -73,8 +206,7 @@ pub async fn derive( let attribute = ScrollPayloadAttributes { payload_attributes: PayloadAttributes { timestamp: block.context.timestamp, - // TODO: this should be based off the current configuration value. - suggested_fee_recipient: SCROLL_FEE_VAULT_ADDRESS, + suggested_fee_recipient: Address::ZERO, prev_randao: B256::ZERO, withdrawals: None, parent_beacon_block_root: None, @@ -95,12 +227,16 @@ mod tests { use alloy_eips::eip4844::Blob; use alloy_primitives::{address, b256, bytes, U256}; - use rollup_node_providers::{L1BlobProvider, L1MessageProvider, L1ProviderError}; + use rollup_node_primitives::L1MessageWithBlockNumber; + use rollup_node_providers::{ + DatabaseL1MessageProvider, L1BlobProvider, L1MessageProvider, L1ProviderError, + }; use scroll_alloy_consensus::TxL1Message; use scroll_codec::decoding::test_utils::read_to_bytes; + use scroll_db::test_utils::setup_test_db; use tokio::sync::Mutex; - struct TestL1MessageProvider { + struct MockL1MessageProvider { messages: Arc>>, } @@ -112,7 +248,7 @@ mod tests { } #[async_trait::async_trait] - impl L1BlobProvider for TestL1MessageProvider { + impl L1BlobProvider for MockL1MessageProvider { async fn blob( &self, _block_timestamp: u64, @@ -123,16 +259,116 @@ mod tests { } #[async_trait::async_trait] - impl L1MessageProvider for TestL1MessageProvider { + impl L1MessageProvider for MockL1MessageProvider { type Error = Infallible; async fn next_l1_message(&self) -> Result, Self::Error> { Ok(Some(self.messages.try_lock().expect("lock is free").remove(0))) } - fn set_index_cursor(&mut self, _index: u64) {} + fn set_index_cursor(&self, _index: u64) {} + + fn set_hash_cursor(&self, _hash: B256) {} + } + + #[derive(Clone)] + struct MockL1Provider { + l1_messages_provider: P, + } + + #[async_trait::async_trait] + impl L1BlobProvider for MockL1Provider

{ + async fn blob( + &self, + _block_timestamp: u64, + _hash: B256, + ) -> Result>, L1ProviderError> { + Ok(None) + } + } + + #[async_trait::async_trait] + impl L1MessageProvider for MockL1Provider

{ + type Error = P::Error; - fn set_hash_cursor(&mut self, _hash: B256) {} + async fn next_l1_message(&self) -> Result, Self::Error> { + self.l1_messages_provider.next_l1_message().await + } + fn set_index_cursor(&self, index: u64) { + self.l1_messages_provider.set_index_cursor(index) + } + fn set_hash_cursor(&self, hash: B256) { + self.l1_messages_provider.set_hash_cursor(hash) + } + } + + #[tokio::test] + async fn test_should_stream_payload_attributes() -> eyre::Result<()> { + // https://etherscan.io/tx/0x8f4f0fcab656aa81589db5b53255094606c4624bfd99702b56b2debaf6211f48 + // load batch data in the db. + let db = Arc::new(setup_test_db().await); + let raw_calldata = read_to_bytes("./testdata/calldata_v0.bin")?; + let batch_data = BatchCommitData { + hash: b256!("7f26edf8e3decbc1620b4d2ba5f010a6bdd10d6bb16430c4f458134e36ab3961"), + index: 12, + block_number: 18319648, + block_timestamp: 1696935971, + calldata: Arc::new(raw_calldata), + blob_versioned_hash: None, + }; + db.insert_batch(batch_data).await?; + + // load messages in db. + let l1_messages = vec![ + L1MessageWithBlockNumber{ block_number: 717, transaction: TxL1Message { + queue_index: 33, + gas_limit: 168000, + to: address!("781e90f1c8Fc4611c9b7497C3B47F99Ef6969CbC"), + value: U256::ZERO, + sender: address!("7885BcBd5CeCEf1336b5300fb5186A12DDD8c478"), + input: bytes!("8ef1332e0000000000000000000000007f2b8c31f88b6006c382775eea88297ec1e3e9050000000000000000000000006ea73e05adc79974b931123675ea8f78ffdacdf0000000000000000000000000000000000000000000000000006a94d74f430000000000000000000000000000000000000000000000000000000000000000002100000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000a4232e8748000000000000000000000000ca266224613396a0e8d4c2497dbc4f33dd6cdeff000000000000000000000000ca266224613396a0e8d4c2497dbc4f33dd6cdeff000000000000000000000000000000000000000000000000006a94d74f4300000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"), + } }, L1MessageWithBlockNumber{transaction: TxL1Message { + queue_index: 34, + gas_limit: 168000, + to: address!("781e90f1c8fc4611c9b7497c3b47f99ef6969cbc"), + value: U256::ZERO, + sender: address!("7885BcBd5CeCEf1336b5300fb5186A12DDD8c478"), + input: bytes!("8ef1332e0000000000000000000000007f2b8c31f88b6006c382775eea88297ec1e3e9050000000000000000000000006ea73e05adc79974b931123675ea8f78ffdacdf000000000000000000000000000000000000000000000000000470de4df820000000000000000000000000000000000000000000000000000000000000000002200000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000a4232e8748000000000000000000000000982fe4a7cbd74bb3422ebe46333c3e8046c12c7f000000000000000000000000982fe4a7cbd74bb3422ebe46333c3e8046c12c7f00000000000000000000000000000000000000000000000000470de4df8200000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"), + }, block_number: 717}]; + for message in l1_messages { + db.insert_l1_message(message).await?; + } + + // construct the pipeline. + let l1_messages_provider = DatabaseL1MessageProvider::new(db.clone()); + let mock_l1_provider = MockL1Provider { l1_messages_provider }; + let mut pipeline = DerivationPipeline::new(mock_l1_provider, db); + + // as long as we don't call `handle_commit_batch`, pipeline should not return attributes. + pipeline.handle_batch_commit(12); + + // we should find some attributes now + assert!(pipeline.next().await.is_some()); + + // check the correctness of the last attribute. + let mut attribute = ScrollPayloadAttributes::default(); + while let Some(a) = pipeline.next().await { + if a.payload_attributes.timestamp == 1696935657 { + attribute = a; + break + } + } + let expected = ScrollPayloadAttributes{ + payload_attributes: PayloadAttributes{ + timestamp: 1696935657, + ..Default::default() + }, + transactions: Some(vec![bytes!("f88c8202658417d7840082a4f294530000000000000000000000000000000000000280a4bede39b500000000000000000000000000000000000000000000000000000001669aa2f583104ec4a07461e6555f927393ebdf5f183738450c3842bc3b86a1db7549d9bee21fadd0b1a06d7ba96897bd9fb8e838a327d3ca34be66da11955f10d1fb2264949071e9e8cd")]), + no_tx_pool: true, + }; + assert_eq!(attribute, expected); + + Ok(()) } #[tokio::test] @@ -163,16 +399,15 @@ mod tests { sender: address!("7885BcBd5CeCEf1336b5300fb5186A12DDD8c478"), input: bytes!("8ef1332e0000000000000000000000007f2b8c31f88b6006c382775eea88297ec1e3e9050000000000000000000000006ea73e05adc79974b931123675ea8f78ffdacdf000000000000000000000000000000000000000000000000000470de4df820000000000000000000000000000000000000000000000000000000000000000002200000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000a4232e8748000000000000000000000000982fe4a7cbd74bb3422ebe46333c3e8046c12c7f000000000000000000000000982fe4a7cbd74bb3422ebe46333c3e8046c12c7f00000000000000000000000000000000000000000000000000470de4df8200000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"), }]; - let mut provider = TestL1MessageProvider { messages: Arc::new(Mutex::new(l1_messages)) }; + let provider = MockL1MessageProvider { messages: Arc::new(Mutex::new(l1_messages)) }; - let attributes = derive(batch_data, &mut provider).await?; + let attributes: Vec<_> = derive(batch_data, provider).await?; let attribute = attributes.iter().find(|a| a.payload_attributes.timestamp == 1696935384).unwrap(); let expected = ScrollPayloadAttributes{ payload_attributes: PayloadAttributes{ timestamp: 1696935384, - suggested_fee_recipient: SCROLL_FEE_VAULT_ADDRESS, ..Default::default() }, transactions: Some(vec![bytes!("7ef901b7218302904094781e90f1c8fc4611c9b7497c3b47f99ef6969cbc80b901848ef1332e0000000000000000000000007f2b8c31f88b6006c382775eea88297ec1e3e9050000000000000000000000006ea73e05adc79974b931123675ea8f78ffdacdf0000000000000000000000000000000000000000000000000006a94d74f430000000000000000000000000000000000000000000000000000000000000000002100000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000a4232e8748000000000000000000000000ca266224613396a0e8d4c2497dbc4f33dd6cdeff000000000000000000000000ca266224613396a0e8d4c2497dbc4f33dd6cdeff000000000000000000000000000000000000000000000000006a94d74f4300000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000947885bcbd5cecef1336b5300fb5186a12ddd8c478"), bytes!("7ef901b7228302904094781e90f1c8fc4611c9b7497c3b47f99ef6969cbc80b901848ef1332e0000000000000000000000007f2b8c31f88b6006c382775eea88297ec1e3e9050000000000000000000000006ea73e05adc79974b931123675ea8f78ffdacdf000000000000000000000000000000000000000000000000000470de4df820000000000000000000000000000000000000000000000000000000000000000002200000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000a4232e8748000000000000000000000000982fe4a7cbd74bb3422ebe46333c3e8046c12c7f000000000000000000000000982fe4a7cbd74bb3422ebe46333c3e8046c12c7f00000000000000000000000000000000000000000000000000470de4df8200000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000947885bcbd5cecef1336b5300fb5186a12ddd8c478")]), @@ -184,7 +419,6 @@ mod tests { let expected = ScrollPayloadAttributes{ payload_attributes: PayloadAttributes{ timestamp: 1696935657, - suggested_fee_recipient: SCROLL_FEE_VAULT_ADDRESS, ..Default::default() }, transactions: Some(vec![bytes!("f88c8202658417d7840082a4f294530000000000000000000000000000000000000280a4bede39b500000000000000000000000000000000000000000000000000000001669aa2f583104ec4a07461e6555f927393ebdf5f183738450c3842bc3b86a1db7549d9bee21fadd0b1a06d7ba96897bd9fb8e838a327d3ca34be66da11955f10d1fb2264949071e9e8cd")]), diff --git a/crates/engine/Cargo.toml b/crates/engine/Cargo.toml index d8ad9c3f..db3deec1 100644 --- a/crates/engine/Cargo.toml +++ b/crates/engine/Cargo.toml @@ -37,6 +37,7 @@ rollup-node-providers.workspace = true # misc async-trait.workspace = true eyre.workspace = true +thiserror.workspace = true tokio.workspace = true tracing.workspace = true @@ -61,6 +62,7 @@ test-utils = [ "arbitrary", "dep:arbitrary", "reth-primitives/test-utils", + "rollup-node-providers/test-utils", ] serde = [ "alloy-eips/serde", diff --git a/crates/engine/src/engine.rs b/crates/engine/src/engine.rs index 429d74fa..3ab74589 100644 --- a/crates/engine/src/engine.rs +++ b/crates/engine/src/engine.rs @@ -110,7 +110,7 @@ where ) )] pub async fn handle_payload_attributes( - &mut self, + &self, safe_block_info: BlockInfo, mut fcs: ForkchoiceState, mut payload_attributes: ::PayloadAttributes, diff --git a/crates/engine/src/error.rs b/crates/engine/src/error.rs index da265f9e..d32d38f4 100644 --- a/crates/engine/src/error.rs +++ b/crates/engine/src/error.rs @@ -1,14 +1,19 @@ /// The error type for the engine API. -#[derive(Debug)] +#[derive(Debug, thiserror::Error)] pub enum EngineDriverError { /// The engine is unavailable. + #[error("engine is unavailable")] EngineUnavailable, /// The execution payload is invalid. + #[error("invalid execution payload")] InvalidExecutionPayload, /// The engine failed to execute the fork choice update. + #[error("invalid forkchoice update")] InvalidFcu, /// The execution payload provider is unavailable. + #[error("execution payload provider unavailable")] ExecutionPayloadProviderUnavailable, /// The engine driver is syncing. + #[error("engine driver is syncing")] Syncing, } diff --git a/crates/indexer/src/lib.rs b/crates/indexer/src/lib.rs index 57ad62c9..684f4e46 100644 --- a/crates/indexer/src/lib.rs +++ b/crates/indexer/src/lib.rs @@ -18,7 +18,7 @@ mod event; pub use event::IndexerEvent; mod error; -use error::IndexerError; +pub use error::IndexerError; /// The indexer is responsible for indexing data relevant to the L1. #[derive(Debug)] @@ -116,11 +116,11 @@ impl Stream for Indexer { fn poll_next(mut self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll> { // Remove and poll the next future in the queue if let Some(mut action) = self.pending_futures.pop_front() { - match action.poll(cx) { - Poll::Ready(result) => return Poll::Ready(Some(result)), + return match action.poll(cx) { + Poll::Ready(result) => Poll::Ready(Some(result)), Poll::Pending => { self.pending_futures.push_front(action); - return Poll::Pending; + Poll::Pending } } } diff --git a/crates/node/Cargo.toml b/crates/node/Cargo.toml index e4b63588..0c86e516 100644 --- a/crates/node/Cargo.toml +++ b/crates/node/Cargo.toml @@ -22,6 +22,9 @@ reth-tokio-util.workspace = true reth-scroll-primitives.workspace = true # scroll +scroll-alloy-rpc-types-engine.workspace = true +scroll-db.workspace = true +scroll-derivation-pipeline.workspace = true scroll-engine.workspace = true scroll-network.workspace = true scroll-wire.workspace = true @@ -46,6 +49,7 @@ workspace = true serde = [ "alloy-rpc-types-engine/serde", "reth-scroll-primitives/serde", + "scroll-alloy-rpc-types-engine/serde", "scroll-engine/serde", "scroll-network/serde", "scroll-wire/serde", diff --git a/crates/node/src/lib.rs b/crates/node/src/lib.rs index a0a04d82..992c5c3a 100644 --- a/crates/node/src/lib.rs +++ b/crates/node/src/lib.rs @@ -4,12 +4,13 @@ use alloy_rpc_types_engine::{ ExecutionPayload, ExecutionPayloadV1, ForkchoiceState as AlloyForkchoiceState, PayloadStatusEnum, }; -use futures::{stream::FuturesOrdered, StreamExt}; +use futures::{stream::FuturesOrdered, FutureExt, StreamExt}; use reth_tokio_util::{EventSender, EventStream}; -use rollup_node_indexer::Indexer; +use rollup_node_indexer::{Indexer, IndexerEvent}; use rollup_node_watcher::L1Notification; use scroll_alloy_network::Scroll as ScrollNetwork; use scroll_alloy_provider::ScrollEngineApi; +use scroll_alloy_rpc_types_engine::ScrollPayloadAttributes; use scroll_engine::{EngineDriver, EngineDriverError, ForkchoiceState}; use scroll_network::{ BlockImportError, BlockImportOutcome, BlockValidation, BlockValidationError, NetworkManager, @@ -17,6 +18,9 @@ use scroll_network::{ }; use scroll_wire::NewBlock; use std::{ + collections::VecDeque, + fmt, + fmt::{Debug, Formatter}, future::Future, pin::Pin, sync::Arc, @@ -26,14 +30,17 @@ use tokio::sync::mpsc::{Receiver, UnboundedReceiver}; use tokio_stream::wrappers::{ReceiverStream, UnboundedReceiverStream}; use tracing::{error, trace}; -mod event; pub use event::RollupEvent; +mod event; +pub use consensus::PoAConsensus; mod consensus; + use consensus::Consensus; -pub use consensus::PoAConsensus; use rollup_node_primitives::BlockInfo; -use rollup_node_providers::ExecutionPayloadProvider; +use rollup_node_providers::{ExecutionPayloadProvider, L1Provider}; +use scroll_db::Database; +use scroll_derivation_pipeline::DerivationPipeline; /// The size of the event channel. const EVENT_CHANNEL_SIZE: usize = 100; @@ -42,6 +49,10 @@ const EVENT_CHANNEL_SIZE: usize = 100; type PendingBlockImportFuture = Pin, Option)> + Send>>; +/// A future that resolves to a tuple of the block info and the block import outcome. +type EngineDriverFuture = + Pin> + Send>>; + /// The main manager for the rollup node. /// /// This is an endless [`Future`] that drives the state of the entire network forward and includes @@ -55,12 +66,13 @@ type PendingBlockImportFuture = /// - `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 { +pub struct RollupNodeManager { /// The network manager that manages the scroll p2p network. network: NetworkManager, - /// The engine driver used to communicate with the engine. + /// The engine driver used to communicate with the engine. engine: Arc>, + /// The derivation pipeline, used to derive payload attributes from batches. + derivation_pipeline: DerivationPipeline, /// A receiver for [`L1Notification`]s from the [`rollup_node_watcher::L1Watcher`]. l1_notification_rx: Option>>, /// An indexer used to index data for the rollup node. @@ -73,35 +85,62 @@ pub struct RollupNodeManager { forkchoice_state: ForkchoiceState, /// A collection of pending block imports. pending_block_imports: FuturesOrdered, + /// A collection of pending engine driver tasks. + pending_engine_tasks: VecDeque, /// An event sender for sending events to subscribers of the rollup node manager. event_sender: Option>, } -impl RollupNodeManager +impl Debug for RollupNodeManager { + fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result { + f.debug_struct("RollupNodeManager") + .field("network", &self.network) + .field("engine", &self.engine) + .field("derivation_pipeline", &self.derivation_pipeline) + .field("l1_notification_rx", &self.l1_notification_rx) + .field("indexer", &self.indexer) + .field("consensus", &self.consensus) + .field("new_block_rx", &self.new_block_rx) + .field("forkchoice_state", &self.forkchoice_state) + .field("pending_block_imports", &self.pending_block_imports) + .field("pending_engine_tasks", &"[ ... ]") + .field("event_sender", &self.event_sender) + .finish() + } +} + +impl RollupNodeManager where C: Consensus + Unpin, EC: ScrollEngineApi + Unpin + Sync + Send + 'static, P: ExecutionPayloadProvider + Unpin + Send + Sync + 'static, + L1P: L1Provider + Clone + Send + Sync + 'static, { /// Create a new [`RollupNodeManager`] instance. + #[allow(clippy::too_many_arguments)] pub fn new( network: NetworkManager, engine: EngineDriver, + l1_provider: L1P, + database: Arc, l1_notification_rx: Option>>, - indexer: Indexer, forkchoice_state: ForkchoiceState, consensus: C, new_block_rx: Option>, ) -> Self { + let indexer = Indexer::new(database.clone()); + let derivation_pipeline = DerivationPipeline::new(l1_provider, database); Self { network, engine: Arc::new(engine), + derivation_pipeline, l1_notification_rx: l1_notification_rx.map(Into::into), indexer, consensus, new_block_rx: new_block_rx.map(Into::into), forkchoice_state, pending_block_imports: FuturesOrdered::new(), + pending_engine_tasks: VecDeque::new(), event_sender: None, } } @@ -191,6 +230,38 @@ where cx.waker().wake_by_ref(); } + /// Handles a [`ScrollPayloadAttributes`] by initiating a task sending the attribute to the EN + /// via the [`EngineDriver`]. + fn handle_payload_attribute(&mut self, attribute: ScrollPayloadAttributes) { + let engine = self.engine.clone(); + let safe_block_info = *self.forkchoice_state.safe_block_info(); + let fcs = self.get_alloy_fcs(); + + let fut = Box::pin(async move { + engine + .handle_payload_attributes(safe_block_info, fcs, attribute) + .await + .map(|(info, _)| info) + }); + self.pending_engine_tasks.push_back(fut); + } + + /// Handles a [`EngineDriverFuture`] by polling it and updating the forkchoice state if it + /// resolves. + fn handle_engine_driver_future(&mut self, mut fut: EngineDriverFuture, cx: &mut Context<'_>) { + match fut.poll_unpin(cx) { + Poll::Ready(result) => match result { + Ok(block_info) => self.forkchoice_state.update_safe_block_info(block_info), + Err(err) => { + error!(target: "scroll::node::manager", ?err, "Engine driver failed to handle attribute") + } + }, + Poll::Pending => { + self.pending_engine_tasks.push_front(fut); + } + } + } + const fn get_alloy_fcs(&self) -> AlloyForkchoiceState { self.forkchoice_state.get_alloy_fcs() } @@ -204,6 +275,14 @@ where } } + /// Handles an indexer event. + fn handle_indexer_event(&mut self, event: IndexerEvent) { + trace!(target: "scroll::node::manager", "Received indexer event: {:?}", event); + if let IndexerEvent::BatchCommitIndexed(index) = event { + self.derivation_pipeline.handle_batch_commit(index) + } + } + /// Handles a block import outcome. fn handle_block_import_outcome( &mut self, @@ -229,11 +308,12 @@ where } } -impl Future for RollupNodeManager +impl Future for RollupNodeManager where C: Consensus + Unpin, EC: ScrollEngineApi + Unpin + Sync + Send + 'static, P: ExecutionPayloadProvider + Unpin + Send + Sync + 'static, + L1P: L1Provider + Clone + Unpin + Send + Sync + 'static, { type Output = (); @@ -254,9 +334,24 @@ where this.handle_l1_notification((*event).clone()); } - // Drain all Indexer events - while let Poll::Ready(Some(event)) = this.indexer.poll_next_unpin(cx) { - tracing::trace!(target: "scroll::node::manager", "Received indexer event: {:?}", event); + // Drain all Indexer events. + while let Poll::Ready(Some(result)) = this.indexer.poll_next_unpin(cx) { + match result { + Ok(event) => this.handle_indexer_event(event), + Err(err) => { + error!(target: "scroll::node::manager", ?err, "Error occurred at indexer level") + } + } + } + + // Poll Derivation Pipeline and push attribute in queue if any. + while let Poll::Ready(Some(attribute)) = this.derivation_pipeline.poll_next_unpin(cx) { + this.handle_payload_attribute(attribute) + } + + // Poll Engine Driver tasks. + if let Some(fut) = this.pending_engine_tasks.pop_front() { + this.handle_engine_driver_future(fut, cx); } // Handle blocks received from the eth-wire protocol. diff --git a/crates/providers/Cargo.toml b/crates/providers/Cargo.toml index 8981360c..ce828844 100644 --- a/crates/providers/Cargo.toml +++ b/crates/providers/Cargo.toml @@ -13,7 +13,7 @@ workspace = true # alloy alloy-eips = { workspace = true, features = ["kzg"] } alloy-primitives.workspace = true -alloy-rpc-types-beacon = "0.12" +alloy-rpc-types-beacon = "0.13" alloy-rpc-types-engine.workspace = true alloy-serde = "0.12" @@ -23,12 +23,17 @@ scroll-db.workspace = true # misc async-trait.workspace = true +auto_impl.workspace = true lru = "0.13.0" -reqwest = { version = "0.12", features = ["json"] } +reqwest = { workspace = true, features = ["json"] } serde = { version = "1.0", features = ["derive"] } thiserror.workspace = true tokio = { workspace = true, default-features = false } [dev-dependencies] eyre.workspace = true +scroll-db = { workspace = true, features = ["test-utils"] } tokio = { workspace = true, features = ["macros"] } + +[features] +test-utils = ["scroll-db/test-utils"] diff --git a/crates/providers/src/beacon_client.rs b/crates/providers/src/beacon.rs similarity index 66% rename from crates/providers/src/beacon_client.rs rename to crates/providers/src/beacon.rs index eef459a9..67f6ef98 100644 --- a/crates/providers/src/beacon_client.rs +++ b/crates/providers/src/beacon.rs @@ -1,9 +1,41 @@ -//! Contains an implementation of a Beacon client. +//! Exposes the [`BeaconProvider`] trait allowing to retrieve information from the Beacon chain. //! Credit to +use crate::L1ProviderError; +use std::{format, sync::Arc, vec::Vec}; + use alloy_rpc_types_beacon::sidecar::{BeaconBlobBundle, BlobData}; use reqwest::Client; -use std::{format, vec::Vec}; + +/// Returns a Beacon provider implementation, yielding a [`crate::test_utils::MockBeaconProvider`] +/// when the test-utils feature is activated. +pub fn beacon_provider( + _base: String, +) -> Arc + Send + Sync> { + #[cfg(feature = "test-utils")] + { + Arc::new(crate::test_utils::MockBeaconProvider::default()) + } + #[cfg(not(feature = "test-utils"))] + { + Arc::new(OnlineBeaconClient::new_http(_base)) + } +} + +/// An implementation of the trait can provide information related to the Beacon chain. +#[async_trait::async_trait] +#[auto_impl::auto_impl(&, Arc)] +pub trait BeaconProvider { + /// The error type for the provider. + type Error: Into + std::fmt::Debug; + + /// Returns the reduced configuration data for the Beacon client. + async fn config_spec(&self) -> Result, Self::Error>; + /// Returns the Beacon genesis information. + async fn beacon_genesis(&self) -> Result, Self::Error>; + /// Returns the blobs for the provided slot. + async fn blobs(&self, slot: u64) -> Result, Self::Error>; +} /// The config spec engine api method. const SPEC_METHOD: &str = "eth/v1/config/spec"; @@ -59,21 +91,24 @@ impl OnlineBeaconClient { } } -impl OnlineBeaconClient { +#[async_trait::async_trait] +impl BeaconProvider for OnlineBeaconClient { + type Error = reqwest::Error; + /// Returns the reduced configuration data for the Beacon client. - pub async fn config_spec(&self) -> Result, reqwest::Error> { + async fn config_spec(&self) -> Result, Self::Error> { let first = self.inner.get(format!("{}/{}", self.base, SPEC_METHOD)).send().await?; first.json::>().await } /// Returns the Beacon genesis information. - pub async fn beacon_genesis(&self) -> Result, reqwest::Error> { + async fn beacon_genesis(&self) -> Result, Self::Error> { let first = self.inner.get(format!("{}/{}", self.base, GENESIS_METHOD)).send().await?; first.json::>().await } /// Returns the blobs for the provided slot. - pub async fn blobs(&self, slot: u64) -> Result, reqwest::Error> { + async fn blobs(&self, slot: u64) -> Result, Self::Error> { let raw_response = self .inner .get(format!("{}/{}/{}", self.base, SIDECARS_METHOD_PREFIX, slot)) @@ -93,6 +128,7 @@ mod tests { const BEACON_CLIENT_URL: &str = "https://eth-beacon-chain.drpc.org/rest/"; #[tokio::test] + #[ignore] async fn test_should_return_genesis() -> eyre::Result<()> { let client = OnlineBeaconClient::new_http(BEACON_CLIENT_URL.to_string()); let genesis = client.beacon_genesis().await?; @@ -103,6 +139,7 @@ mod tests { } #[tokio::test] + #[ignore] async fn test_should_return_config() -> eyre::Result<()> { let client = OnlineBeaconClient::new_http(BEACON_CLIENT_URL.to_string()); let config = client.config_spec().await?; diff --git a/crates/providers/src/l1/blob.rs b/crates/providers/src/l1/blob.rs index fbf5e818..6a40048d 100644 --- a/crates/providers/src/l1/blob.rs +++ b/crates/providers/src/l1/blob.rs @@ -5,6 +5,7 @@ use std::sync::Arc; /// An instance of the trait can be used to fetch L1 blob data. #[async_trait::async_trait] +#[auto_impl::auto_impl(Arc, &)] pub trait L1BlobProvider { /// Returns corresponding blob data for the provided hash. async fn blob( diff --git a/crates/providers/src/l1/message.rs b/crates/providers/src/l1/message.rs index c234aaa0..0221de5c 100644 --- a/crates/providers/src/l1/message.rs +++ b/crates/providers/src/l1/message.rs @@ -1,4 +1,5 @@ use crate::L1ProviderError; +use std::sync::atomic::{AtomicU64, Ordering}; use alloy_primitives::B256; use scroll_alloy_consensus::TxL1Message; @@ -8,6 +9,7 @@ use scroll_db::{DatabaseConnectionProvider, DatabaseOperations}; /// provider using the queue index or hash and then call [`L1MessageProvider::next_l1_message`] to /// iterate the queue. #[async_trait::async_trait] +#[auto_impl::auto_impl(&)] pub trait L1MessageProvider { /// The error type for the provider. type Error: Into; @@ -15,9 +17,9 @@ pub trait L1MessageProvider { /// Returns the L1 message at the current cursor and advances the cursor. async fn next_l1_message(&self) -> Result, Self::Error>; /// Set the index cursor for the provider. - fn set_index_cursor(&mut self, index: u64); + fn set_index_cursor(&self, index: u64); /// Set the hash cursor for the provider. - fn set_hash_cursor(&mut self, hash: B256); + fn set_hash_cursor(&self, hash: B256); } /// Implements [`L1MessageProvider`] via a database connection. @@ -26,13 +28,21 @@ pub struct DatabaseL1MessageProvider { /// A connection to the database. database_connection: DB, /// The current L1 message index. - index: u64, + index: AtomicU64, +} + +/// Cloning the [`DatabaseL1MessageProvider`] clones the reference to the database and creates a new +/// u64 atomic. +impl Clone for DatabaseL1MessageProvider { + fn clone(&self) -> Self { + Self { database_connection: self.database_connection.clone(), index: AtomicU64::new(0) } + } } impl DatabaseL1MessageProvider { /// Returns a new instance of the [`DatabaseL1MessageProvider`]. - pub const fn new(db: DB, index: u64) -> Self { - Self { database_connection: db, index } + pub const fn new(db: DB) -> Self { + Self { database_connection: db, index: AtomicU64::new(0) } } } @@ -41,19 +51,21 @@ impl L1MessageProvider for DatabaseL1Mess type Error = L1ProviderError; async fn next_l1_message(&self) -> Result, Self::Error> { + // Memory Ordering: [`Ordering::Relaxed`] is sufficient based on this comment: + // https://github.com/tokio-rs/tokio/discussions/4484#discussioncomment-2140741 + let index = self.index.fetch_add(1, Ordering::Relaxed); Ok(self .database_connection - .get_l1_message(self.index) + .get_l1_message(index) .await .map(|tx| tx.map(|tx| tx.transaction))?) } - fn set_index_cursor(&mut self, index: u64) { - self.index = index; + fn set_index_cursor(&self, index: u64) { + self.index.store(index, Ordering::Relaxed); } - fn set_hash_cursor(&mut self, _hash: B256) { - // TODO: issue 43 - todo!() + fn set_hash_cursor(&self, _hash: B256) { + todo!("issue #43") } } diff --git a/crates/providers/src/l1/mod.rs b/crates/providers/src/l1/mod.rs index 54d262dd..ac953d8c 100644 --- a/crates/providers/src/l1/mod.rs +++ b/crates/providers/src/l1/mod.rs @@ -1,7 +1,7 @@ pub(crate) mod blob; pub(crate) mod message; -use crate::{beacon_client::OnlineBeaconClient, l1::message::L1MessageProvider, L1BlobProvider}; +use crate::{beacon::BeaconProvider, l1::message::L1MessageProvider, L1BlobProvider}; use std::{num::NonZeroUsize, sync::Arc}; use alloy_eips::eip4844::{Blob, BlobTransactionSidecarItem}; @@ -18,9 +18,9 @@ impl L1Provider for T where T: L1BlobProvider + L1MessageProvider {} /// An error occurring at the [`L1Provider`]. #[derive(Debug, thiserror::Error)] pub enum L1ProviderError { - /// Invalid timestamp for slot. - #[error("Beacon client error: {0}")] - BeaconClient(#[from] reqwest::Error), + /// Error at the beacon provider. + #[error("Beacon provider error: {0}")] + BeaconProvider(#[from] reqwest::Error), /// Invalid timestamp for slot. #[error("invalid block timestamp: genesis {0}, provided {1}")] InvalidBlockTimestamp(u64, u64), @@ -33,38 +33,41 @@ pub enum L1ProviderError { } /// An online implementation of the [`L1Provider`] trait. -#[derive(Debug)] -pub struct OnlineL1Provider

{ - /// The Beacon client. - beacon_client: OnlineBeaconClient, +#[derive(Debug, Clone)] +pub struct OnlineL1Provider { + /// The beacon provider. + beacon_provider: BP, /// The cache for blobs from similar blocks. cache: Arc>>>, /// The L1 message provider - l1_message_provider: P, + l1_message_provider: L1P, /// The genesis timestamp for the Beacon chain. genesis_timestamp: u64, /// The slot interval for the Beacon chain. slot_interval: u64, } -impl

OnlineL1Provider

{ - /// Returns a new [`OnlineBeaconClient`] from the provided [`OnlineBeaconClient`], blob capacity +impl OnlineL1Provider +where + BP: BeaconProvider, +{ + /// Returns a new [`OnlineL1Provider`] from the provided [`BeaconProvider`], blob capacity /// and [`L1MessageProvider`]. - pub async fn new( - client: OnlineBeaconClient, - blob_capacity: usize, - l1_message_provider: P, - ) -> Self { + pub async fn new(beacon_provider: BP, blob_capacity: usize, l1_message_provider: L1P) -> Self { let cache = Arc::new(Mutex::new(LruCache::new( NonZeroUsize::new(blob_capacity).expect("cache requires non-zero capacity"), ))); - let config = - client.config_spec().await.expect("failed to fetch Beacon chain configuration"); - let genesis = - client.beacon_genesis().await.expect("failed to fetch Beacon chain genesis info"); + let config = beacon_provider + .config_spec() + .await + .expect("failed to fetch Beacon chain configuration"); + let genesis = beacon_provider + .beacon_genesis() + .await + .expect("failed to fetch Beacon chain genesis info"); Self { - beacon_client: client, + beacon_provider, cache, l1_message_provider, genesis_timestamp: genesis.data.genesis_time, @@ -85,7 +88,7 @@ impl

OnlineL1Provider

{ } #[async_trait::async_trait] -impl L1BlobProvider for OnlineL1Provider

{ +impl L1BlobProvider for OnlineL1Provider { /// Returns the requested blob corresponding to the passed hash. async fn blob( &self, @@ -103,9 +106,10 @@ impl L1BlobProvider for OnlineL1Provider

{ // query the blobs with the client, return target blob and store all others in cache. let slot = self.slot(block_timestamp)?; let mut blobs = self - .beacon_client + .beacon_provider .blobs(slot) - .await? + .await + .map_err(Into::into)? .into_iter() .map(|blob| BlobTransactionSidecarItem { index: blob.index, @@ -134,18 +138,18 @@ impl L1BlobProvider for OnlineL1Provider

{ } #[async_trait::async_trait] -impl L1MessageProvider for OnlineL1Provider

{ - type Error =

::Error; +impl L1MessageProvider for OnlineL1Provider { + type Error = ::Error; async fn next_l1_message(&self) -> Result, Self::Error> { self.l1_message_provider.next_l1_message().await } - fn set_index_cursor(&mut self, index: u64) { + fn set_index_cursor(&self, index: u64) { self.l1_message_provider.set_index_cursor(index) } - fn set_hash_cursor(&mut self, hash: B256) { + fn set_hash_cursor(&self, hash: B256) { self.l1_message_provider.set_hash_cursor(hash) } } diff --git a/crates/providers/src/lib.rs b/crates/providers/src/lib.rs index 319478c9..0cdaaa03 100644 --- a/crates/providers/src/lib.rs +++ b/crates/providers/src/lib.rs @@ -1,8 +1,8 @@ //! The crate exposes various Providers along with their implementations for usage across the rollup //! node. -pub use beacon_client::OnlineBeaconClient; -mod beacon_client; +pub use beacon::{beacon_provider, BeaconProvider, OnlineBeaconClient}; +mod beacon; pub use execution_payload::ExecutionPayloadProvider; mod execution_payload; @@ -13,3 +13,7 @@ pub use l1::{ L1Provider, L1ProviderError, OnlineL1Provider, }; mod l1; + +/// Test utils related to providers. +#[cfg(feature = "test-utils")] +pub mod test_utils; diff --git a/crates/providers/src/test_utils.rs b/crates/providers/src/test_utils.rs new file mode 100644 index 00000000..4c6c51ac --- /dev/null +++ b/crates/providers/src/test_utils.rs @@ -0,0 +1,28 @@ +use crate::{ + beacon::{APIResponse, ReducedConfigData, ReducedGenesisData}, + BeaconProvider, +}; + +use alloy_rpc_types_beacon::sidecar::BlobData; + +/// Mocks all calls to the beacon chain. +#[derive(Debug, Default)] +#[non_exhaustive] +pub struct MockBeaconProvider; + +#[async_trait::async_trait] +impl BeaconProvider for MockBeaconProvider { + type Error = reqwest::Error; + + async fn config_spec(&self) -> Result, Self::Error> { + Ok(APIResponse { data: ReducedConfigData::default() }) + } + + async fn beacon_genesis(&self) -> Result, Self::Error> { + Ok(APIResponse { data: ReducedGenesisData::default() }) + } + + async fn blobs(&self, _slot: u64) -> Result, Self::Error> { + Ok(vec![]) + } +} diff --git a/crates/watcher/Cargo.toml b/crates/watcher/Cargo.toml index fea89c5c..e2a02d26 100644 --- a/crates/watcher/Cargo.toml +++ b/crates/watcher/Cargo.toml @@ -12,7 +12,7 @@ workspace = true [dependencies] # alloy alloy-consensus.workspace = true -alloy-eips = { workspace = true, optional = true } +alloy-eips.workspace = true alloy-json-rpc.workspace = true alloy-network.workspace = true alloy-primitives.workspace = true @@ -48,7 +48,7 @@ scroll-l1 = { workspace = true, features = ["test-utils"] } tracing-subscriber = "0.3" [features] -test-utils = ["arbitrary", "alloy-eips", "rand", "scroll-l1/test-utils"] +test-utils = ["arbitrary", "rand", "scroll-l1/test-utils"] arbitrary = [ "dep:arbitrary", "alloy-consensus/arbitrary", diff --git a/crates/watcher/src/lib.rs b/crates/watcher/src/lib.rs index 4fcd8d02..924e8415 100644 --- a/crates/watcher/src/lib.rs +++ b/crates/watcher/src/lib.rs @@ -332,8 +332,18 @@ where for (raw_log, decoded_log, _) in group { let block_number = raw_log.block_number.ok_or(FilterLogError::MissingBlockNumber)?; - let block_timestamp = - raw_log.block_timestamp.ok_or(FilterLogError::MissingBlockTimestamp)?; + // if the log is missing the block timestamp, we need to fetch it. + // the block timestamp is necessary in order to derive the beacon + // slot and query the blobs. + let block_timestamp = if let Some(ts) = raw_log.block_timestamp { + ts + } else { + self.execution_provider + .get_block(block_number.into()) + .await? + .map(|b| b.header.timestamp) + .ok_or(FilterLogError::MissingBlockTimestamp)? + }; let batch_index = decoded_log.batch_index.uint_try_to().expect("u256 to u64 conversion error");