diff --git a/.github/workflows/checks.yaml b/.github/workflows/checks.yaml index adede078c..33b3f6a84 100644 --- a/.github/workflows/checks.yaml +++ b/.github/workflows/checks.yaml @@ -87,7 +87,8 @@ jobs: - name: Download builder playground uses: flashbots/flashbots-toolchain@v0.1 with: - builder-playground: v0.3.1 + # v0.3.3+ supports custom recipes with a `release` override (used to pin reth to 1.11.x). + builder-playground: v0.3.3 # https://github.com/swatinem/rust-cache - name: Run Swatinem/rust-cache@v2 @@ -112,7 +113,7 @@ jobs: - name: Run the playground run: | - builder-playground start l1 --use-native-reth > /tmp/playground.log 2>&1 & + builder-playground start crates/rbuilder/src/integration/test_data/playground.yaml > /tmp/playground.log 2>&1 & PLAYGROUND_PID=$! echo "Waiting for all services to be healthy..." timeout=60 # 1 minutes timeout diff --git a/Cargo.lock b/Cargo.lock index 0c4bcf664..de3573ea0 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -14,7 +14,7 @@ version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d122413f284cf2d62fb1b7db97e02edb8cda96d769b16e443a4f6195e35662b0" dependencies = [ - "crypto-common", + "crypto-common 0.1.7", "generic-array", ] @@ -26,7 +26,7 @@ checksum = "b169f7a6d4742236a0a00c541b845991d0ac43e546831af1249753ab4c3aa3a0" dependencies = [ "cfg-if", "cipher", - "cpufeatures", + "cpufeatures 0.2.17", ] [[package]] @@ -101,7 +101,7 @@ version = "0.2.21" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1b9ebac8ff9c2f07667e1803dc777304337e160ce5153335beb45e8ec0751808" dependencies = [ - "alloy-primitives 1.4.1", + "alloy-primitives 1.6.0", "alloy-rlp", "num_enum", "serde", @@ -110,15 +110,15 @@ dependencies = [ [[package]] name = "alloy-consensus" -version = "1.1.2" +version = "1.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b6440213a22df93a87ed512d2f668e7dc1d62a05642d107f82d61edc9e12370" +checksum = "7f16daaf7e1f95f62c6c3bf8a3fc3d78b08ae9777810c0bb5e94966c7cd57ef0" dependencies = [ "alloy-eips", - "alloy-primitives 1.4.1", + "alloy-primitives 1.6.0", "alloy-rlp", "alloy-serde", - "alloy-trie 0.9.1", + "alloy-trie", "alloy-tx-macros", "arbitrary", "auto_impl", @@ -138,13 +138,13 @@ dependencies = [ [[package]] name = "alloy-consensus-any" -version = "1.1.2" +version = "1.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "15d0bea09287942405c4f9d2a4f22d1e07611c2dbd9d5bf94b75366340f9e6e0" +checksum = "118998d9015332ab1b4720ae1f1e3009491966a0349938a1f43ff45a8a4c6299" dependencies = [ "alloy-consensus", "alloy-eips", - "alloy-primitives 1.4.1", + "alloy-primitives 1.6.0", "alloy-rlp", "alloy-serde", "arbitrary", @@ -153,19 +153,19 @@ dependencies = [ [[package]] name = "alloy-dyn-abi" -version = "1.4.1" +version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fdff496dd4e98a81f4861e66f7eaf5f2488971848bb42d9c892f871730245c8" +checksum = "a475bb02d9cef2dbb99065c1664ab3fe1f9352e21d6d5ed3f02cdbfc06ed1abc" dependencies = [ "alloy-json-abi", - "alloy-primitives 1.4.1", + "alloy-primitives 1.6.0", "alloy-sol-type-parser", "alloy-sol-types", "derive_more 2.1.0", "itoa", "serde", "serde_json", - "winnow", + "winnow 1.0.3", ] [[package]] @@ -174,7 +174,7 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "741bdd7499908b3aa0b159bba11e71c8cddd009a2c2eb7a06e825f1ec87900a5" dependencies = [ - "alloy-primitives 1.4.1", + "alloy-primitives 1.6.0", "alloy-rlp", "arbitrary", "crc", @@ -189,7 +189,7 @@ version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9441120fa82df73e8959ae0e4ab8ade03de2aaae61be313fbf5746277847ce25" dependencies = [ - "alloy-primitives 1.4.1", + "alloy-primitives 1.6.0", "alloy-rlp", "arbitrary", "borsh", @@ -203,7 +203,7 @@ version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2919c5a56a1007492da313e7a3b6d45ef5edc5d33416fdec63c0d7a2702a0d20" dependencies = [ - "alloy-primitives 1.4.1", + "alloy-primitives 1.6.0", "alloy-rlp", "arbitrary", "borsh", @@ -214,16 +214,32 @@ dependencies = [ "thiserror 2.0.17", ] +[[package]] +name = "alloy-eip7928" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6b827a6d7784fe3eb3489d40699407a4cdcce74271421a01bdffe60cf573bb16" +dependencies = [ + "alloy-primitives 1.6.0", + "alloy-rlp", + "arbitrary", + "borsh", + "once_cell", + "serde", + "thiserror 2.0.17", +] + [[package]] name = "alloy-eips" -version = "1.1.2" +version = "1.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4bd2c7ae05abcab4483ce821f12f285e01c0b33804e6883dd9ca1569a87ee2be" +checksum = "e6ef28c9fdad22d4eec52d894f5f2673a0895f1e5ef196734568e68c0f6caca8" dependencies = [ "alloy-eip2124", "alloy-eip2930", "alloy-eip7702", - "alloy-primitives 1.4.1", + "alloy-eip7928", + "alloy-primitives 1.6.0", "alloy-rlp", "alloy-serde", "arbitrary", @@ -233,30 +249,28 @@ dependencies = [ "derive_more 2.1.0", "either", "ethereum_ssz 0.9.1", - "ethereum_ssz_derive", + "ethereum_ssz_derive 0.9.1", "serde", "serde_with", "sha2 0.10.9", - "thiserror 2.0.17", ] [[package]] name = "alloy-evm" -version = "0.23.3" +version = "0.27.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "527b47dc39850c6168002ddc1f7a2063e15d26137c1bb5330f6065a7524c1aa9" +checksum = "b991c370ce44e70a3a9e474087e3d65e42e66f967644ad729dc4cec09a21fd09" dependencies = [ "alloy-consensus", "alloy-eips", - "alloy-hardforks 0.4.4", - "alloy-primitives 1.4.1", + "alloy-hardforks 0.4.7", + "alloy-primitives 1.6.0", "alloy-rpc-types-engine", "alloy-rpc-types-eth", "alloy-sol-types", "auto_impl", "derive_more 2.1.0", - "op-alloy-consensus", - "op-alloy-rpc-types-engine", + "op-alloy", "op-revm", "revm", "thiserror 2.0.17", @@ -264,14 +278,14 @@ dependencies = [ [[package]] name = "alloy-genesis" -version = "1.1.2" +version = "1.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc47eaae86488b07ea8e20236184944072a78784a1f4993f8ec17b3aa5d08c21" +checksum = "bbf9480307b09d22876efb67d30cadd9013134c21f3a17ec9f93fd7536d38024" dependencies = [ "alloy-eips", - "alloy-primitives 1.4.1", + "alloy-primitives 1.6.0", "alloy-serde", - "alloy-trie 0.9.1", + "alloy-trie", "borsh", "serde", "serde_with", @@ -285,20 +299,20 @@ checksum = "3165210652f71dfc094b051602bafd691f506c54050a174b1cba18fb5ef706a3" dependencies = [ "alloy-chains", "alloy-eip2124", - "alloy-primitives 1.4.1", + "alloy-primitives 1.6.0", "auto_impl", "dyn-clone", ] [[package]] name = "alloy-hardforks" -version = "0.4.4" +version = "0.4.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e29d7eacf42f89c21d7f089916d0bdb4f36139a31698790e8837d2dbbd4b2c3" +checksum = "83ba208044232d14d4adbfa77e57d6329f51bc1acc21f5667bb7db72d88a0831" dependencies = [ "alloy-chains", "alloy-eip2124", - "alloy-primitives 1.4.1", + "alloy-primitives 1.6.0", "auto_impl", "dyn-clone", "serde", @@ -306,11 +320,11 @@ dependencies = [ [[package]] name = "alloy-json-abi" -version = "1.4.1" +version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5513d5e6bd1cba6bdcf5373470f559f320c05c8c59493b6e98912fbe6733943f" +checksum = "7c36c9d7f9021601b04bfef14a4b64849f6d73116a4e91e071d7fbfe10247901" dependencies = [ - "alloy-primitives 1.4.1", + "alloy-primitives 1.6.0", "alloy-sol-type-parser", "serde", "serde_json", @@ -318,11 +332,11 @@ dependencies = [ [[package]] name = "alloy-json-rpc" -version = "1.1.2" +version = "1.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "003f46c54f22854a32b9cc7972660a476968008ad505427eabab49225309ec40" +checksum = "422d110f1c40f1f8d0e5562b0b649c35f345fccb7093d9f02729943dcd1eef71" dependencies = [ - "alloy-primitives 1.4.1", + "alloy-primitives 1.6.0", "alloy-sol-types", "http 1.4.0", "serde", @@ -333,16 +347,16 @@ dependencies = [ [[package]] name = "alloy-network" -version = "1.1.2" +version = "1.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f4029954d9406a40979f3a3b46950928a0fdcfe3ea8a9b0c17490d57e8aa0e3" +checksum = "7197a66d94c4de1591cdc16a9bcea5f8cccd0da81b865b49aef97b1b4016e0fa" dependencies = [ "alloy-consensus", "alloy-consensus-any", "alloy-eips", "alloy-json-rpc", "alloy-network-primitives", - "alloy-primitives 1.4.1", + "alloy-primitives 1.6.0", "alloy-rpc-types-any", "alloy-rpc-types-eth", "alloy-serde", @@ -359,30 +373,31 @@ dependencies = [ [[package]] name = "alloy-network-primitives" -version = "1.1.2" +version = "1.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7805124ad69e57bbae7731c9c344571700b2a18d351bda9e0eba521c991d1bcb" +checksum = "eb82711d59a43fdfd79727c99f270b974c784ec4eb5728a0d0d22f26716c87ef" dependencies = [ "alloy-consensus", "alloy-eips", - "alloy-primitives 1.4.1", + "alloy-primitives 1.6.0", "alloy-serde", "serde", ] [[package]] name = "alloy-node-bindings" -version = "1.1.2" +version = "1.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b03d35475a02d2a8b76209cb4a1336cb7d85331d10a0f6ec329ee42151695c19" +checksum = "a9b2fda91b56bb08907cd44c5068130360e027e46a8c17612d386869fa7940be" dependencies = [ "alloy-genesis", "alloy-hardforks 0.2.13", "alloy-network", - "alloy-primitives 1.4.1", + "alloy-primitives 1.6.0", "alloy-signer", "alloy-signer-local", "k256 0.13.4", + "libc", "rand 0.8.5", "serde_json", "tempfile", @@ -436,15 +451,15 @@ dependencies = [ "ruint", "rustc-hash 2.1.1", "serde", - "sha3", + "sha3 0.10.8", "tiny-keccak", ] [[package]] name = "alloy-primitives" -version = "1.4.1" +version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "355bf68a433e0fd7f7d33d5a9fc2583fde70bf5c530f63b80845f8da5505cf28" +checksum = "4885c1409b6936c4898e646ef58baf6ec54edaf6d8179f79df805a7b85b7cf3e" dependencies = [ "alloy-rlp", "arbitrary", @@ -452,29 +467,31 @@ dependencies = [ "cfg-if", "const-hex", "derive_more 2.1.0", + "fixed-cache", "foldhash 0.2.0", - "getrandom 0.3.4", - "hashbrown 0.16.1", + "getrandom 0.4.2", + "hashbrown 0.17.1", "indexmap 2.12.1", "itoa", "k256 0.13.4", "keccak-asm", "paste", "proptest", - "proptest-derive 0.6.0", + "proptest-derive 0.8.0", "rand 0.9.2", + "rapidhash", "ruint", "rustc-hash 2.1.1", + "secp256k1 0.31.1", "serde", - "sha3", - "tiny-keccak", + "sha3 0.11.0", ] [[package]] name = "alloy-provider" -version = "1.1.2" +version = "1.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d369e12c92870d069e0c9dc5350377067af8a056e29e3badf8446099d7e00889" +checksum = "bf6b18b929ef1d078b834c3631e9c925177f3b23ddc6fa08a722d13047205876" dependencies = [ "alloy-chains", "alloy-consensus", @@ -482,10 +499,12 @@ dependencies = [ "alloy-json-rpc", "alloy-network", "alloy-network-primitives", - "alloy-primitives 1.4.1", + "alloy-primitives 1.6.0", "alloy-pubsub", "alloy-rpc-client", + "alloy-rpc-types-debug", "alloy-rpc-types-eth", + "alloy-rpc-types-trace", "alloy-signer", "alloy-sol-types", "alloy-transport", @@ -499,10 +518,10 @@ dependencies = [ "either", "futures", "futures-utils-wasm", - "lru 0.13.0", + "lru 0.16.4", "parking_lot", "pin-project", - "reqwest 0.12.24", + "reqwest 0.13.4", "serde", "serde_json", "thiserror 2.0.17", @@ -514,12 +533,12 @@ dependencies = [ [[package]] name = "alloy-pubsub" -version = "1.1.2" +version = "1.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f77d20cdbb68a614c7a86b3ffef607b37d087bb47a03c58f4c3f8f99bc3ace3b" +checksum = "5ad54073131e7292d4e03e1aa2287730f737280eb160d8b579fb31939f558c11" dependencies = [ "alloy-json-rpc", - "alloy-primitives 1.4.1", + "alloy-primitives 1.6.0", "alloy-transport", "auto_impl", "bimap", @@ -536,9 +555,9 @@ dependencies = [ [[package]] name = "alloy-rlp" -version = "0.3.12" +version = "0.3.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f70d83b765fdc080dbcd4f4db70d8d23fe4761f2f02ebfa9146b833900634b4" +checksum = "dc90b1e703d3c03f4ff7f48e82dd0bc1c8211ab7d079cd836a06fcfeb06651cb" dependencies = [ "alloy-rlp-derive", "arrayvec", @@ -547,23 +566,23 @@ dependencies = [ [[package]] name = "alloy-rlp-derive" -version = "0.3.12" +version = "0.3.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64b728d511962dda67c1bc7ea7c03736ec275ed2cf4c35d9585298ac9ccf3b73" +checksum = "f36834a5c0a2fa56e171bf256c34d70fca07d0c0031583edea1c4946b7889c9e" dependencies = [ "proc-macro2 1.0.103", "quote 1.0.42", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] name = "alloy-rpc-client" -version = "1.1.2" +version = "1.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "31c89883fe6b7381744cbe80fef638ac488ead4f1956a4278956a1362c71cd2e" +checksum = "94fcc9604042ca80bd37aa5e232ea1cd851f337e31e2babbbb345bc0b1c30de3" dependencies = [ "alloy-json-rpc", - "alloy-primitives 1.4.1", + "alloy-primitives 1.6.0", "alloy-pubsub", "alloy-transport", "alloy-transport-http", @@ -571,7 +590,7 @@ dependencies = [ "alloy-transport-ws", "futures", "pin-project", - "reqwest 0.12.24", + "reqwest 0.13.4", "serde", "serde_json", "tokio", @@ -584,11 +603,11 @@ dependencies = [ [[package]] name = "alloy-rpc-types" -version = "1.1.2" +version = "1.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64e279e6d40ee40fe8f76753b678d8d5d260cb276dc6c8a8026099b16d2b43f4" +checksum = "4faad925d3a669ffc15f43b3deec7fbdf2adeb28a4d6f9cf4bc661698c0f8f4b" dependencies = [ - "alloy-primitives 1.4.1", + "alloy-primitives 1.6.0", "alloy-rpc-types-engine", "alloy-rpc-types-eth", "alloy-serde", @@ -597,23 +616,23 @@ dependencies = [ [[package]] name = "alloy-rpc-types-admin" -version = "1.1.2" +version = "1.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2bcf50ccb65d29b8599f8f5e23dcac685f1d79459654c830cba381345760e901" +checksum = "b38080c2b01ad1bacbd3583cf7f6f800e5e0ffc11eaddaad7321225733a2d818" dependencies = [ "alloy-genesis", - "alloy-primitives 1.4.1", + "alloy-primitives 1.6.0", "serde", "serde_json", ] [[package]] name = "alloy-rpc-types-anvil" -version = "1.1.2" +version = "1.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e176c26fdd87893b6afeb5d92099d8f7e7a1fe11d6f4fe0883d6e33ac5f31ba" +checksum = "47df51bedb3e6062cb9981187a51e86d0d64a4de66eb0855e9efe6574b044ddf" dependencies = [ - "alloy-primitives 1.4.1", + "alloy-primitives 1.6.0", "alloy-rpc-types-eth", "alloy-serde", "serde", @@ -621,9 +640,9 @@ dependencies = [ [[package]] name = "alloy-rpc-types-any" -version = "1.1.2" +version = "1.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b43c1622aac2508d528743fd4cfdac1dea92d5a8fa894038488ff7edd0af0b32" +checksum = "3823026d1ed239a40f12364fac50726c8daf1b6ab8077a97212c5123910429ed" dependencies = [ "alloy-consensus-any", "alloy-rpc-types-eth", @@ -632,16 +651,16 @@ dependencies = [ [[package]] name = "alloy-rpc-types-beacon" -version = "1.1.2" +version = "1.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1786681640d4c60f22b6b8376b0f3fa200360bf1c3c2cb913e6c97f51928eb1b" +checksum = "f526dbd7bb039327cfd0ccf18c8a29ffd7402616b0c7a0239512bf8417d544c7" dependencies = [ "alloy-eips", - "alloy-primitives 1.4.1", + "alloy-primitives 1.6.0", "alloy-rpc-types-engine", "derive_more 2.1.0", "ethereum_ssz 0.9.1", - "ethereum_ssz_derive", + "ethereum_ssz_derive 0.9.1", "serde", "serde_json", "serde_with", @@ -652,11 +671,11 @@ dependencies = [ [[package]] name = "alloy-rpc-types-debug" -version = "1.1.2" +version = "1.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b2ca3a434a6d49910a7e8e51797eb25db42ef8a5578c52d877fcb26d0afe7bc" +checksum = "2145138f3214928f08cd13da3cb51ef7482b5920d8ac5a02ecd4e38d1a8f6d1e" dependencies = [ - "alloy-primitives 1.4.1", + "alloy-primitives 1.6.0", "derive_more 2.1.0", "serde", "serde_with", @@ -664,18 +683,18 @@ dependencies = [ [[package]] name = "alloy-rpc-types-engine" -version = "1.1.2" +version = "1.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9c4c53a8b0905d931e7921774a1830609713bd3e8222347963172b03a3ecc68" +checksum = "bb9b97b6e7965679ad22df297dda809b11cebc13405c1b537e5cffecc95834fa" dependencies = [ "alloy-consensus", "alloy-eips", - "alloy-primitives 1.4.1", + "alloy-primitives 1.6.0", "alloy-rlp", "alloy-serde", "derive_more 2.1.0", "ethereum_ssz 0.9.1", - "ethereum_ssz_derive", + "ethereum_ssz_derive 0.9.1", "jsonwebtoken", "rand 0.8.5", "serde", @@ -684,15 +703,15 @@ dependencies = [ [[package]] name = "alloy-rpc-types-eth" -version = "1.1.2" +version = "1.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed5fafb741c19b3cca4cdd04fa215c89413491f9695a3e928dee2ae5657f607e" +checksum = "59c095f92c4e1ff4981d89e9aa02d5f98c762a1980ab66bec49c44be11349da2" dependencies = [ "alloy-consensus", "alloy-consensus-any", "alloy-eips", "alloy-network-primitives", - "alloy-primitives 1.4.1", + "alloy-primitives 1.6.0", "alloy-rlp", "alloy-serde", "alloy-sol-types", @@ -706,13 +725,13 @@ dependencies = [ [[package]] name = "alloy-rpc-types-mev" -version = "1.1.2" +version = "1.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49a97bfc6d9b411c85bb08e1174ddd3e5d61b10d3bd13f529d6609f733cb2f6f" +checksum = "8eae9c65ff60dcc262247b6ebb5ad391ddf36d09029802c1768c5723e0cfa2f4" dependencies = [ "alloy-consensus", "alloy-eips", - "alloy-primitives 1.4.1", + "alloy-primitives 1.6.0", "alloy-rpc-types-eth", "alloy-serde", "serde", @@ -721,11 +740,11 @@ dependencies = [ [[package]] name = "alloy-rpc-types-trace" -version = "1.1.2" +version = "1.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c55324323aa634b01bdecb2d47462a8dce05f5505b14a6e5db361eef16eda476" +checksum = "2e5a4d010f86cd4e01e5205ec273911e538e1738e76d8bafe9ecd245910ea5a3" dependencies = [ - "alloy-primitives 1.4.1", + "alloy-primitives 1.6.0", "alloy-rpc-types-eth", "alloy-serde", "serde", @@ -735,11 +754,11 @@ dependencies = [ [[package]] name = "alloy-rpc-types-txpool" -version = "1.1.2" +version = "1.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96b1aa28effb6854be356ce92ed64cea3b323acd04c3f8bfb5126e2839698043" +checksum = "942d26a2ca8891b26de4a8529d21091e21c1093e27eb99698f1a86405c76b1ff" dependencies = [ - "alloy-primitives 1.4.1", + "alloy-primitives 1.6.0", "alloy-rpc-types-eth", "alloy-serde", "serde", @@ -747,11 +766,11 @@ dependencies = [ [[package]] name = "alloy-serde" -version = "1.1.2" +version = "1.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a6f180c399ca7c1e2fe17ea58343910cad0090878a696ff5a50241aee12fc529" +checksum = "11ece63b89294b8614ab3f483560c08d016930f842bf36da56bf0b764a15c11e" dependencies = [ - "alloy-primitives 1.4.1", + "alloy-primitives 1.6.0", "arbitrary", "serde", "serde_json", @@ -759,11 +778,11 @@ dependencies = [ [[package]] name = "alloy-signer" -version = "1.1.2" +version = "1.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ecc39ad2c0a3d2da8891f4081565780703a593f090f768f884049aa3aa929cbc" +checksum = "43f447aefab0f1c0649f71edc33f590992d4e122bc35fb9cdbbf67d4421ace85" dependencies = [ - "alloy-primitives 1.4.1", + "alloy-primitives 1.6.0", "async-trait", "auto_impl", "either", @@ -774,13 +793,13 @@ dependencies = [ [[package]] name = "alloy-signer-local" -version = "1.1.2" +version = "1.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "930e17cb1e46446a193a593a3bfff8d0ecee4e510b802575ebe300ae2e43ef75" +checksum = "f721f4bf2e4812e5505aaf5de16ef3065a8e26b9139ac885862d00b5a55a659a" dependencies = [ "alloy-consensus", "alloy-network", - "alloy-primitives 1.4.1", + "alloy-primitives 1.6.0", "alloy-signer", "async-trait", "coins-bip32", @@ -793,23 +812,23 @@ dependencies = [ [[package]] name = "alloy-sol-macro" -version = "1.4.1" +version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3ce480400051b5217f19d6e9a82d9010cdde20f1ae9c00d53591e4a1afbb312" +checksum = "840128ed2b2971d6d4668a553fe403a82683d3acc646c73e75887e7157408033" dependencies = [ "alloy-sol-macro-expander", "alloy-sol-macro-input", "proc-macro-error2", "proc-macro2 1.0.103", "quote 1.0.42", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] name = "alloy-sol-macro-expander" -version = "1.4.1" +version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d792e205ed3b72f795a8044c52877d2e6b6e9b1d13f431478121d8d4eaa9028" +checksum = "63ec265e5d65d725175f6ca7711c970824c90ef9c0d1f1973711d4150ee612dd" dependencies = [ "alloy-sol-macro-input", "const-hex", @@ -818,16 +837,16 @@ dependencies = [ "proc-macro-error2", "proc-macro2 1.0.103", "quote 1.0.42", - "syn 2.0.111", + "sha3 0.11.0", + "syn 2.0.117", "syn-solidity", - "tiny-keccak", ] [[package]] name = "alloy-sol-macro-input" -version = "1.4.1" +version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0bd1247a8f90b465ef3f1207627547ec16940c35597875cdc09c49d58b19693c" +checksum = "89bf01077f18650876cfa682eb1f949967b5cde03f1a51c955c469d2c9b4aa67" dependencies = [ "const-hex", "dunce", @@ -835,37 +854,37 @@ dependencies = [ "macro-string", "proc-macro2 1.0.103", "quote 1.0.42", - "syn 2.0.111", + "syn 2.0.117", "syn-solidity", ] [[package]] name = "alloy-sol-type-parser" -version = "1.4.1" +version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "954d1b2533b9b2c7959652df3076954ecb1122a28cc740aa84e7b0a49f6ac0a9" +checksum = "857b470ecdd2ed38beaf82ad1a38c516a8ff75266750f38b9eeed001d575241b" dependencies = [ "serde", - "winnow", + "winnow 1.0.3", ] [[package]] name = "alloy-sol-types" -version = "1.4.1" +version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70319350969a3af119da6fb3e9bddb1bce66c9ea933600cb297c8b1850ad2a3c" +checksum = "384cf252de0db2dec52821eac037a7f57e2aa33fe5b900ce6fe39973402341f1" dependencies = [ "alloy-json-abi", - "alloy-primitives 1.4.1", + "alloy-primitives 1.6.0", "alloy-sol-macro", "serde", ] [[package]] name = "alloy-transport" -version = "1.1.2" +version = "1.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cae82426d98f8bc18f53c5223862907cac30ab8fc5e4cd2bb50808e6d3ab43d8" +checksum = "8098f965442a9feb620965ba4b4be5e2b320f4ec5a3fff6bfa9e1ff7ef42bed1" dependencies = [ "alloy-json-rpc", "auto_impl", @@ -886,13 +905,14 @@ dependencies = [ [[package]] name = "alloy-transport-http" -version = "1.1.2" +version = "1.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90aa6825760905898c106aba9c804b131816a15041523e80b6d4fe7af6380ada" +checksum = "e8597d36d546e1dab822345ad563243ec3920e199322cb554ce56c8ef1a1e2e7" dependencies = [ "alloy-json-rpc", "alloy-transport", - "reqwest 0.12.24", + "itertools 0.14.0", + "reqwest 0.13.4", "serde_json", "tower 0.5.2", "tracing", @@ -901,9 +921,9 @@ dependencies = [ [[package]] name = "alloy-transport-ipc" -version = "1.1.2" +version = "1.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ace83a4a6bb896e5894c3479042e6ba78aa5271dde599aa8c36a021d49cc8cc" +checksum = "a1bd98c3870b8a44b79091dde5216a81d58ffbc1fd8ed61b776f9fee0f3bdf20" dependencies = [ "alloy-json-rpc", "alloy-pubsub", @@ -921,9 +941,9 @@ dependencies = [ [[package]] name = "alloy-transport-ws" -version = "1.1.2" +version = "1.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86c9ab4c199e3a8f3520b60ba81aa67bb21fed9ed0d8304e0569094d0758a56f" +checksum = "ec3ab7a72b180992881acc112628b7668337a19ce15293ee974600ea7b693691" dependencies = [ "alloy-pubsub", "alloy-transport", @@ -932,56 +952,42 @@ dependencies = [ "rustls 0.23.35", "serde_json", "tokio", - "tokio-tungstenite 0.26.2", + "tokio-tungstenite 0.28.0", "tracing", + "url", "ws_stream_wasm", ] [[package]] name = "alloy-trie" -version = "0.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "983d99aa81f586cef9dae38443245e585840fcf0fc58b09aee0b1f27aed1d500" -dependencies = [ - "alloy-primitives 1.4.1", - "alloy-rlp", - "arrayvec", - "derive_more 2.1.0", - "nybbles 0.3.4", - "smallvec", - "tracing", -] - -[[package]] -name = "alloy-trie" -version = "0.9.1" +version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3412d52bb97c6c6cc27ccc28d4e6e8cf605469101193b50b0bd5813b1f990b5" +checksum = "3f14b5d9b2c2173980202c6ff470d96e7c5e202c65a9f67884ad565226df7fbb" dependencies = [ - "alloy-primitives 1.4.1", + "alloy-primitives 1.6.0", "alloy-rlp", "arbitrary", - "arrayvec", "derive_arbitrary", "derive_more 2.1.0", - "nybbles 0.4.6", + "nybbles", "proptest", - "proptest-derive 0.5.1", + "proptest-derive 0.7.0", "serde", "smallvec", + "thiserror 2.0.17", "tracing", ] [[package]] name = "alloy-tx-macros" -version = "1.1.2" +version = "1.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae109e33814b49fc0a62f2528993aa8a2dd346c26959b151f05441dc0b9da292" +checksum = "d69722eddcdf1ce096c3ab66cf8116999363f734eb36fe94a148f4f71c85da84" dependencies = [ - "darling 0.21.3", + "darling 0.23.0", "proc-macro2 1.0.103", "quote 1.0.42", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] @@ -1055,6 +1061,15 @@ version = "1.0.100" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a23eb6b1614318a8071c9b2521f36b424b2c83db5eb3a0fead4a6c0809af6e61" +[[package]] +name = "approx" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cab112f0a86d568ea0e627cc1d6be74a1e9cd55214684db5561995f6dad897c6" +dependencies = [ + "num-traits", +] + [[package]] name = "aquamarine" version = "0.6.0" @@ -1066,7 +1081,7 @@ dependencies = [ "proc-macro-error2", "proc-macro2 1.0.103", "quote 1.0.42", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] @@ -1217,7 +1232,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "62945a2f7e6de02a31fe400aa489f0e0f5b2502e69f95f853adb82a96c7a6b60" dependencies = [ "quote 1.0.42", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] @@ -1255,7 +1270,7 @@ dependencies = [ "num-traits", "proc-macro2 1.0.103", "quote 1.0.42", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] @@ -1344,7 +1359,7 @@ checksum = "213888f660fddcca0d257e88e54ac05bca01885f258ccdf695bafd77031bb69d" dependencies = [ "proc-macro2 1.0.103", "quote 1.0.42", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] @@ -1519,7 +1534,7 @@ checksum = "c7c24de15d275a1ecfd47a380fb4d5ec9bfe0933f309ed5e705b775596a3574d" dependencies = [ "proc-macro2 1.0.103", "quote 1.0.42", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] @@ -1530,7 +1545,7 @@ checksum = "9035ad2d096bed7955a320ee7e2230574d28fd3c3a0f186cbea1ff3c7eed5dbb" dependencies = [ "proc-macro2 1.0.103", "quote 1.0.42", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] @@ -1577,7 +1592,7 @@ checksum = "ffdcb70bdbc4d478427380519163274ac86e52916e10f0a8889adf0f96d3fee7" dependencies = [ "proc-macro2 1.0.103", "quote 1.0.42", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] @@ -1595,6 +1610,28 @@ version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" +[[package]] +name = "aws-lc-rs" +version = "1.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5ec2f1fc3ec205783a5da9a7e6c1509cc69dedf09a1949e412c1e18469326d00" +dependencies = [ + "aws-lc-sys", + "zeroize", +] + +[[package]] +name = "aws-lc-sys" +version = "0.41.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a2f9779ce85b93ab6170dd940ad0169b5766ff848247aff13bb788b832fe3f4" +dependencies = [ + "cc", + "cmake", + "dunce", + "fs_extra", +] + [[package]] name = "axum" version = "0.8.7" @@ -1638,12 +1675,6 @@ dependencies = [ "tower-service", ] -[[package]] -name = "az" -version = "1.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b7e4c2464d97fe331d41de9d5db0def0a96f4d823b8b32a2efd503578988973" - [[package]] name = "backon" version = "1.6.0" @@ -1744,13 +1775,13 @@ dependencies = [ name = "bid-scraper" version = "0.1.0" dependencies = [ - "alloy-primitives 1.4.1", + "alloy-primitives 1.6.0", "alloy-provider", "alloy-rpc-types-beacon", "async-trait", "derivative", "ethereum_ssz 0.9.1", - "ethereum_ssz_derive", + "ethereum_ssz_derive 0.9.1", "exponential-backoff", "eyre", "futures", @@ -1813,31 +1844,13 @@ dependencies = [ "serde", ] -[[package]] -name = "bindgen" -version = "0.71.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f58bf3d7db68cfbac37cfc485a8d711e87e064c3d0fe0435b92f7a407f9d6b3" -dependencies = [ - "bitflags 2.10.0", - "cexpr", - "clang-sys", - "itertools 0.13.0", - "proc-macro2 1.0.103", - "quote 1.0.42", - "regex", - "rustc-hash 2.1.1", - "shlex", - "syn 2.0.111", -] - [[package]] name = "bindgen" version = "0.72.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "993776b509cfb49c750f11b8f07a46fa23e0a1386ffc01fb1e7d343efc387895" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.13.0", "cexpr", "clang-sys", "itertools 0.13.0", @@ -1847,8 +1860,8 @@ dependencies = [ "quote 1.0.42", "regex", "rustc-hash 2.1.1", - "shlex", - "syn 2.0.111", + "shlex 1.3.0", + "syn 2.0.117", ] [[package]] @@ -1890,9 +1903,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitflags" -version = "2.10.0" +version = "2.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "812e12b5285cc515a9c72a5c1d3b6d46a19dac5acfef5265968c166106e31dd3" +checksum = "b4388bee8683e3d04af747c73422af53102d2bd24d9eadb6cbc100baef4b43f8" dependencies = [ "serde_core", ] @@ -1928,6 +1941,15 @@ dependencies = [ "generic-array", ] +[[package]] +name = "block-buffer" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2f6c7dbe95a6ed67ad9f18e57daf93a2f034c524b99fd2b76d18fdfeb6660aa" +dependencies = [ + "hybrid-array", +] + [[package]] name = "block-padding" version = "0.3.3" @@ -1961,7 +1983,7 @@ version = "0.21.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bc119a5ad34c3f459062a96907f53358989b173d104258891bb74f95d93747e8" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.13.0", "boa_interner", "boa_macros", "boa_string", @@ -1978,7 +2000,7 @@ checksum = "e637ec52ea66d76b0ca86180c259d6c7bb6e6a6e14b2f36b85099306d8b00cc3" dependencies = [ "aligned-vec", "arrayvec", - "bitflags 2.10.0", + "bitflags 2.13.0", "boa_ast", "boa_gc", "boa_interner", @@ -2060,7 +2082,7 @@ dependencies = [ "cow-utils", "proc-macro2 1.0.103", "quote 1.0.42", - "syn 2.0.111", + "syn 2.0.117", "synstructure 0.13.2", ] @@ -2070,7 +2092,7 @@ version = "0.21.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "02f99bf5b684f0de946378fcfe5f38c3a0fbd51cbf83a0f39ff773a0e218541f" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.13.0", "boa_ast", "boa_interner", "boa_macros", @@ -2116,7 +2138,7 @@ dependencies = [ "proc-macro-crate 3.4.0", "proc-macro2 1.0.103", "quote 1.0.42", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] @@ -2212,16 +2234,16 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "46c5e41b57b8bba42a04676d81cb89e9ee8e859a1a66f80a5a72e1cb76b34d43" [[package]] -name = "byte-slice-cast" -version = "1.2.3" +name = "by_address" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7575182f7272186991736b70173b0ea045398f984bf5ebbb3804736ce1330c9d" +checksum = "64fa3c856b712db6612c019f14756e64e4bcea13337a6b33b696333a9eaa2d06" [[package]] -name = "bytecount" -version = "0.6.9" +name = "byte-slice-cast" +version = "1.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "175812e0be2bccb6abe50bb8d566126198344f707e304f45c648fd8f2cc0365e" +checksum = "7575182f7272186991736b70173b0ea045398f984bf5ebbb3804736ce1330c9d" [[package]] name = "bytemuck" @@ -2240,7 +2262,7 @@ checksum = "f9abbd1bc6865053c427f7198e6af43bfdedc55ab791faed4fbd361d789575ff" dependencies = [ "proc-macro2 1.0.103", "quote 1.0.42", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] @@ -2251,9 +2273,9 @@ checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" [[package]] name = "bytes" -version = "1.11.0" +version = "1.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b35204fbdc0b3f4446b89fc1ac2cf84a8a68971995d0bf2e925ec7cd960f9cb3" +checksum = "1e748733b7cbc798e1434b6ac524f0c1ff2ab456fe201501e6497c8417a4fc33" dependencies = [ "serde", ] @@ -2280,9 +2302,9 @@ dependencies = [ [[package]] name = "c-kzg" -version = "2.1.5" +version = "2.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e00bf4b112b07b505472dbefd19e37e53307e2bfed5a79e0cc161d58ccd0e687" +checksum = "6648ed1e4ea8e8a1a4a2c78e1cda29a3fd500bc622899c340d8525ea9a76b24a" dependencies = [ "arbitrary", "blst", @@ -2305,31 +2327,19 @@ dependencies = [ [[package]] name = "cargo-platform" -version = "0.1.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e35af189006b9c0f00a064685c727031e3ed2d8020f7ba284d78cc2671bd36ea" -dependencies = [ - "serde", -] - -[[package]] -name = "cargo_metadata" -version = "0.14.2" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4acbb09d9ee8e23699b9634375c72795d095bf268439da88562cf9b501f181fa" +checksum = "dd0061da739915fae12ea00e16397555ed4371a6bb285431aab930f61b0aa4ba" dependencies = [ - "camino", - "cargo-platform", - "semver 1.0.27", "serde", - "serde_json", + "serde_core", ] [[package]] name = "cargo_metadata" -version = "0.19.2" +version = "0.23.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd5eb614ed4c27c5d706420e4320fbe3216ab31fa1c33cd8246ac36dae4479ba" +checksum = "ef987d17b0a113becdd19d3d0022d04d7ef41f9efe4f3fb63ac44ba61df3ade9" dependencies = [ "camino", "cargo-platform", @@ -2339,12 +2349,6 @@ dependencies = [ "thiserror 2.0.17", ] -[[package]] -name = "cassowary" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df8670b8c7b9dae1793364eafadf7239c40d669904660c5960d74cfd80b46a53" - [[package]] name = "cast" version = "0.3.0" @@ -2362,13 +2366,14 @@ dependencies = [ [[package]] name = "cc" -version = "1.2.15" +version = "1.2.64" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c736e259eea577f443d5c86c304f9f4ae0295c43f3ba05c21f1d66b5f06001af" +checksum = "dad887fd958be91b5098c0248def011f4523ab786cd411be668777e55063501f" dependencies = [ + "find-msvc-tools", "jobserver", "libc", - "shlex", + "shlex 2.0.1", ] [[package]] @@ -2455,7 +2460,7 @@ version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad" dependencies = [ - "crypto-common", + "crypto-common 0.1.7", "inout", ] @@ -2507,7 +2512,7 @@ dependencies = [ "heck 0.5.0", "proc-macro2 1.0.103", "quote 1.0.42", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] @@ -2534,7 +2539,7 @@ dependencies = [ "hyper 1.8.1", "hyper-tls 0.6.0", "hyper-util", - "lz4_flex", + "lz4_flex 0.11.5", "polonius-the-crab", "quanta", "serde", @@ -2554,7 +2559,7 @@ dependencies = [ "proc-macro2 1.0.103", "quote 1.0.42", "serde_derive_internals", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] @@ -2641,7 +2646,7 @@ dependencies = [ "ripemd", "serde", "sha2 0.10.9", - "sha3", + "sha3 0.10.8", "thiserror 1.0.69", ] @@ -2667,16 +2672,16 @@ version = "7.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b03b7db8e0b4b2fdad6c551e634134e99ec000e5c8c3b6856c65e8bbaded7a3b" dependencies = [ - "crossterm 0.29.0", + "crossterm", "unicode-segmentation", - "unicode-width 0.2.0", + "unicode-width", ] [[package]] name = "compact_str" -version = "0.8.1" +version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b79c4069c6cad78e2e0cdfcbd26275770669fb39fd308a752dc110e83b9af32" +checksum = "9dfdd1c2274d9aa354115b09dc9a901d6c5576818cdf70d14cae2bdb47df00ab" dependencies = [ "castaway", "cfg-if", @@ -2733,7 +2738,7 @@ dependencies = [ "encode_unicode", "libc", "once_cell", - "unicode-width 0.2.0", + "unicode-width", "windows-sys 0.59.0", ] @@ -2744,7 +2749,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3bb320cac8a0750d7f25280aa97b09c26edfe161164238ecbbb31092b079e735" dependencies = [ "cfg-if", - "cpufeatures", + "cpufeatures 0.2.17", "proptest", "serde_core", ] @@ -2862,6 +2867,15 @@ dependencies = [ "libc", ] +[[package]] +name = "cpufeatures" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b2a41393f66f16b0823bb79094d54ac5fbd34ab292ddafb9a0456ac9f87d201" +dependencies = [ + "libc", +] + [[package]] name = "crc" version = "3.4.0" @@ -2986,33 +3000,21 @@ version = "0.8.21" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" -[[package]] -name = "crossterm" -version = "0.28.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "829d955a0bb380ef178a640b91779e3987da38c9aea133b20614cfed8cdea9c6" -dependencies = [ - "bitflags 2.10.0", - "crossterm_winapi", - "mio", - "parking_lot", - "rustix 0.38.44", - "signal-hook", - "signal-hook-mio", - "winapi", -] - [[package]] name = "crossterm" version = "0.29.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d8b9f2e4c67f833b660cdb0a3523065869fb35570177239812ed4c905aeff87b" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.13.0", "crossterm_winapi", + "derive_more 2.1.0", "document-features", + "mio", "parking_lot", - "rustix 1.1.2", + "rustix", + "signal-hook", + "signal-hook-mio", "winapi", ] @@ -3066,6 +3068,15 @@ dependencies = [ "typenum", ] +[[package]] +name = "crypto-common" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce6e4c961d6cd6c9a86db418387425e8bdeaf05b3c8bc1411e6dca4c252f1453" +dependencies = [ + "hybrid-array", +] + [[package]] name = "cssparser" version = "0.31.2" @@ -3086,7 +3097,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "13b588ba4ac1a99f7f2964d24b3d896ddc6bf847ee3855dbd4366f058cfcd331" dependencies = [ "quote 1.0.42", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] @@ -3117,7 +3128,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "32a2785755761f3ddc1492979ce1e48d2c00d09311c39e4466429188f3dd6501" dependencies = [ "quote 1.0.42", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] @@ -3136,7 +3147,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "97fb8b7c4503de7d6ae7b42ab72a5a59857b4c937ec27a3d4539dba95b5ab2be" dependencies = [ "cfg-if", - "cpufeatures", + "cpufeatures 0.2.17", "curve25519-dalek-derive", "digest 0.10.7", "fiat-crypto", @@ -3153,7 +3164,7 @@ checksum = "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3" dependencies = [ "proc-macro2 1.0.103", "quote 1.0.42", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] @@ -3176,6 +3187,16 @@ dependencies = [ "darling_macro 0.21.3", ] +[[package]] +name = "darling" +version = "0.23.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "25ae13da2f202d56bd7f91c25fba009e7717a1e4a1cc98a76d844b65ae912e9d" +dependencies = [ + "darling_core 0.23.0", + "darling_macro 0.23.0", +] + [[package]] name = "darling_core" version = "0.20.11" @@ -3187,7 +3208,7 @@ dependencies = [ "proc-macro2 1.0.103", "quote 1.0.42", "strsim", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] @@ -3197,12 +3218,25 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1247195ecd7e3c85f83c8d2a366e4210d588e802133e1e355180a9870b517ea4" dependencies = [ "fnv", + "ident_case", + "proc-macro2 1.0.103", + "quote 1.0.42", + "strsim", + "syn 2.0.117", +] + +[[package]] +name = "darling_core" +version = "0.23.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9865a50f7c335f53564bb694ef660825eb8610e0a53d3e11bf1b0d3df31e03b0" +dependencies = [ "ident_case", "proc-macro2 1.0.103", "quote 1.0.42", "serde", "strsim", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] @@ -3213,7 +3247,7 @@ checksum = "fc34b93ccb385b40dc71c6fceac4b2ad23662c7eeb248cf10d529b7e055b6ead" dependencies = [ "darling_core 0.20.11", "quote 1.0.42", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] @@ -3224,7 +3258,18 @@ checksum = "d38308df82d1080de0afee5d069fa14b0326a88c14f15c5ccda35b4a6c414c81" dependencies = [ "darling_core 0.21.3", "quote 1.0.42", - "syn 2.0.111", + "syn 2.0.117", +] + +[[package]] +name = "darling_macro" +version = "0.23.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac3984ec7bd6cfa798e62b4a642426a5be0e68f9401cfc2a01e3fa9ea2fcdb8d" +dependencies = [ + "darling_core 0.23.0", + "quote 1.0.42", + "syn 2.0.117", ] [[package]] @@ -3246,6 +3291,7 @@ version = "6.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5041cc499144891f3790297212f32a74fb938e5136a14943f338ef9e0ae276cf" dependencies = [ + "arbitrary", "cfg-if", "crossbeam-utils", "hashbrown 0.14.5", @@ -3253,6 +3299,7 @@ dependencies = [ "once_cell", "parking_lot_core", "rayon", + "serde", ] [[package]] @@ -3278,7 +3325,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8d162beedaa69905488a8da94f5ac3edb4dd4788b732fadb7bd120b2625c1976" dependencies = [ "data-encoding", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] @@ -3321,9 +3368,9 @@ dependencies = [ [[package]] name = "deranged" -version = "0.5.5" +version = "0.5.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ececcb659e7ba858fb4f10388c250a7252eb0a27373f1a72b8748afdd248e587" +checksum = "7cd812cc2bc1d69d4764bd80df88b4317eaef9e773c75226407d9bc0876b211c" dependencies = [ "powerfmt", "serde_core", @@ -3348,7 +3395,7 @@ checksum = "ef941ded77d15ca19b40374869ac6000af1c9f2a4c0f3d4c70926287e6364a8f" dependencies = [ "proc-macro2 1.0.103", "quote 1.0.42", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] @@ -3359,7 +3406,7 @@ checksum = "1e567bd82dcff979e4b03460c307b3cdc9e96fde3d73bed1496d2bc75d9dd62a" dependencies = [ "proc-macro2 1.0.103", "quote 1.0.42", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] @@ -3380,7 +3427,7 @@ dependencies = [ "darling 0.20.11", "proc-macro2 1.0.103", "quote 1.0.42", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] @@ -3390,7 +3437,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ab63b0e2bf4d5928aff72e83a7dace85d7bba5fe12dcc3c5a572d78caffd3f3c" dependencies = [ "derive_builder_core", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] @@ -3403,7 +3450,7 @@ dependencies = [ "proc-macro2 1.0.103", "quote 1.0.42", "rustc_version 0.4.1", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] @@ -3432,7 +3479,7 @@ checksum = "cb7330aeadfbe296029522e6c40f315320aba36fc43a5b3632f3795348f3bd22" dependencies = [ "proc-macro2 1.0.103", "quote 1.0.42", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] @@ -3445,7 +3492,7 @@ dependencies = [ "proc-macro2 1.0.103", "quote 1.0.42", "rustc_version 0.4.1", - "syn 2.0.111", + "syn 2.0.117", "unicode-xid 0.2.6", ] @@ -3478,10 +3525,20 @@ checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" dependencies = [ "block-buffer 0.10.4", "const-oid", - "crypto-common", + "crypto-common 0.1.7", "subtle", ] +[[package]] +name = "digest" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1dd6dbb5841937940781866fa1281a1ff7bd3bf827091440879f9994983d5c2" +dependencies = [ + "block-buffer 0.12.1", + "crypto-common 0.2.2", +] + [[package]] name = "dirs" version = "6.0.0" @@ -3565,7 +3622,7 @@ checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" dependencies = [ "proc-macro2 1.0.103", "quote 1.0.42", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] @@ -3639,7 +3696,7 @@ checksum = "1ec431cd708430d5029356535259c5d645d60edd3d39c54e5eea9782d46caa7d" dependencies = [ "proc-macro2 1.0.103", "quote 1.0.42", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] @@ -3703,7 +3760,7 @@ dependencies = [ "enum-ordinalize", "proc-macro2 1.0.103", "quote 1.0.42", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] @@ -3803,7 +3860,7 @@ dependencies = [ "rand 0.8.5", "rlp", "serde", - "sha3", + "sha3 0.10.8", "zeroize", ] @@ -3823,7 +3880,7 @@ dependencies = [ "rand 0.8.5", "secp256k1 0.30.0", "serde", - "sha3", + "sha3 0.10.8", "zeroize", ] @@ -3836,7 +3893,7 @@ dependencies = [ "heck 0.5.0", "proc-macro2 1.0.103", "quote 1.0.42", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] @@ -3856,7 +3913,7 @@ checksum = "685adfa4d6f3d765a26bc5dbc936577de9abf756c1feeb3089b01dd395034842" dependencies = [ "proc-macro2 1.0.103", "quote 1.0.42", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] @@ -3876,7 +3933,7 @@ checksum = "8ca9601fb2d62598ee17836250842873a413586e5d7ed88b356e38ddbb0ec631" dependencies = [ "proc-macro2 1.0.103", "quote 1.0.42", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] @@ -3888,7 +3945,7 @@ dependencies = [ "once_cell", "proc-macro2 1.0.103", "quote 1.0.42", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] @@ -3908,7 +3965,7 @@ checksum = "44f23cf4b44bfce11a86ace86f8a73ffdec849c9fd00a386a53d278bd9e81fb3" dependencies = [ "proc-macro2 1.0.103", "quote 1.0.42", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] @@ -3927,15 +3984,6 @@ dependencies = [ "windows-sys 0.61.2", ] -[[package]] -name = "error-chain" -version = "0.12.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d2f06b9cac1506ece98fe3231e3cc9c4410ec3d5b1f24ae1c8946f0742cdefc" -dependencies = [ - "version_check 0.9.5", -] - [[package]] name = "etcetera" version = "0.8.0" @@ -3951,9 +3999,9 @@ dependencies = [ name = "eth-sparse-mpt" version = "0.1.0" dependencies = [ - "alloy-primitives 1.4.1", + "alloy-primitives 1.6.0", "alloy-rlp", - "alloy-trie 0.8.1", + "alloy-trie", "arrayvec", "criterion", "dashmap 6.1.0", @@ -3961,11 +4009,12 @@ dependencies = [ "eyre", "flate2", "hash-db", - "nybbles 0.3.4", + "nybbles", "parking_lot", "proptest", "rand 0.8.5", "rayon", + "rbuilder-utils", "reth-chainspec", "reth-db", "reth-errors", @@ -4002,7 +4051,7 @@ dependencies = [ "regex", "serde", "serde_json", - "sha3", + "sha3 0.10.8", "thiserror 1.0.69", "uint 0.9.5", ] @@ -4068,7 +4117,7 @@ version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c853bd72c9e5787f8aafc3df2907c2ed03cff3150c3acd94e2e53a98ab70a8ab" dependencies = [ - "cpufeatures", + "cpufeatures 0.2.17", "ring", "sha2 0.10.9", ] @@ -4092,7 +4141,7 @@ version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3dc1355dbb41fbbd34ec28d4fb2a57d9a70c67ac3c19f6a5ca4d4a176b9e997a" dependencies = [ - "alloy-primitives 1.4.1", + "alloy-primitives 1.6.0", "hex", "serde", "serde_derive", @@ -4116,7 +4165,7 @@ version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0dcddb2554d19cde19b099fadddde576929d7a4d0c1cd3512d1fd95cf174375c" dependencies = [ - "alloy-primitives 1.4.1", + "alloy-primitives 1.6.0", "ethereum_serde_utils 0.8.0", "itertools 0.13.0", "serde", @@ -4126,19 +4175,46 @@ dependencies = [ ] [[package]] -name = "ethereum_ssz_derive" -version = "0.9.1" +name = "ethereum_ssz" +version = "0.10.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a657b6b3b7e153637dc6bdc6566ad9279d9ee11a15b12cfb24a2e04360637e9f" +checksum = "e462875ad8693755ea8913d6e905715c76ea4836e2254e18c9cf0f7a8f8c2a13" dependencies = [ - "darling 0.20.11", - "proc-macro2 1.0.103", - "quote 1.0.42", - "syn 2.0.111", -] - -[[package]] -name = "ethers-core" + "alloy-primitives 1.6.0", + "ethereum_serde_utils 0.8.0", + "itertools 0.14.0", + "serde", + "serde_derive", + "smallvec", + "typenum", +] + +[[package]] +name = "ethereum_ssz_derive" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a657b6b3b7e153637dc6bdc6566ad9279d9ee11a15b12cfb24a2e04360637e9f" +dependencies = [ + "darling 0.20.11", + "proc-macro2 1.0.103", + "quote 1.0.42", + "syn 2.0.117", +] + +[[package]] +name = "ethereum_ssz_derive" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "daf022360bdbe9456eda5f35718a50476d5b2a0d51a97ed4eae27420737a6fba" +dependencies = [ + "darling 0.23.0", + "proc-macro2 1.0.103", + "quote 1.0.42", + "syn 2.0.117", +] + +[[package]] +name = "ethers-core" version = "2.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "82d80cc6ad30b14a48ab786523af33b37f28a8623fc06afd55324816ef18fb1f" @@ -4176,6 +4252,17 @@ version = "2.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0" +[[package]] +name = "evmap" +version = "11.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b8874945f036109c72242964c1174cf99434e30cfa45bf45fedc983f50046f8" +dependencies = [ + "hashbag", + "left-right", + "smallvec", +] + [[package]] name = "exponential-backoff" version = "1.2.1" @@ -4213,6 +4300,12 @@ version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f8eb564c5c7423d25c886fb561d1e4ee69f72354d16918afa32c08811f6b6a55" +[[package]] +name = "fast-srgb8" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd2e7510819d6fbf51a5545c8f922716ecfb14df168a3242f7d33e0239efe6a1" + [[package]] name = "fastrand" version = "1.9.0" @@ -4298,6 +4391,23 @@ dependencies = [ "windows-sys 0.60.2", ] +[[package]] +name = "find-msvc-tools" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5baebc0774151f905a1a2cc41989300b1e6fbb29aff0ceffa1064fdd3088d582" + +[[package]] +name = "fixed-cache" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2fe63500644ef0269fe6b744e7e5dc5c20b5eebf3d881bc2be53f194636f6583" +dependencies = [ + "equivalent", + "rapidhash", + "typeid", +] + [[package]] name = "fixed-hash" version = "0.8.0" @@ -4310,6 +4420,27 @@ dependencies = [ "static_assertions", ] +[[package]] +name = "fixed-map" +version = "0.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "86ed19add84e8cb9e8cc5f7074de0324247149ffef0b851e215fb0edc50c229b" +dependencies = [ + "fixed-map-derive", + "serde", +] + +[[package]] +name = "fixed-map-derive" +version = "0.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6dc7a9cb3326bafb80642c5ce99b39a2c0702d4bfa8ee8a3e773791a6cbe2407" +dependencies = [ + "proc-macro2 1.0.103", + "quote 1.0.42", + "syn 2.0.117", +] + [[package]] name = "fixedbitset" version = "0.5.7" @@ -4402,6 +4533,12 @@ version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "28dd6caf6059519a65843af8fe2a3ae298b14b80179855aeb4adc2c1934ee619" +[[package]] +name = "fs_extra" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42703706b716c37f96a77aea830392ad231f44c9e9a67872fa5548707e11b11c" + [[package]] name = "fsevent-sys" version = "4.1.0" @@ -4589,7 +4726,7 @@ checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" dependencies = [ "proc-macro2 1.0.103", "quote 1.0.42", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] @@ -4724,7 +4861,7 @@ version = "0.2.24" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cfe4fbac503b8d1f88e6676011885f34b7174f46e59956bba534ba83abded4df" dependencies = [ - "unicode-width 0.2.0", + "unicode-width", ] [[package]] @@ -4760,11 +4897,24 @@ dependencies = [ "cfg-if", "js-sys", "libc", - "r-efi", + "r-efi 5.3.0", "wasip2", "wasm-bindgen", ] +[[package]] +name = "getrandom" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0de51e6874e94e7bf76d726fc5d13ba782deca734ff60d5bb2fb2607c7406555" +dependencies = [ + "cfg-if", + "libc", + "r-efi 6.0.0", + "wasip2", + "wasip3", +] + [[package]] name = "ghash" version = "0.5.1" @@ -4781,7 +4931,7 @@ version = "0.20.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2deb07a133b1520dc1a5690e9bd08950108873d7ed5de38dcc74d3b5ebffa110" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.13.0", "libc", "libgit2-sys", "log", @@ -4861,16 +5011,6 @@ dependencies = [ "web-sys", ] -[[package]] -name = "gmp-mpfr-sys" -version = "1.6.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "60f8970a75c006bb2f8ae79c6768a116dd215fa8346a87aed99bf9d82ca43394" -dependencies = [ - "libc", - "windows-sys 0.60.2", -] - [[package]] name = "governor" version = "0.6.3" @@ -4974,6 +5114,12 @@ version = "2.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1b4b9ebce26001bad2e6366295f64e381c1e9c479109202149b9e15e154973e9" +[[package]] +name = "hashbag" +version = "0.1.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7040a10f52cba493ddb09926e15d10a9d8a28043708a405931fe4c6f19fac064" + [[package]] name = "hashbrown" version = "0.12.3" @@ -5017,6 +5163,17 @@ name = "hashbrown" version = "0.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "841d1cc9bed7f9236f321df977030373f4a4163ae1a7dbfe1a51a2c1a51d9100" +dependencies = [ + "allocator-api2", + "equivalent", + "foldhash 0.2.0", +] + +[[package]] +name = "hashbrown" +version = "0.17.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed5909b6e89a2db4456e54cd5f673791d7eca6732202bbf2a9cc504fe2f9b84a" dependencies = [ "allocator-api2", "equivalent", @@ -5334,6 +5491,15 @@ dependencies = [ "serde", ] +[[package]] +name = "hybrid-array" +version = "0.4.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3944cf8cf766b40e2a1a333ee5e9b563f854d5fa49d6a8ca2764e97c6eddb214" +dependencies = [ + "typenum", +] + [[package]] name = "hyper" version = "0.14.32" @@ -5555,7 +5721,7 @@ dependencies = [ "iceoryx2-bb-elementary-traits", "proc-macro2 1.0.103", "quote 1.0.42", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] @@ -5692,7 +5858,7 @@ version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fd2ff4c48a8b992baabb09a573db9446bff89e39a193500dd5c8f8196c241c63" dependencies = [ - "bindgen 0.72.1", + "bindgen", "cc", "iceoryx2-pal-concurrency-sync", "iceoryx2-pal-configuration", @@ -5790,6 +5956,12 @@ dependencies = [ "zerovec", ] +[[package]] +name = "id-arena" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d3067d79b975e8844ca9eb072e16b31c3c1c36928edf9c6789548c524d0d954" + [[package]] name = "ident_case" version = "1.0.1" @@ -5862,7 +6034,7 @@ checksum = "a0eb5a3343abf848c0984fe4604b2b105da9539376e24fc0a3b0007411ae4fd9" dependencies = [ "proc-macro2 1.0.103", "quote 1.0.42", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] @@ -5923,7 +6095,7 @@ dependencies = [ "console", "number_prefix", "portable-atomic", - "unicode-width 0.2.0", + "unicode-width", "web-time", ] @@ -5948,7 +6120,7 @@ version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f37dccff2791ab604f9babef0ba14fbe0be30bd368dc541e2b08d07c8aa908f3" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.13.0", "inotify-sys", "libc", ] @@ -5982,7 +6154,7 @@ dependencies = [ "indoc", "proc-macro2 1.0.103", "quote 1.0.42", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] @@ -6051,16 +6223,6 @@ version = "2.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "469fb0b9cefa57e3ef31275ee7cacb78f2fdca44e4765491884a2b119d4eb130" -[[package]] -name = "iri-string" -version = "0.7.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f867b9d1d896b67beb18518eda36fdb77a32ea590de864f1325b294a6d14397" -dependencies = [ - "memchr", - "serde", -] - [[package]] name = "is-terminal" version = "0.4.17" @@ -6129,19 +6291,68 @@ dependencies = [ "cesu8", "cfg-if", "combine", - "jni-sys", + "jni-sys 0.3.0", "log", "thiserror 1.0.69", "walkdir", "windows-sys 0.45.0", ] +[[package]] +name = "jni" +version = "0.22.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5efd9a482cf3a427f00d6b35f14332adc7902ce91efb778580e180ff90fa3498" +dependencies = [ + "cfg-if", + "combine", + "jni-macros", + "jni-sys 0.4.1", + "log", + "simd_cesu8", + "thiserror 2.0.17", + "walkdir", + "windows-link 0.2.1", +] + +[[package]] +name = "jni-macros" +version = "0.22.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a00109accc170f0bdb141fed3e393c565b6f5e072365c3bd58f5b062591560a3" +dependencies = [ + "proc-macro2 1.0.103", + "quote 1.0.42", + "rustc_version 0.4.1", + "simd_cesu8", + "syn 2.0.117", +] + [[package]] name = "jni-sys" version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130" +[[package]] +name = "jni-sys" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c6377a88cb3910bee9b0fa88d4f42e1d2da8e79915598f65fb0c7ee14c878af2" +dependencies = [ + "jni-sys-macros", +] + +[[package]] +name = "jni-sys-macros" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38c0b942f458fe50cdac086d2f946512305e5631e720728f2a61aabcd47a6264" +dependencies = [ + "quote 1.0.42", + "syn 2.0.117", +] + [[package]] name = "jobserver" version = "0.1.34" @@ -6236,7 +6447,7 @@ dependencies = [ "pin-project", "rustls 0.23.35", "rustls-pki-types", - "rustls-platform-verifier", + "rustls-platform-verifier 0.5.3", "soketto 0.8.1", "thiserror 2.0.17", "tokio", @@ -6334,7 +6545,7 @@ dependencies = [ "jsonrpsee-core 0.26.0", "jsonrpsee-types 0.26.0", "rustls 0.23.35", - "rustls-platform-verifier", + "rustls-platform-verifier 0.5.3", "serde", "serde_json", "thiserror 2.0.17", @@ -6366,7 +6577,7 @@ dependencies = [ "proc-macro-crate 3.4.0", "proc-macro2 1.0.103", "quote 1.0.42", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] @@ -6537,20 +6748,41 @@ dependencies = [ "signature 2.2.0", ] +[[package]] +name = "kasuari" +version = "0.4.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8fe90c1150662e858c7d5f945089b7517b0a80d8bf7ba4b1b5ffc984e7230a5b" +dependencies = [ + "hashbrown 0.16.1", + "portable-atomic", + "thiserror 2.0.17", +] + [[package]] name = "keccak" version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ecc2af9a1119c51f12a14607e783cb977bde58bc069ff0c3da1095e635d70654" dependencies = [ - "cpufeatures", + "cpufeatures 0.2.17", +] + +[[package]] +name = "keccak" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e24a010dd405bd7ed803e5253182815b41bf2e6a80cc3bfc066658e03a198aa" +dependencies = [ + "cfg-if", + "cpufeatures 0.3.0", ] [[package]] name = "keccak-asm" -version = "0.1.4" +version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "505d1856a39b200489082f90d897c3f07c455563880bc5952e38eabf731c83b6" +checksum = "dd5dc2c0d691cbf7595cde551ced329cca99c2387c2cbc97754c5d0cd045d3ee" dependencies = [ "digest 0.10.7", "sha3-asm", @@ -6585,6 +6817,23 @@ dependencies = [ "spin 0.9.8", ] +[[package]] +name = "leb128fmt" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09edd9e8b54e49e587e4f6295a7d29c3ea94d469cb40ab8ca70b288248a81db2" + +[[package]] +name = "left-right" +version = "0.11.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0f0c21e4c8ff95f487fb34e6f9182875f42c84cef966d29216bf115d9bba835a" +dependencies = [ + "crossbeam-utils", + "loom", + "slab", +] + [[package]] name = "lexical" version = "6.1.1" @@ -6717,7 +6966,7 @@ version = "0.14.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a54ad7278b8bc5301d5ffd2a94251c004feb971feba96c971ea4063645990757" dependencies = [ - "bindgen 0.72.1", + "bindgen", "errno", "libc", ] @@ -6728,11 +6977,27 @@ version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "416f7e718bdb06000964960ffa43b4335ad4012ae8b99060261aa4a8088d5ccb" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.13.0", "libc", "redox_syscall", ] +[[package]] +name = "librocksdb-sys" +version = "0.17.3+10.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cef2a00ee60fe526157c9023edab23943fae1ce2ab6f4abb2a807c1746835de9" +dependencies = [ + "bindgen", + "bzip2-sys", + "cc", + "libc", + "libz-sys", + "lz4-sys", + "tikv-jemalloc-sys", + "zstd-sys", +] + [[package]] name = "libsqlite3-sys" version = "0.27.0" @@ -6756,6 +7021,15 @@ dependencies = [ "vcpkg", ] +[[package]] +name = "line-clipping" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f50e8f47623268b5407192d26876c4d7f89d686ca130fdc53bced4814cd29f8" +dependencies = [ + "bitflags 2.13.0", +] + [[package]] name = "linked-hash-map" version = "0.5.6" @@ -6772,12 +7046,6 @@ dependencies = [ "serde_core", ] -[[package]] -name = "linux-raw-sys" -version = "0.4.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d26c52dbd32dccf2d10cac7725f8eae5296885fb5703b261f7d0a0739ec807ab" - [[package]] name = "linux-raw-sys" version = "0.11.0" @@ -6845,11 +7113,20 @@ dependencies = [ [[package]] name = "lru" -version = "0.13.0" +version = "0.16.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "227748d55f2f0ab4735d87fd623798cb6b664512fe979705f829c9f81c934465" +checksum = "7f66e8d5d03f609abc3a39e6f08e4164ebf1447a732906d39eb9b99b7919ef39" dependencies = [ - "hashbrown 0.15.5", + "hashbrown 0.16.1", +] + +[[package]] +name = "lru" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a860605968fce16869fd239cf4237a82f3ac470723415db603b0e8b6c8d4fb9" +dependencies = [ + "hashbrown 0.17.1", ] [[package]] @@ -6886,6 +7163,12 @@ dependencies = [ "twox-hash", ] +[[package]] +name = "lz4_flex" +version = "0.12.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90071f8077f8e40adfc4b7fe9cd495ce316263f19e75c2211eeff3fdf475a3d9" + [[package]] name = "mac" version = "0.1.1" @@ -6903,13 +7186,13 @@ dependencies = [ [[package]] name = "macro-string" -version = "0.1.4" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b27834086c65ec3f9387b096d66e99f221cf081c2b738042aa252bcd41204e3" +checksum = "59a9dbbfc75d2688ed057456ce8a3ee3f48d12eec09229f560f3643b9f275653" dependencies = [ "proc-macro2 1.0.103", "quote 1.0.42", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] @@ -7034,38 +7317,38 @@ dependencies = [ [[package]] name = "metrics" -version = "0.24.3" +version = "0.24.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d5312e9ba3771cfa961b585728215e3d972c950a3eed9252aa093d6301277e8" +checksum = "89550ee9f79e88fef3119de263694973a8adb26c21d75322164fb8c493039fe2" dependencies = [ - "ahash", "portable-atomic", + "rapidhash", ] [[package]] name = "metrics-derive" -version = "0.1.0" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3dbdd96ed57d565ec744cba02862d707acf373c5772d152abae6ec5c4e24f6c" +checksum = "161ab904c2c62e7bda0f7562bf22f96440ca35ff79e66c800cbac298f2f4f5ec" dependencies = [ "proc-macro2 1.0.103", "quote 1.0.42", - "regex", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] name = "metrics-exporter-prometheus" -version = "0.16.2" +version = "0.18.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd7399781913e5393588a8d8c6a2867bf85fb38eaf2502fdce465aad2dc6f034" +checksum = "1db0d8f1fc9e62caebd0319e11eaec5822b0186c171568f0480b46a0137f9108" dependencies = [ "base64 0.22.1", + "evmap", "indexmap 2.12.1", "metrics", "metrics-util", "quanta", - "thiserror 1.0.69", + "thiserror 2.0.17", ] [[package]] @@ -7079,24 +7362,25 @@ dependencies = [ "mach2", "metrics", "once_cell", - "procfs 0.18.0", + "procfs", "rlimit", "windows 0.62.2", ] [[package]] name = "metrics-util" -version = "0.19.1" +version = "0.20.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8496cc523d1f94c1385dd8f0f0c2c480b2b8aeccb5b7e4485ad6365523ae376" +checksum = "96f8722f8562635f92f8ed992f26df0532266eb03d5202607c20c0d7e9745e13" dependencies = [ "crossbeam-epoch", "crossbeam-utils", - "hashbrown 0.15.5", + "hashbrown 0.16.1", "metrics", "quanta", "rand 0.9.2", "rand_xoshiro", + "rapidhash", "sketches-ddsketch", ] @@ -7105,7 +7389,7 @@ name = "metrics_macros" version = "0.1.0" dependencies = [ "quote 1.0.42", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] @@ -7143,21 +7427,6 @@ dependencies = [ "unicase", ] -[[package]] -name = "mini-moka" -version = "0.10.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c325dfab65f261f386debee8b0969da215b3fa0037e74c8a1234db7ba986d803" -dependencies = [ - "crossbeam-channel", - "crossbeam-utils", - "dashmap 5.5.3", - "skeptic", - "smallvec", - "tagptr", - "triomphe", -] - [[package]] name = "minimal-lexical" version = "0.2.1" @@ -7210,14 +7479,14 @@ dependencies = [ "cfg-if", "proc-macro2 1.0.103", "quote 1.0.42", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] name = "modular-bitfield" -version = "0.11.2" +version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a53d79ba8304ac1c4f9eb3b9d281f21f7be9d4626f72ce7df4ad8fbde4f38a74" +checksum = "2956e537fc68236d2aa048f55704f231cc93f1c4de42fe1ecb5bd7938061fc4a" dependencies = [ "modular-bitfield-impl", "static_assertions", @@ -7225,13 +7494,13 @@ dependencies = [ [[package]] name = "modular-bitfield-impl" -version = "0.11.2" +version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a7d5f7076603ebc68de2dc6a650ec331a062a13abaa346975be747bbfa4b789" +checksum = "59b43b4fd69e3437618106f7754f34021b831a514f9e1a98ae863cabcd8d8dad" dependencies = [ "proc-macro2 1.0.103", "quote 1.0.42", - "syn 1.0.109", + "syn 2.0.117", ] [[package]] @@ -7456,7 +7725,7 @@ version = "8.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4d3d07927151ff8575b7087f245456e549fea62edf0ec4e565a5ee50c8402bc3" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.13.0", "fsevent-sys", "inotify", "kqueue", @@ -7553,9 +7822,9 @@ dependencies = [ [[package]] name = "num-conv" -version = "0.1.0" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" +checksum = "521739c6d2bac4aa25192232afe6841231376b2b26d4d9fae5ecf8ca5772e441" [[package]] name = "num-integer" @@ -7627,7 +7896,7 @@ dependencies = [ "proc-macro-crate 3.4.0", "proc-macro2 1.0.103", "quote 1.0.42", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] @@ -7647,30 +7916,36 @@ checksum = "830b246a0e5f20af87141b25c173cd1b609bd7779a4617d6ec582abaf90870f3" [[package]] name = "nybbles" -version = "0.3.4" +version = "0.4.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8983bb634df7248924ee0c4c3a749609b5abcb082c28fffe3254b3eb3602b307" +checksum = "0d49ff0c0d00d4a502b39df9af3a525e1efeb14b9dabb5bb83335284c1309210" dependencies = [ "alloy-rlp", - "const-hex", + "arbitrary", + "cfg-if", "proptest", + "ruint", "serde", "smallvec", ] [[package]] -name = "nybbles" -version = "0.4.6" +name = "objc2-core-foundation" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c4b5ecbd0beec843101bffe848217f770e8b8da81d8355b7d6e226f2199b3dc" +checksum = "2a180dd8642fa45cdb7dd721cd4c11b1cadd4929ce112ebd8b9f5803cc79d536" dependencies = [ - "alloy-rlp", - "arbitrary", - "cfg-if", - "proptest", - "ruint", - "serde", - "smallvec", + "bitflags 2.13.0", +] + +[[package]] +name = "objc2-io-kit" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33fafba39597d6dc1fb709123dfa8289d39406734be322956a69f0931c73bb15" +dependencies = [ + "libc", + "objc2-core-foundation", ] [[package]] @@ -7695,16 +7970,31 @@ version = "11.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d6790f58c7ff633d8771f42965289203411a5e5c68388703c06e14f24770b41e" +[[package]] +name = "op-alloy" +version = "0.23.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e9b8fee21003dd4f076563de9b9d26f8c97840157ef78593cd7f262c5ca99848" +dependencies = [ + "op-alloy-consensus", + "op-alloy-network", + "op-alloy-provider", + "op-alloy-rpc-types", + "op-alloy-rpc-types-engine", +] + [[package]] name = "op-alloy-consensus" -version = "0.22.4" +version = "0.23.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "726da827358a547be9f1e37c2a756b9e3729cb0350f43408164794b370cad8ae" +checksum = "736381a95471d23e267263cfcee9e1d96d30b9754a94a2819148f83379de8a86" dependencies = [ "alloy-consensus", "alloy-eips", - "alloy-primitives 1.4.1", + "alloy-network", + "alloy-primitives 1.6.0", "alloy-rlp", + "alloy-rpc-types-eth", "alloy-serde", "arbitrary", "derive_more 2.1.0", @@ -7713,32 +8003,83 @@ dependencies = [ "thiserror 2.0.17", ] +[[package]] +name = "op-alloy-network" +version = "0.23.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4034183dca6bff6632e7c24c92e75ff5f0eabb58144edb4d8241814851334d47" +dependencies = [ + "alloy-consensus", + "alloy-network", + "alloy-primitives 1.6.0", + "alloy-provider", + "alloy-rpc-types-eth", + "alloy-signer", + "op-alloy-consensus", + "op-alloy-rpc-types", +] + +[[package]] +name = "op-alloy-provider" +version = "0.23.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6753d90efbaa8ea8bcb89c1737408ca85fa60d7adb875049d3f382c063666f86" +dependencies = [ + "alloy-network", + "alloy-primitives 1.6.0", + "alloy-provider", + "alloy-rpc-types-engine", + "alloy-transport", + "async-trait", + "op-alloy-rpc-types-engine", +] + +[[package]] +name = "op-alloy-rpc-types" +version = "0.23.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ddd87c6b9e5b6eee8d6b76f41b04368dca0e9f38d83338e5b00e730c282098a4" +dependencies = [ + "alloy-consensus", + "alloy-eips", + "alloy-network-primitives", + "alloy-primitives 1.6.0", + "alloy-rpc-types-eth", + "alloy-serde", + "derive_more 2.1.0", + "op-alloy-consensus", + "serde", + "serde_json", + "thiserror 2.0.17", +] + [[package]] name = "op-alloy-rpc-types-engine" -version = "0.22.4" +version = "0.23.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8f24b8cb66e4b33e6c9e508bf46b8ecafc92eadd0b93fedd306c0accb477657" +checksum = "77727699310a18cdeed32da3928c709e2704043b6584ed416397d5da65694efc" dependencies = [ "alloy-consensus", "alloy-eips", - "alloy-primitives 1.4.1", + "alloy-primitives 1.6.0", "alloy-rlp", "alloy-rpc-types-engine", "alloy-serde", "derive_more 2.1.0", "ethereum_ssz 0.9.1", - "ethereum_ssz_derive", + "ethereum_ssz_derive 0.9.1", "op-alloy-consensus", "serde", + "sha2 0.10.9", "snap", "thiserror 2.0.17", ] [[package]] name = "op-revm" -version = "12.0.2" +version = "15.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e31622d03b29c826e48800f4c8f389c8a9c440eb796a3e35203561a288f12985" +checksum = "79c92b75162c2ed1661849fa51683b11254a5b661798360a2c24be918edafd40" dependencies = [ "auto_impl", "revm", @@ -7782,7 +8123,7 @@ version = "0.10.75" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "08838db121398ad17ab8531ce9de97b244589089e290a384c900cb9ff7434328" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.13.0", "cfg-if", "foreign-types", "libc", @@ -7799,7 +8140,7 @@ checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" dependencies = [ "proc-macro2 1.0.103", "quote 1.0.42", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] @@ -7834,6 +8175,18 @@ dependencies = [ "tracing", ] +[[package]] +name = "opentelemetry-appender-tracing" +version = "0.31.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef6a1ac5ca3accf562b8c306fa8483c85f4390f768185ab775f242f7fe8fdcc2" +dependencies = [ + "opentelemetry", + "tracing", + "tracing-core", + "tracing-subscriber 0.3.22", +] + [[package]] name = "opentelemetry-http" version = "0.31.0" @@ -7928,6 +8281,30 @@ dependencies = [ "winapi", ] +[[package]] +name = "palette" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4cbf71184cc5ecc2e4e1baccdb21026c20e5fc3dcf63028a086131b3ab00b6e6" +dependencies = [ + "approx", + "fast-srgb8", + "libm", + "palette_derive", +] + +[[package]] +name = "palette_derive" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f5030daf005bface118c096f510ffb781fc28f9ab6a32ab224d8631be6851d30" +dependencies = [ + "by_address", + "proc-macro2 1.0.103", + "quote 1.0.42", + "syn 2.0.117", +] + [[package]] name = "parity-scale-codec" version = "3.7.5" @@ -7955,7 +8332,7 @@ dependencies = [ "proc-macro-crate 3.4.0", "proc-macro2 1.0.103", "quote 1.0.42", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] @@ -8189,7 +8566,7 @@ dependencies = [ "phf_shared 0.11.3", "proc-macro2 1.0.103", "quote 1.0.42", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] @@ -8202,7 +8579,7 @@ dependencies = [ "phf_shared 0.13.1", "proc-macro2 1.0.103", "quote 1.0.42", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] @@ -8249,7 +8626,7 @@ checksum = "6e918e4ff8c4549eb882f14b3a4bc8c8bc93de829416eacf579f1207a8fbf861" dependencies = [ "proc-macro2 1.0.103", "quote 1.0.42", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] @@ -8386,7 +8763,7 @@ checksum = "b24f92fc5b167f668ff85ab9607dfa72e2c09664cacef59297ee8601dee60126" dependencies = [ "ahash", "arrow2", - "bitflags 2.10.0", + "bitflags 2.13.0", "chrono", "comfy-table", "either", @@ -8457,7 +8834,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2c33762ec2a55e01c9f8776b34db86257c70a0a3b3929bd4eb91a52aacf61456" dependencies = [ "ahash", - "bitflags 2.10.0", + "bitflags 2.13.0", "glob", "once_cell", "polars-arrow", @@ -8613,7 +8990,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9d1fe60d06143b2430aa532c94cfe9e29783047f06c0d7fd359a9a51b729fa25" dependencies = [ "cfg-if", - "cpufeatures", + "cpufeatures 0.2.17", "opaque-debug", "universal-hash", ] @@ -8709,7 +9086,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "479ca8adacdd7ce8f1fb39ce9ecccbfe93a3f1344b3d0d97f20bc0196208f62b" dependencies = [ "proc-macro2 1.0.103", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] @@ -8808,7 +9185,7 @@ dependencies = [ "proc-macro-error-attr2", "proc-macro2 1.0.103", "quote 1.0.42", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] @@ -8829,40 +9206,17 @@ dependencies = [ "unicode-ident", ] -[[package]] -name = "procfs" -version = "0.17.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc5b72d8145275d844d4b5f6d4e1eef00c8cd889edb6035c21675d1bb1f45c9f" -dependencies = [ - "bitflags 2.10.0", - "chrono", - "flate2", - "hex", - "procfs-core 0.17.0", - "rustix 0.38.44", -] - [[package]] name = "procfs" version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "25485360a54d6861439d60facef26de713b1e126bf015ec8f98239467a2b82f7" dependencies = [ - "bitflags 2.10.0", - "procfs-core 0.18.0", - "rustix 1.1.2", -] - -[[package]] -name = "procfs-core" -version = "0.17.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "239df02d8349b06fc07398a3a1697b06418223b1c7725085e801e7c0fc6a12ec" -dependencies = [ - "bitflags 2.10.0", + "bitflags 2.13.0", "chrono", - "hex", + "flate2", + "procfs-core", + "rustix", ] [[package]] @@ -8871,7 +9225,8 @@ version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e6401bf7b6af22f78b563665d15a22e9aef27775b79b149a66ca022468a4e405" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.13.0", + "chrono", "hex", ] @@ -8898,7 +9253,7 @@ checksum = "bee689443a2bd0a16ab0348b52ee43e3b2d1b1f931c8aa5c9f8de4c86fbe8c40" dependencies = [ "bit-set", "bit-vec", - "bitflags 2.10.0", + "bitflags 2.13.0", "num-traits", "rand 0.9.2", "rand_chacha 0.9.0", @@ -8921,24 +9276,24 @@ dependencies = [ [[package]] name = "proptest-derive" -version = "0.5.1" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ee1c9ac207483d5e7db4940700de86a9aae46ef90c48b57f99fe7edb8345e49" +checksum = "fb6dc647500e84a25a85b100e76c85b8ace114c209432dc174f20aac11d4ed6c" dependencies = [ "proc-macro2 1.0.103", "quote 1.0.42", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] name = "proptest-derive" -version = "0.6.0" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "095a99f75c69734802359b682be8daaf8980296731f6470434ea2c652af1dd30" +checksum = "c57924a81864dddafba92e1bf92f9bf82f97096c44489548a60e888e1547549b" dependencies = [ "proc-macro2 1.0.103", "quote 1.0.42", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] @@ -8977,7 +9332,7 @@ dependencies = [ "prost 0.13.5", "prost-types", "regex", - "syn 2.0.111", + "syn 2.0.117", "tempfile", ] @@ -8991,7 +9346,7 @@ dependencies = [ "itertools 0.14.0", "proc-macro2 1.0.103", "quote 1.0.42", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] @@ -9004,7 +9359,7 @@ dependencies = [ "itertools 0.14.0", "proc-macro2 1.0.103", "quote 1.0.42", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] @@ -9022,17 +9377,6 @@ version = "2.28.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "106dd99e98437432fed6519dedecfade6a06a73bb7b2a1e019fdd2bee5778d94" -[[package]] -name = "pulldown-cmark" -version = "0.9.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57206b407293d2bcd3af849ce869d52068623f19e1b5ff8e8778e3309439682b" -dependencies = [ - "bitflags 2.10.0", - "memchr", - "unicase", -] - [[package]] name = "quanta" version = "0.12.6" @@ -9101,6 +9445,7 @@ version = "0.11.13" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f1906b49b0c3bc04b5fe5d86a77925ae6524a19b816ae38ce1e426255f1d8a31" dependencies = [ + "aws-lc-rs", "bytes", "getrandom 0.3.4", "lru-slab", @@ -9154,6 +9499,12 @@ version = "5.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f" +[[package]] +name = "r-efi" +version = "6.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8dcc9c7d52a811697d2151c701e0d08956f92b0e24136cf4cf27b57a6a0d9bf" + [[package]] name = "radium" version = "0.7.0" @@ -9397,25 +9748,81 @@ dependencies = [ "rand_core 0.9.3", ] +[[package]] +name = "rapidhash" +version = "4.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5e48930979c155e2f33aa36ab3119b5ee81332beb6482199a8ecd6029b80b59" +dependencies = [ + "rand 0.9.2", + "rustversion", +] + [[package]] name = "ratatui" -version = "0.29.0" +version = "0.30.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1695748e3a735b34968c887ceea5a380b43545903868ae8f5b666593100f6b68" +dependencies = [ + "instability", + "ratatui-core", + "ratatui-crossterm", + "ratatui-widgets", + "serde", +] + +[[package]] +name = "ratatui-core" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eabd94c2f37801c20583fc49dd5cd6b0ba68c716787c2dd6ed18571e1e63117b" +checksum = "42d3603f354bba8c595fa47860e60142d7372b7210c27044c6a7d0e1a4336b44" dependencies = [ - "bitflags 2.10.0", - "cassowary", + "bitflags 2.13.0", "compact_str", - "crossterm 0.28.1", + "hashbrown 0.17.1", "indoc", - "instability", - "itertools 0.13.0", - "lru 0.12.5", - "paste", - "strum 0.26.3", + "itertools 0.14.0", + "kasuari", + "lru 0.18.0", + "palette", + "serde", + "strum 0.28.0", + "thiserror 2.0.17", "unicode-segmentation", "unicode-truncate", - "unicode-width 0.2.0", + "unicode-width", +] + +[[package]] +name = "ratatui-crossterm" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b2867bedcbd6a690ca4f8672a687b730ec07660c79844517b084311b529980c" +dependencies = [ + "cfg-if", + "crossterm", + "instability", + "ratatui-core", +] + +[[package]] +name = "ratatui-widgets" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ef4f17dd7ac3abf5adc2b920a03c61eee4bfe6a88fa5191936895525371d79c" +dependencies = [ + "bitflags 2.13.0", + "hashbrown 0.17.1", + "indoc", + "instability", + "itertools 0.14.0", + "line-clipping", + "ratatui-core", + "serde", + "strum 0.28.0", + "time", + "unicode-segmentation", + "unicode-width", ] [[package]] @@ -9424,7 +9831,7 @@ version = "11.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "498cd0dc59d73224351ee52a95fee0f1a617a2eae0e7d9d720cc622c73a54186" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.13.0", ] [[package]] @@ -9460,7 +9867,7 @@ dependencies = [ "alloy-network", "alloy-network-primitives", "alloy-node-bindings", - "alloy-primitives 1.4.1", + "alloy-primitives 1.6.0", "alloy-provider", "alloy-rlp", "alloy-rpc-types", @@ -9468,7 +9875,7 @@ dependencies = [ "alloy-rpc-types-engine", "alloy-rpc-types-eth", "alloy-signer-local", - "alloy-trie 0.8.1", + "alloy-trie", "assert_matches", "async-trait", "beacon-api-client", @@ -9498,7 +9905,7 @@ dependencies = [ "jsonrpsee 0.20.4", "lazy_static", "lru 0.12.5", - "lz4_flex", + "lz4_flex 0.11.5", "mempool-dumpster", "metrics_macros", "mev-share-sse", @@ -9531,6 +9938,7 @@ dependencies = [ "reth-primitives-traits", "reth-provider", "reth-trie", + "reth-trie-db", "reth-trie-parallel", "revm", "schnellru", @@ -9582,7 +9990,7 @@ name = "rbuilder-operator" version = "0.1.0" dependencies = [ "ahash", - "alloy-primitives 1.4.1", + "alloy-primitives 1.6.0", "alloy-rpc-types-beacon", "alloy-signer", "alloy-signer-local", @@ -9635,7 +10043,7 @@ dependencies = [ "ahash", "alloy-consensus", "alloy-eips", - "alloy-primitives 1.4.1", + "alloy-primitives 1.6.0", "alloy-rlp", "alloy-rpc-types", "alloy-rpc-types-beacon", @@ -9645,7 +10053,7 @@ dependencies = [ "derive_more 2.1.0", "ethereum-consensus", "ethereum_ssz 0.9.1", - "ethereum_ssz_derive", + "ethereum_ssz_derive 0.9.1", "eyre", "integer-encoding", "proptest", @@ -9678,7 +10086,7 @@ version = "0.1.0" dependencies = [ "alloy-consensus", "alloy-eips", - "alloy-primitives 1.4.1", + "alloy-primitives 1.6.0", "alloy-provider", "alloy-rpc-types-eth", "alloy-signer", @@ -9699,12 +10107,13 @@ dependencies = [ name = "rbuilder-utils" version = "0.1.0" dependencies = [ - "alloy-primitives 1.4.1", + "alloy-primitives 1.6.0", "clickhouse", "derive_more 2.1.0", "rand 0.9.2", "redb", - "reth-tasks 1.8.2", + "reth-provider", + "reth-tasks", "serde", "serde_json", "strum 0.27.2", @@ -9759,7 +10168,7 @@ version = "0.5.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.13.0", ] [[package]] @@ -9801,7 +10210,7 @@ checksum = "b7186006dcb21920990093f30e3dea63b7d6e977bf1256be20c3563a5db070da" dependencies = [ "proc-macro2 1.0.103", "quote 1.0.42", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] @@ -9855,7 +10264,7 @@ version = "0.1.0" source = "git+https://github.com/nethermindeth/reipc.git?rev=b0b70735cda6273652212d1591188642e3449ed7#b0b70735cda6273652212d1591188642e3449ed7" dependencies = [ "alloy-json-rpc", - "alloy-primitives 1.4.1", + "alloy-primitives 1.6.0", "alloy-rpc-types-eth", "bytes", "crossbeam", @@ -9961,6 +10370,43 @@ dependencies = [ "webpki-roots 1.0.4", ] +[[package]] +name = "reqwest" +version = "0.13.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "219c5811de6525e5416c7d5d53bb656d3afdbc6c5af816e0802bcfa42dbdc1c3" +dependencies = [ + "base64 0.22.1", + "bytes", + "futures-core", + "http 1.4.0", + "http-body 1.0.1", + "http-body-util", + "hyper 1.8.1", + "hyper-rustls 0.27.7", + "hyper-util", + "js-sys", + "log", + "percent-encoding", + "pin-project-lite", + "quinn", + "rustls 0.23.35", + "rustls-pki-types", + "rustls-platform-verifier 0.7.0", + "serde", + "serde_json", + "sync_wrapper 1.0.2", + "tokio", + "tokio-rustls 0.26.4", + "tower 0.5.2", + "tower-http", + "tower-service", + "url", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", +] + [[package]] name = "resolv-conf" version = "0.7.6" @@ -9969,13 +10415,13 @@ checksum = "1e061d1b48cb8d38042de4ae0a7a6401009d6143dc80d2e2d6f31f0bdd6470c7" [[package]] name = "reth" -version = "1.9.3" -source = "git+https://github.com/paradigmxyz/reth?rev=27a8c0f5a6dfb27dea84c5751776ecabdd069646#27a8c0f5a6dfb27dea84c5751776ecabdd069646" +version = "1.11.3" +source = "git+https://github.com/paradigmxyz/reth?rev=d6324d63e27ef6b7c49cdc9b1977c1b808234c7b#d6324d63e27ef6b7c49cdc9b1977c1b808234c7b" dependencies = [ + "alloy-primitives 1.6.0", "alloy-rpc-types", "aquamarine", "clap", - "eyre", "reth-chainspec", "reth-cli-runner", "reth-cli-util", @@ -9984,8 +10430,6 @@ dependencies = [ "reth-db", "reth-ethereum-cli", "reth-ethereum-payload-builder", - "reth-ethereum-primitives", - "reth-evm", "reth-network", "reth-network-api", "reth-node-api", @@ -9997,8 +10441,6 @@ dependencies = [ "reth-payload-primitives", "reth-primitives", "reth-provider", - "reth-ress-protocol", - "reth-ress-provider", "reth-revm", "reth-rpc", "reth-rpc-api", @@ -10006,45 +10448,43 @@ dependencies = [ "reth-rpc-convert", "reth-rpc-eth-types", "reth-rpc-server-types", - "reth-tasks 1.9.3", - "reth-tokio-util", + "reth-tasks", "reth-transaction-pool", - "tokio", "tracing", ] [[package]] name = "reth-basic-payload-builder" -version = "1.9.3" -source = "git+https://github.com/paradigmxyz/reth?rev=27a8c0f5a6dfb27dea84c5751776ecabdd069646#27a8c0f5a6dfb27dea84c5751776ecabdd069646" +version = "1.11.3" +source = "git+https://github.com/paradigmxyz/reth?rev=d6324d63e27ef6b7c49cdc9b1977c1b808234c7b#d6324d63e27ef6b7c49cdc9b1977c1b808234c7b" dependencies = [ "alloy-consensus", "alloy-eips", - "alloy-primitives 1.4.1", + "alloy-primitives 1.6.0", "futures-core", "futures-util", "metrics", "reth-chain-state", - "reth-metrics 1.9.3", + "reth-metrics", "reth-payload-builder", "reth-payload-builder-primitives", "reth-payload-primitives", "reth-primitives-traits", "reth-revm", "reth-storage-api", - "reth-tasks 1.9.3", + "reth-tasks", "tokio", "tracing", ] [[package]] name = "reth-chain-state" -version = "1.9.3" -source = "git+https://github.com/paradigmxyz/reth?rev=27a8c0f5a6dfb27dea84c5751776ecabdd069646#27a8c0f5a6dfb27dea84c5751776ecabdd069646" +version = "1.11.3" +source = "git+https://github.com/paradigmxyz/reth?rev=d6324d63e27ef6b7c49cdc9b1977c1b808234c7b#d6324d63e27ef6b7c49cdc9b1977c1b808234c7b" dependencies = [ "alloy-consensus", "alloy-eips", - "alloy-primitives 1.4.1", + "alloy-primitives 1.6.0", "alloy-signer", "alloy-signer-local", "derive_more 2.1.0", @@ -10052,11 +10492,12 @@ dependencies = [ "parking_lot", "pin-project", "rand 0.9.2", + "rayon", "reth-chainspec", "reth-errors", "reth-ethereum-primitives", "reth-execution-types", - "reth-metrics 1.9.3", + "reth-metrics", "reth-primitives-traits", "reth-storage-api", "reth-trie", @@ -10070,16 +10511,16 @@ dependencies = [ [[package]] name = "reth-chainspec" -version = "1.9.3" -source = "git+https://github.com/paradigmxyz/reth?rev=27a8c0f5a6dfb27dea84c5751776ecabdd069646#27a8c0f5a6dfb27dea84c5751776ecabdd069646" +version = "1.11.3" +source = "git+https://github.com/paradigmxyz/reth?rev=d6324d63e27ef6b7c49cdc9b1977c1b808234c7b#d6324d63e27ef6b7c49cdc9b1977c1b808234c7b" dependencies = [ "alloy-chains", "alloy-consensus", "alloy-eips", "alloy-evm", "alloy-genesis", - "alloy-primitives 1.4.1", - "alloy-trie 0.9.1", + "alloy-primitives 1.6.0", + "alloy-trie", "auto_impl", "derive_more 2.1.0", "reth-ethereum-forks", @@ -10090,8 +10531,8 @@ dependencies = [ [[package]] name = "reth-cli" -version = "1.9.3" -source = "git+https://github.com/paradigmxyz/reth?rev=27a8c0f5a6dfb27dea84c5751776ecabdd069646#27a8c0f5a6dfb27dea84c5751776ecabdd069646" +version = "1.11.3" +source = "git+https://github.com/paradigmxyz/reth?rev=d6324d63e27ef6b7c49cdc9b1977c1b808234c7b#d6324d63e27ef6b7c49cdc9b1977c1b808234c7b" dependencies = [ "alloy-genesis", "clap", @@ -10104,18 +10545,18 @@ dependencies = [ [[package]] name = "reth-cli-commands" -version = "1.9.3" -source = "git+https://github.com/paradigmxyz/reth?rev=27a8c0f5a6dfb27dea84c5751776ecabdd069646#27a8c0f5a6dfb27dea84c5751776ecabdd069646" +version = "1.11.3" +source = "git+https://github.com/paradigmxyz/reth?rev=d6324d63e27ef6b7c49cdc9b1977c1b808234c7b#d6324d63e27ef6b7c49cdc9b1977c1b808234c7b" dependencies = [ "alloy-chains", "alloy-consensus", "alloy-eips", - "alloy-primitives 1.4.1", + "alloy-primitives 1.6.0", "alloy-rlp", "backon", "clap", "comfy-table", - "crossterm 0.28.1", + "crossterm", "eyre", "fdlimit", "futures", @@ -10123,6 +10564,8 @@ dependencies = [ "humantime", "itertools 0.14.0", "lz4", + "metrics", + "parking_lot", "ratatui", "reqwest 0.12.24", "reth-chainspec", @@ -10163,6 +10606,8 @@ dependencies = [ "reth-stages", "reth-static-file", "reth-static-file-types", + "reth-storage-api", + "reth-tasks", "reth-trie", "reth-trie-common", "reth-trie-db", @@ -10172,28 +10617,29 @@ dependencies = [ "tar", "tokio", "tokio-stream", - "toml 0.8.23", + "toml 0.9.8", "tracing", + "url", "zstd 0.13.3", ] [[package]] name = "reth-cli-runner" -version = "1.9.3" -source = "git+https://github.com/paradigmxyz/reth?rev=27a8c0f5a6dfb27dea84c5751776ecabdd069646#27a8c0f5a6dfb27dea84c5751776ecabdd069646" +version = "1.11.3" +source = "git+https://github.com/paradigmxyz/reth?rev=d6324d63e27ef6b7c49cdc9b1977c1b808234c7b#d6324d63e27ef6b7c49cdc9b1977c1b808234c7b" dependencies = [ - "reth-tasks 1.9.3", + "reth-tasks", "tokio", "tracing", ] [[package]] name = "reth-cli-util" -version = "1.9.3" -source = "git+https://github.com/paradigmxyz/reth?rev=27a8c0f5a6dfb27dea84c5751776ecabdd069646#27a8c0f5a6dfb27dea84c5751776ecabdd069646" +version = "1.11.3" +source = "git+https://github.com/paradigmxyz/reth?rev=d6324d63e27ef6b7c49cdc9b1977c1b808234c7b#d6324d63e27ef6b7c49cdc9b1977c1b808234c7b" dependencies = [ "alloy-eips", - "alloy-primitives 1.4.1", + "alloy-primitives 1.6.0", "cfg-if", "eyre", "libc", @@ -10207,14 +10653,14 @@ dependencies = [ [[package]] name = "reth-codecs" -version = "1.9.3" -source = "git+https://github.com/paradigmxyz/reth?rev=27a8c0f5a6dfb27dea84c5751776ecabdd069646#27a8c0f5a6dfb27dea84c5751776ecabdd069646" +version = "1.11.3" +source = "git+https://github.com/paradigmxyz/reth?rev=d6324d63e27ef6b7c49cdc9b1977c1b808234c7b#d6324d63e27ef6b7c49cdc9b1977c1b808234c7b" dependencies = [ "alloy-consensus", "alloy-eips", "alloy-genesis", - "alloy-primitives 1.4.1", - "alloy-trie 0.9.1", + "alloy-primitives 1.6.0", + "alloy-trie", "arbitrary", "bytes", "modular-bitfield", @@ -10227,36 +10673,37 @@ dependencies = [ [[package]] name = "reth-codecs-derive" -version = "1.9.3" -source = "git+https://github.com/paradigmxyz/reth?rev=27a8c0f5a6dfb27dea84c5751776ecabdd069646#27a8c0f5a6dfb27dea84c5751776ecabdd069646" +version = "1.11.3" +source = "git+https://github.com/paradigmxyz/reth?rev=d6324d63e27ef6b7c49cdc9b1977c1b808234c7b#d6324d63e27ef6b7c49cdc9b1977c1b808234c7b" dependencies = [ "proc-macro2 1.0.103", "quote 1.0.42", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] name = "reth-config" -version = "1.9.3" -source = "git+https://github.com/paradigmxyz/reth?rev=27a8c0f5a6dfb27dea84c5751776ecabdd069646#27a8c0f5a6dfb27dea84c5751776ecabdd069646" +version = "1.11.3" +source = "git+https://github.com/paradigmxyz/reth?rev=d6324d63e27ef6b7c49cdc9b1977c1b808234c7b#d6324d63e27ef6b7c49cdc9b1977c1b808234c7b" dependencies = [ "eyre", "humantime-serde", "reth-network-types", "reth-prune-types", "reth-stages-types", + "reth-static-file-types", "serde", - "toml 0.8.23", + "toml 0.9.8", "url", ] [[package]] name = "reth-consensus" -version = "1.9.3" -source = "git+https://github.com/paradigmxyz/reth?rev=27a8c0f5a6dfb27dea84c5751776ecabdd069646#27a8c0f5a6dfb27dea84c5751776ecabdd069646" +version = "1.11.3" +source = "git+https://github.com/paradigmxyz/reth?rev=d6324d63e27ef6b7c49cdc9b1977c1b808234c7b#d6324d63e27ef6b7c49cdc9b1977c1b808234c7b" dependencies = [ "alloy-consensus", - "alloy-primitives 1.4.1", + "alloy-primitives 1.6.0", "auto_impl", "reth-execution-types", "reth-primitives-traits", @@ -10265,8 +10712,8 @@ dependencies = [ [[package]] name = "reth-consensus-common" -version = "1.9.3" -source = "git+https://github.com/paradigmxyz/reth?rev=27a8c0f5a6dfb27dea84c5751776ecabdd069646#27a8c0f5a6dfb27dea84c5751776ecabdd069646" +version = "1.11.3" +source = "git+https://github.com/paradigmxyz/reth?rev=d6324d63e27ef6b7c49cdc9b1977c1b808234c7b#d6324d63e27ef6b7c49cdc9b1977c1b808234c7b" dependencies = [ "alloy-consensus", "alloy-eips", @@ -10277,13 +10724,13 @@ dependencies = [ [[package]] name = "reth-consensus-debug-client" -version = "1.9.3" -source = "git+https://github.com/paradigmxyz/reth?rev=27a8c0f5a6dfb27dea84c5751776ecabdd069646#27a8c0f5a6dfb27dea84c5751776ecabdd069646" +version = "1.11.3" +source = "git+https://github.com/paradigmxyz/reth?rev=d6324d63e27ef6b7c49cdc9b1977c1b808234c7b#d6324d63e27ef6b7c49cdc9b1977c1b808234c7b" dependencies = [ "alloy-consensus", "alloy-eips", "alloy-json-rpc", - "alloy-primitives 1.4.1", + "alloy-primitives 1.6.0", "alloy-provider", "alloy-rpc-types-engine", "alloy-transport", @@ -10303,10 +10750,10 @@ dependencies = [ [[package]] name = "reth-db" -version = "1.9.3" -source = "git+https://github.com/paradigmxyz/reth?rev=27a8c0f5a6dfb27dea84c5751776ecabdd069646#27a8c0f5a6dfb27dea84c5751776ecabdd069646" +version = "1.11.3" +source = "git+https://github.com/paradigmxyz/reth?rev=d6324d63e27ef6b7c49cdc9b1977c1b808234c7b#d6324d63e27ef6b7c49cdc9b1977c1b808234c7b" dependencies = [ - "alloy-primitives 1.4.1", + "alloy-primitives 1.6.0", "derive_more 2.1.0", "eyre", "metrics", @@ -10315,37 +10762,39 @@ dependencies = [ "reth-db-api", "reth-fs-util", "reth-libmdbx", - "reth-metrics 1.9.3", + "reth-metrics", "reth-nippy-jar", "reth-static-file-types", "reth-storage-errors", "reth-tracing", "rustc-hash 2.1.1", "strum 0.27.2", - "sysinfo 0.33.1", + "sysinfo 0.38.4", "tempfile", "thiserror 2.0.17", + "tracing", ] [[package]] name = "reth-db-api" -version = "1.9.3" -source = "git+https://github.com/paradigmxyz/reth?rev=27a8c0f5a6dfb27dea84c5751776ecabdd069646#27a8c0f5a6dfb27dea84c5751776ecabdd069646" +version = "1.11.3" +source = "git+https://github.com/paradigmxyz/reth?rev=d6324d63e27ef6b7c49cdc9b1977c1b808234c7b#d6324d63e27ef6b7c49cdc9b1977c1b808234c7b" dependencies = [ "alloy-consensus", "alloy-genesis", - "alloy-primitives 1.4.1", + "alloy-primitives 1.6.0", "arbitrary", + "arrayvec", "bytes", "derive_more 2.1.0", "metrics", "modular-bitfield", + "op-alloy-consensus", "parity-scale-codec", "proptest", "reth-codecs", "reth-db-models", "reth-ethereum-primitives", - "reth-optimism-primitives", "reth-primitives-traits", "reth-prune-types", "reth-stages-types", @@ -10357,12 +10806,12 @@ dependencies = [ [[package]] name = "reth-db-common" -version = "1.9.3" -source = "git+https://github.com/paradigmxyz/reth?rev=27a8c0f5a6dfb27dea84c5751776ecabdd069646#27a8c0f5a6dfb27dea84c5751776ecabdd069646" +version = "1.11.3" +source = "git+https://github.com/paradigmxyz/reth?rev=d6324d63e27ef6b7c49cdc9b1977c1b808234c7b#d6324d63e27ef6b7c49cdc9b1977c1b808234c7b" dependencies = [ "alloy-consensus", "alloy-genesis", - "alloy-primitives 1.4.1", + "alloy-primitives 1.6.0", "boyer-moore-magiclen", "eyre", "reth-chainspec", @@ -10387,11 +10836,11 @@ dependencies = [ [[package]] name = "reth-db-models" -version = "1.9.3" -source = "git+https://github.com/paradigmxyz/reth?rev=27a8c0f5a6dfb27dea84c5751776ecabdd069646#27a8c0f5a6dfb27dea84c5751776ecabdd069646" +version = "1.11.3" +source = "git+https://github.com/paradigmxyz/reth?rev=d6324d63e27ef6b7c49cdc9b1977c1b808234c7b#d6324d63e27ef6b7c49cdc9b1977c1b808234c7b" dependencies = [ "alloy-eips", - "alloy-primitives 1.4.1", + "alloy-primitives 1.6.0", "arbitrary", "bytes", "modular-bitfield", @@ -10402,10 +10851,10 @@ dependencies = [ [[package]] name = "reth-discv4" -version = "1.9.3" -source = "git+https://github.com/paradigmxyz/reth?rev=27a8c0f5a6dfb27dea84c5751776ecabdd069646#27a8c0f5a6dfb27dea84c5751776ecabdd069646" +version = "1.11.3" +source = "git+https://github.com/paradigmxyz/reth?rev=d6324d63e27ef6b7c49cdc9b1977c1b808234c7b#d6324d63e27ef6b7c49cdc9b1977c1b808234c7b" dependencies = [ - "alloy-primitives 1.4.1", + "alloy-primitives 1.6.0", "alloy-rlp", "discv5", "enr 0.13.0", @@ -10427,10 +10876,10 @@ dependencies = [ [[package]] name = "reth-discv5" -version = "1.9.3" -source = "git+https://github.com/paradigmxyz/reth?rev=27a8c0f5a6dfb27dea84c5751776ecabdd069646#27a8c0f5a6dfb27dea84c5751776ecabdd069646" +version = "1.11.3" +source = "git+https://github.com/paradigmxyz/reth?rev=d6324d63e27ef6b7c49cdc9b1977c1b808234c7b#d6324d63e27ef6b7c49cdc9b1977c1b808234c7b" dependencies = [ - "alloy-primitives 1.4.1", + "alloy-primitives 1.6.0", "alloy-rlp", "derive_more 2.1.0", "discv5", @@ -10441,7 +10890,7 @@ dependencies = [ "rand 0.9.2", "reth-chainspec", "reth-ethereum-forks", - "reth-metrics 1.9.3", + "reth-metrics", "reth-network-peers", "secp256k1 0.30.0", "thiserror 2.0.17", @@ -10451,15 +10900,15 @@ dependencies = [ [[package]] name = "reth-dns-discovery" -version = "1.9.3" -source = "git+https://github.com/paradigmxyz/reth?rev=27a8c0f5a6dfb27dea84c5751776ecabdd069646#27a8c0f5a6dfb27dea84c5751776ecabdd069646" +version = "1.11.3" +source = "git+https://github.com/paradigmxyz/reth?rev=d6324d63e27ef6b7c49cdc9b1977c1b808234c7b#d6324d63e27ef6b7c49cdc9b1977c1b808234c7b" dependencies = [ - "alloy-primitives 1.4.1", + "alloy-primitives 1.6.0", + "dashmap 6.1.0", "data-encoding", "enr 0.13.0", "hickory-resolver", "linked_hash_set", - "parking_lot", "reth-ethereum-forks", "reth-network-peers", "reth-tokio-util", @@ -10475,12 +10924,12 @@ dependencies = [ [[package]] name = "reth-downloaders" -version = "1.9.3" -source = "git+https://github.com/paradigmxyz/reth?rev=27a8c0f5a6dfb27dea84c5751776ecabdd069646#27a8c0f5a6dfb27dea84c5751776ecabdd069646" +version = "1.11.3" +source = "git+https://github.com/paradigmxyz/reth?rev=d6324d63e27ef6b7c49cdc9b1977c1b808234c7b#d6324d63e27ef6b7c49cdc9b1977c1b808234c7b" dependencies = [ "alloy-consensus", "alloy-eips", - "alloy-primitives 1.4.1", + "alloy-primitives 1.6.0", "alloy-rlp", "async-compression", "futures", @@ -10491,12 +10940,12 @@ dependencies = [ "rayon", "reth-config", "reth-consensus", - "reth-metrics 1.9.3", + "reth-metrics", "reth-network-p2p", "reth-network-peers", "reth-primitives-traits", "reth-storage-api", - "reth-tasks 1.9.3", + "reth-tasks", "thiserror 2.0.17", "tokio", "tokio-stream", @@ -10506,11 +10955,11 @@ dependencies = [ [[package]] name = "reth-ecies" -version = "1.9.3" -source = "git+https://github.com/paradigmxyz/reth?rev=27a8c0f5a6dfb27dea84c5751776ecabdd069646#27a8c0f5a6dfb27dea84c5751776ecabdd069646" +version = "1.11.3" +source = "git+https://github.com/paradigmxyz/reth?rev=d6324d63e27ef6b7c49cdc9b1977c1b808234c7b#d6324d63e27ef6b7c49cdc9b1977c1b808234c7b" dependencies = [ "aes", - "alloy-primitives 1.4.1", + "alloy-primitives 1.6.0", "alloy-rlp", "block-padding", "byteorder", @@ -10519,29 +10968,26 @@ dependencies = [ "ctr", "digest 0.10.7", "futures", - "generic-array", "hmac", "pin-project", "rand 0.8.5", "reth-network-peers", "secp256k1 0.30.0", "sha2 0.10.9", - "sha3", "thiserror 2.0.17", "tokio", "tokio-stream", "tokio-util", "tracing", - "typenum", ] [[package]] name = "reth-engine-local" -version = "1.9.3" -source = "git+https://github.com/paradigmxyz/reth?rev=27a8c0f5a6dfb27dea84c5751776ecabdd069646#27a8c0f5a6dfb27dea84c5751776ecabdd069646" +version = "1.11.3" +source = "git+https://github.com/paradigmxyz/reth?rev=d6324d63e27ef6b7c49cdc9b1977c1b808234c7b#d6324d63e27ef6b7c49cdc9b1977c1b808234c7b" dependencies = [ "alloy-consensus", - "alloy-primitives 1.4.1", + "alloy-primitives 1.6.0", "alloy-rpc-types-engine", "eyre", "futures-util", @@ -10550,6 +10996,7 @@ dependencies = [ "reth-ethereum-engine-primitives", "reth-payload-builder", "reth-payload-primitives", + "reth-primitives-traits", "reth-storage-api", "reth-transaction-pool", "tokio", @@ -10559,12 +11006,12 @@ dependencies = [ [[package]] name = "reth-engine-primitives" -version = "1.9.3" -source = "git+https://github.com/paradigmxyz/reth?rev=27a8c0f5a6dfb27dea84c5751776ecabdd069646#27a8c0f5a6dfb27dea84c5751776ecabdd069646" +version = "1.11.3" +source = "git+https://github.com/paradigmxyz/reth?rev=d6324d63e27ef6b7c49cdc9b1977c1b808234c7b#d6324d63e27ef6b7c49cdc9b1977c1b808234c7b" dependencies = [ "alloy-consensus", "alloy-eips", - "alloy-primitives 1.4.1", + "alloy-primitives 1.6.0", "alloy-rpc-types-engine", "auto_impl", "futures", @@ -10584,8 +11031,8 @@ dependencies = [ [[package]] name = "reth-engine-service" -version = "1.9.3" -source = "git+https://github.com/paradigmxyz/reth?rev=27a8c0f5a6dfb27dea84c5751776ecabdd069646#27a8c0f5a6dfb27dea84c5751776ecabdd069646" +version = "1.11.3" +source = "git+https://github.com/paradigmxyz/reth?rev=d6324d63e27ef6b7c49cdc9b1977c1b808234c7b#d6324d63e27ef6b7c49cdc9b1977c1b808234c7b" dependencies = [ "futures", "pin-project", @@ -10593,7 +11040,6 @@ dependencies = [ "reth-consensus", "reth-engine-primitives", "reth-engine-tree", - "reth-ethereum-primitives", "reth-evm", "reth-network-p2p", "reth-node-types", @@ -10601,26 +11047,28 @@ dependencies = [ "reth-provider", "reth-prune", "reth-stages-api", - "reth-tasks 1.9.3", + "reth-tasks", + "reth-trie-db", ] [[package]] name = "reth-engine-tree" -version = "1.9.3" -source = "git+https://github.com/paradigmxyz/reth?rev=27a8c0f5a6dfb27dea84c5751776ecabdd069646#27a8c0f5a6dfb27dea84c5751776ecabdd069646" +version = "1.11.3" +source = "git+https://github.com/paradigmxyz/reth?rev=d6324d63e27ef6b7c49cdc9b1977c1b808234c7b#d6324d63e27ef6b7c49cdc9b1977c1b808234c7b" dependencies = [ "alloy-consensus", + "alloy-eip7928", "alloy-eips", "alloy-evm", - "alloy-primitives 1.4.1", + "alloy-primitives 1.6.0", "alloy-rlp", "alloy-rpc-types-engine", "crossbeam-channel", - "dashmap 6.1.0", "derive_more 2.1.0", + "fixed-cache", "futures", "metrics", - "mini-moka", + "moka", "parking_lot", "rayon", "reth-chain-state", @@ -10631,7 +11079,7 @@ dependencies = [ "reth-ethereum-primitives", "reth-evm", "reth-execution-types", - "reth-metrics 1.9.3", + "reth-metrics", "reth-network-p2p", "reth-payload-builder", "reth-payload-primitives", @@ -10640,11 +11088,12 @@ dependencies = [ "reth-prune", "reth-revm", "reth-stages-api", - "reth-tasks 1.9.3", + "reth-tasks", "reth-trie", + "reth-trie-common", + "reth-trie-db", "reth-trie-parallel", "reth-trie-sparse", - "reth-trie-sparse-parallel", "revm", "revm-primitives", "schnellru", @@ -10656,8 +11105,8 @@ dependencies = [ [[package]] name = "reth-engine-util" -version = "1.9.3" -source = "git+https://github.com/paradigmxyz/reth?rev=27a8c0f5a6dfb27dea84c5751776ecabdd069646#27a8c0f5a6dfb27dea84c5751776ecabdd069646" +version = "1.11.3" +source = "git+https://github.com/paradigmxyz/reth?rev=d6324d63e27ef6b7c49cdc9b1977c1b808234c7b#d6324d63e27ef6b7c49cdc9b1977c1b808234c7b" dependencies = [ "alloy-consensus", "alloy-rpc-types-engine", @@ -10684,30 +11133,30 @@ dependencies = [ [[package]] name = "reth-era" -version = "1.9.3" -source = "git+https://github.com/paradigmxyz/reth?rev=27a8c0f5a6dfb27dea84c5751776ecabdd069646#27a8c0f5a6dfb27dea84c5751776ecabdd069646" +version = "1.11.3" +source = "git+https://github.com/paradigmxyz/reth?rev=d6324d63e27ef6b7c49cdc9b1977c1b808234c7b#d6324d63e27ef6b7c49cdc9b1977c1b808234c7b" dependencies = [ "alloy-consensus", "alloy-eips", - "alloy-primitives 1.4.1", + "alloy-primitives 1.6.0", "alloy-rlp", - "ethereum_ssz 0.9.1", - "ethereum_ssz_derive", - "reth-ethereum-primitives", + "ethereum_ssz 0.10.4", + "ethereum_ssz_derive 0.10.4", "snap", "thiserror 2.0.17", ] [[package]] name = "reth-era-downloader" -version = "1.9.3" -source = "git+https://github.com/paradigmxyz/reth?rev=27a8c0f5a6dfb27dea84c5751776ecabdd069646#27a8c0f5a6dfb27dea84c5751776ecabdd069646" +version = "1.11.3" +source = "git+https://github.com/paradigmxyz/reth?rev=d6324d63e27ef6b7c49cdc9b1977c1b808234c7b#d6324d63e27ef6b7c49cdc9b1977c1b808234c7b" dependencies = [ - "alloy-primitives 1.4.1", + "alloy-primitives 1.6.0", "bytes", "eyre", "futures-util", "reqwest 0.12.24", + "reth-era", "reth-fs-util", "sha2 0.10.9", "tokio", @@ -10715,11 +11164,11 @@ dependencies = [ [[package]] name = "reth-era-utils" -version = "1.9.3" -source = "git+https://github.com/paradigmxyz/reth?rev=27a8c0f5a6dfb27dea84c5751776ecabdd069646#27a8c0f5a6dfb27dea84c5751776ecabdd069646" +version = "1.11.3" +source = "git+https://github.com/paradigmxyz/reth?rev=d6324d63e27ef6b7c49cdc9b1977c1b808234c7b#d6324d63e27ef6b7c49cdc9b1977c1b808234c7b" dependencies = [ "alloy-consensus", - "alloy-primitives 1.4.1", + "alloy-primitives 1.6.0", "eyre", "futures-util", "reth-db-api", @@ -10737,8 +11186,8 @@ dependencies = [ [[package]] name = "reth-errors" -version = "1.9.3" -source = "git+https://github.com/paradigmxyz/reth?rev=27a8c0f5a6dfb27dea84c5751776ecabdd069646#27a8c0f5a6dfb27dea84c5751776ecabdd069646" +version = "1.11.3" +source = "git+https://github.com/paradigmxyz/reth?rev=d6324d63e27ef6b7c49cdc9b1977c1b808234c7b#d6324d63e27ef6b7c49cdc9b1977c1b808234c7b" dependencies = [ "reth-consensus", "reth-execution-errors", @@ -10748,11 +11197,11 @@ dependencies = [ [[package]] name = "reth-eth-wire" -version = "1.9.3" -source = "git+https://github.com/paradigmxyz/reth?rev=27a8c0f5a6dfb27dea84c5751776ecabdd069646#27a8c0f5a6dfb27dea84c5751776ecabdd069646" +version = "1.11.3" +source = "git+https://github.com/paradigmxyz/reth?rev=d6324d63e27ef6b7c49cdc9b1977c1b808234c7b#d6324d63e27ef6b7c49cdc9b1977c1b808234c7b" dependencies = [ "alloy-chains", - "alloy-primitives 1.4.1", + "alloy-primitives 1.6.0", "alloy-rlp", "bytes", "derive_more 2.1.0", @@ -10762,7 +11211,7 @@ dependencies = [ "reth-ecies", "reth-eth-wire-types", "reth-ethereum-forks", - "reth-metrics 1.9.3", + "reth-metrics", "reth-network-peers", "reth-primitives-traits", "serde", @@ -10776,14 +11225,14 @@ dependencies = [ [[package]] name = "reth-eth-wire-types" -version = "1.9.3" -source = "git+https://github.com/paradigmxyz/reth?rev=27a8c0f5a6dfb27dea84c5751776ecabdd069646#27a8c0f5a6dfb27dea84c5751776ecabdd069646" +version = "1.11.3" +source = "git+https://github.com/paradigmxyz/reth?rev=d6324d63e27ef6b7c49cdc9b1977c1b808234c7b#d6324d63e27ef6b7c49cdc9b1977c1b808234c7b" dependencies = [ "alloy-chains", "alloy-consensus", "alloy-eips", - "alloy-hardforks 0.4.4", - "alloy-primitives 1.4.1", + "alloy-hardforks 0.4.7", + "alloy-primitives 1.6.0", "alloy-rlp", "bytes", "derive_more 2.1.0", @@ -10797,8 +11246,8 @@ dependencies = [ [[package]] name = "reth-ethereum-cli" -version = "1.9.3" -source = "git+https://github.com/paradigmxyz/reth?rev=27a8c0f5a6dfb27dea84c5751776ecabdd069646#27a8c0f5a6dfb27dea84c5751776ecabdd069646" +version = "1.11.3" +source = "git+https://github.com/paradigmxyz/reth?rev=d6324d63e27ef6b7c49cdc9b1977c1b808234c7b#d6324d63e27ef6b7c49cdc9b1977c1b808234c7b" dependencies = [ "clap", "eyre", @@ -10813,20 +11262,19 @@ dependencies = [ "reth-node-ethereum", "reth-node-metrics", "reth-rpc-server-types", + "reth-tasks", "reth-tracing", - "reth-tracing-otlp", "tracing", - "url", ] [[package]] name = "reth-ethereum-consensus" -version = "1.9.3" -source = "git+https://github.com/paradigmxyz/reth?rev=27a8c0f5a6dfb27dea84c5751776ecabdd069646#27a8c0f5a6dfb27dea84c5751776ecabdd069646" +version = "1.11.3" +source = "git+https://github.com/paradigmxyz/reth?rev=d6324d63e27ef6b7c49cdc9b1977c1b808234c7b#d6324d63e27ef6b7c49cdc9b1977c1b808234c7b" dependencies = [ "alloy-consensus", "alloy-eips", - "alloy-primitives 1.4.1", + "alloy-primitives 1.6.0", "reth-chainspec", "reth-consensus", "reth-consensus-common", @@ -10837,11 +11285,11 @@ dependencies = [ [[package]] name = "reth-ethereum-engine-primitives" -version = "1.9.3" -source = "git+https://github.com/paradigmxyz/reth?rev=27a8c0f5a6dfb27dea84c5751776ecabdd069646#27a8c0f5a6dfb27dea84c5751776ecabdd069646" +version = "1.11.3" +source = "git+https://github.com/paradigmxyz/reth?rev=d6324d63e27ef6b7c49cdc9b1977c1b808234c7b#d6324d63e27ef6b7c49cdc9b1977c1b808234c7b" dependencies = [ "alloy-eips", - "alloy-primitives 1.4.1", + "alloy-primitives 1.6.0", "alloy-rlp", "alloy-rpc-types-engine", "reth-engine-primitives", @@ -10855,12 +11303,12 @@ dependencies = [ [[package]] name = "reth-ethereum-forks" -version = "1.9.3" -source = "git+https://github.com/paradigmxyz/reth?rev=27a8c0f5a6dfb27dea84c5751776ecabdd069646#27a8c0f5a6dfb27dea84c5751776ecabdd069646" +version = "1.11.3" +source = "git+https://github.com/paradigmxyz/reth?rev=d6324d63e27ef6b7c49cdc9b1977c1b808234c7b#d6324d63e27ef6b7c49cdc9b1977c1b808234c7b" dependencies = [ "alloy-eip2124", - "alloy-hardforks 0.4.4", - "alloy-primitives 1.4.1", + "alloy-hardforks 0.4.7", + "alloy-primitives 1.6.0", "auto_impl", "once_cell", "rustc-hash 2.1.1", @@ -10868,12 +11316,12 @@ dependencies = [ [[package]] name = "reth-ethereum-payload-builder" -version = "1.9.3" -source = "git+https://github.com/paradigmxyz/reth?rev=27a8c0f5a6dfb27dea84c5751776ecabdd069646#27a8c0f5a6dfb27dea84c5751776ecabdd069646" +version = "1.11.3" +source = "git+https://github.com/paradigmxyz/reth?rev=d6324d63e27ef6b7c49cdc9b1977c1b808234c7b#d6324d63e27ef6b7c49cdc9b1977c1b808234c7b" dependencies = [ "alloy-consensus", "alloy-eips", - "alloy-primitives 1.4.1", + "alloy-primitives 1.6.0", "alloy-rlp", "alloy-rpc-types-engine", "reth-basic-payload-builder", @@ -10897,12 +11345,12 @@ dependencies = [ [[package]] name = "reth-ethereum-primitives" -version = "1.9.3" -source = "git+https://github.com/paradigmxyz/reth?rev=27a8c0f5a6dfb27dea84c5751776ecabdd069646#27a8c0f5a6dfb27dea84c5751776ecabdd069646" +version = "1.11.3" +source = "git+https://github.com/paradigmxyz/reth?rev=d6324d63e27ef6b7c49cdc9b1977c1b808234c7b#d6324d63e27ef6b7c49cdc9b1977c1b808234c7b" dependencies = [ "alloy-consensus", "alloy-eips", - "alloy-primitives 1.4.1", + "alloy-primitives 1.6.0", "alloy-rlp", "alloy-rpc-types-eth", "alloy-serde", @@ -10917,8 +11365,8 @@ dependencies = [ [[package]] name = "reth-etl" -version = "1.9.3" -source = "git+https://github.com/paradigmxyz/reth?rev=27a8c0f5a6dfb27dea84c5751776ecabdd069646#27a8c0f5a6dfb27dea84c5751776ecabdd069646" +version = "1.11.3" +source = "git+https://github.com/paradigmxyz/reth?rev=d6324d63e27ef6b7c49cdc9b1977c1b808234c7b#d6324d63e27ef6b7c49cdc9b1977c1b808234c7b" dependencies = [ "rayon", "reth-db-api", @@ -10927,20 +11375,21 @@ dependencies = [ [[package]] name = "reth-evm" -version = "1.9.3" -source = "git+https://github.com/paradigmxyz/reth?rev=27a8c0f5a6dfb27dea84c5751776ecabdd069646#27a8c0f5a6dfb27dea84c5751776ecabdd069646" +version = "1.11.3" +source = "git+https://github.com/paradigmxyz/reth?rev=d6324d63e27ef6b7c49cdc9b1977c1b808234c7b#d6324d63e27ef6b7c49cdc9b1977c1b808234c7b" dependencies = [ "alloy-consensus", "alloy-eips", "alloy-evm", - "alloy-primitives 1.4.1", + "alloy-primitives 1.6.0", "auto_impl", "derive_more 2.1.0", "futures-util", "metrics", + "rayon", "reth-execution-errors", "reth-execution-types", - "reth-metrics 1.9.3", + "reth-metrics", "reth-primitives-traits", "reth-storage-api", "reth-storage-errors", @@ -10950,13 +11399,13 @@ dependencies = [ [[package]] name = "reth-evm-ethereum" -version = "1.9.3" -source = "git+https://github.com/paradigmxyz/reth?rev=27a8c0f5a6dfb27dea84c5751776ecabdd069646#27a8c0f5a6dfb27dea84c5751776ecabdd069646" +version = "1.11.3" +source = "git+https://github.com/paradigmxyz/reth?rev=d6324d63e27ef6b7c49cdc9b1977c1b808234c7b#d6324d63e27ef6b7c49cdc9b1977c1b808234c7b" dependencies = [ "alloy-consensus", "alloy-eips", "alloy-evm", - "alloy-primitives 1.4.1", + "alloy-primitives 1.6.0", "alloy-rpc-types-engine", "derive_more 2.1.0", "reth-chainspec", @@ -10971,26 +11420,26 @@ dependencies = [ [[package]] name = "reth-execution-errors" -version = "1.9.3" -source = "git+https://github.com/paradigmxyz/reth?rev=27a8c0f5a6dfb27dea84c5751776ecabdd069646#27a8c0f5a6dfb27dea84c5751776ecabdd069646" +version = "1.11.3" +source = "git+https://github.com/paradigmxyz/reth?rev=d6324d63e27ef6b7c49cdc9b1977c1b808234c7b#d6324d63e27ef6b7c49cdc9b1977c1b808234c7b" dependencies = [ "alloy-evm", - "alloy-primitives 1.4.1", + "alloy-primitives 1.6.0", "alloy-rlp", - "nybbles 0.4.6", + "nybbles", "reth-storage-errors", "thiserror 2.0.17", ] [[package]] name = "reth-execution-types" -version = "1.9.3" -source = "git+https://github.com/paradigmxyz/reth?rev=27a8c0f5a6dfb27dea84c5751776ecabdd069646#27a8c0f5a6dfb27dea84c5751776ecabdd069646" +version = "1.11.3" +source = "git+https://github.com/paradigmxyz/reth?rev=d6324d63e27ef6b7c49cdc9b1977c1b808234c7b#d6324d63e27ef6b7c49cdc9b1977c1b808234c7b" dependencies = [ "alloy-consensus", "alloy-eips", "alloy-evm", - "alloy-primitives 1.4.1", + "alloy-primitives 1.6.0", "derive_more 2.1.0", "reth-ethereum-primitives", "reth-primitives-traits", @@ -11002,12 +11451,12 @@ dependencies = [ [[package]] name = "reth-exex" -version = "1.9.3" -source = "git+https://github.com/paradigmxyz/reth?rev=27a8c0f5a6dfb27dea84c5751776ecabdd069646#27a8c0f5a6dfb27dea84c5751776ecabdd069646" +version = "1.11.3" +source = "git+https://github.com/paradigmxyz/reth?rev=d6324d63e27ef6b7c49cdc9b1977c1b808234c7b#d6324d63e27ef6b7c49cdc9b1977c1b808234c7b" dependencies = [ "alloy-consensus", "alloy-eips", - "alloy-primitives 1.4.1", + "alloy-primitives 1.6.0", "eyre", "futures", "itertools 0.14.0", @@ -11020,7 +11469,7 @@ dependencies = [ "reth-evm", "reth-exex-types", "reth-fs-util", - "reth-metrics 1.9.3", + "reth-metrics", "reth-node-api", "reth-node-core", "reth-payload-builder", @@ -11029,7 +11478,7 @@ dependencies = [ "reth-prune-types", "reth-revm", "reth-stages-api", - "reth-tasks 1.9.3", + "reth-tasks", "reth-tracing", "rmp-serde", "thiserror 2.0.17", @@ -11040,11 +11489,11 @@ dependencies = [ [[package]] name = "reth-exex-types" -version = "1.9.3" -source = "git+https://github.com/paradigmxyz/reth?rev=27a8c0f5a6dfb27dea84c5751776ecabdd069646#27a8c0f5a6dfb27dea84c5751776ecabdd069646" +version = "1.11.3" +source = "git+https://github.com/paradigmxyz/reth?rev=d6324d63e27ef6b7c49cdc9b1977c1b808234c7b#d6324d63e27ef6b7c49cdc9b1977c1b808234c7b" dependencies = [ "alloy-eips", - "alloy-primitives 1.4.1", + "alloy-primitives 1.6.0", "reth-chain-state", "reth-execution-types", "reth-primitives-traits", @@ -11054,8 +11503,8 @@ dependencies = [ [[package]] name = "reth-fs-util" -version = "1.9.3" -source = "git+https://github.com/paradigmxyz/reth?rev=27a8c0f5a6dfb27dea84c5751776ecabdd069646#27a8c0f5a6dfb27dea84c5751776ecabdd069646" +version = "1.11.3" +source = "git+https://github.com/paradigmxyz/reth?rev=d6324d63e27ef6b7c49cdc9b1977c1b808234c7b#d6324d63e27ef6b7c49cdc9b1977c1b808234c7b" dependencies = [ "serde", "serde_json", @@ -11064,11 +11513,11 @@ dependencies = [ [[package]] name = "reth-invalid-block-hooks" -version = "1.9.3" -source = "git+https://github.com/paradigmxyz/reth?rev=27a8c0f5a6dfb27dea84c5751776ecabdd069646#27a8c0f5a6dfb27dea84c5751776ecabdd069646" +version = "1.11.3" +source = "git+https://github.com/paradigmxyz/reth?rev=d6324d63e27ef6b7c49cdc9b1977c1b808234c7b#d6324d63e27ef6b7c49cdc9b1977c1b808234c7b" dependencies = [ "alloy-consensus", - "alloy-primitives 1.4.1", + "alloy-primitives 1.6.0", "alloy-rlp", "alloy-rpc-types-debug", "eyre", @@ -11092,8 +11541,8 @@ dependencies = [ [[package]] name = "reth-ipc" -version = "1.9.3" -source = "git+https://github.com/paradigmxyz/reth?rev=27a8c0f5a6dfb27dea84c5751776ecabdd069646#27a8c0f5a6dfb27dea84c5751776ecabdd069646" +version = "1.11.3" +source = "git+https://github.com/paradigmxyz/reth?rev=d6324d63e27ef6b7c49cdc9b1977c1b808234c7b#d6324d63e27ef6b7c49cdc9b1977c1b808234c7b" dependencies = [ "bytes", "futures", @@ -11112,10 +11561,10 @@ dependencies = [ [[package]] name = "reth-libmdbx" -version = "1.9.3" -source = "git+https://github.com/paradigmxyz/reth?rev=27a8c0f5a6dfb27dea84c5751776ecabdd069646#27a8c0f5a6dfb27dea84c5751776ecabdd069646" +version = "1.11.3" +source = "git+https://github.com/paradigmxyz/reth?rev=d6324d63e27ef6b7c49cdc9b1977c1b808234c7b#d6324d63e27ef6b7c49cdc9b1977c1b808234c7b" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.13.0", "byteorder", "dashmap 6.1.0", "derive_more 2.1.0", @@ -11128,26 +11577,17 @@ dependencies = [ [[package]] name = "reth-mdbx-sys" -version = "1.9.3" -source = "git+https://github.com/paradigmxyz/reth?rev=27a8c0f5a6dfb27dea84c5751776ecabdd069646#27a8c0f5a6dfb27dea84c5751776ecabdd069646" +version = "1.11.3" +source = "git+https://github.com/paradigmxyz/reth?rev=d6324d63e27ef6b7c49cdc9b1977c1b808234c7b#d6324d63e27ef6b7c49cdc9b1977c1b808234c7b" dependencies = [ - "bindgen 0.71.1", + "bindgen", "cc", ] [[package]] name = "reth-metrics" -version = "1.8.2" -source = "git+https://github.com/paradigmxyz/reth?rev=9c30bf7af5e0d45deaf5917375c9922c16654b28#9c30bf7af5e0d45deaf5917375c9922c16654b28" -dependencies = [ - "metrics", - "metrics-derive", -] - -[[package]] -name = "reth-metrics" -version = "1.9.3" -source = "git+https://github.com/paradigmxyz/reth?rev=27a8c0f5a6dfb27dea84c5751776ecabdd069646#27a8c0f5a6dfb27dea84c5751776ecabdd069646" +version = "1.11.3" +source = "git+https://github.com/paradigmxyz/reth?rev=d6324d63e27ef6b7c49cdc9b1977c1b808234c7b#d6324d63e27ef6b7c49cdc9b1977c1b808234c7b" dependencies = [ "futures", "metrics", @@ -11158,16 +11598,17 @@ dependencies = [ [[package]] name = "reth-net-banlist" -version = "1.9.3" -source = "git+https://github.com/paradigmxyz/reth?rev=27a8c0f5a6dfb27dea84c5751776ecabdd069646#27a8c0f5a6dfb27dea84c5751776ecabdd069646" +version = "1.11.3" +source = "git+https://github.com/paradigmxyz/reth?rev=d6324d63e27ef6b7c49cdc9b1977c1b808234c7b#d6324d63e27ef6b7c49cdc9b1977c1b808234c7b" dependencies = [ - "alloy-primitives 1.4.1", + "alloy-primitives 1.6.0", + "ipnet", ] [[package]] name = "reth-net-nat" -version = "1.9.3" -source = "git+https://github.com/paradigmxyz/reth?rev=27a8c0f5a6dfb27dea84c5751776ecabdd069646#27a8c0f5a6dfb27dea84c5751776ecabdd069646" +version = "1.11.3" +source = "git+https://github.com/paradigmxyz/reth?rev=d6324d63e27ef6b7c49cdc9b1977c1b808234c7b#d6324d63e27ef6b7c49cdc9b1977c1b808234c7b" dependencies = [ "futures-util", "if-addrs", @@ -11180,12 +11621,12 @@ dependencies = [ [[package]] name = "reth-network" -version = "1.9.3" -source = "git+https://github.com/paradigmxyz/reth?rev=27a8c0f5a6dfb27dea84c5751776ecabdd069646#27a8c0f5a6dfb27dea84c5751776ecabdd069646" +version = "1.11.3" +source = "git+https://github.com/paradigmxyz/reth?rev=d6324d63e27ef6b7c49cdc9b1977c1b808234c7b#d6324d63e27ef6b7c49cdc9b1977c1b808234c7b" dependencies = [ "alloy-consensus", "alloy-eips", - "alloy-primitives 1.4.1", + "alloy-primitives 1.6.0", "alloy-rlp", "aquamarine", "auto_impl", @@ -11199,6 +11640,7 @@ dependencies = [ "pin-project", "rand 0.8.5", "rand 0.9.2", + "rayon", "reth-chainspec", "reth-consensus", "reth-discv4", @@ -11210,7 +11652,7 @@ dependencies = [ "reth-ethereum-forks", "reth-ethereum-primitives", "reth-fs-util", - "reth-metrics 1.9.3", + "reth-metrics", "reth-net-banlist", "reth-network-api", "reth-network-p2p", @@ -11218,7 +11660,7 @@ dependencies = [ "reth-network-types", "reth-primitives-traits", "reth-storage-api", - "reth-tasks 1.9.3", + "reth-tasks", "reth-tokio-util", "reth-transaction-pool", "rustc-hash 2.1.1", @@ -11235,11 +11677,11 @@ dependencies = [ [[package]] name = "reth-network-api" -version = "1.9.3" -source = "git+https://github.com/paradigmxyz/reth?rev=27a8c0f5a6dfb27dea84c5751776ecabdd069646#27a8c0f5a6dfb27dea84c5751776ecabdd069646" +version = "1.11.3" +source = "git+https://github.com/paradigmxyz/reth?rev=d6324d63e27ef6b7c49cdc9b1977c1b808234c7b#d6324d63e27ef6b7c49cdc9b1977c1b808234c7b" dependencies = [ "alloy-consensus", - "alloy-primitives 1.4.1", + "alloy-primitives 1.6.0", "alloy-rpc-types-admin", "alloy-rpc-types-eth", "auto_impl", @@ -11260,12 +11702,12 @@ dependencies = [ [[package]] name = "reth-network-p2p" -version = "1.9.3" -source = "git+https://github.com/paradigmxyz/reth?rev=27a8c0f5a6dfb27dea84c5751776ecabdd069646#27a8c0f5a6dfb27dea84c5751776ecabdd069646" +version = "1.11.3" +source = "git+https://github.com/paradigmxyz/reth?rev=d6324d63e27ef6b7c49cdc9b1977c1b808234c7b#d6324d63e27ef6b7c49cdc9b1977c1b808234c7b" dependencies = [ "alloy-consensus", "alloy-eips", - "alloy-primitives 1.4.1", + "alloy-primitives 1.6.0", "auto_impl", "derive_more 2.1.0", "futures", @@ -11282,10 +11724,10 @@ dependencies = [ [[package]] name = "reth-network-peers" -version = "1.9.3" -source = "git+https://github.com/paradigmxyz/reth?rev=27a8c0f5a6dfb27dea84c5751776ecabdd069646#27a8c0f5a6dfb27dea84c5751776ecabdd069646" +version = "1.11.3" +source = "git+https://github.com/paradigmxyz/reth?rev=d6324d63e27ef6b7c49cdc9b1977c1b808234c7b#d6324d63e27ef6b7c49cdc9b1977c1b808234c7b" dependencies = [ - "alloy-primitives 1.4.1", + "alloy-primitives 1.6.0", "alloy-rlp", "enr 0.13.0", "secp256k1 0.30.0", @@ -11297,8 +11739,8 @@ dependencies = [ [[package]] name = "reth-network-types" -version = "1.9.3" -source = "git+https://github.com/paradigmxyz/reth?rev=27a8c0f5a6dfb27dea84c5751776ecabdd069646#27a8c0f5a6dfb27dea84c5751776ecabdd069646" +version = "1.11.3" +source = "git+https://github.com/paradigmxyz/reth?rev=d6324d63e27ef6b7c49cdc9b1977c1b808234c7b#d6324d63e27ef6b7c49cdc9b1977c1b808234c7b" dependencies = [ "alloy-eip2124", "humantime-serde", @@ -11311,13 +11753,13 @@ dependencies = [ [[package]] name = "reth-nippy-jar" -version = "1.9.3" -source = "git+https://github.com/paradigmxyz/reth?rev=27a8c0f5a6dfb27dea84c5751776ecabdd069646#27a8c0f5a6dfb27dea84c5751776ecabdd069646" +version = "1.11.3" +source = "git+https://github.com/paradigmxyz/reth?rev=d6324d63e27ef6b7c49cdc9b1977c1b808234c7b#d6324d63e27ef6b7c49cdc9b1977c1b808234c7b" dependencies = [ "anyhow", "bincode", "derive_more 2.1.0", - "lz4_flex", + "lz4_flex 0.12.2", "memmap2 0.9.9", "reth-fs-util", "serde", @@ -11328,8 +11770,8 @@ dependencies = [ [[package]] name = "reth-node-api" -version = "1.9.3" -source = "git+https://github.com/paradigmxyz/reth?rev=27a8c0f5a6dfb27dea84c5751776ecabdd069646#27a8c0f5a6dfb27dea84c5751776ecabdd069646" +version = "1.11.3" +source = "git+https://github.com/paradigmxyz/reth?rev=d6324d63e27ef6b7c49cdc9b1977c1b808234c7b#d6324d63e27ef6b7c49cdc9b1977c1b808234c7b" dependencies = [ "alloy-rpc-types-engine", "eyre", @@ -11345,19 +11787,19 @@ dependencies = [ "reth-payload-builder-primitives", "reth-payload-primitives", "reth-provider", - "reth-tasks 1.9.3", + "reth-tasks", "reth-tokio-util", "reth-transaction-pool", ] [[package]] name = "reth-node-builder" -version = "1.9.3" -source = "git+https://github.com/paradigmxyz/reth?rev=27a8c0f5a6dfb27dea84c5751776ecabdd069646#27a8c0f5a6dfb27dea84c5751776ecabdd069646" +version = "1.11.3" +source = "git+https://github.com/paradigmxyz/reth?rev=d6324d63e27ef6b7c49cdc9b1977c1b808234c7b#d6324d63e27ef6b7c49cdc9b1977c1b808234c7b" dependencies = [ "alloy-consensus", "alloy-eips", - "alloy-primitives 1.4.1", + "alloy-primitives 1.6.0", "alloy-provider", "alloy-rpc-types", "alloy-rpc-types-engine", @@ -11366,11 +11808,11 @@ dependencies = [ "fdlimit", "futures", "jsonrpsee 0.26.0", + "parking_lot", "rayon", "reth-basic-payload-builder", "reth-chain-state", "reth-chainspec", - "reth-cli-util", "reth-config", "reth-consensus", "reth-consensus-debug-client", @@ -11407,10 +11849,11 @@ dependencies = [ "reth-rpc-layer", "reth-stages", "reth-static-file", - "reth-tasks 1.9.3", + "reth-tasks", "reth-tokio-util", "reth-tracing", "reth-transaction-pool", + "reth-trie-db", "secp256k1 0.30.0", "serde_json", "tokio", @@ -11420,12 +11863,12 @@ dependencies = [ [[package]] name = "reth-node-core" -version = "1.9.3" -source = "git+https://github.com/paradigmxyz/reth?rev=27a8c0f5a6dfb27dea84c5751776ecabdd069646#27a8c0f5a6dfb27dea84c5751776ecabdd069646" +version = "1.11.3" +source = "git+https://github.com/paradigmxyz/reth?rev=d6324d63e27ef6b7c49cdc9b1977c1b808234c7b#d6324d63e27ef6b7c49cdc9b1977c1b808234c7b" dependencies = [ "alloy-consensus", "alloy-eips", - "alloy-primitives 1.4.1", + "alloy-primitives 1.6.0", "alloy-rpc-types-engine", "clap", "derive_more 2.1.0", @@ -11433,6 +11876,7 @@ dependencies = [ "eyre", "futures", "humantime", + "ipnet", "rand 0.9.2", "reth-chainspec", "reth-cli-util", @@ -11444,6 +11888,7 @@ dependencies = [ "reth-engine-local", "reth-engine-primitives", "reth-ethereum-forks", + "reth-net-banlist", "reth-net-nat", "reth-network", "reth-network-p2p", @@ -11464,7 +11909,7 @@ dependencies = [ "shellexpand", "strum 0.27.2", "thiserror 2.0.17", - "toml 0.8.23", + "toml 0.9.8", "tracing", "url", "vergen", @@ -11473,8 +11918,8 @@ dependencies = [ [[package]] name = "reth-node-ethereum" -version = "1.9.3" -source = "git+https://github.com/paradigmxyz/reth?rev=27a8c0f5a6dfb27dea84c5751776ecabdd069646#27a8c0f5a6dfb27dea84c5751776ecabdd069646" +version = "1.11.3" +source = "git+https://github.com/paradigmxyz/reth?rev=d6324d63e27ef6b7c49cdc9b1977c1b808234c7b#d6324d63e27ef6b7c49cdc9b1977c1b808234c7b" dependencies = [ "alloy-eips", "alloy-network", @@ -11511,11 +11956,11 @@ dependencies = [ [[package]] name = "reth-node-ethstats" -version = "1.9.3" -source = "git+https://github.com/paradigmxyz/reth?rev=27a8c0f5a6dfb27dea84c5751776ecabdd069646#27a8c0f5a6dfb27dea84c5751776ecabdd069646" +version = "1.11.3" +source = "git+https://github.com/paradigmxyz/reth?rev=d6324d63e27ef6b7c49cdc9b1977c1b808234c7b#d6324d63e27ef6b7c49cdc9b1977c1b808234c7b" dependencies = [ "alloy-consensus", - "alloy-primitives 1.4.1", + "alloy-primitives 1.6.0", "chrono", "futures-util", "reth-chain-state", @@ -11528,19 +11973,19 @@ dependencies = [ "thiserror 2.0.17", "tokio", "tokio-stream", - "tokio-tungstenite 0.26.2", + "tokio-tungstenite 0.28.0", "tracing", "url", ] [[package]] name = "reth-node-events" -version = "1.9.3" -source = "git+https://github.com/paradigmxyz/reth?rev=27a8c0f5a6dfb27dea84c5751776ecabdd069646#27a8c0f5a6dfb27dea84c5751776ecabdd069646" +version = "1.11.3" +source = "git+https://github.com/paradigmxyz/reth?rev=d6324d63e27ef6b7c49cdc9b1977c1b808234c7b#d6324d63e27ef6b7c49cdc9b1977c1b808234c7b" dependencies = [ "alloy-consensus", "alloy-eips", - "alloy-primitives 1.4.1", + "alloy-primitives 1.6.0", "alloy-rpc-types-engine", "derive_more 2.1.0", "futures", @@ -11559,20 +12004,22 @@ dependencies = [ [[package]] name = "reth-node-metrics" -version = "1.9.3" -source = "git+https://github.com/paradigmxyz/reth?rev=27a8c0f5a6dfb27dea84c5751776ecabdd069646#27a8c0f5a6dfb27dea84c5751776ecabdd069646" +version = "1.11.3" +source = "git+https://github.com/paradigmxyz/reth?rev=d6324d63e27ef6b7c49cdc9b1977c1b808234c7b#d6324d63e27ef6b7c49cdc9b1977c1b808234c7b" dependencies = [ + "bytes", "eyre", "http 1.4.0", + "http-body-util", "jsonrpsee-server 0.26.0", "metrics", "metrics-exporter-prometheus", "metrics-process", "metrics-util", - "procfs 0.17.0", + "procfs", "reqwest 0.12.24", - "reth-metrics 1.9.3", - "reth-tasks 1.9.3", + "reth-metrics", + "reth-tasks", "tikv-jemalloc-ctl", "tokio", "tower 0.5.2", @@ -11581,8 +12028,8 @@ dependencies = [ [[package]] name = "reth-node-types" -version = "1.9.3" -source = "git+https://github.com/paradigmxyz/reth?rev=27a8c0f5a6dfb27dea84c5751776ecabdd069646#27a8c0f5a6dfb27dea84c5751776ecabdd069646" +version = "1.11.3" +source = "git+https://github.com/paradigmxyz/reth?rev=d6324d63e27ef6b7c49cdc9b1977c1b808234c7b#d6324d63e27ef6b7c49cdc9b1977c1b808234c7b" dependencies = [ "reth-chainspec", "reth-db-api", @@ -11591,39 +12038,19 @@ dependencies = [ "reth-primitives-traits", ] -[[package]] -name = "reth-optimism-primitives" -version = "1.9.3" -source = "git+https://github.com/paradigmxyz/reth?rev=27a8c0f5a6dfb27dea84c5751776ecabdd069646#27a8c0f5a6dfb27dea84c5751776ecabdd069646" -dependencies = [ - "alloy-consensus", - "alloy-eips", - "alloy-primitives 1.4.1", - "alloy-rlp", - "arbitrary", - "bytes", - "modular-bitfield", - "op-alloy-consensus", - "reth-codecs", - "reth-primitives-traits", - "reth-zstd-compressors", - "serde", - "serde_with", -] - [[package]] name = "reth-payload-builder" -version = "1.9.3" -source = "git+https://github.com/paradigmxyz/reth?rev=27a8c0f5a6dfb27dea84c5751776ecabdd069646#27a8c0f5a6dfb27dea84c5751776ecabdd069646" +version = "1.11.3" +source = "git+https://github.com/paradigmxyz/reth?rev=d6324d63e27ef6b7c49cdc9b1977c1b808234c7b#d6324d63e27ef6b7c49cdc9b1977c1b808234c7b" dependencies = [ "alloy-consensus", - "alloy-primitives 1.4.1", + "alloy-primitives 1.6.0", "alloy-rpc-types", "futures-util", "metrics", "reth-chain-state", "reth-ethereum-engine-primitives", - "reth-metrics 1.9.3", + "reth-metrics", "reth-payload-builder-primitives", "reth-payload-primitives", "reth-primitives-traits", @@ -11634,8 +12061,8 @@ dependencies = [ [[package]] name = "reth-payload-builder-primitives" -version = "1.9.3" -source = "git+https://github.com/paradigmxyz/reth?rev=27a8c0f5a6dfb27dea84c5751776ecabdd069646#27a8c0f5a6dfb27dea84c5751776ecabdd069646" +version = "1.11.3" +source = "git+https://github.com/paradigmxyz/reth?rev=d6324d63e27ef6b7c49cdc9b1977c1b808234c7b#d6324d63e27ef6b7c49cdc9b1977c1b808234c7b" dependencies = [ "pin-project", "reth-payload-primitives", @@ -11646,11 +12073,12 @@ dependencies = [ [[package]] name = "reth-payload-primitives" -version = "1.9.3" -source = "git+https://github.com/paradigmxyz/reth?rev=27a8c0f5a6dfb27dea84c5751776ecabdd069646#27a8c0f5a6dfb27dea84c5751776ecabdd069646" +version = "1.11.3" +source = "git+https://github.com/paradigmxyz/reth?rev=d6324d63e27ef6b7c49cdc9b1977c1b808234c7b#d6324d63e27ef6b7c49cdc9b1977c1b808234c7b" dependencies = [ + "alloy-consensus", "alloy-eips", - "alloy-primitives 1.4.1", + "alloy-primitives 1.6.0", "alloy-rpc-types-engine", "auto_impl", "either", @@ -11658,7 +12086,9 @@ dependencies = [ "reth-chain-state", "reth-chainspec", "reth-errors", + "reth-execution-types", "reth-primitives-traits", + "reth-trie-common", "serde", "thiserror 2.0.17", "tokio", @@ -11666,8 +12096,8 @@ dependencies = [ [[package]] name = "reth-payload-validator" -version = "1.9.3" -source = "git+https://github.com/paradigmxyz/reth?rev=27a8c0f5a6dfb27dea84c5751776ecabdd069646#27a8c0f5a6dfb27dea84c5751776ecabdd069646" +version = "1.11.3" +source = "git+https://github.com/paradigmxyz/reth?rev=d6324d63e27ef6b7c49cdc9b1977c1b808234c7b#d6324d63e27ef6b7c49cdc9b1977c1b808234c7b" dependencies = [ "alloy-consensus", "alloy-rpc-types-engine", @@ -11676,10 +12106,14 @@ dependencies = [ [[package]] name = "reth-primitives" -version = "1.9.3" -source = "git+https://github.com/paradigmxyz/reth?rev=27a8c0f5a6dfb27dea84c5751776ecabdd069646#27a8c0f5a6dfb27dea84c5751776ecabdd069646" +version = "1.11.3" +source = "git+https://github.com/paradigmxyz/reth?rev=d6324d63e27ef6b7c49cdc9b1977c1b808234c7b#d6324d63e27ef6b7c49cdc9b1977c1b808234c7b" dependencies = [ "alloy-consensus", + "alloy-eips", + "alloy-genesis", + "alloy-primitives 1.6.0", + "alloy-rlp", "c-kzg", "once_cell", "reth-ethereum-forks", @@ -11690,20 +12124,21 @@ dependencies = [ [[package]] name = "reth-primitives-traits" -version = "1.9.3" -source = "git+https://github.com/paradigmxyz/reth?rev=27a8c0f5a6dfb27dea84c5751776ecabdd069646#27a8c0f5a6dfb27dea84c5751776ecabdd069646" +version = "1.11.3" +source = "git+https://github.com/paradigmxyz/reth?rev=d6324d63e27ef6b7c49cdc9b1977c1b808234c7b#d6324d63e27ef6b7c49cdc9b1977c1b808234c7b" dependencies = [ "alloy-consensus", "alloy-eips", "alloy-genesis", - "alloy-primitives 1.4.1", + "alloy-primitives 1.6.0", "alloy-rlp", "alloy-rpc-types-eth", - "alloy-trie 0.9.1", + "alloy-trie", "arbitrary", "auto_impl", "byteorder", "bytes", + "dashmap 6.1.0", "derive_more 2.1.0", "modular-bitfield", "once_cell", @@ -11723,14 +12158,13 @@ dependencies = [ [[package]] name = "reth-provider" -version = "1.9.3" -source = "git+https://github.com/paradigmxyz/reth?rev=27a8c0f5a6dfb27dea84c5751776ecabdd069646#27a8c0f5a6dfb27dea84c5751776ecabdd069646" +version = "1.11.3" +source = "git+https://github.com/paradigmxyz/reth?rev=d6324d63e27ef6b7c49cdc9b1977c1b808234c7b#d6324d63e27ef6b7c49cdc9b1977c1b808234c7b" dependencies = [ "alloy-consensus", "alloy-eips", - "alloy-primitives 1.4.1", + "alloy-primitives 1.6.0", "alloy-rpc-types-engine", - "dashmap 6.1.0", "eyre", "itertools 0.14.0", "metrics", @@ -11747,7 +12181,7 @@ dependencies = [ "reth-ethereum-primitives", "reth-execution-types", "reth-fs-util", - "reth-metrics 1.9.3", + "reth-metrics", "reth-nippy-jar", "reth-node-types", "reth-primitives-traits", @@ -11756,10 +12190,12 @@ dependencies = [ "reth-static-file-types", "reth-storage-api", "reth-storage-errors", + "reth-tasks", "reth-trie", "reth-trie-db", "revm-database", "revm-state", + "rocksdb", "strum 0.27.2", "tokio", "tracing", @@ -11767,12 +12203,12 @@ dependencies = [ [[package]] name = "reth-prune" -version = "1.9.3" -source = "git+https://github.com/paradigmxyz/reth?rev=27a8c0f5a6dfb27dea84c5751776ecabdd069646#27a8c0f5a6dfb27dea84c5751776ecabdd069646" +version = "1.11.3" +source = "git+https://github.com/paradigmxyz/reth?rev=d6324d63e27ef6b7c49cdc9b1977c1b808234c7b#d6324d63e27ef6b7c49cdc9b1977c1b808234c7b" dependencies = [ "alloy-consensus", "alloy-eips", - "alloy-primitives 1.4.1", + "alloy-primitives 1.6.0", "itertools 0.14.0", "metrics", "rayon", @@ -11780,11 +12216,13 @@ dependencies = [ "reth-db-api", "reth-errors", "reth-exex-types", - "reth-metrics 1.9.3", + "reth-metrics", "reth-primitives-traits", "reth-provider", "reth-prune-types", + "reth-stages-types", "reth-static-file-types", + "reth-storage-api", "reth-tokio-util", "rustc-hash 2.1.1", "thiserror 2.0.17", @@ -11794,10 +12232,10 @@ dependencies = [ [[package]] name = "reth-prune-types" -version = "1.9.3" -source = "git+https://github.com/paradigmxyz/reth?rev=27a8c0f5a6dfb27dea84c5751776ecabdd069646#27a8c0f5a6dfb27dea84c5751776ecabdd069646" +version = "1.11.3" +source = "git+https://github.com/paradigmxyz/reth?rev=d6324d63e27ef6b7c49cdc9b1977c1b808234c7b#d6324d63e27ef6b7c49cdc9b1977c1b808234c7b" dependencies = [ - "alloy-primitives 1.4.1", + "alloy-primitives 1.6.0", "arbitrary", "derive_more 2.1.0", "modular-bitfield", @@ -11805,6 +12243,7 @@ dependencies = [ "serde", "strum 0.27.2", "thiserror 2.0.17", + "tracing", ] [[package]] @@ -11826,58 +12265,12 @@ dependencies = [ "tracing", ] -[[package]] -name = "reth-ress-protocol" -version = "1.9.3" -source = "git+https://github.com/paradigmxyz/reth?rev=27a8c0f5a6dfb27dea84c5751776ecabdd069646#27a8c0f5a6dfb27dea84c5751776ecabdd069646" -dependencies = [ - "alloy-consensus", - "alloy-primitives 1.4.1", - "alloy-rlp", - "futures", - "reth-eth-wire", - "reth-ethereum-primitives", - "reth-network", - "reth-network-api", - "reth-storage-errors", - "tokio", - "tokio-stream", - "tracing", -] - -[[package]] -name = "reth-ress-provider" -version = "1.9.3" -source = "git+https://github.com/paradigmxyz/reth?rev=27a8c0f5a6dfb27dea84c5751776ecabdd069646#27a8c0f5a6dfb27dea84c5751776ecabdd069646" -dependencies = [ - "alloy-consensus", - "alloy-primitives 1.4.1", - "eyre", - "futures", - "parking_lot", - "reth-chain-state", - "reth-errors", - "reth-ethereum-primitives", - "reth-evm", - "reth-node-api", - "reth-primitives-traits", - "reth-ress-protocol", - "reth-revm", - "reth-storage-api", - "reth-tasks 1.9.3", - "reth-tokio-util", - "reth-trie", - "schnellru", - "tokio", - "tracing", -] - [[package]] name = "reth-revm" -version = "1.9.3" -source = "git+https://github.com/paradigmxyz/reth?rev=27a8c0f5a6dfb27dea84c5751776ecabdd069646#27a8c0f5a6dfb27dea84c5751776ecabdd069646" +version = "1.11.3" +source = "git+https://github.com/paradigmxyz/reth?rev=d6324d63e27ef6b7c49cdc9b1977c1b808234c7b#d6324d63e27ef6b7c49cdc9b1977c1b808234c7b" dependencies = [ - "alloy-primitives 1.4.1", + "alloy-primitives 1.6.0", "reth-primitives-traits", "reth-storage-api", "reth-storage-errors", @@ -11887,16 +12280,17 @@ dependencies = [ [[package]] name = "reth-rpc" -version = "1.9.3" -source = "git+https://github.com/paradigmxyz/reth?rev=27a8c0f5a6dfb27dea84c5751776ecabdd069646#27a8c0f5a6dfb27dea84c5751776ecabdd069646" +version = "1.11.3" +source = "git+https://github.com/paradigmxyz/reth?rev=d6324d63e27ef6b7c49cdc9b1977c1b808234c7b#d6324d63e27ef6b7c49cdc9b1977c1b808234c7b" dependencies = [ "alloy-consensus", "alloy-dyn-abi", + "alloy-eip7928", "alloy-eips", "alloy-evm", "alloy-genesis", "alloy-network", - "alloy-primitives 1.4.1", + "alloy-primitives 1.6.0", "alloy-rlp", "alloy-rpc-client", "alloy-rpc-types", @@ -11915,13 +12309,9 @@ dependencies = [ "derive_more 2.1.0", "dyn-clone", "futures", - "http 1.4.0", - "http-body 1.0.1", - "hyper 1.8.1", "itertools 0.14.0", "jsonrpsee 0.26.0", "jsonrpsee-types 0.26.0", - "jsonwebtoken", "parking_lot", "pin-project", "reth-chain-state", @@ -11930,10 +12320,12 @@ dependencies = [ "reth-consensus-common", "reth-engine-primitives", "reth-errors", + "reth-ethereum-engine-primitives", + "reth-ethereum-primitives", "reth-evm", "reth-evm-ethereum", "reth-execution-types", - "reth-metrics 1.9.3", + "reth-metrics", "reth-network-api", "reth-network-peers", "reth-network-types", @@ -11947,7 +12339,7 @@ dependencies = [ "reth-rpc-eth-types", "reth-rpc-server-types", "reth-storage-api", - "reth-tasks 1.9.3", + "reth-tasks", "reth-transaction-pool", "reth-trie-common", "revm", @@ -11959,20 +12351,20 @@ dependencies = [ "thiserror 2.0.17", "tokio", "tokio-stream", - "tower 0.5.2", "tracing", "tracing-futures", ] [[package]] name = "reth-rpc-api" -version = "1.9.3" -source = "git+https://github.com/paradigmxyz/reth?rev=27a8c0f5a6dfb27dea84c5751776ecabdd069646#27a8c0f5a6dfb27dea84c5751776ecabdd069646" +version = "1.11.3" +source = "git+https://github.com/paradigmxyz/reth?rev=d6324d63e27ef6b7c49cdc9b1977c1b808234c7b#d6324d63e27ef6b7c49cdc9b1977c1b808234c7b" dependencies = [ + "alloy-eip7928", "alloy-eips", "alloy-genesis", "alloy-json-rpc", - "alloy-primitives 1.4.1", + "alloy-primitives 1.6.0", "alloy-rpc-types", "alloy-rpc-types-admin", "alloy-rpc-types-anvil", @@ -11990,12 +12382,13 @@ dependencies = [ "reth-network-peers", "reth-rpc-eth-api", "reth-trie-common", + "serde_json", ] [[package]] name = "reth-rpc-builder" -version = "1.9.3" -source = "git+https://github.com/paradigmxyz/reth?rev=27a8c0f5a6dfb27dea84c5751776ecabdd069646#27a8c0f5a6dfb27dea84c5751776ecabdd069646" +version = "1.11.3" +source = "git+https://github.com/paradigmxyz/reth?rev=d6324d63e27ef6b7c49cdc9b1977c1b808234c7b#d6324d63e27ef6b7c49cdc9b1977c1b808234c7b" dependencies = [ "alloy-network", "alloy-provider", @@ -12007,9 +12400,10 @@ dependencies = [ "reth-chain-state", "reth-chainspec", "reth-consensus", + "reth-engine-primitives", "reth-evm", "reth-ipc", - "reth-metrics 1.9.3", + "reth-metrics", "reth-network-api", "reth-node-core", "reth-primitives-traits", @@ -12020,7 +12414,8 @@ dependencies = [ "reth-rpc-layer", "reth-rpc-server-types", "reth-storage-api", - "reth-tasks 1.9.3", + "reth-tasks", + "reth-tokio-util", "reth-transaction-pool", "serde", "thiserror 2.0.17", @@ -12033,13 +12428,14 @@ dependencies = [ [[package]] name = "reth-rpc-convert" -version = "1.9.3" -source = "git+https://github.com/paradigmxyz/reth?rev=27a8c0f5a6dfb27dea84c5751776ecabdd069646#27a8c0f5a6dfb27dea84c5751776ecabdd069646" +version = "1.11.3" +source = "git+https://github.com/paradigmxyz/reth?rev=d6324d63e27ef6b7c49cdc9b1977c1b808234c7b#d6324d63e27ef6b7c49cdc9b1977c1b808234c7b" dependencies = [ "alloy-consensus", + "alloy-evm", "alloy-json-rpc", "alloy-network", - "alloy-primitives 1.4.1", + "alloy-primitives 1.6.0", "alloy-rpc-types-eth", "alloy-signer", "auto_impl", @@ -12048,33 +12444,32 @@ dependencies = [ "reth-ethereum-primitives", "reth-evm", "reth-primitives-traits", - "revm-context", "thiserror 2.0.17", ] [[package]] name = "reth-rpc-engine-api" -version = "1.9.3" -source = "git+https://github.com/paradigmxyz/reth?rev=27a8c0f5a6dfb27dea84c5751776ecabdd069646#27a8c0f5a6dfb27dea84c5751776ecabdd069646" +version = "1.11.3" +source = "git+https://github.com/paradigmxyz/reth?rev=d6324d63e27ef6b7c49cdc9b1977c1b808234c7b#d6324d63e27ef6b7c49cdc9b1977c1b808234c7b" dependencies = [ "alloy-eips", - "alloy-primitives 1.4.1", + "alloy-primitives 1.6.0", "alloy-rpc-types-engine", "async-trait", "jsonrpsee-core 0.26.0", "jsonrpsee-types 0.26.0", "metrics", - "parking_lot", "reth-chainspec", "reth-engine-primitives", - "reth-metrics 1.9.3", + "reth-metrics", + "reth-network-api", "reth-payload-builder", "reth-payload-builder-primitives", "reth-payload-primitives", "reth-primitives-traits", "reth-rpc-api", "reth-storage-api", - "reth-tasks 1.9.3", + "reth-tasks", "reth-transaction-pool", "serde", "thiserror 2.0.17", @@ -12084,8 +12479,8 @@ dependencies = [ [[package]] name = "reth-rpc-eth-api" -version = "1.9.3" -source = "git+https://github.com/paradigmxyz/reth?rev=27a8c0f5a6dfb27dea84c5751776ecabdd069646#27a8c0f5a6dfb27dea84c5751776ecabdd069646" +version = "1.11.3" +source = "git+https://github.com/paradigmxyz/reth?rev=d6324d63e27ef6b7c49cdc9b1977c1b808234c7b#d6324d63e27ef6b7c49cdc9b1977c1b808234c7b" dependencies = [ "alloy-consensus", "alloy-dyn-abi", @@ -12093,7 +12488,7 @@ dependencies = [ "alloy-evm", "alloy-json-rpc", "alloy-network", - "alloy-primitives 1.4.1", + "alloy-primitives 1.6.0", "alloy-rlp", "alloy-rpc-types-eth", "alloy-rpc-types-mev", @@ -12117,7 +12512,7 @@ dependencies = [ "reth-rpc-eth-types", "reth-rpc-server-types", "reth-storage-api", - "reth-tasks 1.9.3", + "reth-tasks", "reth-transaction-pool", "reth-trie-common", "revm", @@ -12128,14 +12523,14 @@ dependencies = [ [[package]] name = "reth-rpc-eth-types" -version = "1.9.3" -source = "git+https://github.com/paradigmxyz/reth?rev=27a8c0f5a6dfb27dea84c5751776ecabdd069646#27a8c0f5a6dfb27dea84c5751776ecabdd069646" +version = "1.11.3" +source = "git+https://github.com/paradigmxyz/reth?rev=d6324d63e27ef6b7c49cdc9b1977c1b808234c7b#d6324d63e27ef6b7c49cdc9b1977c1b808234c7b" dependencies = [ "alloy-consensus", "alloy-eips", "alloy-evm", "alloy-network", - "alloy-primitives 1.4.1", + "alloy-primitives 1.6.0", "alloy-rpc-client", "alloy-rpc-types-eth", "alloy-sol-types", @@ -12154,13 +12549,13 @@ dependencies = [ "reth-ethereum-primitives", "reth-evm", "reth-execution-types", - "reth-metrics 1.9.3", + "reth-metrics", "reth-primitives-traits", "reth-revm", "reth-rpc-convert", "reth-rpc-server-types", "reth-storage-api", - "reth-tasks 1.9.3", + "reth-tasks", "reth-transaction-pool", "reth-trie", "revm", @@ -12171,12 +12566,13 @@ dependencies = [ "tokio", "tokio-stream", "tracing", + "url", ] [[package]] name = "reth-rpc-layer" -version = "1.9.3" -source = "git+https://github.com/paradigmxyz/reth?rev=27a8c0f5a6dfb27dea84c5751776ecabdd069646#27a8c0f5a6dfb27dea84c5751776ecabdd069646" +version = "1.11.3" +source = "git+https://github.com/paradigmxyz/reth?rev=d6324d63e27ef6b7c49cdc9b1977c1b808234c7b#d6324d63e27ef6b7c49cdc9b1977c1b808234c7b" dependencies = [ "alloy-rpc-types-engine", "http 1.4.0", @@ -12189,11 +12585,11 @@ dependencies = [ [[package]] name = "reth-rpc-server-types" -version = "1.9.3" -source = "git+https://github.com/paradigmxyz/reth?rev=27a8c0f5a6dfb27dea84c5751776ecabdd069646#27a8c0f5a6dfb27dea84c5751776ecabdd069646" +version = "1.11.3" +source = "git+https://github.com/paradigmxyz/reth?rev=d6324d63e27ef6b7c49cdc9b1977c1b808234c7b#d6324d63e27ef6b7c49cdc9b1977c1b808234c7b" dependencies = [ "alloy-eips", - "alloy-primitives 1.4.1", + "alloy-primitives 1.6.0", "alloy-rpc-types-engine", "jsonrpsee-core 0.26.0", "jsonrpsee-types 0.26.0", @@ -12205,12 +12601,12 @@ dependencies = [ [[package]] name = "reth-stages" -version = "1.9.3" -source = "git+https://github.com/paradigmxyz/reth?rev=27a8c0f5a6dfb27dea84c5751776ecabdd069646#27a8c0f5a6dfb27dea84c5751776ecabdd069646" +version = "1.11.3" +source = "git+https://github.com/paradigmxyz/reth?rev=d6324d63e27ef6b7c49cdc9b1977c1b808234c7b#d6324d63e27ef6b7c49cdc9b1977c1b808234c7b" dependencies = [ "alloy-consensus", "alloy-eips", - "alloy-primitives 1.4.1", + "alloy-primitives 1.6.0", "bincode", "eyre", "futures-util", @@ -12239,7 +12635,9 @@ dependencies = [ "reth-revm", "reth-stages-api", "reth-static-file-types", + "reth-storage-api", "reth-storage-errors", + "reth-tasks", "reth-trie", "reth-trie-db", "thiserror 2.0.17", @@ -12249,18 +12647,18 @@ dependencies = [ [[package]] name = "reth-stages-api" -version = "1.9.3" -source = "git+https://github.com/paradigmxyz/reth?rev=27a8c0f5a6dfb27dea84c5751776ecabdd069646#27a8c0f5a6dfb27dea84c5751776ecabdd069646" +version = "1.11.3" +source = "git+https://github.com/paradigmxyz/reth?rev=d6324d63e27ef6b7c49cdc9b1977c1b808234c7b#d6324d63e27ef6b7c49cdc9b1977c1b808234c7b" dependencies = [ "alloy-eips", - "alloy-primitives 1.4.1", + "alloy-primitives 1.6.0", "aquamarine", "auto_impl", "futures-util", "metrics", "reth-consensus", "reth-errors", - "reth-metrics 1.9.3", + "reth-metrics", "reth-network-p2p", "reth-primitives-traits", "reth-provider", @@ -12276,10 +12674,10 @@ dependencies = [ [[package]] name = "reth-stages-types" -version = "1.9.3" -source = "git+https://github.com/paradigmxyz/reth?rev=27a8c0f5a6dfb27dea84c5751776ecabdd069646#27a8c0f5a6dfb27dea84c5751776ecabdd069646" +version = "1.11.3" +source = "git+https://github.com/paradigmxyz/reth?rev=d6324d63e27ef6b7c49cdc9b1977c1b808234c7b#d6324d63e27ef6b7c49cdc9b1977c1b808234c7b" dependencies = [ - "alloy-primitives 1.4.1", + "alloy-primitives 1.6.0", "arbitrary", "bytes", "modular-bitfield", @@ -12290,10 +12688,10 @@ dependencies = [ [[package]] name = "reth-static-file" -version = "1.9.3" -source = "git+https://github.com/paradigmxyz/reth?rev=27a8c0f5a6dfb27dea84c5751776ecabdd069646#27a8c0f5a6dfb27dea84c5751776ecabdd069646" +version = "1.11.3" +source = "git+https://github.com/paradigmxyz/reth?rev=d6324d63e27ef6b7c49cdc9b1977c1b808234c7b#d6324d63e27ef6b7c49cdc9b1977c1b808234c7b" dependencies = [ - "alloy-primitives 1.4.1", + "alloy-primitives 1.6.0", "parking_lot", "rayon", "reth-codecs", @@ -12310,24 +12708,27 @@ dependencies = [ [[package]] name = "reth-static-file-types" -version = "1.9.3" -source = "git+https://github.com/paradigmxyz/reth?rev=27a8c0f5a6dfb27dea84c5751776ecabdd069646#27a8c0f5a6dfb27dea84c5751776ecabdd069646" +version = "1.11.3" +source = "git+https://github.com/paradigmxyz/reth?rev=d6324d63e27ef6b7c49cdc9b1977c1b808234c7b#d6324d63e27ef6b7c49cdc9b1977c1b808234c7b" dependencies = [ - "alloy-primitives 1.4.1", + "alloy-primitives 1.6.0", "clap", "derive_more 2.1.0", + "fixed-map", + "reth-stages-types", "serde", "strum 0.27.2", + "tracing", ] [[package]] name = "reth-storage-api" -version = "1.9.3" -source = "git+https://github.com/paradigmxyz/reth?rev=27a8c0f5a6dfb27dea84c5751776ecabdd069646#27a8c0f5a6dfb27dea84c5751776ecabdd069646" +version = "1.11.3" +source = "git+https://github.com/paradigmxyz/reth?rev=d6324d63e27ef6b7c49cdc9b1977c1b808234c7b#d6324d63e27ef6b7c49cdc9b1977c1b808234c7b" dependencies = [ "alloy-consensus", "alloy-eips", - "alloy-primitives 1.4.1", + "alloy-primitives 1.6.0", "alloy-rpc-types-engine", "auto_impl", "reth-chainspec", @@ -12341,44 +12742,30 @@ dependencies = [ "reth-storage-errors", "reth-trie-common", "revm-database", + "serde_json", ] [[package]] name = "reth-storage-errors" -version = "1.9.3" -source = "git+https://github.com/paradigmxyz/reth?rev=27a8c0f5a6dfb27dea84c5751776ecabdd069646#27a8c0f5a6dfb27dea84c5751776ecabdd069646" +version = "1.11.3" +source = "git+https://github.com/paradigmxyz/reth?rev=d6324d63e27ef6b7c49cdc9b1977c1b808234c7b#d6324d63e27ef6b7c49cdc9b1977c1b808234c7b" dependencies = [ "alloy-eips", - "alloy-primitives 1.4.1", + "alloy-primitives 1.6.0", "alloy-rlp", "derive_more 2.1.0", "reth-primitives-traits", "reth-prune-types", "reth-static-file-types", "revm-database-interface", + "revm-state", "thiserror 2.0.17", ] [[package]] name = "reth-tasks" -version = "1.8.2" -source = "git+https://github.com/paradigmxyz/reth?rev=9c30bf7af5e0d45deaf5917375c9922c16654b28#9c30bf7af5e0d45deaf5917375c9922c16654b28" -dependencies = [ - "auto_impl", - "dyn-clone", - "futures-util", - "metrics", - "reth-metrics 1.8.2", - "thiserror 2.0.17", - "tokio", - "tracing", - "tracing-futures", -] - -[[package]] -name = "reth-tasks" -version = "1.9.3" -source = "git+https://github.com/paradigmxyz/reth?rev=27a8c0f5a6dfb27dea84c5751776ecabdd069646#27a8c0f5a6dfb27dea84c5751776ecabdd069646" +version = "1.11.3" +source = "git+https://github.com/paradigmxyz/reth?rev=d6324d63e27ef6b7c49cdc9b1977c1b808234c7b#d6324d63e27ef6b7c49cdc9b1977c1b808234c7b" dependencies = [ "auto_impl", "dyn-clone", @@ -12386,7 +12773,7 @@ dependencies = [ "metrics", "pin-project", "rayon", - "reth-metrics 1.9.3", + "reth-metrics", "thiserror 2.0.17", "tokio", "tracing", @@ -12395,8 +12782,8 @@ dependencies = [ [[package]] name = "reth-tokio-util" -version = "1.9.3" -source = "git+https://github.com/paradigmxyz/reth?rev=27a8c0f5a6dfb27dea84c5751776ecabdd069646#27a8c0f5a6dfb27dea84c5751776ecabdd069646" +version = "1.11.3" +source = "git+https://github.com/paradigmxyz/reth?rev=d6324d63e27ef6b7c49cdc9b1977c1b808234c7b#d6324d63e27ef6b7c49cdc9b1977c1b808234c7b" dependencies = [ "tokio", "tokio-stream", @@ -12405,8 +12792,8 @@ dependencies = [ [[package]] name = "reth-tracing" -version = "1.9.3" -source = "git+https://github.com/paradigmxyz/reth?rev=27a8c0f5a6dfb27dea84c5751776ecabdd069646#27a8c0f5a6dfb27dea84c5751776ecabdd069646" +version = "1.11.3" +source = "git+https://github.com/paradigmxyz/reth?rev=d6324d63e27ef6b7c49cdc9b1977c1b808234c7b#d6324d63e27ef6b7c49cdc9b1977c1b808234c7b" dependencies = [ "clap", "eyre", @@ -12416,18 +12803,19 @@ dependencies = [ "tracing-appender", "tracing-journald", "tracing-logfmt", + "tracing-samply", "tracing-subscriber 0.3.22", - "url", ] [[package]] name = "reth-tracing-otlp" -version = "1.9.3" -source = "git+https://github.com/paradigmxyz/reth?rev=27a8c0f5a6dfb27dea84c5751776ecabdd069646#27a8c0f5a6dfb27dea84c5751776ecabdd069646" +version = "1.11.3" +source = "git+https://github.com/paradigmxyz/reth?rev=d6324d63e27ef6b7c49cdc9b1977c1b808234c7b#d6324d63e27ef6b7c49cdc9b1977c1b808234c7b" dependencies = [ "clap", "eyre", "opentelemetry", + "opentelemetry-appender-tracing", "opentelemetry-otlp", "opentelemetry-semantic-conventions", "opentelemetry_sdk", @@ -12439,16 +12827,16 @@ dependencies = [ [[package]] name = "reth-transaction-pool" -version = "1.9.3" -source = "git+https://github.com/paradigmxyz/reth?rev=27a8c0f5a6dfb27dea84c5751776ecabdd069646#27a8c0f5a6dfb27dea84c5751776ecabdd069646" +version = "1.11.3" +source = "git+https://github.com/paradigmxyz/reth?rev=d6324d63e27ef6b7c49cdc9b1977c1b808234c7b#d6324d63e27ef6b7c49cdc9b1977c1b808234c7b" dependencies = [ "alloy-consensus", "alloy-eips", - "alloy-primitives 1.4.1", + "alloy-primitives 1.6.0", "alloy-rlp", "aquamarine", "auto_impl", - "bitflags 2.10.0", + "bitflags 2.13.0", "futures-util", "metrics", "parking_lot", @@ -12458,12 +12846,15 @@ dependencies = [ "reth-chainspec", "reth-eth-wire-types", "reth-ethereum-primitives", + "reth-evm", + "reth-evm-ethereum", "reth-execution-types", "reth-fs-util", - "reth-metrics 1.9.3", + "reth-metrics", "reth-primitives-traits", "reth-storage-api", - "reth-tasks 1.9.3", + "reth-tasks", + "revm", "revm-interpreter", "revm-primitives", "rustc-hash 2.1.1", @@ -12479,19 +12870,20 @@ dependencies = [ [[package]] name = "reth-trie" -version = "1.9.3" -source = "git+https://github.com/paradigmxyz/reth?rev=27a8c0f5a6dfb27dea84c5751776ecabdd069646#27a8c0f5a6dfb27dea84c5751776ecabdd069646" +version = "1.11.3" +source = "git+https://github.com/paradigmxyz/reth?rev=d6324d63e27ef6b7c49cdc9b1977c1b808234c7b#d6324d63e27ef6b7c49cdc9b1977c1b808234c7b" dependencies = [ "alloy-consensus", "alloy-eips", - "alloy-primitives 1.4.1", + "alloy-primitives 1.6.0", "alloy-rlp", - "alloy-trie 0.9.1", + "alloy-trie", "auto_impl", "itertools 0.14.0", "metrics", + "parking_lot", "reth-execution-errors", - "reth-metrics 1.9.3", + "reth-metrics", "reth-primitives-traits", "reth-stages-types", "reth-storage-errors", @@ -12504,22 +12896,22 @@ dependencies = [ [[package]] name = "reth-trie-common" -version = "1.9.3" -source = "git+https://github.com/paradigmxyz/reth?rev=27a8c0f5a6dfb27dea84c5751776ecabdd069646#27a8c0f5a6dfb27dea84c5751776ecabdd069646" +version = "1.11.3" +source = "git+https://github.com/paradigmxyz/reth?rev=d6324d63e27ef6b7c49cdc9b1977c1b808234c7b#d6324d63e27ef6b7c49cdc9b1977c1b808234c7b" dependencies = [ "alloy-consensus", - "alloy-primitives 1.4.1", + "alloy-primitives 1.6.0", "alloy-rlp", "alloy-rpc-types-eth", "alloy-serde", - "alloy-trie 0.9.1", + "alloy-trie", "arbitrary", "arrayvec", "bytes", "derive_more 2.1.0", "hash-db", "itertools 0.14.0", - "nybbles 0.4.6", + "nybbles", "plain_hasher", "rayon", "reth-codecs", @@ -12531,92 +12923,81 @@ dependencies = [ [[package]] name = "reth-trie-db" -version = "1.9.3" -source = "git+https://github.com/paradigmxyz/reth?rev=27a8c0f5a6dfb27dea84c5751776ecabdd069646#27a8c0f5a6dfb27dea84c5751776ecabdd069646" +version = "1.11.3" +source = "git+https://github.com/paradigmxyz/reth?rev=d6324d63e27ef6b7c49cdc9b1977c1b808234c7b#d6324d63e27ef6b7c49cdc9b1977c1b808234c7b" dependencies = [ - "alloy-primitives 1.4.1", + "alloy-primitives 1.6.0", + "metrics", + "parking_lot", "reth-db-api", "reth-execution-errors", + "reth-metrics", "reth-primitives-traits", + "reth-stages-types", + "reth-storage-api", + "reth-storage-errors", "reth-trie", + "reth-trie-common", "tracing", ] [[package]] name = "reth-trie-parallel" -version = "1.9.3" -source = "git+https://github.com/paradigmxyz/reth?rev=27a8c0f5a6dfb27dea84c5751776ecabdd069646#27a8c0f5a6dfb27dea84c5751776ecabdd069646" +version = "1.11.3" +source = "git+https://github.com/paradigmxyz/reth?rev=d6324d63e27ef6b7c49cdc9b1977c1b808234c7b#d6324d63e27ef6b7c49cdc9b1977c1b808234c7b" dependencies = [ - "alloy-primitives 1.4.1", + "alloy-primitives 1.6.0", "alloy-rlp", "crossbeam-channel", - "dashmap 6.1.0", "derive_more 2.1.0", "itertools 0.14.0", "metrics", "rayon", "reth-execution-errors", - "reth-metrics 1.9.3", + "reth-metrics", + "reth-primitives-traits", "reth-provider", "reth-storage-errors", + "reth-tasks", "reth-trie", "reth-trie-common", "reth-trie-sparse", "thiserror 2.0.17", - "tokio", "tracing", ] [[package]] name = "reth-trie-sparse" -version = "1.9.3" -source = "git+https://github.com/paradigmxyz/reth?rev=27a8c0f5a6dfb27dea84c5751776ecabdd069646#27a8c0f5a6dfb27dea84c5751776ecabdd069646" +version = "1.11.3" +source = "git+https://github.com/paradigmxyz/reth?rev=d6324d63e27ef6b7c49cdc9b1977c1b808234c7b#d6324d63e27ef6b7c49cdc9b1977c1b808234c7b" dependencies = [ - "alloy-primitives 1.4.1", + "alloy-primitives 1.6.0", "alloy-rlp", - "alloy-trie 0.9.1", + "alloy-trie", "auto_impl", "metrics", "rayon", "reth-execution-errors", - "reth-metrics 1.9.3", + "reth-metrics", "reth-primitives-traits", "reth-trie-common", "smallvec", "tracing", ] -[[package]] -name = "reth-trie-sparse-parallel" -version = "1.9.3" -source = "git+https://github.com/paradigmxyz/reth?rev=27a8c0f5a6dfb27dea84c5751776ecabdd069646#27a8c0f5a6dfb27dea84c5751776ecabdd069646" -dependencies = [ - "alloy-primitives 1.4.1", - "alloy-rlp", - "alloy-trie 0.9.1", - "metrics", - "rayon", - "reth-execution-errors", - "reth-metrics 1.9.3", - "reth-trie-common", - "reth-trie-sparse", - "smallvec", - "tracing", -] - [[package]] name = "reth-zstd-compressors" -version = "1.9.3" -source = "git+https://github.com/paradigmxyz/reth?rev=27a8c0f5a6dfb27dea84c5751776ecabdd069646#27a8c0f5a6dfb27dea84c5751776ecabdd069646" +version = "1.11.3" +source = "git+https://github.com/paradigmxyz/reth?rev=d6324d63e27ef6b7c49cdc9b1977c1b808234c7b#d6324d63e27ef6b7c49cdc9b1977c1b808234c7b" dependencies = [ "zstd 0.13.3", ] [[package]] name = "revm" -version = "31.0.2" +version = "34.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb67a5223602113cae59a305acde2d9936bc18f2478dda879a6124b267cebfb6" +checksum = "c2aabdebaa535b3575231a88d72b642897ae8106cf6b0d12eafc6bfdf50abfc7" dependencies = [ "revm-bytecode", "revm-context", @@ -12633,9 +13014,9 @@ dependencies = [ [[package]] name = "revm-bytecode" -version = "7.1.1" +version = "8.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2c6b5e6e8dd1e28a4a60e5f46615d4ef0809111c9e63208e55b5c7058200fb0" +checksum = "74d1e5c1eaa44d39d537f668bc5c3409dc01e5c8be954da6c83370bbdf006457" dependencies = [ "bitvec", "phf 0.13.1", @@ -12645,9 +13026,9 @@ dependencies = [ [[package]] name = "revm-context" -version = "11.0.2" +version = "13.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92850e150f4f99d46c05a20ad0cd09286a7ad4ee21866fffb87101de6e602231" +checksum = "892ff3e6a566cf8d72ffb627fdced3becebbd9ba64089c25975b9b028af326a5" dependencies = [ "bitvec", "cfg-if", @@ -12662,9 +13043,9 @@ dependencies = [ [[package]] name = "revm-context-interface" -version = "12.0.1" +version = "14.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6d701e2c2347d65216b066489ab22a0a8e1f7b2568256110d73a7d5eff3385c" +checksum = "57f61cc6d23678c4840af895b19f8acfbbd546142ec8028b6526c53cc1c16c98" dependencies = [ "alloy-eip2930", "alloy-eip7702", @@ -12678,9 +13059,9 @@ dependencies = [ [[package]] name = "revm-database" -version = "9.0.6" +version = "10.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "980d8d6bba78c5dd35b83abbb6585b0b902eb25ea4448ed7bfba6283b0337191" +checksum = "529528d0b05fe646be86223032c3e77aa8b05caa2a35447d538c55965956a511" dependencies = [ "alloy-eips", "revm-bytecode", @@ -12692,22 +13073,23 @@ dependencies = [ [[package]] name = "revm-database-interface" -version = "8.0.5" +version = "9.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8cce03e3780287b07abe58faf4a7f5d8be7e81321f93ccf3343c8f7755602bae" +checksum = "b7bf93ac5b91347c057610c0d96e923db8c62807e03f036762d03e981feddc1d" dependencies = [ "auto_impl", "either", "revm-primitives", "revm-state", "serde", + "thiserror 2.0.17", ] [[package]] name = "revm-handler" -version = "12.0.2" +version = "15.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b45418ed95cfdf0cb19effdbb7633cf2144cab7fb0e6ffd6b0eb9117a50adff6" +checksum = "0cd0e43e815a85eded249df886c4badec869195e70cdd808a13cfca2794622d2" dependencies = [ "auto_impl", "derive-where", @@ -12724,9 +13106,9 @@ dependencies = [ [[package]] name = "revm-inspector" -version = "12.0.2" +version = "15.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c99801eac7da06cc112df2244bd5a64024f4ef21240e923b26e73c4b4a0e5da6" +checksum = "4f3ccad59db91ef93696536a0dbaf2f6f17cfe20d4d8843ae118edb7e97947ef" dependencies = [ "auto_impl", "either", @@ -12742,11 +13124,11 @@ dependencies = [ [[package]] name = "revm-inspectors" -version = "0.32.0" +version = "0.34.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21caa99f22184a6818946362778cccd3ff02f743c1e085bee87700671570ecb7" +checksum = "699b3689517761b838844d715482dfa6059c20a0a5a68bc363e1604d29918555" dependencies = [ - "alloy-primitives 1.4.1", + "alloy-primitives 1.6.0", "alloy-rpc-types-eth", "alloy-rpc-types-trace", "alloy-sol-types", @@ -12762,9 +13144,9 @@ dependencies = [ [[package]] name = "revm-interpreter" -version = "29.0.1" +version = "32.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22789ce92c5808c70185e3bc49732f987dc6fd907f77828c8d3470b2299c9c65" +checksum = "11406408597bc249392d39295831c4b641b3a6f5c471a7c41104a7a1e3564c07" dependencies = [ "revm-bytecode", "revm-context-interface", @@ -12775,9 +13157,9 @@ dependencies = [ [[package]] name = "revm-precompile" -version = "29.0.1" +version = "32.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "968b124028960201abf6d6bf8e223f15fadebb4307df6b7dc9244a0aab5d2d05" +checksum = "e2ec11f45deec71e4945e1809736bb20d454285f9167ab53c5159dae1deb603f" dependencies = [ "ark-bls12-381", "ark-bn254", @@ -12793,18 +13175,17 @@ dependencies = [ "p256", "revm-primitives", "ripemd", - "rug", "secp256k1 0.31.1", "sha2 0.10.9", ] [[package]] name = "revm-primitives" -version = "21.0.2" +version = "22.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29e161db429d465c09ba9cbff0df49e31049fe6b549e28eb0b7bd642fcbd4412" +checksum = "4bcfb5ce6cf18b118932bcdb7da05cd9c250f2cb9f64131396b55f3fe3537c35" dependencies = [ - "alloy-primitives 1.4.1", + "alloy-primitives 1.6.0", "num_enum", "once_cell", "serde", @@ -12812,11 +13193,12 @@ dependencies = [ [[package]] name = "revm-state" -version = "8.1.1" +version = "9.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d8be953b7e374dbdea0773cf360debed8df394ea8d82a8b240a6b5da37592fc" +checksum = "311720d4f0f239b041375e7ddafdbd20032a33b7bae718562ea188e188ed9fd3" dependencies = [ - "bitflags 2.10.0", + "alloy-eip7928", + "bitflags 2.13.0", "revm-bytecode", "revm-primitives", "serde", @@ -12859,9 +13241,9 @@ dependencies = [ [[package]] name = "ringbuffer" -version = "0.15.0" +version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3df6368f71f205ff9c33c076d170dd56ebf68e8161c733c0caa07a7a5509ed53" +checksum = "57b0b88a509053cbfd535726dcaaceee631313cef981266119527a1d110f6d2b" [[package]] name = "ripemd" @@ -12927,14 +13309,24 @@ dependencies = [ [[package]] name = "roaring" -version = "0.10.12" +version = "0.11.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19e8d2cfa184d94d0726d650a9f4a1be7f9b76ac9fdb954219878dc00c1c1e7b" +checksum = "1dedc5658c6ecb3bdb5ef5f3295bb9253f42dcf3fd1402c03f6b1f7659c3c4a9" dependencies = [ "bytemuck", "byteorder", ] +[[package]] +name = "rocksdb" +version = "0.24.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ddb7af00d2b17dbd07d82c0063e25411959748ff03e8d4f96134c2ff41fce34f" +dependencies = [ + "libc", + "librocksdb-sys", +] + [[package]] name = "rolling-file" version = "0.2.0" @@ -12970,18 +13362,6 @@ dependencies = [ "zeroize", ] -[[package]] -name = "rug" -version = "1.28.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "58ad2e973fe3c3214251a840a621812a4f40468da814b1a3d6947d433c2af11f" -dependencies = [ - "az", - "gmp-mpfr-sys", - "libc", - "libm", -] - [[package]] name = "ruint" version = "1.17.0" @@ -13095,22 +13475,9 @@ dependencies = [ name = "rustc_version" version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" -dependencies = [ - "semver 1.0.27", -] - -[[package]] -name = "rustix" -version = "0.38.44" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fdb5bc1ae2baa591800df16c9ca78619bf65c0488b41b96ccec5d11220d8c154" -dependencies = [ - "bitflags 2.10.0", - "errno", - "libc", - "linux-raw-sys 0.4.15", - "windows-sys 0.59.0", +checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" +dependencies = [ + "semver 1.0.27", ] [[package]] @@ -13119,10 +13486,10 @@ version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cd15f8a2c5551a84d56efdc1cd049089e409ac19a3072d5037a17fd70719ff3e" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.13.0", "errno", "libc", - "linux-raw-sys 0.11.0", + "linux-raw-sys", "windows-sys 0.61.2", ] @@ -13144,6 +13511,7 @@ version = "0.23.35" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "533f54bc6a7d4f647e46ad909549eda97bf5afc1585190ef692b4286b198bd8f" dependencies = [ + "aws-lc-rs", "log", "once_cell", "ring", @@ -13204,7 +13572,7 @@ checksum = "19787cda76408ec5404443dc8b31795c87cd8fec49762dc75fa727740d34acc1" dependencies = [ "core-foundation 0.10.1", "core-foundation-sys", - "jni", + "jni 0.21.1", "log", "once_cell", "rustls 0.23.35", @@ -13217,6 +13585,27 @@ dependencies = [ "windows-sys 0.59.0", ] +[[package]] +name = "rustls-platform-verifier" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26d1e2536ce4f35f4846aa13bff16bd0ff40157cdb14cc056c7b14ba41233ba0" +dependencies = [ + "core-foundation 0.10.1", + "core-foundation-sys", + "jni 0.22.4", + "log", + "once_cell", + "rustls 0.23.35", + "rustls-native-certs 0.8.2", + "rustls-platform-verifier-android", + "rustls-webpki 0.103.8", + "security-framework 3.5.1", + "security-framework-sys", + "webpki-root-certs 1.0.4", + "windows-sys 0.61.2", +] + [[package]] name = "rustls-platform-verifier-android" version = "0.1.1" @@ -13239,6 +13628,7 @@ version = "0.103.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2ffdfa2f5286e2247234e03f680868ac2815974dc39e00ea15adc445d0aafe52" dependencies = [ + "aws-lc-rs", "ring", "rustls-pki-types", "untrusted", @@ -13304,7 +13694,7 @@ dependencies = [ "proc-macro-crate 3.4.0", "proc-macro2 1.0.103", "quote 1.0.42", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] @@ -13466,7 +13856,7 @@ version = "2.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.13.0", "core-foundation 0.9.4", "core-foundation-sys", "libc", @@ -13479,7 +13869,7 @@ version = "3.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b3297343eaf830f66ede390ea39da1d462b6b0c1b000f420d0a83f898bbbe6ef" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.13.0", "core-foundation 0.10.1", "core-foundation-sys", "libc", @@ -13502,7 +13892,7 @@ version = "0.25.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4eb30575f3638fc8f6815f448d50cb1a2e255b0897985c8c59f4d37b72a07b06" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.13.0", "cssparser", "derive_more 0.99.20", "fxhash", @@ -13603,7 +13993,7 @@ checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" dependencies = [ "proc-macro2 1.0.103", "quote 1.0.42", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] @@ -13614,7 +14004,7 @@ checksum = "18d26a20a969b9e3fdf2fc2d9f21eda6c40e2de84c9408bb5d3b05d499aae711" dependencies = [ "proc-macro2 1.0.103", "quote 1.0.42", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] @@ -13650,7 +14040,7 @@ checksum = "175ee3e80ae9982737ca543e96133087cbd9a485eecc3bc4de9c1a37b47ea59c" dependencies = [ "proc-macro2 1.0.103", "quote 1.0.42", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] @@ -13662,6 +14052,15 @@ dependencies = [ "serde", ] +[[package]] +name = "serde_spanned" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6662b5879511e06e8999a8a235d848113e942c9124f211511b16466ee2995f26" +dependencies = [ + "serde_core", +] + [[package]] name = "serde_urlencoded" version = "0.7.1" @@ -13702,7 +14101,7 @@ dependencies = [ "darling 0.21.3", "proc-macro2 1.0.103", "quote 1.0.42", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] @@ -13744,7 +14143,7 @@ checksum = "99cd6713db3cf16b6c84e06321e049a9b9f699826e16096d23bbcc44d15d51a6" dependencies = [ "block-buffer 0.9.0", "cfg-if", - "cpufeatures", + "cpufeatures 0.2.17", "digest 0.9.0", "opaque-debug", ] @@ -13756,7 +14155,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba" dependencies = [ "cfg-if", - "cpufeatures", + "cpufeatures 0.2.17", "digest 0.10.7", ] @@ -13774,7 +14173,7 @@ checksum = "4d58a1e1bf39749807d89cf2d98ac2dfa0ff1cb3faa38fbb64dd88ac8013d800" dependencies = [ "block-buffer 0.9.0", "cfg-if", - "cpufeatures", + "cpufeatures 0.2.17", "digest 0.9.0", "opaque-debug", ] @@ -13786,7 +14185,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283" dependencies = [ "cfg-if", - "cpufeatures", + "cpufeatures 0.2.17", "digest 0.10.7", "sha2-asm", ] @@ -13807,14 +14206,24 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "75872d278a8f37ef87fa0ddbda7802605cb18344497949862c0d4dcb291eba60" dependencies = [ "digest 0.10.7", - "keccak", + "keccak 0.1.5", +] + +[[package]] +name = "sha3" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "be176f1a57ce4e3d31c1a166222d9768de5954f811601fb7ca06fc8203905ce1" +dependencies = [ + "digest 0.11.3", + "keccak 0.2.0", ] [[package]] name = "sha3-asm" -version = "0.1.4" +version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c28efc5e327c837aa837c59eae585fc250715ef939ac32881bcc11677cd02d46" +checksum = "a6287fd675f713484342a89cbf0a386abef5f15919cfad607e5e1f19e1e15331" dependencies = [ "cc", "cfg-if", @@ -13844,6 +14253,12 @@ version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" +[[package]] +name = "shlex" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8fadd59c855ef2080decdef8ff161eb6661b86933c9d82e5ba29dc602a55aba" + [[package]] name = "signal-hook" version = "0.3.18" @@ -13900,6 +14315,16 @@ version = "0.3.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d66dc143e6b11c1eddc06d5c423cfc97062865baf299914ab64caa38182078fe" +[[package]] +name = "simd_cesu8" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94f90157bb87cddf702797c5dadfa0be7d266cdf49e22da2fcaa32eff75b2c33" +dependencies = [ + "rustc_version 0.4.1", + "simdutf8", +] + [[package]] name = "simdutf8" version = "0.1.5" @@ -13930,21 +14355,6 @@ version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "56199f7ddabf13fe5074ce809e7d3f42b42ae711800501b5b16ea82ad029c39d" -[[package]] -name = "skeptic" -version = "0.13.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16d23b015676c90a0f01c197bfdc786c20342c73a0afdda9025adb0bc42940a8" -dependencies = [ - "bytecount", - "cargo_metadata 0.14.2", - "error-chain", - "glob", - "pulldown-cmark", - "tempfile", - "walkdir", -] - [[package]] name = "sketches-ddsketch" version = "0.3.0" @@ -14213,7 +14623,7 @@ dependencies = [ "atoi", "base64 0.21.7", "bigdecimal 0.3.1", - "bitflags 2.10.0", + "bitflags 2.13.0", "byteorder", "bytes", "chrono", @@ -14259,7 +14669,7 @@ dependencies = [ "atoi", "base64 0.21.7", "bigdecimal 0.3.1", - "bitflags 2.10.0", + "bitflags 2.13.0", "byteorder", "chrono", "crc", @@ -14460,6 +14870,15 @@ dependencies = [ "strum_macros 0.27.2", ] +[[package]] +name = "strum" +version = "0.28.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9628de9b8791db39ceda2b119bbe13134770b56c138ec1d3af810d045c04f9bd" +dependencies = [ + "strum_macros 0.28.0", +] + [[package]] name = "strum_macros" version = "0.25.3" @@ -14470,7 +14889,7 @@ dependencies = [ "proc-macro2 1.0.103", "quote 1.0.42", "rustversion", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] @@ -14483,7 +14902,7 @@ dependencies = [ "proc-macro2 1.0.103", "quote 1.0.42", "rustversion", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] @@ -14495,7 +14914,19 @@ dependencies = [ "heck 0.5.0", "proc-macro2 1.0.103", "quote 1.0.42", - "syn 2.0.111", + "syn 2.0.117", +] + +[[package]] +name = "strum_macros" +version = "0.28.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ab85eea0270ee17587ed4156089e10b9e6880ee688791d45a905f5b1ca36f664" +dependencies = [ + "heck 0.5.0", + "proc-macro2 1.0.103", + "quote 1.0.42", + "syn 2.0.117", ] [[package]] @@ -14528,9 +14959,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.111" +version = "2.0.117" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "390cc9a294ab71bdb1aa2e99d13be9c753cd2d7bd6560c77118597410c4d2e87" +checksum = "e665b8803e7b1d2a727f4023456bbbbe74da67099c585258af0ad9c5013b9b99" dependencies = [ "proc-macro2 1.0.103", "quote 1.0.42", @@ -14539,14 +14970,14 @@ dependencies = [ [[package]] name = "syn-solidity" -version = "1.4.1" +version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff790eb176cc81bb8936aed0f7b9f14fc4670069a2d371b3e3b0ecce908b2cb3" +checksum = "ec005042c7d952febc1a3ef5b0f6674e9054aa836877a31c90b20e25b3d31744" dependencies = [ "paste", "proc-macro2 1.0.103", "quote 1.0.42", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] @@ -14584,7 +15015,7 @@ checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" dependencies = [ "proc-macro2 1.0.103", "quote 1.0.42", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] @@ -14615,11 +15046,25 @@ dependencies = [ "windows 0.57.0", ] +[[package]] +name = "sysinfo" +version = "0.38.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92ab6a2f8bfe508deb3c6406578252e491d299cbbf3bc0529ecc3313aee4a52f" +dependencies = [ + "libc", + "memchr", + "ntapi", + "objc2-core-foundation", + "objc2-io-kit", + "windows 0.62.2", +] + [[package]] name = "sysperf" version = "0.1.0" dependencies = [ - "alloy-primitives 1.4.1", + "alloy-primitives 1.6.0", "rand 0.8.5", "rayon", "sysinfo 0.33.1", @@ -14642,7 +15087,7 @@ version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3c879d448e9d986b661742763247d3693ed13609438cf3d006f51f5368a5ba6b" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.13.0", "core-foundation 0.9.4", "system-configuration-sys 0.6.0", ] @@ -14711,7 +15156,7 @@ dependencies = [ "fastrand 2.3.0", "getrandom 0.3.4", "once_cell", - "rustix 1.1.2", + "rustix", "windows-sys 0.61.2", ] @@ -14739,7 +15184,7 @@ dependencies = [ "ahash", "alloy-consensus", "alloy-json-rpc", - "alloy-primitives 1.4.1", + "alloy-primitives 1.6.0", "alloy-provider", "alloy-rpc-types-beacon", "clap", @@ -14772,7 +15217,7 @@ version = "0.1.0" dependencies = [ "quote 1.0.42", "reqwest 0.11.27", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] @@ -14807,7 +15252,7 @@ checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ "proc-macro2 1.0.103", "quote 1.0.42", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] @@ -14818,7 +15263,7 @@ checksum = "3ff15c8ecd7de3849db632e14d18d2571fa09dfc5ed93479bc4485c7a517c913" dependencies = [ "proc-macro2 1.0.103", "quote 1.0.42", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] @@ -14872,9 +15317,9 @@ dependencies = [ [[package]] name = "time" -version = "0.3.44" +version = "0.3.47" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91e7d9e3bb61134e77bde20dd4825b97c010155709965fedf0f49bb138e52a9d" +checksum = "743bd48c283afc0388f9b8827b976905fb217ad9e647fae3a379a9283c4def2c" dependencies = [ "deranged", "itoa", @@ -14883,22 +15328,22 @@ dependencies = [ "num-conv", "num_threads", "powerfmt", - "serde", + "serde_core", "time-core", "time-macros", ] [[package]] name = "time-core" -version = "0.1.6" +version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "40868e7c1d2f0b8d73e4a8c7f0ff63af4f6d19be117e90bd73eb1d62cf831c6b" +checksum = "7694e1cfe791f8d31026952abf09c69ca6f6fa4e1a1229e18988f06a04a12dca" [[package]] name = "time-macros" -version = "0.2.24" +version = "0.2.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30cfb0125f12d9c277f35663a0a33f8c30190f4e4574868a330595412d34ebf3" +checksum = "2e70e4c5a0e0a8a4823ad65dfe1a6930e4f4d756dcd9dd7939022b5e8c501215" dependencies = [ "num-conv", "time-core", @@ -14980,7 +15425,7 @@ checksum = "af407857209536a95c8e56f8231ef2c2e2aff839b22e07a1ffcbc617e9db9fa5" dependencies = [ "proc-macro2 1.0.103", "quote 1.0.42", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] @@ -15051,6 +15496,21 @@ dependencies = [ "tokio", "tokio-rustls 0.26.4", "tungstenite 0.26.2", +] + +[[package]] +name = "tokio-tungstenite" +version = "0.28.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d25a406cddcc431a75d3d9afc6a7c0f7428d4891dd973e4d54c56b46127bf857" +dependencies = [ + "futures-util", + "log", + "rustls 0.23.35", + "rustls-pki-types", + "tokio", + "tokio-rustls 0.26.4", + "tungstenite 0.28.0", "webpki-roots 0.26.11", ] @@ -15085,11 +15545,26 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dc1beb996b9d83529a9e75c17a1686767d148d70663143c7854d8b4a09ced362" dependencies = [ "serde", - "serde_spanned", + "serde_spanned 0.6.9", "toml_datetime 0.6.11", "toml_edit 0.22.27", ] +[[package]] +name = "toml" +version = "0.9.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0dc8b1fb61449e27716ec0e1bdf0f6b8f3e8f6b05391e8497b8b6d7804ea6d8" +dependencies = [ + "indexmap 2.12.1", + "serde_core", + "serde_spanned 1.1.1", + "toml_datetime 0.7.3", + "toml_parser", + "toml_writer", + "winnow 0.7.14", +] + [[package]] name = "toml_datetime" version = "0.6.11" @@ -15116,10 +15591,10 @@ checksum = "41fe8c660ae4257887cf66394862d21dbca4a6ddd26f04a3560410406a2f819a" dependencies = [ "indexmap 2.12.1", "serde", - "serde_spanned", + "serde_spanned 0.6.9", "toml_datetime 0.6.11", "toml_write", - "winnow", + "winnow 0.7.14", ] [[package]] @@ -15131,7 +15606,7 @@ dependencies = [ "indexmap 2.12.1", "toml_datetime 0.7.3", "toml_parser", - "winnow", + "winnow 0.7.14", ] [[package]] @@ -15140,7 +15615,7 @@ version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c0cbe268d35bdb4bb5a56a2de88d0ad0eb70af5384a99d648cd4b3d04039800e" dependencies = [ - "winnow", + "winnow 0.7.14", ] [[package]] @@ -15149,6 +15624,12 @@ version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5d99f8c9a7727884afe522e9bd5edbfc91a3312b36a77b5fb8926e4c31a41801" +[[package]] +name = "toml_writer" +version = "1.1.1+spec-1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "756daf9b1013ebe47a8776667b466417e2d4c5679d441c26230efd9ef78692db" + [[package]] name = "tonic" version = "0.13.1" @@ -15215,7 +15696,7 @@ dependencies = [ "prost-build", "prost-types", "quote 1.0.42", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] @@ -15266,13 +15747,13 @@ dependencies = [ [[package]] name = "tower-http" -version = "0.6.7" +version = "0.6.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9cf146f99d442e8e68e585f5d798ccd3cad9a7835b917e09728880a862706456" +checksum = "4cfcf7e2740e6fc6d4d688b4ef00650406bb94adf4731e43c096c3a19fe40840" dependencies = [ "async-compression", "base64 0.22.1", - "bitflags 2.10.0", + "bitflags 2.13.0", "bytes", "futures-core", "futures-util", @@ -15281,7 +15762,6 @@ dependencies = [ "http-body-util", "http-range-header", "httpdate", - "iri-string", "mime", "mime_guess", "percent-encoding", @@ -15292,6 +15772,7 @@ dependencies = [ "tower-layer", "tower-service", "tracing", + "url", "uuid", ] @@ -15339,7 +15820,7 @@ checksum = "7490cfa5ec963746568740651ac6781f701c9c5ea257c58e057f3ba8cf69e8da" dependencies = [ "proc-macro2 1.0.103", "quote 1.0.42", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] @@ -15415,6 +15896,22 @@ dependencies = [ "web-time", ] +[[package]] +name = "tracing-samply" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c175f7ecc002b6ef04776a39f440503e4e788790ddbdbfac8259b7a069526334" +dependencies = [ + "cfg-if", + "itoa", + "libc", + "mach2", + "memmap2 0.9.9", + "smallvec", + "tracing-core", + "tracing-subscriber 0.3.22", +] + [[package]] name = "tracing-serde" version = "0.2.0" @@ -15472,7 +15969,7 @@ version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ee44f4cef85f88b4dea21c0b1f58320bdf35715cf56d840969487cff00613321" dependencies = [ - "alloy-primitives 1.4.1", + "alloy-primitives 1.6.0", "ethereum_hashing", "ethereum_ssz 0.9.1", "smallvec", @@ -15488,7 +15985,7 @@ dependencies = [ "darling 0.20.11", "proc-macro2 1.0.103", "quote 1.0.42", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] @@ -15500,7 +15997,7 @@ dependencies = [ "darling 0.20.11", "proc-macro2 1.0.103", "quote 1.0.42", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] @@ -15513,12 +16010,6 @@ dependencies = [ "rlp", ] -[[package]] -name = "triomphe" -version = "0.1.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd69c5aa8f924c7519d6372789a74eac5b94fb0f8fcf0d4a97eb0bfc3e785f39" - [[package]] name = "try-lock" version = "0.2.5" @@ -15563,12 +16054,37 @@ dependencies = [ "utf-8", ] +[[package]] +name = "tungstenite" +version = "0.28.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8628dcc84e5a09eb3d8423d6cb682965dea9133204e8fb3efee74c2a0c259442" +dependencies = [ + "bytes", + "data-encoding", + "http 1.4.0", + "httparse", + "log", + "rand 0.9.2", + "rustls 0.23.35", + "rustls-pki-types", + "sha1", + "thiserror 2.0.17", + "utf-8", +] + [[package]] name = "twox-hash" version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9ea3136b675547379c4bd395ca6b938e5ad3c3d20fad76e7fe85f9e0d011419c" +[[package]] +name = "typeid" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc7d623258602320d5c55d1bc22793b57daff0ec7efc270ea7d55ce1d5f5471c" + [[package]] name = "typenum" version = "1.19.0" @@ -15652,21 +16168,15 @@ checksum = "f6ccf251212114b54433ec949fd6a7841275f9ada20dddd2f29e9ceea4501493" [[package]] name = "unicode-truncate" -version = "1.1.0" +version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b3644627a5af5fa321c95b9b235a72fd24cd29c648c2c379431e6628655627bf" +checksum = "16b380a1238663e5f8a691f9039c73e1cdae598a30e9855f541d29b08b53e9a5" dependencies = [ - "itertools 0.13.0", + "itertools 0.14.0", "unicode-segmentation", - "unicode-width 0.1.14", + "unicode-width", ] -[[package]] -name = "unicode-width" -version = "0.1.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7dd6e30e90baa6f72411720665d41d89b9a3d039dc45b8faea1ddd07f617f6af" - [[package]] name = "unicode-width" version = "0.2.0" @@ -15697,7 +16207,7 @@ version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fc1de2c688dc15305988b563c3854064043356019f97a4b46276fe734c4f07ea" dependencies = [ - "crypto-common", + "crypto-common 0.1.7", "subtle", ] @@ -15804,12 +16314,12 @@ checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" [[package]] name = "vergen" -version = "9.0.6" +version = "9.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b2bf58be11fc9414104c6d3a2e464163db5ef74b12296bda593cac37b6e4777" +checksum = "b849a1f6d8639e8de261e81ee0fc881e3e3620db1af9f2e0da015d4382ceaf75" dependencies = [ "anyhow", - "cargo_metadata 0.19.2", + "cargo_metadata", "derive_builder", "regex", "rustversion", @@ -15819,9 +16329,9 @@ dependencies = [ [[package]] name = "vergen-git2" -version = "1.0.7" +version = "9.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f6ee511ec45098eabade8a0750e76eec671e7fb2d9360c563911336bea9cac1" +checksum = "d51ab55ddf1188c8d679f349775362b0fa9e90bd7a4ac69838b2a087623f0d57" dependencies = [ "anyhow", "derive_builder", @@ -15834,9 +16344,9 @@ dependencies = [ [[package]] name = "vergen-lib" -version = "0.1.6" +version = "9.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b07e6010c0f3e59fcb164e0163834597da68d1f864e2b8ca49f74de01e9c166" +checksum = "b34a29ba7e9c59e62f229ae1932fb1b8fb8a6fdcc99215a641913f5f5a59a569" dependencies = [ "anyhow", "derive_builder", @@ -15863,7 +16373,7 @@ checksum = "d674d135b4a8c1d7e813e2f8d1c9a58308aee4a680323066025e53132218bd91" dependencies = [ "proc-macro2 1.0.103", "quote 1.0.42", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] @@ -15947,7 +16457,16 @@ version = "1.0.1+wasi-0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0562428422c63773dad2c345a1882263bbf4d65cf3f42e90921f787ef5ad58e7" dependencies = [ - "wit-bindgen", + "wit-bindgen 0.46.0", +] + +[[package]] +name = "wasip3" +version = "0.4.0+wasi-0.3.0-rc-2026-01-06" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5428f8bf88ea5ddc08faddef2ac4a67e390b88186c703ce6dbd955e1c145aca5" +dependencies = [ + "wit-bindgen 0.51.0", ] [[package]] @@ -16001,7 +16520,7 @@ dependencies = [ "bumpalo", "proc-macro2 1.0.103", "quote 1.0.42", - "syn 2.0.111", + "syn 2.0.117", "wasm-bindgen-shared", ] @@ -16014,6 +16533,28 @@ dependencies = [ "unicode-ident", ] +[[package]] +name = "wasm-encoder" +version = "0.244.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "990065f2fe63003fe337b932cfb5e3b80e0b4d0f5ff650e6985b1048f62c8319" +dependencies = [ + "leb128fmt", + "wasmparser", +] + +[[package]] +name = "wasm-metadata" +version = "0.244.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb0e353e6a2fbdc176932bbaab493762eb1255a7900fe0fea1a2f96c296cc909" +dependencies = [ + "anyhow", + "indexmap 2.12.1", + "wasm-encoder", + "wasmparser", +] + [[package]] name = "wasm-streams" version = "0.4.2" @@ -16027,6 +16568,18 @@ dependencies = [ "web-sys", ] +[[package]] +name = "wasmparser" +version = "0.244.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "47b807c72e1bac69382b3a6fb3dbe8ea4c0ed87ff5629b8685ae6b9a611028fe" +dependencies = [ + "bitflags 2.13.0", + "hashbrown 0.15.5", + "indexmap 2.12.1", + "semver 1.0.27", +] + [[package]] name = "wasmtimer" version = "0.4.3" @@ -16271,7 +16824,7 @@ checksum = "9107ddc059d5b6fbfbffdfa7a7fe3e22a226def0b2608f72e9d552763d3e1ad7" dependencies = [ "proc-macro2 1.0.103", "quote 1.0.42", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] @@ -16282,7 +16835,7 @@ checksum = "053e2e040ab57b9dc951b72c264860db7eb3b0200ba345b4e4c3b14f67855ddf" dependencies = [ "proc-macro2 1.0.103", "quote 1.0.42", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] @@ -16293,7 +16846,7 @@ checksum = "29bee4b38ea3cde66011baa44dba677c432a78593e202392d1e9070cf2a7fca7" dependencies = [ "proc-macro2 1.0.103", "quote 1.0.42", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] @@ -16304,7 +16857,7 @@ checksum = "3f316c4a2570ba26bbec722032c4099d8c8bc095efccdc15688708623367e358" dependencies = [ "proc-macro2 1.0.103", "quote 1.0.42", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] @@ -16719,6 +17272,15 @@ dependencies = [ "memchr", ] +[[package]] +name = "winnow" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0592e1c9d151f854e6fd382574c3a0855250e1d9b2f99d9281c6e6391af352f1" +dependencies = [ + "memchr", +] + [[package]] name = "winreg" version = "0.50.0" @@ -16735,6 +17297,94 @@ version = "0.46.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f17a85883d4e6d00e8a97c586de764dabcc06133f7f1d55dce5cdc070ad7fe59" +[[package]] +name = "wit-bindgen" +version = "0.51.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d7249219f66ced02969388cf2bb044a09756a083d0fab1e566056b04d9fbcaa5" +dependencies = [ + "wit-bindgen-rust-macro", +] + +[[package]] +name = "wit-bindgen-core" +version = "0.51.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ea61de684c3ea68cb082b7a88508a8b27fcc8b797d738bfc99a82facf1d752dc" +dependencies = [ + "anyhow", + "heck 0.5.0", + "wit-parser", +] + +[[package]] +name = "wit-bindgen-rust" +version = "0.51.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b7c566e0f4b284dd6561c786d9cb0142da491f46a9fbed79ea69cdad5db17f21" +dependencies = [ + "anyhow", + "heck 0.5.0", + "indexmap 2.12.1", + "prettyplease", + "syn 2.0.117", + "wasm-metadata", + "wit-bindgen-core", + "wit-component", +] + +[[package]] +name = "wit-bindgen-rust-macro" +version = "0.51.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c0f9bfd77e6a48eccf51359e3ae77140a7f50b1e2ebfe62422d8afdaffab17a" +dependencies = [ + "anyhow", + "prettyplease", + "proc-macro2 1.0.103", + "quote 1.0.42", + "syn 2.0.117", + "wit-bindgen-core", + "wit-bindgen-rust", +] + +[[package]] +name = "wit-component" +version = "0.244.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d66ea20e9553b30172b5e831994e35fbde2d165325bec84fc43dbf6f4eb9cb2" +dependencies = [ + "anyhow", + "bitflags 2.13.0", + "indexmap 2.12.1", + "log", + "serde", + "serde_derive", + "serde_json", + "wasm-encoder", + "wasm-metadata", + "wasmparser", + "wit-parser", +] + +[[package]] +name = "wit-parser" +version = "0.244.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ecc8ac4bc1dc3381b7f59c34f00b67e18f910c2c0f50015669dde7def656a736" +dependencies = [ + "anyhow", + "id-arena", + "indexmap 2.12.1", + "log", + "semver 1.0.27", + "serde", + "serde_derive", + "serde_json", + "unicode-xid 0.2.6", + "wasmparser", +] + [[package]] name = "write16" version = "1.0.0" @@ -16782,7 +17432,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "32e45ad4206f6d2479085147f02bc2ef834ac85886624a23575ae137c8aa8156" dependencies = [ "libc", - "rustix 1.1.2", + "rustix", ] [[package]] @@ -16831,7 +17481,7 @@ checksum = "b659052874eb698efe5b9e8cf382204678a0086ebf46982b79d6ca3182927e5d" dependencies = [ "proc-macro2 1.0.103", "quote 1.0.42", - "syn 2.0.111", + "syn 2.0.117", "synstructure 0.13.2", ] @@ -16852,7 +17502,7 @@ checksum = "d8a8d209fdf45cf5138cbb5a506f6b52522a25afccc534d1475dad8e31105c6a" dependencies = [ "proc-macro2 1.0.103", "quote 1.0.42", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] @@ -16872,7 +17522,7 @@ checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502" dependencies = [ "proc-macro2 1.0.103", "quote 1.0.42", - "syn 2.0.111", + "syn 2.0.117", "synstructure 0.13.2", ] @@ -16893,7 +17543,7 @@ checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" dependencies = [ "proc-macro2 1.0.103", "quote 1.0.42", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] @@ -16927,7 +17577,7 @@ checksum = "eadce39539ca5cb3985590102671f2567e659fca9666581ad3411d59207951f3" dependencies = [ "proc-macro2 1.0.103", "quote 1.0.42", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] diff --git a/Cargo.toml b/Cargo.toml index c8fdfc229..594a7f0fe 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,7 +1,7 @@ [workspace.package] version = "0.1.0" edition = "2021" -rust-version = "1.85" +rust-version = "1.88" license = "MIT OR Apache-2.0" homepage = "https://github.com/flashbots/rbuilder" repository = "https://github.com/flashbots/rbuilder" @@ -70,62 +70,62 @@ codegen-units = 1 incremental = false [workspace.dependencies] -reth = { git = "https://github.com/paradigmxyz/reth", rev = "27a8c0f5a6dfb27dea84c5751776ecabdd069646" } -reth-cli-util = { git = "https://github.com/paradigmxyz/reth", rev = "27a8c0f5a6dfb27dea84c5751776ecabdd069646" } -reth-db = { git = "https://github.com/paradigmxyz/reth", rev = "27a8c0f5a6dfb27dea84c5751776ecabdd069646" } -reth-db-common = { git = "https://github.com/paradigmxyz/reth", rev = "27a8c0f5a6dfb27dea84c5751776ecabdd069646" } -reth-errors = { git = "https://github.com/paradigmxyz/reth", rev = "27a8c0f5a6dfb27dea84c5751776ecabdd069646" } -reth-payload-builder = { git = "https://github.com/paradigmxyz/reth", rev = "27a8c0f5a6dfb27dea84c5751776ecabdd069646" } -reth-node-api = { git = "https://github.com/paradigmxyz/reth", rev = "27a8c0f5a6dfb27dea84c5751776ecabdd069646" } -reth-node-ethereum = { git = "https://github.com/paradigmxyz/reth", rev = "27a8c0f5a6dfb27dea84c5751776ecabdd069646" } -reth-trie = { git = "https://github.com/paradigmxyz/reth", rev = "27a8c0f5a6dfb27dea84c5751776ecabdd069646" } -reth-trie-parallel = { git = "https://github.com/paradigmxyz/reth", rev = "27a8c0f5a6dfb27dea84c5751776ecabdd069646" } -reth-node-core = { git = "https://github.com/paradigmxyz/reth", rev = "27a8c0f5a6dfb27dea84c5751776ecabdd069646" } -reth-primitives = { git = "https://github.com/paradigmxyz/reth", rev = "27a8c0f5a6dfb27dea84c5751776ecabdd069646" } -reth-ethereum-primitives = { git = "https://github.com/paradigmxyz/reth", rev = "27a8c0f5a6dfb27dea84c5751776ecabdd069646" } -reth-primitives-traits = { git = "https://github.com/paradigmxyz/reth", rev = "27a8c0f5a6dfb27dea84c5751776ecabdd069646" } -reth-provider = { git = "https://github.com/paradigmxyz/reth", rev = "27a8c0f5a6dfb27dea84c5751776ecabdd069646", features = [ +reth = { git = "https://github.com/paradigmxyz/reth", rev = "d6324d63e27ef6b7c49cdc9b1977c1b808234c7b" } +reth-cli-util = { git = "https://github.com/paradigmxyz/reth", rev = "d6324d63e27ef6b7c49cdc9b1977c1b808234c7b" } +reth-db = { git = "https://github.com/paradigmxyz/reth", rev = "d6324d63e27ef6b7c49cdc9b1977c1b808234c7b" } +reth-db-common = { git = "https://github.com/paradigmxyz/reth", rev = "d6324d63e27ef6b7c49cdc9b1977c1b808234c7b" } +reth-errors = { git = "https://github.com/paradigmxyz/reth", rev = "d6324d63e27ef6b7c49cdc9b1977c1b808234c7b" } +reth-payload-builder = { git = "https://github.com/paradigmxyz/reth", rev = "d6324d63e27ef6b7c49cdc9b1977c1b808234c7b" } +reth-node-api = { git = "https://github.com/paradigmxyz/reth", rev = "d6324d63e27ef6b7c49cdc9b1977c1b808234c7b" } +reth-node-ethereum = { git = "https://github.com/paradigmxyz/reth", rev = "d6324d63e27ef6b7c49cdc9b1977c1b808234c7b" } +reth-trie = { git = "https://github.com/paradigmxyz/reth", rev = "d6324d63e27ef6b7c49cdc9b1977c1b808234c7b" } +reth-trie-parallel = { git = "https://github.com/paradigmxyz/reth", rev = "d6324d63e27ef6b7c49cdc9b1977c1b808234c7b" } +reth-node-core = { git = "https://github.com/paradigmxyz/reth", rev = "d6324d63e27ef6b7c49cdc9b1977c1b808234c7b" } +reth-primitives = { git = "https://github.com/paradigmxyz/reth", rev = "d6324d63e27ef6b7c49cdc9b1977c1b808234c7b" } +reth-ethereum-primitives = { git = "https://github.com/paradigmxyz/reth", rev = "d6324d63e27ef6b7c49cdc9b1977c1b808234c7b" } +reth-primitives-traits = { git = "https://github.com/paradigmxyz/reth", rev = "d6324d63e27ef6b7c49cdc9b1977c1b808234c7b" } +reth-provider = { git = "https://github.com/paradigmxyz/reth", rev = "d6324d63e27ef6b7c49cdc9b1977c1b808234c7b", features = [ "test-utils", ] } -reth-chainspec = { git = "https://github.com/paradigmxyz/reth", rev = "27a8c0f5a6dfb27dea84c5751776ecabdd069646" } -reth-evm = { git = "https://github.com/paradigmxyz/reth", rev = "27a8c0f5a6dfb27dea84c5751776ecabdd069646" } -reth-evm-ethereum = { git = "https://github.com/paradigmxyz/reth", rev = "27a8c0f5a6dfb27dea84c5751776ecabdd069646" } -reth-revm = { git = "https://github.com/paradigmxyz/reth", rev = "27a8c0f5a6dfb27dea84c5751776ecabdd069646" } -reth-execution-errors = { git = "https://github.com/paradigmxyz/reth", rev = "27a8c0f5a6dfb27dea84c5751776ecabdd069646" } -reth-trie-db = { git = "https://github.com/paradigmxyz/reth", rev = "27a8c0f5a6dfb27dea84c5751776ecabdd069646" } -reth-transaction-pool = { git = "https://github.com/paradigmxyz/reth", rev = "27a8c0f5a6dfb27dea84c5751776ecabdd069646" } - -# compatible with reth 27a8c0f5a6dfb27dea84c5751776ecabdd069646 dependencies -revm = { version = "31.0.2", features = [ +reth-chainspec = { git = "https://github.com/paradigmxyz/reth", rev = "d6324d63e27ef6b7c49cdc9b1977c1b808234c7b" } +reth-evm = { git = "https://github.com/paradigmxyz/reth", rev = "d6324d63e27ef6b7c49cdc9b1977c1b808234c7b" } +reth-evm-ethereum = { git = "https://github.com/paradigmxyz/reth", rev = "d6324d63e27ef6b7c49cdc9b1977c1b808234c7b" } +reth-revm = { git = "https://github.com/paradigmxyz/reth", rev = "d6324d63e27ef6b7c49cdc9b1977c1b808234c7b" } +reth-execution-errors = { git = "https://github.com/paradigmxyz/reth", rev = "d6324d63e27ef6b7c49cdc9b1977c1b808234c7b" } +reth-trie-db = { git = "https://github.com/paradigmxyz/reth", rev = "d6324d63e27ef6b7c49cdc9b1977c1b808234c7b" } +reth-transaction-pool = { git = "https://github.com/paradigmxyz/reth", rev = "d6324d63e27ef6b7c49cdc9b1977c1b808234c7b" } + +# compatible with reth d6324d63e27ef6b7c49cdc9b1977c1b808234c7b dependencies +revm = { version = "34.0.0", features = [ "std", "secp256k1", "optional_balance_check", ], default-features = false } -revm-inspectors = { version = "0.32.0", default-features = false } +revm-inspectors = { version = "0.34.2", default-features = false } ethereum_ssz_derive = "0.9.0" ethereum_ssz = "0.9.0" -alloy-primitives = { version = "1.4.1", default-features = false, features = [ +alloy-primitives = { version = "1.5.6", default-features = false, features = [ "getrandom", ] } -alloy-rlp = "0.3.10" +alloy-rlp = "0.3.13" alloy-chains = "0.2.5" -alloy-trie = { version = "0.8.1", default-features = false } -alloy-evm = { version = "0.23.3", default-features = false } -alloy-provider = { version = "1.0.41", features = ["ipc", "pubsub", "ws"] } -alloy-eips = { version = "1.0.41" } -alloy-rpc-types = { version = "1.0.41" } -alloy-json-rpc = { version = "1.0.41" } -alloy-network = { version = "1.0.41" } -alloy-network-primitives = { version = "1.0.41" } -alloy-node-bindings = { version = "1.0.41" } -alloy-consensus = { version = "1.0.41", features = ["kzg"] } -alloy-rpc-types-beacon = { version = "1.0.41", features = ["ssz"] } -alloy-rpc-types-engine = { version = "1.0.41", features = ["ssz"] } -alloy-rpc-types-eth = { version = "1.0.41" } -alloy-signer = { version = "1.0.41" } -alloy-signer-local = { version = "1.0.41" } +alloy-trie = { version = "0.9.4", default-features = false } +alloy-evm = { version = "0.27.2", default-features = false } +alloy-provider = { version = "1.6.3", features = ["ipc", "pubsub", "ws"] } +alloy-eips = { version = "1.6.3" } +alloy-rpc-types = { version = "1.6.3" } +alloy-json-rpc = { version = "1.6.3" } +alloy-network = { version = "1.6.3" } +alloy-network-primitives = { version = "1.6.3" } +alloy-node-bindings = { version = "1.6.3" } +alloy-consensus = { version = "1.6.3", features = ["kzg"] } +alloy-rpc-types-beacon = { version = "1.6.3", features = ["ssz"] } +alloy-rpc-types-engine = { version = "1.6.3", features = ["ssz"] } +alloy-rpc-types-eth = { version = "1.6.3" } +alloy-signer = { version = "1.6.3" } +alloy-signer-local = { version = "1.6.3" } # Version required by ethereum-consensus beacon-api-client mev-share-sse = { git = "https://github.com/paradigmxyz/mev-share-rs", rev = "9eb2b0138ab3202b9eb3af4b19c7b3bf40b0faa8", default-features = false } diff --git a/crates/eth-sparse-mpt/Cargo.toml b/crates/eth-sparse-mpt/Cargo.toml index e918ac349..124d380b4 100644 --- a/crates/eth-sparse-mpt/Cargo.toml +++ b/crates/eth-sparse-mpt/Cargo.toml @@ -17,7 +17,7 @@ rustc-hash = "2.0.0" rayon = "1.10.0" smallvec = "1.13.2" alloy-trie.workspace = true -nybbles = { version = "0.3.3", features = ["serde"] } +nybbles = { version = "0.4", features = ["serde"] } tracing.workspace = true @@ -36,6 +36,9 @@ reth-trie-db.workspace = true reth-provider.workspace = true reth-revm = { workspace = true, optional = true } +# Only used by the dev-tools harness binaries to open reth's RocksDB read-only. +rbuilder-utils = { workspace = true, optional = true } + # revm revm.workspace = true @@ -65,6 +68,7 @@ dev-tools = [ "dep:reth-node-ethereum", "dep:reth-trie-parallel", "dep:reth-revm", + "dep:rbuilder-utils", ] [dev-dependencies] diff --git a/crates/eth-sparse-mpt/benches/trie_do_bench.rs b/crates/eth-sparse-mpt/benches/trie_do_bench.rs index 1f760ded1..246bd9c6b 100644 --- a/crates/eth-sparse-mpt/benches/trie_do_bench.rs +++ b/crates/eth-sparse-mpt/benches/trie_do_bench.rs @@ -92,14 +92,14 @@ fn insert_proofs(c: &mut Criterion) { let mut proofs: HashMap> = Default::default(); for key in &byte_keys { let key = Nibbles::unpack(key); - let current_key_proofs = proofs.entry(key.clone()).or_default(); + let current_key_proofs = proofs.entry(key).or_default(); for (path, node) in &nodes { if key.starts_with(path) { - current_key_proofs.push((path.clone(), node.clone().into())); + current_key_proofs.push((*path, node.clone().into())); } } - current_key_proofs.sort_by_key(|(p, _)| p.clone()); - current_key_proofs.dedup_by_key(|(p, _)| p.clone()); + current_key_proofs.sort_by_key(|(p, _)| *p); + current_key_proofs.dedup_by_key(|(p, _)| *p); } for (path, proof) in proofs { proof_store.add_proof(path, proof).unwrap(); diff --git a/crates/eth-sparse-mpt/benches/trie_insert_bench.rs b/crates/eth-sparse-mpt/benches/trie_insert_bench.rs index c0b3212f7..47b1db7ae 100644 --- a/crates/eth-sparse-mpt/benches/trie_insert_bench.rs +++ b/crates/eth-sparse-mpt/benches/trie_insert_bench.rs @@ -120,8 +120,8 @@ fn gather_nodes(c: &mut Criterion) { .into_iter() .flat_map(|mp| mp.account_subtree.into_iter().collect::>()) .collect(); - account_proof.sort_by_key(|(p, _)| p.clone()); - account_proof.dedup_by_key(|(p, _)| p.clone()); + account_proof.sort_by_key(|(p, _)| *p); + account_proof.dedup_by_key(|(p, _)| *p); account_proof }; diff --git a/crates/eth-sparse-mpt/src/bin/cache-warm-compare-v-experimental.rs b/crates/eth-sparse-mpt/src/bin/cache-warm-compare-v-experimental.rs index e138c969a..063b4135a 100644 --- a/crates/eth-sparse-mpt/src/bin/cache-warm-compare-v-experimental.rs +++ b/crates/eth-sparse-mpt/src/bin/cache-warm-compare-v-experimental.rs @@ -479,7 +479,7 @@ fn calc_stats(data: &[Duration]) -> Result { ms.sort_by(|a, b| a.total_cmp(b)); let mean_ms = ms.iter().sum::() / ms.len() as f64; - let median_ms = if ms.len() % 2 == 0 { + let median_ms = if ms.len().is_multiple_of(2) { (ms[ms.len() / 2 - 1] + ms[ms.len() / 2]) / 2.0 } else { ms[ms.len() / 2] diff --git a/crates/eth-sparse-mpt/src/bin/correctness-harness.rs b/crates/eth-sparse-mpt/src/bin/correctness-harness.rs index 203211b76..852d58812 100644 --- a/crates/eth-sparse-mpt/src/bin/correctness-harness.rs +++ b/crates/eth-sparse-mpt/src/bin/correctness-harness.rs @@ -14,12 +14,13 @@ use reth_evm_ethereum::EthEvmConfig; use reth_node_api::NodeTypesWithDBAdapter; use reth_node_ethereum::EthereumNode; use reth_provider::{ - providers::{ConsistentDbView, OverlayStateProviderFactory, StaticFileProvider}, + providers::{ConsistentDbView, OverlayStateProviderFactory, StaticFileProviderBuilder}, BlockHashReader, BlockNumReader, BlockReader, ChainSpecProvider, HeaderProvider, ProviderFactory, TransactionVariant, }; use reth_revm::database::StateProviderDatabase; use reth_trie::TrieInput; +use reth_trie_db::ChangesetCache; use reth_trie_parallel::root::ParallelStateRoot; use revm::database::BundleState; use std::{ @@ -347,17 +348,33 @@ fn calculate_reth_root( parent_hash: B256, outcome: &BundleState, ) -> Result { - let overlay = OverlayStateProviderFactory::new(factory.clone()); + let overlay = OverlayStateProviderFactory::new(factory.clone(), ChangesetCache::new()); let hasher = factory .history_by_block_hash(parent_hash) .with_context(|| format!("failed to open state provider at parent hash {parent_hash:?}"))?; let hashed_post_state = hasher.hashed_post_state(outcome); let trie_input = TrieInput::from_state(hashed_post_state); - ParallelStateRoot::new(overlay, trie_input.prefix_sets.freeze()) + ParallelStateRoot::new(overlay, trie_input.prefix_sets.freeze(), task_runtime()) .incremental_root() .with_context(|| "parallel state root failed") } +/// Process-wide reth task runtime for parallel provider/trie I/O. Built once and cached: the reth +/// `Runtime` owns rayon thread pools, so it must not be rebuilt per call. `Runtime::default` is +/// gated behind reth's `test-utils` feature, so build it explicitly here. The harness `main` is +/// synchronous, so a standalone runtime (no ambient tokio handle) is what we want. +fn task_runtime() -> rbuilder_utils::tasks::Runtime { + use rbuilder_utils::tasks::{Runtime, RuntimeBuilder, RuntimeConfig}; + static RUNTIME: std::sync::OnceLock = std::sync::OnceLock::new(); + RUNTIME + .get_or_init(|| { + RuntimeBuilder::new(RuntimeConfig::default()) + .build() + .expect("failed to build reth task runtime") + }) + .clone() +} + fn run_unwind_once(cli: &Cli, iteration: usize) -> Result<()> { let output = Command::new(&cli.reth_bin) .arg("stage") @@ -390,6 +407,7 @@ fn open_provider_factory( ) -> Result { let db_path = datadir.join("db"); let static_files_path = datadir.join("static_files"); + let rocksdb_path = datadir.join("rocksdb"); let chain_spec = parse_chain_spec(chain)?; let db = Arc::new( @@ -403,24 +421,32 @@ fn open_provider_factory( .with_context(|| format!("failed to open reth db at {}", db_path.display()))?, ); - let static_files = - StaticFileProvider::read_only(&static_files_path, false).with_context(|| { + // Configuring blocks-per-file now goes through `StaticFileProviderBuilder` (the inherent + // `with_custom_blocks_per_file` on `StaticFileProvider` was replaced by the builder's + // `with_blocks_per_file`, which sets the value across all segments). + let static_files = { + let builder = StaticFileProviderBuilder::read_only(&static_files_path); + let builder = if let Some(blocks_per_file) = static_file_blocks_per_file { + builder.with_blocks_per_file(blocks_per_file) + } else { + builder + }; + builder.build().with_context(|| { format!( "failed to open static files at {}", static_files_path.display() ) - })?; - let static_files = if let Some(blocks_per_file) = static_file_blocks_per_file { - static_files.with_custom_blocks_per_file(blocks_per_file) - } else { - static_files + })? }; - Ok(ProviderFactory::::new( + ProviderFactory::::new( db, chain_spec, static_files, - )) + rbuilder_utils::reth_db::open_rocksdb_read_only(&rocksdb_path)?, + Default::default(), + ) + .with_context(|| "failed to create provider factory") } fn parse_chain_spec(chain: &str) -> Result> { diff --git a/crates/eth-sparse-mpt/src/utils.rs b/crates/eth-sparse-mpt/src/utils.rs index 288ff1c96..42a31abfa 100644 --- a/crates/eth-sparse-mpt/src/utils.rs +++ b/crates/eth-sparse-mpt/src/utils.rs @@ -29,25 +29,23 @@ pub fn rlp_pointer(rlp_encode: Bytes) -> Bytes { } pub fn concat_path(p1: &Nibbles, p2: &[u8]) -> Nibbles { - let mut result = Nibbles::with_capacity(p1.len() + p2.len()); - result.extend_from_slice_unchecked(p1); + let mut result = *p1; result.extend_from_slice_unchecked(p2); result } pub fn strip_first_nibble_mut(p: &mut Nibbles) -> u8 { - let nibble = p[0]; - let vec = p.as_mut_vec_unchecked(); - vec.remove(0); + let nibble = p.get_unchecked(0); + *p = p.slice_unchecked(1, p.len()); nibble } #[inline] pub fn extract_prefix_and_suffix(p1: &Nibbles, p2: &Nibbles) -> (Nibbles, Nibbles, Nibbles) { let prefix_len = p1.common_prefix_length(p2); - let prefix = Nibbles::from_nibbles_unchecked(&p1[..prefix_len]); - let suffix1 = Nibbles::from_nibbles_unchecked(&p1[prefix_len..]); - let suffix2 = Nibbles::from_nibbles_unchecked(&p2[prefix_len..]); + let prefix = p1.slice_unchecked(0, prefix_len); + let suffix1 = p1.slice_unchecked(prefix_len, p1.len()); + let suffix2 = p2.slice_unchecked(prefix_len, p2.len()); (prefix, suffix1, suffix2) } @@ -136,16 +134,3 @@ fn mismatch_chunks(xs: &[u8], ys: &[u8]) -> usize { .take_while(|(x, y)| x == y) .count() } - -// rbuilder uses nybbles v3.3.0 and reth_trie uses nybbles v4.3.0. This is a temporary fix to convert between the two. -// We can remove the below methods once rbuilder has been upgraded to nybbles v4.3.0. -// nybbles v4.3.0 has a breaking change (byte array with 1 byte per nybble vs U256 packed data + length) in the API which breaks a lot of parts of the eth sparse trie code. -#[inline] -pub fn convert_reth_nybbles_to_nibbles(n: reth_trie::Nibbles) -> Nibbles { - Nibbles::from_nibbles(n.to_vec()) -} - -#[inline] -pub fn convert_nibbles_to_reth_nybbles(n: Nibbles) -> reth_trie::Nibbles { - reth_trie::Nibbles::from_nibbles(n.as_slice()) -} diff --git a/crates/eth-sparse-mpt/src/v1/reth_sparse_trie/shared_cache.rs b/crates/eth-sparse-mpt/src/v1/reth_sparse_trie/shared_cache.rs index 47447807b..e3815302f 100644 --- a/crates/eth-sparse-mpt/src/v1/reth_sparse_trie/shared_cache.rs +++ b/crates/eth-sparse-mpt/src/v1/reth_sparse_trie/shared_cache.rs @@ -146,11 +146,11 @@ impl RethSparseTrieShareCacheInternal { multiproof: MultiProof, ) -> Result<(), AddNodeError> { let mut nodes: Vec<_> = multiproof.account_subtree.into_iter().collect(); - nodes.sort_by_key(|(p, _)| p.clone()); + nodes.sort_by_key(|(p, _)| *p); self.account_trie.add_nodes(&nodes)?; for (account, storge_proofs) in multiproof.storages { let mut nodes: Vec<_> = storge_proofs.subtree.into_iter().collect(); - nodes.sort_by_key(|(p, _)| p.clone()); + nodes.sort_by_key(|(p, _)| *p); let account = Bytes::copy_from_slice(account.as_slice()); let storage_trie = self.storage_tries.entry(account).or_default(); storage_trie.add_nodes(&nodes)?; diff --git a/crates/eth-sparse-mpt/src/v1/reth_sparse_trie/trie_fetcher/mod.rs b/crates/eth-sparse-mpt/src/v1/reth_sparse_trie/trie_fetcher/mod.rs index 9fd0f6669..5a2910b5d 100644 --- a/crates/eth-sparse-mpt/src/v1/reth_sparse_trie/trie_fetcher/mod.rs +++ b/crates/eth-sparse-mpt/src/v1/reth_sparse_trie/trie_fetcher/mod.rs @@ -1,6 +1,6 @@ use std::time::Instant; -use crate::utils::{convert_reth_nybbles_to_nibbles, hash_map_with_capacity, HashMap, HashSet}; +use crate::utils::{hash_map_with_capacity, HashMap, HashSet}; use alloy_primitives::map::HashSet as AlloyHashSet; use tracing::trace; @@ -105,8 +105,8 @@ where } } -fn pad_path(mut path: Nibbles) -> B256 { - path.as_mut_vec_unchecked().resize(64, 0); +fn pad_path(path: Nibbles) -> B256 { + // `pack_to` writes left-aligned into the zeroed buffer let mut res = B256::default(); path.pack_to(res.as_mut_slice()); res @@ -164,16 +164,16 @@ fn merge_results( let mut result = MultiProof::default(); for mut proof in multiproofs { result.account_subtree.append(&mut proof.account_subtree); - result.account_subtree.sort_by_key(|s| s.0.clone()); - result.account_subtree.dedup_by_key(|s| s.0.clone()); + result.account_subtree.sort_by_key(|s| s.0); + result.account_subtree.dedup_by_key(|s| s.0); for (account, mut storage_proof) in proof.storages { let result_storage_proof = result.storages.entry(account).or_default(); result_storage_proof .subtree .append(&mut storage_proof.subtree); - result_storage_proof.subtree.sort_by_key(|s| s.0.clone()); - result_storage_proof.subtree.dedup_by_key(|s| s.0.clone()); + result_storage_proof.subtree.sort_by_key(|s| s.0); + result_storage_proof.subtree.dedup_by_key(|s| s.0); } } @@ -192,9 +192,9 @@ fn convert_reth_multiproof( ) -> MultiProof { let mut account_subtree = Vec::with_capacity(reth_proof.account_subtree.len()); for (k, v) in reth_proof.account_subtree.into_inner() { - account_subtree.push((convert_reth_nybbles_to_nibbles(k), v)); + account_subtree.push((k, v)); } - account_subtree.sort_by_key(|a| a.0.clone()); + account_subtree.sort_by_key(|a| a.0); let mut storages = hash_map_with_capacity(reth_proof.storages.len()); for (k, reth_storage_proof) in reth_proof.storages { if !all_requested_accounts.contains(&k) { @@ -206,9 +206,9 @@ fn convert_reth_multiproof( let mut subtree = Vec::with_capacity(reth_storage_proof.subtree.len()); for (k, v) in reth_storage_proof.subtree.into_inner() { - subtree.push((convert_reth_nybbles_to_nibbles(k), v)); + subtree.push((k, v)); } - subtree.sort_by_key(|a| a.0.clone()); + subtree.sort_by_key(|a| a.0); let v = StorageMultiProof { subtree }; storages.insert(k, v); } diff --git a/crates/eth-sparse-mpt/src/v1/sparse_mpt/diff_trie/mod.rs b/crates/eth-sparse-mpt/src/v1/sparse_mpt/diff_trie/mod.rs index 81210807a..fe0ceef9d 100644 --- a/crates/eth-sparse-mpt/src/v1/sparse_mpt/diff_trie/mod.rs +++ b/crates/eth-sparse-mpt/src/v1/sparse_mpt/diff_trie/mod.rs @@ -65,7 +65,7 @@ pub struct NodeCursor { impl NodeCursor { pub fn new(key: Nibbles, head: u64) -> Self { - let current_path = Nibbles::with_capacity(key.len()); + let current_path = Nibbles::new(); Self { current_node: head, current_path, @@ -76,8 +76,8 @@ impl NodeCursor { pub fn step_into_extension(&mut self, ext: &DiffExtensionNode) { let len = ext.key().len(); self.current_path - .extend_from_slice_unchecked(&self.path_left[..len]); - self.path_left.as_mut_vec_unchecked().drain(..len); + .extend(&self.path_left.slice_unchecked(0, len)); + self.path_left = self.path_left.slice_unchecked(len, self.path_left.len()); self.current_node = ext.child.ptr(); } @@ -101,10 +101,9 @@ fn try_get_node_mut<'a>( ptr: u64, path: &Nibbles, ) -> Result<&'a mut DiffTrieNode, ErrSparseNodeNotFound> { - nodes.get_mut(&ptr).ok_or_else(|| ErrSparseNodeNotFound { - path: path.clone(), - ptr, - }) + nodes + .get_mut(&ptr) + .ok_or(ErrSparseNodeNotFound { path: *path, ptr }) } pub fn get_new_ptr(ptrs: &mut u64) -> u64 { @@ -238,13 +237,10 @@ impl DiffTrie { let n = c.step_into_branch(branch); if branch.has_child(n) { - let child = - branch - .get_diff_child_mut(n) - .ok_or_else(|| ErrSparseNodeNotFound { - path: c.current_path.clone(), - ptr: u64::MAX, - })?; + let child = branch.get_diff_child_mut(n).ok_or(ErrSparseNodeNotFound { + path: c.current_path, + ptr: u64::MAX, + })?; child.mark_dirty(); continue; } else { @@ -313,9 +309,9 @@ impl DiffTrie { return Err(DeletionError::KeyNotFound); } - let child = branch.get_diff_child_mut(n).ok_or_else(|| { + let child = branch.get_diff_child_mut(n).ok_or({ DeletionError::NodeNotFound(ErrSparseNodeNotFound { - path: c.current_path.clone(), + path: c.current_path, ptr: u64::MAX, }) })?; @@ -332,9 +328,10 @@ impl DiffTrie { .other_child_nibble(n) .expect("other child must exist"); if branch.get_diff_child(other_child_nibble).is_none() { - let mut other_child_path = c.current_path.clone(); - if let Some(l) = other_child_path.as_mut_vec_unchecked().last_mut() { - *l = other_child_nibble; + let mut other_child_path = c.current_path; + if !other_child_path.is_empty() { + let last_idx = other_child_path.len() - 1; + other_child_path.set_at(last_idx, other_child_nibble); } return Err(DeletionError::NodeNotFound(ErrSparseNodeNotFound { path: other_child_path, @@ -428,9 +425,9 @@ impl DiffTrie { DiffTrieNodeKind::Leaf(leaf_below), ) => { // we just replace extension node by merging its path into leaf with child_nibble - let mut new_leaf_key = ext_above.key().clone(); + let mut new_leaf_key = *ext_above.key(); new_leaf_key.push(*child_nibble); - new_leaf_key.extend_from_slice_unchecked(leaf_below.key()); + new_leaf_key.extend(leaf_below.key()); let mut new_leaf = leaf_below; new_leaf.changed_key = Some(new_leaf_key); @@ -443,7 +440,7 @@ impl DiffTrie { // we merge two extension nodes into current node with child_nibble let ext_key = ext_above.key_mut(); ext_key.push(*child_nibble); - ext_key.extend_from_slice_unchecked(ext_below.key()); + ext_key.extend(ext_below.key()); ext_above.child = ext_below.child.clone(); } @@ -469,10 +466,9 @@ impl DiffTrie { DiffTrieNodeKind::Leaf(mut leaf_below), ) => { // merge missing nibble into the leaf - leaf_below - .key_mut() - .as_mut_vec_unchecked() - .insert(0, *child_nibble); + let leaf_key = leaf_below.key_mut(); + *leaf_key = + Nibbles::from_nibbles_unchecked([*child_nibble]).join(leaf_key); let new_leaf_ptr = get_new_ptr(&mut self.ptrs); let new_child = DiffTrieNode { @@ -491,10 +487,9 @@ impl DiffTrie { DiffTrieNodeKind::Extension(mut ext_below), ) => { // merge missing nibble into the extension - ext_below - .key_mut() - .as_mut_vec_unchecked() - .insert(0, *child_nibble); + let ext_key = ext_below.key_mut(); + *ext_key = + Nibbles::from_nibbles_unchecked([*child_nibble]).join(ext_key); let new_child_ptr = get_new_ptr(&mut self.ptrs); let new_child = DiffTrieNode { kind: DiffTrieNodeKind::Extension(ext_below), @@ -563,13 +558,13 @@ impl DiffTrie { .expect("orphaned child existence verif"); match &mut child_below.kind { DiffTrieNodeKind::Leaf(leaf) => { - leaf.key_mut() - .as_mut_vec_unchecked() - .insert(0, child_nibble); + let leaf_key = leaf.key_mut(); + *leaf_key = Nibbles::from_nibbles_unchecked([child_nibble]).join(leaf_key); child_below.rlp_pointer = None; } DiffTrieNodeKind::Extension(ext) => { - ext.key_mut().as_mut_vec_unchecked().insert(0, child_nibble); + let ext_key = ext.key_mut(); + *ext_key = Nibbles::from_nibbles_unchecked([child_nibble]).join(ext_key); child_below.rlp_pointer = None; } DiffTrieNodeKind::Branch(_) => { diff --git a/crates/eth-sparse-mpt/src/v1/sparse_mpt/diff_trie/nodes.rs b/crates/eth-sparse-mpt/src/v1/sparse_mpt/diff_trie/nodes.rs index 164aaebb5..620ffcd58 100644 --- a/crates/eth-sparse-mpt/src/v1/sparse_mpt/diff_trie/nodes.rs +++ b/crates/eth-sparse-mpt/src/v1/sparse_mpt/diff_trie/nodes.rs @@ -174,7 +174,7 @@ impl DiffLeafNode { let fixed_key = self .fixed .as_ref() - .map(|k| k.key.clone()) + .map(|k| k.key) .expect("leaf incorrect form"); self.changed_key = Some(fixed_key); } @@ -331,7 +331,7 @@ impl DiffExtensionNode { let fixed_key = self .fixed .as_ref() - .map(|k| k.key.clone()) + .map(|k| k.key) .expect("ext incorrect form"); self.changed_key = Some(fixed_key); } diff --git a/crates/eth-sparse-mpt/src/v1/sparse_mpt/fixed_trie.rs b/crates/eth-sparse-mpt/src/v1/sparse_mpt/fixed_trie.rs index 2934337f0..935ead06b 100644 --- a/crates/eth-sparse-mpt/src/v1/sparse_mpt/fixed_trie.rs +++ b/crates/eth-sparse-mpt/src/v1/sparse_mpt/fixed_trie.rs @@ -167,12 +167,12 @@ impl FixedTrie { for (ptr, node) in &diff_trie.nodes { let fixed_node = match &node.kind { DiffTrieNodeKind::Leaf(leaf) => FixedTrieNode::Leaf(Arc::new(FixedLeafNode { - key: leaf.key().clone(), + key: *leaf.key(), value: leaf.value().clone(), })), DiffTrieNodeKind::Extension(ext) => FixedTrieNode::Extension { node: Arc::new(FixedExtensionNode { - key: ext.key().clone(), + key: *ext.key(), child: ext .child .rlp_pointer @@ -261,7 +261,7 @@ impl FixedTrie { // here we find parent to link with this new node let mut current_path = Nibbles::new(); - let mut path_left = path.clone(); + let mut path_left = *path; let mut current_node = self.head; let mut parent: Option = None; @@ -286,8 +286,8 @@ impl FixedTrie { parent_child_idx = None; let len = node.key.len(); - current_path.extend_from_slice_unchecked(&path_left[..len]); - path_left.as_mut_vec_unchecked().drain(..len); + current_path.extend(&path_left.slice_unchecked(0, len)); + path_left = path_left.slice_unchecked(len, path_left.len()); if path_left.is_empty() { break; @@ -455,11 +455,9 @@ impl FixedTrie { // orphan node is missing // we stepped into child above so the path is the path of current child and orphan child differs // only in last nibble - let mut path = c.current_path.clone(); - path.as_mut_vec_unchecked() - .last_mut() - .map(|n| *n = orphan_nibble) - .unwrap(); + let mut path = c.current_path; + let last_idx = path.len() - 1; + path.set_at(last_idx, orphan_nibble); missing_nodes.push(path); } } @@ -498,8 +496,8 @@ mod tests { .into_iter() .flat_map(|mp| mp.account_subtree.into_iter().collect::>()) .collect(); - account_proof.sort_by_key(|(p, _)| p.clone()); - account_proof.dedup_by_key(|(p, _)| p.clone()); + account_proof.sort_by_key(|(p, _)| *p); + account_proof.dedup_by_key(|(p, _)| *p); account_proof }; diff --git a/crates/eth-sparse-mpt/src/v2/fetch.rs b/crates/eth-sparse-mpt/src/v2/fetch.rs index 9a004537c..b8540e069 100644 --- a/crates/eth-sparse-mpt/src/v2/fetch.rs +++ b/crates/eth-sparse-mpt/src/v2/fetch.rs @@ -1,9 +1,6 @@ use std::sync::Arc; -use crate::{ - utils::{convert_nibbles_to_reth_nybbles, convert_reth_nybbles_to_nibbles, HashMap}, - SparseTrieError, -}; +use crate::{utils::HashMap, SparseTrieError}; use alloy_primitives::map::B256Set; use parking_lot::Mutex; use rayon::prelude::*; @@ -52,12 +49,12 @@ impl MissingNodesFetcher { .storage_proof_targets .entry(*hashed_address) .or_default(); - entry.0.insert(pad_path(node.clone())); + entry.0.insert(pad_path(node)); entry.1.push(node); } pub fn add_missing_account_node(&mut self, node: Nibbles) { - self.account_proof_targets.push(pad_path(node.clone())); + self.account_proof_targets.push(pad_path(node)); self.account_proof_requested_nodes.push(node); } @@ -94,17 +91,13 @@ impl MissingNodesFetcher { .map_err(SparseTrieError::other)?; *fetched_nodes.lock() += requested_proofs.len(); for requested_proof in requested_proofs { - let proof_for_node = storge_multiproof.subtree.matching_nodes_sorted( - &convert_nibbles_to_reth_nybbles(requested_proof.clone()), - ); - let reth_proof_for_node = proof_for_node - .into_iter() - .map(|(k, v)| (convert_reth_nybbles_to_nibbles(k), v)) - .collect(); + let proof_for_node = storge_multiproof + .subtree + .matching_nodes_sorted(&requested_proof); let proof_store = shared_cache.account_proof_store_hashed_address(&hashed_address); proof_store - .add_proof(requested_proof, reth_proof_for_node) + .add_proof(requested_proof, proof_for_node) .map_err(SparseTrieError::other)?; } Ok(()) @@ -130,15 +123,11 @@ impl MissingNodesFetcher { for requested_node in self.account_proof_requested_nodes.drain(..) { let proof_for_node = multiproof .account_subtree - .matching_nodes_sorted(&convert_nibbles_to_reth_nybbles(requested_node.clone())); + .matching_nodes_sorted(&requested_node); - let reth_proof_for_node = proof_for_node - .into_iter() - .map(|(k, v)| (convert_reth_nybbles_to_nibbles(k), v)) - .collect(); shared_cache .account_trie - .add_proof(requested_node, reth_proof_for_node) + .add_proof(requested_node, proof_for_node) .map_err(SparseTrieError::other)?; } let fetched_nodes = *fetched_nodes.lock(); @@ -146,8 +135,9 @@ impl MissingNodesFetcher { } } -fn pad_path(mut path: Nibbles) -> B256 { - path.as_mut_vec_unchecked().resize(64, 0); +fn pad_path(path: Nibbles) -> B256 { + // `pack_to` fills the first `byte_len` bytes; the remaining bytes stay zero, + // which is equivalent to padding the path with zero nibbles up to 64. let mut res = B256::default(); path.pack_to(res.as_mut_slice()); res diff --git a/crates/eth-sparse-mpt/src/v2/mod.rs b/crates/eth-sparse-mpt/src/v2/mod.rs index fdc996a8b..306a4c17c 100644 --- a/crates/eth-sparse-mpt/src/v2/mod.rs +++ b/crates/eth-sparse-mpt/src/v2/mod.rs @@ -446,7 +446,7 @@ impl RootHashCalculator { { fetcher .lock() - .add_missing_account_node(storage_calc.unpacked_hashed_address.clone()); + .add_missing_account_node(storage_calc.unpacked_hashed_address); } if storage_calc.insert_keys.is_empty() && storage_calc.delete_keys.is_empty() { @@ -466,7 +466,7 @@ impl RootHashCalculator { if !storage_calc.proof_store.has_proof(node) { fetcher .lock() - .add_missing_storage_node(&storage_calc.hashed_address, node.clone()); + .add_missing_storage_node(&storage_calc.hashed_address, *node); } } }); @@ -549,7 +549,7 @@ impl RootHashCalculator { storage_calc.insert_storage_key[i], AppliedStorageOp { inserted_value: storage_calc.insert_storage_value[i], - revert_key: storage_calc.insert_keys[i].clone(), + revert_key: storage_calc.insert_keys[i], revert_value, }, ); @@ -574,7 +574,7 @@ impl RootHashCalculator { storage_calc.delete_storage_key[i], AppliedStorageOp { inserted_value: U256::ZERO, - revert_key: storage_calc.delete_keys[i].clone(), + revert_key: storage_calc.delete_keys[i], revert_value: Some(revert_value), }, ); @@ -639,7 +639,7 @@ impl RootHashCalculator { let ok = storage_calc.trie.try_add_proof_from_proof_store(&missing_node, &storage_calc.proof_store).expect("should be able to insert proofs from proof store when they are found (storage trie)"); assert!(ok, "proof is not added (storage trie)"); } else { - storage_calc.missing_nodes_requested.push(missing_node.clone()); + storage_calc.missing_nodes_requested.push(missing_node); fetcher.lock().add_missing_storage_node(&storage_calc.hashed_address, missing_node); } } @@ -733,7 +733,7 @@ impl RootHashCalculator { } } - let key = storage_calc.unpacked_hashed_address.clone(); + let key = storage_calc.unpacked_hashed_address; if let Some(trie_account) = trie_account { let value = alloy_rlp::encode(trie_account); self.account_trie.insert_keys.push(key); @@ -768,7 +768,7 @@ impl RootHashCalculator { for address in proof_targets { let storage_calc = self.get_account_storage(address); let storage_calc = storage_calc.lock(); - let key = storage_calc.unpacked_hashed_address.clone(); + let key = storage_calc.unpacked_hashed_address; self.account_trie.proof_keys.push(key); self.account_trie.proof_account_keys.push(*address); self.account_trie.proof_ok.push(false); @@ -834,7 +834,7 @@ impl RootHashCalculator { account_trie.insert_account_keys[i], AppliedAccountOp { inserted_value: Some(account_trie.insert_account_values[i]), - revert_key: account_trie.insert_keys[i].clone(), + revert_key: account_trie.insert_keys[i], revert_value, }, ); @@ -859,7 +859,7 @@ impl RootHashCalculator { account_trie.delete_account_keys[i], AppliedAccountOp { inserted_value: None, - revert_key: account_trie.delete_keys[i].clone(), + revert_key: account_trie.delete_keys[i], revert_value: Some(revert_value), }, ); @@ -921,9 +921,7 @@ impl RootHashCalculator { let ok = account_trie.trie.try_add_proof_from_proof_store(&missing_node, proof_store).expect("should be able to insert proofs from proof store when they are found (storage trie)"); assert!(ok, "proof is not added (storage trie)"); } else { - account_trie - .missing_nodes_requested - .push(missing_node.clone()); + account_trie.missing_nodes_requested.push(missing_node); fetcher.add_missing_account_node(missing_node); } } diff --git a/crates/eth-sparse-mpt/src/v2/trie/mod.rs b/crates/eth-sparse-mpt/src/v2/trie/mod.rs index 241202fab..28ea3f6e4 100644 --- a/crates/eth-sparse-mpt/src/v2/trie/mod.rs +++ b/crates/eth-sparse-mpt/src/v2/trie/mod.rs @@ -14,6 +14,16 @@ mod tests; use crate::utils::{encode_branch_node, encode_extension, encode_leaf, mismatch}; +/// Unpacks `nibbles` into `buf` (one nibble per byte) and returns the filled prefix as a slice. +#[inline] +fn unpack_nibbles<'a>(nibbles: &Nibbles, buf: &'a mut [u8; 64]) -> &'a [u8] { + let len = nibbles.len(); + for (i, nibble) in nibbles.iter().enumerate() { + buf[i] = nibble; + } + &buf[..len] +} + #[derive(Debug, Clone, Copy)] enum NodePtr { Local(usize), @@ -153,6 +163,12 @@ impl Trie { offset..offset + key.len() } + fn insert_key_nibbles(&mut self, key: &Nibbles) -> Range { + let offset = self.keys.len(); + self.keys.extend(key.iter()); + offset..offset + key.len() + } + fn create_branch_children(&mut self) -> usize { let idx = self.branch_node_children.len(); self.branch_node_children.push(Default::default()); @@ -199,7 +215,8 @@ impl Trie { nibbles_key: &Nibbles, insert_value: InsertValue<'_>, ) -> Result>, NodeNotFound> { - let ins_key = nibbles_key.as_slice(); + let mut ins_key_buf = [0u8; 64]; + let ins_key = unpack_nibbles(nibbles_key, &mut ins_key_buf); let mut current_node = 0; let mut path_walked = 0; @@ -210,7 +227,7 @@ impl Trie { let node = self .nodes .get(current_node) - .ok_or_else(|| NodeNotFound(nibbles_key.clone()))?; + .ok_or(NodeNotFound(*nibbles_key))?; self.hashed_nodes[current_node] = false; match node { DiffTrieNode::Branch { children } => { @@ -219,9 +236,7 @@ impl Trie { let n = ins_key[path_walked] as usize; path_walked += 1; if let Some(child_ptr) = self.branch_node_children[children][n] { - current_node = child_ptr - .as_local() - .ok_or_else(|| NodeNotFound(nibbles_key.clone()))?; + current_node = child_ptr.as_local().ok_or(NodeNotFound(*nibbles_key))?; continue; } else { let new_leaf_key = self.insert_key(&ins_key[path_walked..]); @@ -239,9 +254,7 @@ impl Trie { if ins_key[path_walked..].starts_with(&self.keys[key.clone()]) { path_walked += key.len(); - current_node = next_node - .as_local() - .ok_or_else(|| NodeNotFound(nibbles_key.clone()))?; + current_node = next_node.as_local().ok_or(NodeNotFound(*nibbles_key))?; continue; } @@ -377,7 +390,8 @@ impl Trie { &mut self, nibbles_key: &Nibbles, ) -> Result, DeletionError> { - let del_key = nibbles_key.as_slice(); + let mut del_key_buf = [0u8; 64]; + let del_key = unpack_nibbles(nibbles_key, &mut del_key_buf); let mut current_node = 0; let mut path_walked = 0; @@ -390,7 +404,7 @@ impl Trie { let node = self .nodes .get(current_node) - .ok_or_else(|| NodeNotFound(nibbles_key.clone()))?; + .ok_or(NodeNotFound(*nibbles_key))?; self.hashed_nodes[current_node] = false; match node { DiffTrieNode::Branch { children } => { @@ -406,9 +420,7 @@ impl Trie { path_walked += 1; if let Some(child_ptr) = self.branch_node_children[children][n as usize] { - current_node = child_ptr - .as_local() - .ok_or_else(|| NodeNotFound(nibbles_key.clone()))?; + current_node = child_ptr.as_local().ok_or(NodeNotFound(*nibbles_key))?; if self.branch_node_children[children] .iter() .filter(|c| c.is_some()) @@ -423,7 +435,7 @@ impl Trie { .unwrap(); let orphan_ptr = orphan_ptr.unwrap(); if orphan_ptr.is_remote() { - let mut orphan_path = Nibbles::with_capacity(path_walked); + let mut orphan_path = Nibbles::new(); orphan_path .extend_from_slice_unchecked(&del_key[..(path_walked - 1)]); orphan_path.push_unchecked(orphan_nibble as u8); @@ -442,9 +454,7 @@ impl Trie { if del_key[path_walked..].starts_with(&self.keys[key.clone()]) { self.walk_path.push((current_node, 0)); path_walked += key.len(); - current_node = next_node - .as_local() - .ok_or_else(|| NodeNotFound(nibbles_key.clone()))?; + current_node = next_node.as_local().ok_or(NodeNotFound(*nibbles_key))?; continue; } @@ -881,19 +891,21 @@ impl Trie { let mut current_node = 0; let mut path_walked = 0; + let mut target_key_buf = [0u8; 64]; + let target_path = unpack_nibbles(target_key, &mut target_key_buf); + loop { let node = self .nodes .get(current_node) - .ok_or_else(|| NodeNotFound(target_key.clone()))?; + .ok_or(NodeNotFound(*target_key))?; if !self.hashed_nodes[current_node] { return Err(ProofError::TrieIsDirty); } self.rlp_encode_node(current_node, &mut buf, proof_store); - let current_node_path = - Nibbles::from_nibbles_unchecked(&target_key.as_slice()[..path_walked]); + let current_node_path = target_key.slice_unchecked(0, path_walked); result.proof.push((current_node_path, buf.clone())); match node { @@ -904,13 +916,11 @@ impl Trie { let children = *children; - let n = target_key[path_walked]; + let n = target_path[path_walked]; path_walked += 1; if let Some(child_ptr) = self.branch_node_children[children][n as usize] { - current_node = child_ptr - .as_local() - .ok_or_else(|| NodeNotFound(target_key.clone()))?; + current_node = child_ptr.as_local().ok_or(NodeNotFound(*target_key))?; continue; } @@ -920,18 +930,16 @@ impl Trie { let key = key.clone(); let next_node = *next_node; - if target_key[path_walked..].starts_with(&self.keys[key.clone()]) { + if target_path[path_walked..].starts_with(&self.keys[key.clone()]) { path_walked += key.len(); - current_node = next_node - .as_local() - .ok_or_else(|| NodeNotFound(target_key.clone()))?; + current_node = next_node.as_local().ok_or(NodeNotFound(*target_key))?; continue; } break; } DiffTrieNode::Leaf { key, value } => { - if self.keys[key.clone()] == target_key[path_walked..] { + if self.keys[key.clone()] == target_path[path_walked..] { result.value = Some(self.values[value.clone()].to_vec()); } break; @@ -1044,13 +1052,13 @@ impl Trie { } ProofNode::Extension { key, child } => { let key = &proof_store.keys_guard()[*key]; - let key = self.insert_key(key); + let key = self.insert_key_nibbles(key); let next_node = NodePtr::Remote(*child); self.push_node(DiffTrieNode::Extension { key, next_node }); } ProofNode::Leaf { key, value } => { let key = &proof_store.keys_guard()[*key]; - let key = self.insert_key(key); + let key = self.insert_key_nibbles(key); let value = &proof_store.values_guard()[*value]; let value = self.copy_value(value); self.push_node(DiffTrieNode::Leaf { key, value }); @@ -1062,6 +1070,9 @@ impl Trie { return Ok(()); } + let mut path_buf = [0u8; 64]; + let path = unpack_nibbles(path, &mut path_buf); + let mut current_node = 0; let mut path_walked = 0; @@ -1131,14 +1142,14 @@ impl Trie { let new_node = match node { ProofNode::Leaf { key, value } => { let key = &proof_store.keys_guard()[*key]; - let key = self.insert_key(key); + let key = self.insert_key_nibbles(key); let value = &proof_store.values_guard()[*value]; let value = self.copy_value(value); self.push_node(DiffTrieNode::Leaf { key, value }) } ProofNode::Extension { key, child } => { let key = &proof_store.keys_guard()[*key]; - let key = self.insert_key(key); + let key = self.insert_key_nibbles(key); let next_node = NodePtr::Remote(*child); self.push_node(DiffTrieNode::Extension { key, next_node }) } diff --git a/crates/eth-sparse-mpt/src/v2/trie/tests.rs b/crates/eth-sparse-mpt/src/v2/trie/tests.rs index ca50155c7..4bb2afd02 100644 --- a/crates/eth-sparse-mpt/src/v2/trie/tests.rs +++ b/crates/eth-sparse-mpt/src/v2/trie/tests.rs @@ -103,7 +103,7 @@ fn verify_proof(key: &[u8], proof: Vec<(Nibbles, Vec)>) -> B256 { let nibble_key = Nibbles::unpack(key); let proof_store = ProofStore::default(); proof_store - .add_proof(nibble_key.clone(), proof) + .add_proof(nibble_key, proof) .expect("failed to add proof to proof store"); let mut trie = Trie::default(); let found = trie @@ -417,6 +417,21 @@ fn compare_insert_key_reinsert( // key, value, new value (or delete) input: &[(Vec, Vec, Option>)], ) { + // Random input may repeat the same key; collapse to the last (value, new_value) per key so + // the helper models last-write-wins. Otherwise a key appearing as insert-then-delete would + // double-delete (an error) and make the reference trie inconsistent with the updated trie. + let deduped: Vec<(Vec, Vec, Option>)> = { + let mut by_key: HashMap, (Vec, Option>)> = HashMap::default(); + for (key, value, new_value) in input { + by_key.insert(key.clone(), (value.clone(), new_value.clone())); + } + by_key + .into_iter() + .map(|(key, (value, new_value))| (key, value, new_value)) + .collect() + }; + let input = deduped.as_slice(); + let proof_store = ProofStore::default(); let mut trie = Trie::new_empty(); diff --git a/crates/eth-sparse-mpt/src/v_experimental/fetch.rs b/crates/eth-sparse-mpt/src/v_experimental/fetch.rs index 43f27fcaf..d822b5810 100644 --- a/crates/eth-sparse-mpt/src/v_experimental/fetch.rs +++ b/crates/eth-sparse-mpt/src/v_experimental/fetch.rs @@ -1,9 +1,6 @@ use std::sync::Arc; -use crate::{ - utils::{convert_nibbles_to_reth_nybbles, convert_reth_nybbles_to_nibbles, HashMap}, - SparseTrieError, -}; +use crate::{utils::HashMap, SparseTrieError}; use alloy_primitives::map::B256Set; use parking_lot::Mutex; use rayon::prelude::*; @@ -39,12 +36,12 @@ impl MissingNodesFetcher { .storage_proof_targets .entry(*hashed_address) .or_default(); - entry.0.insert(pad_path(node.clone())); + entry.0.insert(pad_path(node)); entry.1.push(node); } pub fn add_missing_account_node(&mut self, node: Nibbles) { - self.account_proof_targets.push(pad_path(node.clone())); + self.account_proof_targets.push(pad_path(node)); self.account_proof_requested_nodes.push(node); } @@ -89,17 +86,13 @@ impl MissingNodesFetcher { .map_err(SparseTrieError::other)?; *fetched_nodes.lock() += requested_proofs.len(); for requested_proof in requested_proofs { - let proof_for_node = storge_multiproof.subtree.matching_nodes_sorted( - &convert_nibbles_to_reth_nybbles(requested_proof.clone()), - ); - let reth_proof_for_node = proof_for_node - .into_iter() - .map(|(k, v)| (convert_reth_nybbles_to_nibbles(k), v)) - .collect(); + let proof_for_node = storge_multiproof + .subtree + .matching_nodes_sorted(&requested_proof); let proof_store = shared_cache.account_proof_store_hashed_address(&hashed_address); proof_store - .add_proof(requested_proof, reth_proof_for_node) + .add_proof(requested_proof, proof_for_node) .map_err(SparseTrieError::other)?; } Ok(()) @@ -133,15 +126,11 @@ impl MissingNodesFetcher { for requested_node in self.account_proof_requested_nodes.drain(..) { let proof_for_node = multiproof .account_subtree - .matching_nodes_sorted(&convert_nibbles_to_reth_nybbles(requested_node.clone())); + .matching_nodes_sorted(&requested_node); - let reth_proof_for_node = proof_for_node - .into_iter() - .map(|(k, v)| (convert_reth_nybbles_to_nibbles(k), v)) - .collect(); shared_cache .account_trie - .add_proof(requested_node, reth_proof_for_node) + .add_proof(requested_node, proof_for_node) .map_err(SparseTrieError::other)?; } let fetched_nodes = *fetched_nodes.lock(); @@ -149,8 +138,9 @@ impl MissingNodesFetcher { } } -fn pad_path(mut path: Nibbles) -> B256 { - path.as_mut_vec_unchecked().resize(64, 0); +fn pad_path(path: Nibbles) -> B256 { + // `pack_to` writes left-aligned into the zeroed buffer, leaving trailing + // bytes zero, so explicit right-padding to 64 nibbles is unnecessary. let mut res = B256::default(); path.pack_to(res.as_mut_slice()); res diff --git a/crates/eth-sparse-mpt/src/v_experimental/mod.rs b/crates/eth-sparse-mpt/src/v_experimental/mod.rs index 612c0233f..ec310a482 100644 --- a/crates/eth-sparse-mpt/src/v_experimental/mod.rs +++ b/crates/eth-sparse-mpt/src/v_experimental/mod.rs @@ -449,7 +449,7 @@ impl RootHashCalculator { { fetcher .lock() - .add_missing_account_node(storage_calc.unpacked_hashed_address.clone()); + .add_missing_account_node(storage_calc.unpacked_hashed_address); } if storage_calc.insert_keys.is_empty() && storage_calc.delete_keys.is_empty() { @@ -469,7 +469,7 @@ impl RootHashCalculator { if !storage_calc.proof_store.has_proof(node) { fetcher .lock() - .add_missing_storage_node(&storage_calc.hashed_address, node.clone()); + .add_missing_storage_node(&storage_calc.hashed_address, *node); } } }); @@ -552,7 +552,7 @@ impl RootHashCalculator { storage_calc.insert_storage_key[i], AppliedStorageOp { inserted_value: storage_calc.insert_storage_value[i], - revert_key: storage_calc.insert_keys[i].clone(), + revert_key: storage_calc.insert_keys[i], revert_value, }, ); @@ -577,7 +577,7 @@ impl RootHashCalculator { storage_calc.delete_storage_key[i], AppliedStorageOp { inserted_value: U256::ZERO, - revert_key: storage_calc.delete_keys[i].clone(), + revert_key: storage_calc.delete_keys[i], revert_value: Some(revert_value), }, ); @@ -642,7 +642,7 @@ impl RootHashCalculator { let ok = storage_calc.trie.try_add_proof_from_proof_store(&missing_node, &storage_calc.proof_store).expect("should be able to insert proofs from proof store when they are found (storage trie)"); assert!(ok, "proof is not added (storage trie)"); } else { - storage_calc.missing_nodes_requested.push(missing_node.clone()); + storage_calc.missing_nodes_requested.push(missing_node); fetcher.lock().add_missing_storage_node(&storage_calc.hashed_address, missing_node); } } @@ -736,7 +736,7 @@ impl RootHashCalculator { } } - let key = storage_calc.unpacked_hashed_address.clone(); + let key = storage_calc.unpacked_hashed_address; if let Some(trie_account) = trie_account { let value = alloy_rlp::encode(trie_account); self.account_trie.insert_keys.push(key); @@ -771,7 +771,7 @@ impl RootHashCalculator { for address in proof_targets { let storage_calc = self.get_account_storage(address); let storage_calc = storage_calc.lock(); - let key = storage_calc.unpacked_hashed_address.clone(); + let key = storage_calc.unpacked_hashed_address; self.account_trie.proof_keys.push(key); self.account_trie.proof_account_keys.push(*address); self.account_trie.proof_ok.push(false); @@ -837,7 +837,7 @@ impl RootHashCalculator { account_trie.insert_account_keys[i], AppliedAccountOp { inserted_value: Some(account_trie.insert_account_values[i]), - revert_key: account_trie.insert_keys[i].clone(), + revert_key: account_trie.insert_keys[i], revert_value, }, ); @@ -862,7 +862,7 @@ impl RootHashCalculator { account_trie.delete_account_keys[i], AppliedAccountOp { inserted_value: None, - revert_key: account_trie.delete_keys[i].clone(), + revert_key: account_trie.delete_keys[i], revert_value: Some(revert_value), }, ); @@ -924,9 +924,7 @@ impl RootHashCalculator { let ok = account_trie.trie.try_add_proof_from_proof_store(&missing_node, proof_store).expect("should be able to insert proofs from proof store when they are found (storage trie)"); assert!(ok, "proof is not added (storage trie)"); } else { - account_trie - .missing_nodes_requested - .push(missing_node.clone()); + account_trie.missing_nodes_requested.push(missing_node); fetcher.add_missing_account_node(missing_node); } } diff --git a/crates/eth-sparse-mpt/src/v_experimental/trie/mod.rs b/crates/eth-sparse-mpt/src/v_experimental/trie/mod.rs index 0a25fcd18..aadee785f 100644 --- a/crates/eth-sparse-mpt/src/v_experimental/trie/mod.rs +++ b/crates/eth-sparse-mpt/src/v_experimental/trie/mod.rs @@ -14,6 +14,16 @@ mod tests; use crate::utils::{encode_branch_node, encode_extension, encode_leaf, mismatch}; +/// Copies nibbles (one nibble per byte) into the provided stack buffer +/// and returns the filled prefix as a slice. +#[inline] +fn nibbles_to_buf<'a>(nibbles: &Nibbles, buf: &'a mut [u8; 64]) -> &'a [u8] { + for (i, nibble) in nibbles.iter().enumerate() { + buf[i] = nibble; + } + &buf[..nibbles.len()] +} + #[derive(Debug, Clone, Copy)] enum NodePtr { Local(usize), @@ -173,6 +183,12 @@ impl Trie { offset..offset + key.len() } + fn insert_key_nibbles(&mut self, key: &Nibbles) -> Range { + let offset = self.keys.len(); + self.keys.extend(key.iter()); + offset..offset + key.len() + } + fn create_branch_children(&mut self) -> usize { let idx = self.branch_node_children.len(); self.branch_node_children.push(Default::default()); @@ -219,7 +235,8 @@ impl Trie { nibbles_key: &Nibbles, insert_value: InsertValue<'_>, ) -> Result>, NodeNotFound> { - let ins_key = nibbles_key.as_slice(); + let mut ins_key_buf = [0u8; 64]; + let ins_key = nibbles_to_buf(nibbles_key, &mut ins_key_buf); let mut current_node = 0; let mut path_walked = 0; @@ -230,7 +247,7 @@ impl Trie { let node = self .nodes .get(current_node) - .ok_or_else(|| NodeNotFound(nibbles_key.clone()))?; + .ok_or(NodeNotFound(*nibbles_key))?; self.hashed_nodes[current_node] = false; match node { DiffTrieNode::Branch { children } => { @@ -239,9 +256,7 @@ impl Trie { let n = ins_key[path_walked] as usize; path_walked += 1; if let Some(child_ptr) = self.branch_node_children[children][n] { - current_node = child_ptr - .as_local() - .ok_or_else(|| NodeNotFound(nibbles_key.clone()))?; + current_node = child_ptr.as_local().ok_or(NodeNotFound(*nibbles_key))?; continue; } else { let new_leaf_key = self.insert_key(&ins_key[path_walked..]); @@ -259,9 +274,7 @@ impl Trie { if ins_key[path_walked..].starts_with(&self.keys[key.clone()]) { path_walked += key.len(); - current_node = next_node - .as_local() - .ok_or_else(|| NodeNotFound(nibbles_key.clone()))?; + current_node = next_node.as_local().ok_or(NodeNotFound(*nibbles_key))?; continue; } @@ -397,7 +410,8 @@ impl Trie { &mut self, nibbles_key: &Nibbles, ) -> Result, DeletionError> { - let del_key = nibbles_key.as_slice(); + let mut del_key_buf = [0u8; 64]; + let del_key = nibbles_to_buf(nibbles_key, &mut del_key_buf); let mut current_node = 0; let mut path_walked = 0; @@ -410,7 +424,7 @@ impl Trie { let node = self .nodes .get(current_node) - .ok_or_else(|| NodeNotFound(nibbles_key.clone()))?; + .ok_or(NodeNotFound(*nibbles_key))?; self.hashed_nodes[current_node] = false; match node { DiffTrieNode::Branch { children } => { @@ -426,9 +440,7 @@ impl Trie { path_walked += 1; if let Some(child_ptr) = self.branch_node_children[children][n as usize] { - current_node = child_ptr - .as_local() - .ok_or_else(|| NodeNotFound(nibbles_key.clone()))?; + current_node = child_ptr.as_local().ok_or(NodeNotFound(*nibbles_key))?; if self.branch_node_children[children] .iter() .filter(|c| c.is_some()) @@ -443,7 +455,7 @@ impl Trie { .unwrap(); let orphan_ptr = orphan_ptr.unwrap(); if orphan_ptr.is_remote() { - let mut orphan_path = Nibbles::with_capacity(path_walked); + let mut orphan_path = Nibbles::new(); orphan_path .extend_from_slice_unchecked(&del_key[..(path_walked - 1)]); orphan_path.push_unchecked(orphan_nibble as u8); @@ -462,9 +474,7 @@ impl Trie { if del_key[path_walked..].starts_with(&self.keys[key.clone()]) { self.walk_path.push((current_node, 0)); path_walked += key.len(); - current_node = next_node - .as_local() - .ok_or_else(|| NodeNotFound(nibbles_key.clone()))?; + current_node = next_node.as_local().ok_or(NodeNotFound(*nibbles_key))?; continue; } @@ -898,6 +908,9 @@ impl Trie { value: None, }; + let mut target_key_buf = [0u8; 64]; + let target_key_slice = nibbles_to_buf(target_key, &mut target_key_buf); + let mut current_node = 0; let mut path_walked = 0; @@ -905,15 +918,14 @@ impl Trie { let node = self .nodes .get(current_node) - .ok_or_else(|| NodeNotFound(target_key.clone()))?; + .ok_or(NodeNotFound(*target_key))?; if !self.hashed_nodes[current_node] { return Err(ProofError::TrieIsDirty); } self.rlp_encode_node(current_node, &mut buf, proof_store); - let current_node_path = - Nibbles::from_nibbles_unchecked(&target_key.as_slice()[..path_walked]); + let current_node_path = target_key.slice_unchecked(0, path_walked); result.proof.push((current_node_path, buf.clone())); match node { @@ -924,13 +936,11 @@ impl Trie { let children = *children; - let n = target_key[path_walked]; + let n = target_key_slice[path_walked]; path_walked += 1; if let Some(child_ptr) = self.branch_node_children[children][n as usize] { - current_node = child_ptr - .as_local() - .ok_or_else(|| NodeNotFound(target_key.clone()))?; + current_node = child_ptr.as_local().ok_or(NodeNotFound(*target_key))?; continue; } @@ -940,18 +950,16 @@ impl Trie { let key = key.clone(); let next_node = *next_node; - if target_key[path_walked..].starts_with(&self.keys[key.clone()]) { + if target_key_slice[path_walked..].starts_with(&self.keys[key.clone()]) { path_walked += key.len(); - current_node = next_node - .as_local() - .ok_or_else(|| NodeNotFound(target_key.clone()))?; + current_node = next_node.as_local().ok_or(NodeNotFound(*target_key))?; continue; } break; } DiffTrieNode::Leaf { key, value } => { - if self.keys[key.clone()] == target_key[path_walked..] { + if self.keys[key.clone()] == target_key_slice[path_walked..] { result.value = Some(self.values[value.clone()].to_vec()); } break; @@ -1063,14 +1071,14 @@ impl Trie { }); } ProofNode::Extension { key, child } => { - let key = &proof_store.keys_guard()[*key]; - let key = self.insert_key(key); + let key = proof_store.keys_guard()[*key]; + let key = self.insert_key_nibbles(&key); let next_node = NodePtr::Remote(*child); self.push_node(DiffTrieNode::Extension { key, next_node }); } ProofNode::Leaf { key, value } => { - let key = &proof_store.keys_guard()[*key]; - let key = self.insert_key(key); + let key = proof_store.keys_guard()[*key]; + let key = self.insert_key_nibbles(&key); let value = &proof_store.values_guard()[*value]; let value = self.copy_value(value); self.push_node(DiffTrieNode::Leaf { key, value }); @@ -1088,19 +1096,22 @@ impl Trie { let mut parent_ptr = None; let mut parent_nibble = 0; + let mut path_buf = [0u8; 64]; + let path_slice = nibbles_to_buf(path, &mut path_buf); + loop { let node = self .nodes .get(current_node) - .ok_or_else(|| NodeNotFound::new(&path[..path_walked]))?; + .ok_or_else(|| NodeNotFound::new(&path_slice[..path_walked]))?; self.hashed_nodes[current_node] = false; match node { DiffTrieNode::Branch { children } => { let children = *children; - let n = path[path_walked] as usize; + let n = path_slice[path_walked] as usize; path_walked += 1; - if path[path_walked..].is_empty() { + if path_slice[path_walked..].is_empty() { parent_ptr = self.branch_node_children[children][n]; parent_nibble = n; break; @@ -1108,27 +1119,27 @@ impl Trie { if let Some(child_ptr) = self.branch_node_children[children][n] { current_node = child_ptr .as_local() - .ok_or_else(|| NodeNotFound::new(&path[..path_walked]))?; + .ok_or_else(|| NodeNotFound::new(&path_slice[..path_walked]))?; continue; } else { - return Err(NodeNotFound::new(&path[..path_walked])); + return Err(NodeNotFound::new(&path_slice[..path_walked])); } } DiffTrieNode::Extension { key, next_node } => { let key = key.clone(); let next_node = *next_node; - if path[path_walked..].starts_with(&self.keys[key.clone()]) { + if path_slice[path_walked..].starts_with(&self.keys[key.clone()]) { path_walked += key.len(); - if path[path_walked..].is_empty() { + if path_slice[path_walked..].is_empty() { parent_ptr = Some(next_node); parent_nibble = 0; break; } - current_node = next_node.as_local().ok_or_else(|| { - NodeNotFound(Nibbles::from_nibbles_unchecked(&path[..path_walked])) - })?; + current_node = next_node + .as_local() + .ok_or_else(|| NodeNotFound::new(&path_slice[..path_walked]))?; continue; } } @@ -1150,15 +1161,15 @@ impl Trie { let new_node = match node { ProofNode::Leaf { key, value } => { - let key = &proof_store.keys_guard()[*key]; - let key = self.insert_key(key); + let key = proof_store.keys_guard()[*key]; + let key = self.insert_key_nibbles(&key); let value = &proof_store.values_guard()[*value]; let value = self.copy_value(value); self.push_node(DiffTrieNode::Leaf { key, value }) } ProofNode::Extension { key, child } => { - let key = &proof_store.keys_guard()[*key]; - let key = self.insert_key(key); + let key = proof_store.keys_guard()[*key]; + let key = self.insert_key_nibbles(&key); let next_node = NodePtr::Remote(*child); self.push_node(DiffTrieNode::Extension { key, next_node }) } diff --git a/crates/eth-sparse-mpt/src/v_experimental/trie/tests.rs b/crates/eth-sparse-mpt/src/v_experimental/trie/tests.rs index ca50155c7..4bb2afd02 100644 --- a/crates/eth-sparse-mpt/src/v_experimental/trie/tests.rs +++ b/crates/eth-sparse-mpt/src/v_experimental/trie/tests.rs @@ -103,7 +103,7 @@ fn verify_proof(key: &[u8], proof: Vec<(Nibbles, Vec)>) -> B256 { let nibble_key = Nibbles::unpack(key); let proof_store = ProofStore::default(); proof_store - .add_proof(nibble_key.clone(), proof) + .add_proof(nibble_key, proof) .expect("failed to add proof to proof store"); let mut trie = Trie::default(); let found = trie @@ -417,6 +417,21 @@ fn compare_insert_key_reinsert( // key, value, new value (or delete) input: &[(Vec, Vec, Option>)], ) { + // Random input may repeat the same key; collapse to the last (value, new_value) per key so + // the helper models last-write-wins. Otherwise a key appearing as insert-then-delete would + // double-delete (an error) and make the reference trie inconsistent with the updated trie. + let deduped: Vec<(Vec, Vec, Option>)> = { + let mut by_key: HashMap, (Vec, Option>)> = HashMap::default(); + for (key, value, new_value) in input { + by_key.insert(key.clone(), (value.clone(), new_value.clone())); + } + by_key + .into_iter() + .map(|(key, (value, new_value))| (key, value, new_value)) + .collect() + }; + let input = deduped.as_slice(); + let proof_store = ProofStore::default(); let mut trie = Trie::new_empty(); diff --git a/crates/eth-sparse-mpt/test_data/failure_case_0.json.gz b/crates/eth-sparse-mpt/test_data/failure_case_0.json.gz index b4b6ed500..66f8bc9f6 100644 Binary files a/crates/eth-sparse-mpt/test_data/failure_case_0.json.gz and b/crates/eth-sparse-mpt/test_data/failure_case_0.json.gz differ diff --git a/crates/eth-sparse-mpt/test_data/multiproof_0.json.gz b/crates/eth-sparse-mpt/test_data/multiproof_0.json.gz index c344528eb..4c18b55b3 100644 Binary files a/crates/eth-sparse-mpt/test_data/multiproof_0.json.gz and b/crates/eth-sparse-mpt/test_data/multiproof_0.json.gz differ diff --git a/crates/eth-sparse-mpt/test_data/multiproof_1.json.gz b/crates/eth-sparse-mpt/test_data/multiproof_1.json.gz index edb9d658f..2d0535d3b 100644 Binary files a/crates/eth-sparse-mpt/test_data/multiproof_1.json.gz and b/crates/eth-sparse-mpt/test_data/multiproof_1.json.gz differ diff --git a/crates/eth-sparse-mpt/test_data/prepared_tries/example0/tries.json.gz b/crates/eth-sparse-mpt/test_data/prepared_tries/example0/tries.json.gz index 9ee812ec7..ade749990 100644 Binary files a/crates/eth-sparse-mpt/test_data/prepared_tries/example0/tries.json.gz and b/crates/eth-sparse-mpt/test_data/prepared_tries/example0/tries.json.gz differ diff --git a/crates/eth-sparse-mpt/test_data/prepared_tries/example1/tries.json.gz b/crates/eth-sparse-mpt/test_data/prepared_tries/example1/tries.json.gz index edc5fd6b4..6a82211ab 100644 Binary files a/crates/eth-sparse-mpt/test_data/prepared_tries/example1/tries.json.gz and b/crates/eth-sparse-mpt/test_data/prepared_tries/example1/tries.json.gz differ diff --git a/crates/eth-sparse-mpt/test_data/prepared_tries/example2/tries.json.gz b/crates/eth-sparse-mpt/test_data/prepared_tries/example2/tries.json.gz index 1ef8f8450..07747c59b 100644 Binary files a/crates/eth-sparse-mpt/test_data/prepared_tries/example2/tries.json.gz and b/crates/eth-sparse-mpt/test_data/prepared_tries/example2/tries.json.gz differ diff --git a/crates/eth-sparse-mpt/test_data/prepared_tries/example3/tries.json.gz b/crates/eth-sparse-mpt/test_data/prepared_tries/example3/tries.json.gz index d3d4668fc..e48e0a8ac 100644 Binary files a/crates/eth-sparse-mpt/test_data/prepared_tries/example3/tries.json.gz and b/crates/eth-sparse-mpt/test_data/prepared_tries/example3/tries.json.gz differ diff --git a/crates/eth-sparse-mpt/test_data/prepared_tries/example4/tries.json.gz b/crates/eth-sparse-mpt/test_data/prepared_tries/example4/tries.json.gz index 8f5666964..8f7f60829 100644 Binary files a/crates/eth-sparse-mpt/test_data/prepared_tries/example4/tries.json.gz and b/crates/eth-sparse-mpt/test_data/prepared_tries/example4/tries.json.gz differ diff --git a/crates/eth-sparse-mpt/test_data/prepared_tries/example5/tries.json.gz b/crates/eth-sparse-mpt/test_data/prepared_tries/example5/tries.json.gz index 391435e91..d59e8cde4 100644 Binary files a/crates/eth-sparse-mpt/test_data/prepared_tries/example5/tries.json.gz and b/crates/eth-sparse-mpt/test_data/prepared_tries/example5/tries.json.gz differ diff --git a/crates/eth-sparse-mpt/test_data/prepared_tries/example6/tries.json.gz b/crates/eth-sparse-mpt/test_data/prepared_tries/example6/tries.json.gz index d76838fe9..cd1de2323 100644 Binary files a/crates/eth-sparse-mpt/test_data/prepared_tries/example6/tries.json.gz and b/crates/eth-sparse-mpt/test_data/prepared_tries/example6/tries.json.gz differ diff --git a/crates/eth-sparse-mpt/test_data/prepared_tries/example7/tries.json.gz b/crates/eth-sparse-mpt/test_data/prepared_tries/example7/tries.json.gz index d3d4668fc..b4fa7cd50 100644 Binary files a/crates/eth-sparse-mpt/test_data/prepared_tries/example7/tries.json.gz and b/crates/eth-sparse-mpt/test_data/prepared_tries/example7/tries.json.gz differ diff --git a/crates/rbuilder-operator/src/bidding_service_wrapper/fast_streams/subscriber_poller.rs b/crates/rbuilder-operator/src/bidding_service_wrapper/fast_streams/subscriber_poller.rs index 0ab53aafe..fbab5e346 100644 --- a/crates/rbuilder-operator/src/bidding_service_wrapper/fast_streams/subscriber_poller.rs +++ b/crates/rbuilder-operator/src/bidding_service_wrapper/fast_streams/subscriber_poller.rs @@ -93,7 +93,10 @@ impl SubscriberPoll } let delta = offset_datetime_to_timestamp_us(OffsetDateTime::now_utc()) - start; self.poll_duration_stats.add_duration(delta); - if self.total_samples % Self::METRICS_TRACE_INTERVAL == 0 { + if self + .total_samples + .is_multiple_of(Self::METRICS_TRACE_INTERVAL) + { info!( name = self.name, avg_flight_time_us = self.flight_stats.average_duration(), diff --git a/crates/rbuilder-operator/src/flashbots_config.rs b/crates/rbuilder-operator/src/flashbots_config.rs index cab7818f4..5eb367bdb 100644 --- a/crates/rbuilder-operator/src/flashbots_config.rs +++ b/crates/rbuilder-operator/src/flashbots_config.rs @@ -428,8 +428,9 @@ impl FlashbotsConfig { .with_password(config.password.value()?) .with_validation(false); // CRITICAL for U256 serialization. - let task_manager = rbuilder_utils::tasks::TaskManager::current(); - let task_executor = task_manager.executor(); + let task_executor = rbuilder_utils::tasks::Runtime::with_existing_handle( + tokio::runtime::Handle::current(), + )?; let disk_backup = DiskBackup::new( DiskBackupConfig::new() @@ -441,10 +442,11 @@ impl FlashbotsConfig { ) .expect("could not create disk backup"); - // Task to forward the abort to the task_manager. + // Task to forward the abort to the task executor's runtime. + let shutdown_executor = task_executor.clone(); tokio::spawn(async move { abort_token.cancelled().await; - task_manager.graceful_shutdown(); + shutdown_executor.graceful_shutdown(); }); Ok((client, task_executor, disk_backup)) diff --git a/crates/rbuilder-rebalancer/Cargo.toml b/crates/rbuilder-rebalancer/Cargo.toml index f1d151920..a82624283 100644 --- a/crates/rbuilder-rebalancer/Cargo.toml +++ b/crates/rbuilder-rebalancer/Cargo.toml @@ -43,4 +43,4 @@ clap.workspace = true eyre.workspace = true toml.workspace = true tracing.workspace = true -reqwest.workspace = true +reqwest = { workspace = true, features = ["json"] } diff --git a/crates/rbuilder-utils/Cargo.toml b/crates/rbuilder-utils/Cargo.toml index 497bddf35..514b9c8d2 100644 --- a/crates/rbuilder-utils/Cargo.toml +++ b/crates/rbuilder-utils/Cargo.toml @@ -9,7 +9,8 @@ repository.workspace = true exclude.workspace = true [dependencies] -reth-tasks = { git = "https://github.com/paradigmxyz/reth", rev = "9c30bf7af5e0d45deaf5917375c9922c16654b28" } +reth-tasks = { git = "https://github.com/paradigmxyz/reth", rev = "d6324d63e27ef6b7c49cdc9b1977c1b808234c7b" } +reth-provider.workspace = true # misc tracing.workspace = true diff --git a/crates/rbuilder-utils/src/clickhouse/backup/mod.rs b/crates/rbuilder-utils/src/clickhouse/backup/mod.rs index a89138033..e10a2efbd 100644 --- a/crates/rbuilder-utils/src/clickhouse/backup/mod.rs +++ b/crates/rbuilder-utils/src/clickhouse/backup/mod.rs @@ -268,7 +268,7 @@ impl DiskBackup { config, }; - task_executor.spawn({ + task_executor.spawn_task({ let disk_backup: Self = disk_backup.clone(); async move { disk_backup.flush_routine().await; diff --git a/crates/rbuilder-utils/src/lib.rs b/crates/rbuilder-utils/src/lib.rs index 015672cf1..af21595b9 100644 --- a/crates/rbuilder-utils/src/lib.rs +++ b/crates/rbuilder-utils/src/lib.rs @@ -3,6 +3,7 @@ pub mod build_info; pub mod clickhouse; pub mod format; pub mod metrics; +pub mod reth_db; pub mod serde; pub mod tasks { pub use reth_tasks::*; diff --git a/crates/rbuilder-utils/src/reth_db.rs b/crates/rbuilder-utils/src/reth_db.rs new file mode 100644 index 000000000..854fd2342 --- /dev/null +++ b/crates/rbuilder-utils/src/reth_db.rs @@ -0,0 +1,16 @@ +use std::path::Path; + +use reth_provider::{providers::RocksDBProvider, ProviderResult}; + +/// Opens reth's RocksDB instance read-only. +/// +/// reth keeps RocksDB open read-write for the node's lifetime, so a separate process (rbuilder or +/// an offline harness) must open it read-only to avoid the exclusive lock, the same way it opens +/// MDBX and static files. `with_default_tables` registers the column families reth writes (history +/// indices, tx-hash lookups) so reads resolve against the on-disk data. +pub fn open_rocksdb_read_only(rocksdb_path: &Path) -> ProviderResult { + RocksDBProvider::builder(rocksdb_path) + .with_default_tables() + .with_read_only(true) + .build() +} diff --git a/crates/rbuilder/Cargo.toml b/crates/rbuilder/Cargo.toml index 268a7b711..f9dd1f9a3 100644 --- a/crates/rbuilder/Cargo.toml +++ b/crates/rbuilder/Cargo.toml @@ -29,6 +29,7 @@ reth-errors.workspace = true reth-payload-builder.workspace = true reth-trie.workspace = true reth-trie-parallel.workspace = true +reth-trie-db.workspace = true reth-node-api.workspace = true reth-node-core.workspace = true reth-primitives.workspace = true @@ -62,7 +63,7 @@ ethereum_ssz.workspace = true test_utils = { path = "src/test_utils" } metrics_macros = { path = "src/telemetry/metrics_macros" } -reqwest = { workspace = true, features = ["blocking"] } +reqwest = { workspace = true, features = ["blocking", "json"] } serde_with = { workspace = true, features = ["time_0_3"] } url.workspace = true sqlx = { version = "0.7.1", features = [ diff --git a/crates/rbuilder/benches/benchmarks/mev_boost.rs b/crates/rbuilder/benches/benchmarks/mev_boost.rs index 9a0f93848..092c72946 100644 --- a/crates/rbuilder/benches/benchmarks/mev_boost.rs +++ b/crates/rbuilder/benches/benchmarks/mev_boost.rs @@ -1,5 +1,8 @@ use alloy_consensus::{Block, Header}; -use alloy_eips::{eip4844::BlobTransactionSidecar, eip7594::BlobTransactionSidecarVariant}; +use alloy_eips::{ + eip4844::{Blob as AlloyBlob, BlobTransactionSidecar}, + eip7594::BlobTransactionSidecarVariant, +}; use alloy_primitives::U256; use alloy_rpc_types_beacon::relay::SubmitBlockRequest as AlloySubmitBlockRequest; use alloy_rpc_types_beacon::BlsPublicKey; @@ -53,15 +56,18 @@ fn bench_mevboost_sign(c: &mut Criterion) { let json_value: serde_json::Value = serde_json::from_str(&json_content).expect("Failed to deserialize JSON"); - // Extract blob data from JSON and convert it to Blob - let blobs: Vec = vec![Blob::from_hex( - json_value - .get("data") - .unwrap() - .as_str() - .expect("Data is not a valid string"), - ) - .unwrap()]; + // Extract blob data from JSON and convert it to Blob. + let blobs: Vec = vec![AlloyBlob::from( + Blob::from_hex( + json_value + .get("data") + .unwrap() + .as_str() + .expect("Data is not a valid string"), + ) + .unwrap() + .into_inner(), + )]; // Generate a BlobTransactionSidecar from the blobs let blob = BlobTransactionSidecar::try_from_blobs(blobs).unwrap(); diff --git a/crates/rbuilder/src/backtest/restore_landed_orders/resim_landed_block.rs b/crates/rbuilder/src/backtest/restore_landed_orders/resim_landed_block.rs index 812b79d4c..17413f328 100644 --- a/crates/rbuilder/src/backtest/restore_landed_orders/resim_landed_block.rs +++ b/crates/rbuilder/src/backtest/restore_landed_orders/resim_landed_block.rs @@ -16,7 +16,6 @@ use eyre::Context; use rbuilder_primitives::evm_inspector::SlotKey; use reth_chainspec::ChainSpec; use reth_primitives::{Receipt, Recovered, TransactionSigned}; -use reth_provider::StateProvider; use std::sync::Arc; #[derive(Debug)] @@ -69,9 +68,10 @@ where let mut local_ctx = ThreadBlockBuildingContext::default(); - let state_provider: Arc = - Arc::from(provider.history_by_block_hash(ctx.attributes.parent)?); - let cached = CachedDB::new(state_provider, ctx.shared_cached_reads.clone()); + let cached = CachedDB::new( + provider.history_by_block_hash(ctx.attributes.parent)?, + ctx.shared_cached_reads.clone(), + ); let mut partial_block = PartialBlock::new(true); let mut state = BlockState::new(cached); diff --git a/crates/rbuilder/src/bin/debug-bench-machine.rs b/crates/rbuilder/src/bin/debug-bench-machine.rs index 697325976..a11fcb8af 100644 --- a/crates/rbuilder/src/bin/debug-bench-machine.rs +++ b/crates/rbuilder/src/bin/debug-bench-machine.rs @@ -24,7 +24,6 @@ use rbuilder::{ use rbuilder_config::load_toml_config; use rbuilder_primitives::mev_boost::SubmitBlockRequest; use reth_primitives_traits::SignerRecoverable; -use reth_provider::StateProvider; use std::{path::PathBuf, sync::Arc, time::Instant}; use tracing::{debug, info}; @@ -104,10 +103,9 @@ async fn main() -> eyre::Result<()> { mev_blocker_price, ); - let state_provider = Arc::::from( - provider_factory - .provider_factory_unchecked() - .history_by_block_number(last_block)?, + let source = rbuilder::provider::StateProviderSource::new( + Arc::new(provider_factory.clone()), + parent_num_hash.hash, ); let mut build_times_ms = Vec::new(); @@ -122,11 +120,12 @@ async fn main() -> eyre::Result<()> { .into_iter() .collect(); let txs = txs.clone(); - let state_provider = state_provider.clone(); + let source = source.clone(); let (build_time, finalize_time) = tokio::task::spawn_blocking(move || -> eyre::Result<_> { let mut partial_block = PartialBlock::new(true); - let cached = CachedDB::new(state_provider, ctx.shared_cached_reads.clone()); + let cached = + CachedDB::new(source.state_provider()?, ctx.shared_cached_reads.clone()); let mut state = BlockState::new(cached); let mut local_ctx = ThreadBlockBuildingContext::default(); diff --git a/crates/rbuilder/src/bin/reth-db-monitor.rs b/crates/rbuilder/src/bin/reth-db-monitor.rs index 493012d7c..e9e4c0eaa 100644 --- a/crates/rbuilder/src/bin/reth-db-monitor.rs +++ b/crates/rbuilder/src/bin/reth-db-monitor.rs @@ -155,6 +155,7 @@ fn create_provider_from_reth_path( Some(&reth_path), None, None, + None, chain_spec, false, // read-only None, // no root hash diff --git a/crates/rbuilder/src/bin/run-bundle-on-prefix.rs b/crates/rbuilder/src/bin/run-bundle-on-prefix.rs index d9f5b964c..31f150a1d 100644 --- a/crates/rbuilder/src/bin/run-bundle-on-prefix.rs +++ b/crates/rbuilder/src/bin/run-bundle-on-prefix.rs @@ -20,7 +20,6 @@ use rbuilder::{ OrderPriority, ThreadBlockBuildingContext, }, live_builder::{cli::LiveBuilderConfig, config::Config}, - provider::StateProviderFactory, utils::{extract_onchain_block_txs, find_suggested_fee_recipient}, }; use rbuilder_config::load_toml_config; @@ -156,14 +155,13 @@ impl LandedBlockInfo { .config .base_config() .create_reth_provider_factory(true)?; - let block_state = provider - .history_by_block_hash(ctx.attributes.parent)? - .into(); + let source = + rbuilder::provider::StateProviderSource::new(Arc::new(provider), ctx.attributes.parent); let order_statistics = OrderStatistics::new(); Ok(BlockBuildingHelperFromProvider::new( BuiltBlockId::ZERO, 0, - block_state, + source, ctx, "TEST".to_string(), false, @@ -225,7 +223,7 @@ async fn main() -> eyre::Result<()> { // Test backruns after prefix. println!("Backruns after prefix"); for sim_order in sim_orders { - let mut builder = builder.box_clone(); + let mut builder = builder.try_clone()?; let res = builder.commit_order(&mut block_info.local_ctx, &sim_order, &|sim_result| { simulation_too_low::>( &sim_order.sim_value, diff --git a/crates/rbuilder/src/building/builders/block_building_helper.rs b/crates/rbuilder/src/building/builders/block_building_helper.rs index 8e967fe3b..041f4c0cf 100644 --- a/crates/rbuilder/src/building/builders/block_building_helper.rs +++ b/crates/rbuilder/src/building/builders/block_building_helper.rs @@ -1,8 +1,6 @@ use alloy_primitives::{utils::format_ether, Address, TxHash, I256, U256}; -use reth_provider::StateProvider; use std::{ cmp::max, - sync::Arc, time::{Duration, Instant}, }; use time::OffsetDateTime; @@ -20,6 +18,7 @@ use crate::{ ThreadBlockBuildingContext, }, live_builder::block_output::bidding_service_interface::CompetitionBidContext, + provider::StateProviderSource, telemetry::{self, add_block_fill_time, add_order_simulation_time}, utils::{check_block_hash_reader_health, elapsed_ms, HistoricalBlockError}, }; @@ -37,8 +36,9 @@ use super::Block; /// 2 - Call lots of commit_order. /// 3 - Call set_trace_fill_time when you are done calling commit_order (we still have to review this step). /// 4 - Call finalize_block. -pub trait BlockBuildingHelper: Send + Sync { - fn box_clone(&self) -> Box; +pub trait BlockBuildingHelper: Send { + /// Clones the helper, reopening its state provider. Fallible because reopening can fail. + fn try_clone(&self) -> Result, BlockBuildingHelperError>; /// Tries to add an order to the end of the block. /// Block state changes only on Ok(Ok) @@ -112,16 +112,6 @@ pub struct BiddableUnfinishedBlock { pub chosen_as_best_at: OffsetDateTime, } -impl Clone for BiddableUnfinishedBlock { - fn clone(&self) -> Self { - Self { - block: self.block.box_clone(), - true_block_value: self.true_block_value, - chosen_as_best_at: self.chosen_as_best_at, - } - } -} - impl BiddableUnfinishedBlock { pub fn new(block: Box) -> Result { let true_block_value = block.true_block_value()?; @@ -131,6 +121,16 @@ impl BiddableUnfinishedBlock { chosen_as_best_at: OffsetDateTime::now_utc(), }) } + + /// Clones the block by reopening the underlying state provider. Fallible because reopening the + /// provider can fail. + pub fn try_clone(&self) -> Result { + Ok(Self { + block: self.block.try_clone()?, + true_block_value: self.true_block_value, + chosen_as_best_at: self.chosen_as_best_at, + }) + } pub fn id(&self) -> BuiltBlockId { self.block.id() } @@ -145,12 +145,13 @@ impl BiddableUnfinishedBlock { } /// Implementation of BlockBuildingHelper based on a generic Provider -#[derive(Clone)] pub struct BlockBuildingHelperFromProvider< PartialBlockExecutionTracerType: PartialBlockExecutionTracer + Clone + Send + Sync + 'static, > { /// Balance of fee recipient before we stared building. _fee_recipient_balance_start: U256, + /// Reopens a fresh state provider when the helper is cloned for bidding/finalization. + source: StateProviderSource, /// Accumulated changes for the block (due to commit_order calls). block_state: BlockState, partial_block: PartialBlock, @@ -215,7 +216,7 @@ impl BlockBuildingHelperFromProvider { pub fn new( built_block_id: BuiltBlockId, next_journal_sequence_number: JournalSequenceNumber, - state_provider: Arc, + state_provider_source: StateProviderSource, building_ctx: BlockBuildingContext, builder_name: String, discard_txs: bool, @@ -226,7 +227,7 @@ impl BlockBuildingHelperFromProvider { BlockBuildingHelperFromProvider::new_with_execution_tracer( built_block_id, next_journal_sequence_number, - state_provider, + state_provider_source, building_ctx, builder_name, discard_txs, @@ -251,7 +252,7 @@ impl< pub fn new_with_execution_tracer( built_block_id: BuiltBlockId, next_journal_sequence_number: JournalSequenceNumber, - state_provider: Arc, + state_provider_source: StateProviderSource, building_ctx: BlockBuildingContext, builder_name: String, discard_txs: bool, @@ -260,6 +261,7 @@ impl< partial_block_execution_tracer: PartialBlockExecutionTracerType, max_order_execution_duration_warning: Option, ) -> Result { + let state_provider = state_provider_source.state_provider()?; let last_committed_block = building_ctx.block() - 1; check_block_hash_reader_health(last_committed_block, &state_provider)?; @@ -288,6 +290,7 @@ impl< built_block_trace.available_orders_statistics = available_orders_statistics; Ok(Self { _fee_recipient_balance_start: fee_recipient_balance_start, + source: state_provider_source, block_state, partial_block, payout_tx_gas, @@ -621,8 +624,27 @@ impl< &self.building_ctx } - fn box_clone(&self) -> Box { - Box::new(self.clone()) + fn try_clone(&self) -> Result, BlockBuildingHelperError> { + let state_provider = self.source.state_provider()?; + let cached = CachedDB::new( + state_provider, + self.building_ctx.shared_cached_reads.clone(), + ); + let block_state = + BlockState::new(cached).with_bundle_state(self.block_state.clone_bundle()); + Ok(Box::new(Self { + _fee_recipient_balance_start: self._fee_recipient_balance_start, + source: self.source.clone(), + block_state, + partial_block: self.partial_block.clone(), + payout_tx_gas: self.payout_tx_gas, + builder_name: self.builder_name.clone(), + building_ctx: self.building_ctx.clone(), + built_block_trace: self.built_block_trace.clone(), + cancel_on_fatal_error: self.cancel_on_fatal_error.clone(), + finalize_adjustment_state: self.finalize_adjustment_state.clone(), + max_order_execution_duration_warning: self.max_order_execution_duration_warning, + })) } fn builder_name(&self) -> &str { diff --git a/crates/rbuilder/src/building/builders/block_building_helper_stats_logger.rs b/crates/rbuilder/src/building/builders/block_building_helper_stats_logger.rs index c88ed212c..55aaa0837 100644 --- a/crates/rbuilder/src/building/builders/block_building_helper_stats_logger.rs +++ b/crates/rbuilder/src/building/builders/block_building_helper_stats_logger.rs @@ -160,8 +160,8 @@ impl<'a> BlockBuildingHelperStatsLogger<'a> { impl BlockBuildingHelper for BlockBuildingHelperStatsLogger<'_> { /// logging is not cloned - fn box_clone(&self) -> Box { - self.block_building_helper.box_clone() + fn try_clone(&self) -> Result, BlockBuildingHelperError> { + self.block_building_helper.try_clone() } fn commit_order( diff --git a/crates/rbuilder/src/building/builders/mock_block_building_helper.rs b/crates/rbuilder/src/building/builders/mock_block_building_helper.rs index 63a0f1e20..a8cf507c7 100644 --- a/crates/rbuilder/src/building/builders/mock_block_building_helper.rs +++ b/crates/rbuilder/src/building/builders/mock_block_building_helper.rs @@ -59,8 +59,8 @@ impl MockBlockBuildingHelper { } impl BlockBuildingHelper for MockBlockBuildingHelper { - fn box_clone(&self) -> Box { - Box::new(self.clone()) + fn try_clone(&self) -> Result, BlockBuildingHelperError> { + Ok(Box::new(self.clone())) } fn commit_order( diff --git a/crates/rbuilder/src/building/builders/ordering_builder.rs b/crates/rbuilder/src/building/builders/ordering_builder.rs index a44a30379..96ef96134 100644 --- a/crates/rbuilder/src/building/builders/ordering_builder.rs +++ b/crates/rbuilder/src/building/builders/ordering_builder.rs @@ -21,7 +21,7 @@ use crate::{ block_output::bidding_service_interface::CompetitionBidContext, building::built_block_cache::BuiltBlockCache, }, - provider::StateProviderFactory, + provider::{StateProviderFactory, StateProviderSource}, telemetry::{ add_ordering_builder_base_stage_stats, add_ordering_builder_pre_filtered_stage_stats, mark_builder_considers_order, OrderInclusionRatio, @@ -32,7 +32,6 @@ use ahash::{HashMap, HashSet}; use alloy_primitives::I256; use derivative::Derivative; use rbuilder_primitives::{AccountNonce, OrderId, SimValue, SimulatedOrder}; -use reth_provider::StateProvider; use serde::Deserialize; use std::{ marker::PhantomData, @@ -95,11 +94,12 @@ pub fn run_ordering_builder( { let payload_id = input.ctx.payload_id; - let block_state: Arc = match input - .provider - .history_by_block_hash(input.ctx.attributes.parent) - { - Ok(state) => Arc::from(state), + let source = StateProviderSource::new( + Arc::new(input.provider.clone()), + input.ctx.attributes.parent, + ); + let state_provider = match source.state_provider() { + Ok(state_provider) => state_provider, Err(err) => { error!( ?err, @@ -111,13 +111,13 @@ pub fn run_ordering_builder( } }; - let nonces = NonceCache::new(block_state.clone()); + let nonces = NonceCache::new(state_provider); let mut order_intake_consumer = OrderIntakeConsumer::::new(nonces, input.input); let mut builder = OrderingBuilderContext::new( - block_state.clone(), + source, input.builder_name, input.ctx, config.clone(), @@ -156,7 +156,9 @@ pub fn run_ordering_builder( ) { Ok(block) => { if let Ok(block) = BiddableUnfinishedBlock::new(block) { - input.sink.new_block(block); + if let Err(err) = input.sink.new_block(block) { + error!(?err, payload_id, "Failed to submit unfinished block"); + } } } Err(err) => { @@ -190,8 +192,12 @@ where let block_orders = block_orders_from_sim_orders::(input.sim_orders, &state_provider)?; let mut local_ctx = ThreadBlockBuildingContext::default(); + let source = StateProviderSource::new( + Arc::new(input.provider.clone()), + input.ctx.attributes.parent, + ); let mut builder = OrderingBuilderContext::new( - Arc::from(state_provider), + source, input.builder_name, input.ctx.clone(), ordering_config, @@ -220,7 +226,7 @@ where #[derivative(Debug)] pub struct OrderingBuilderContext { #[derivative(Debug = "ignore")] - state: Arc, + source: StateProviderSource, builder_name: String, ctx: BlockBuildingContext, config: OrderingBuilderConfig, @@ -238,7 +244,7 @@ pub struct OrderingBuilderContext { impl OrderingBuilderContext { pub fn new( - state: Arc, + source: StateProviderSource, builder_name: String, ctx: BlockBuildingContext, config: OrderingBuilderConfig, @@ -246,7 +252,7 @@ impl OrderingBuilderContext { built_block_cache: Arc, ) -> Self { Self { - state, + source, builder_name, ctx, local_ctx: Default::default(), @@ -301,7 +307,7 @@ impl OrderingBuilderContext { let mut block_building_helper = BlockBuildingHelperFromProvider::new_with_execution_tracer( built_block_id, next_journal_sequence_number, - self.state.clone(), + self.source.clone(), self.ctx.clone(), self.builder_name.clone(), self.config.discard_txs, diff --git a/crates/rbuilder/src/building/builders/parallel_builder/block_building_result_assembler.rs b/crates/rbuilder/src/building/builders/parallel_builder/block_building_result_assembler.rs index ef589c4ea..687083fef 100644 --- a/crates/rbuilder/src/building/builders/parallel_builder/block_building_result_assembler.rs +++ b/crates/rbuilder/src/building/builders/parallel_builder/block_building_result_assembler.rs @@ -4,14 +4,13 @@ use super::{ }; use ahash::HashMap; use alloy_primitives::utils::format_ether; -use reth_provider::StateProvider; use std::{ sync::Arc, time::{Duration, Instant}, }; use time::OffsetDateTime; use tokio_util::sync::CancellationToken; -use tracing::{info_span, trace}; +use tracing::{error, info_span, trace}; use crate::{ building::{ @@ -24,6 +23,7 @@ use crate::{ BlockBuildingContext, ThreadBlockBuildingContext, }, live_builder::block_output::unfinished_block_processing::UnfinishedBuiltBlocksInput, + provider::StateProviderSource, telemetry::mark_builder_considers_order, utils::elapsed_ms, }; @@ -31,7 +31,7 @@ use rbuilder_primitives::order_statistics::OrderStatistics; /// Assembles block building results from the best orderings of order groups. pub struct BlockBuildingResultAssembler { - state: Arc, + source: StateProviderSource, ctx: BlockBuildingContext, pub local_ctx: ThreadBlockBuildingContext, cancellation_token: CancellationToken, @@ -58,7 +58,7 @@ impl BlockBuildingResultAssembler { pub fn new( config: &ParallelBuilderConfig, best_results: Arc, - state: Arc, + source: StateProviderSource, ctx: BlockBuildingContext, cancellation_token: CancellationToken, builder_name: String, @@ -67,7 +67,7 @@ impl BlockBuildingResultAssembler { max_order_execution_duration_warning: Option, ) -> Self { Self { - state, + source, ctx, local_ctx: Default::default(), cancellation_token, @@ -153,7 +153,9 @@ impl BlockBuildingResultAssembler { if let Some(sink) = &self.sink { if let Ok(new_block) = BiddableUnfinishedBlock::new(new_block) { - sink.new_block(new_block); + if let Err(err) = sink.new_block(new_block) { + error!(?err, "Failed to submit unfinished block"); + } } } } @@ -189,7 +191,7 @@ impl BlockBuildingResultAssembler { let mut block_building_helper = BlockBuildingHelperFromProvider::new( self.built_block_id_source.get_new_id(), 0, - self.state.clone(), + self.source.clone(), self.ctx.clone(), self.builder_name.clone(), self.discard_txs, @@ -271,7 +273,7 @@ impl BlockBuildingResultAssembler { let mut block_building_helper = BlockBuildingHelperFromProvider::new( self.built_block_id_source.get_new_id(), 0, - self.state.clone(), + self.source.clone(), self.ctx.clone(), String::from("backtest_builder"), self.discard_txs, diff --git a/crates/rbuilder/src/building/builders/parallel_builder/conflict_resolvers.rs b/crates/rbuilder/src/building/builders/parallel_builder/conflict_resolvers.rs index f15d6896f..ee596571b 100644 --- a/crates/rbuilder/src/building/builders/parallel_builder/conflict_resolvers.rs +++ b/crates/rbuilder/src/building/builders/parallel_builder/conflict_resolvers.rs @@ -4,7 +4,7 @@ use derivative::Derivative; use eyre::Result; use itertools::Itertools; use rand::{seq::SliceRandom, SeedableRng}; -use reth::providers::StateProvider; +use reth_errors::ProviderResult; use std::sync::Arc; use tokio_util::sync::CancellationToken; use tracing::trace; @@ -18,6 +18,7 @@ use crate::building::{ cached_reads::CachedDB, BlockBuildingContext, BlockState, ExecutionError, ExecutionResult, PartialBlock, ThreadBlockBuildingContext, }; +use crate::provider::StateProviderSource; use rbuilder_primitives::{OrderId, SimulatedOrder}; /// Context for resolving conflicts in merging tasks. @@ -26,7 +27,7 @@ use rbuilder_primitives::{OrderId, SimulatedOrder}; #[derivative(Debug)] pub struct ResolverContext { #[derivative(Debug = "ignore")] - pub state: Arc, + pub source: StateProviderSource, pub ctx: BlockBuildingContext, pub cancellation_token: CancellationToken, pub simulation_cache: Arc, @@ -43,13 +44,13 @@ impl ResolverContext { /// * `cache` - Optional cached reads for optimization. /// * `simulation_cache` - Shared cache for simulation results. pub fn new( - state: Arc, + source: StateProviderSource, ctx: BlockBuildingContext, cancellation_token: CancellationToken, simulation_cache: Arc, ) -> Self { ResolverContext { - state, + source, ctx, cancellation_token, simulation_cache, @@ -81,7 +82,7 @@ impl ResolverContext { for sequence_of_orders in sequence_to_try { let (resolution_result, _state) = - self.process_sequence_of_orders(sequence_of_orders, &task, self.state.clone())?; + self.process_sequence_of_orders(sequence_of_orders, &task, self.source.clone())?; self.update_best_result(resolution_result, &mut best_resolution_result); } @@ -126,7 +127,7 @@ impl ResolverContext { &mut self, sequence_of_orders: Vec, task: &ConflictTask, - state_provider: Arc, + source: StateProviderSource, ) -> Result<(ResolutionResult, BlockState)> { // @todo actually reuse it for the duration of the block let mut local_ctx = ThreadBlockBuildingContext::default(); @@ -141,7 +142,7 @@ impl ResolverContext { // Initialize state and partial block let mut partial_block = PartialBlock::new(true); - let mut state = self.initialize_block_state(state_provider); + let mut state = self.initialize_block_state(source)?; partial_block.pre_block_call(&self.ctx, &mut state)?; // Initialize sequenced_order_result @@ -286,10 +287,13 @@ impl ResolverContext { /// Initializes the block state, using a cached state if available. fn initialize_block_state( &mut self, - state_provider: Arc, - ) -> BlockState { - let cached = CachedDB::new(state_provider, self.ctx.shared_cached_reads.clone()); - BlockState::new(cached) + source: StateProviderSource, + ) -> ProviderResult> { + let cached = CachedDB::new( + source.state_provider()?, + self.ctx.shared_cached_reads.clone(), + ); + Ok(BlockState::new(cached)) } /// Stores the simulation state in the cache. diff --git a/crates/rbuilder/src/building/builders/parallel_builder/conflict_resolving_pool.rs b/crates/rbuilder/src/building/builders/parallel_builder/conflict_resolving_pool.rs index 396ab75ea..f5a132b11 100644 --- a/crates/rbuilder/src/building/builders/parallel_builder/conflict_resolving_pool.rs +++ b/crates/rbuilder/src/building/builders/parallel_builder/conflict_resolving_pool.rs @@ -1,7 +1,6 @@ use alloy_primitives::utils::format_ether; use crossbeam_queue::SegQueue; use eyre::Result; -use reth_provider::StateProvider; use std::{ sync::{mpsc as std_mpsc, Arc}, thread, @@ -15,7 +14,11 @@ use super::{ simulation_cache::SharedSimulationCache, ConflictGroup, ConflictResolutionResultPerGroup, ConflictTask, GroupId, ResolutionResult, TaskPriority, }; -use crate::{building::BlockBuildingContext, provider::StateProviderFactory, utils::elapsed_ms}; +use crate::{ + building::BlockBuildingContext, + provider::{StateProviderFactory, StateProviderSource}, + utils::elapsed_ms, +}; pub type TaskQueue = Arc>; @@ -58,17 +61,15 @@ where } pub fn start(&self) -> eyre::Result<()> { + let source = + StateProviderSource::new(Arc::new(self.provider.clone()), self.ctx.attributes.parent); for _ in 0..self.num_threads { let task_queue = self.task_queue.clone(); let cancellation_token = self.cancellation_token.clone(); let group_result_sender = self.group_result_sender.clone(); let simulation_cache = self.simulation_cache.clone(); let ctx = self.ctx.clone(); - - let block_state: Arc = self - .provider - .history_by_block_hash(self.ctx.attributes.parent)? - .into(); + let source = source.clone(); thread::spawn(move || { while !cancellation_token.is_cancelled() { if let Some(task) = task_queue.pop() { @@ -79,7 +80,7 @@ where if let Ok((task_id, result)) = Self::process_task( task, &ctx, - block_state.clone(), + source.clone(), cancellation_token.clone(), Arc::clone(&simulation_cache), ) { @@ -112,12 +113,12 @@ where fn process_task( task: ConflictTask, ctx: &BlockBuildingContext, - state: Arc, + source: StateProviderSource, cancellation_token: CancellationToken, simulation_cache: Arc, ) -> Result<(GroupId, (ResolutionResult, ConflictGroup))> { let mut merging_context = ResolverContext::new( - state, + source, ctx.clone(), cancellation_token.clone(), simulation_cache, @@ -156,7 +157,7 @@ where &mut self, new_groups: Vec, ctx: &BlockBuildingContext, - state: Arc, + source: StateProviderSource, simulation_cache: Arc, ) -> Vec<(GroupId, (ResolutionResult, ConflictGroup))> { let mut results = Vec::new(); @@ -167,7 +168,7 @@ where let result = Self::process_task( task, ctx, - state.clone(), + source.clone(), CancellationToken::new(), simulation_cache, ); diff --git a/crates/rbuilder/src/building/builders/parallel_builder/mod.rs b/crates/rbuilder/src/building/builders/parallel_builder/mod.rs index ab11a91ac..658eba6ab 100644 --- a/crates/rbuilder/src/building/builders/parallel_builder/mod.rs +++ b/crates/rbuilder/src/building/builders/parallel_builder/mod.rs @@ -17,7 +17,6 @@ use crossbeam::queue::SegQueue; use eyre::Result; use itertools::Itertools; use results_aggregator::BestResults; -use reth_provider::StateProvider; use serde::Deserialize; use simulation_cache::SharedSimulationCache; use std::{ @@ -36,7 +35,7 @@ use crate::{ BuiltBlockIdSource, LiveBuilderInput, }, live_builder::block_output::bidding_service_interface::CompetitionBidContext, - provider::StateProviderFactory, + provider::{StateProviderFactory, StateProviderSource}, utils::elapsed_ms, }; @@ -123,15 +122,15 @@ where let results_aggregator = ResultsAggregator::new(group_result_receiver, Arc::clone(&best_results)); - let block_state = input - .provider - .history_by_block_hash(input.ctx.attributes.parent)? - .into(); + let source = StateProviderSource::new( + Arc::new(input.provider.clone()), + input.ctx.attributes.parent, + ); let block_building_result_assembler = BlockBuildingResultAssembler::new( config, Arc::clone(&best_results), - block_state, + source, input.ctx.clone(), input.cancel.clone(), input.builder_name.clone(), @@ -329,10 +328,10 @@ where let setup_duration = setup_start.elapsed(); - let block_state: Arc = input - .provider - .history_by_block_hash(input.ctx.attributes.parent)? - .into(); + let source = StateProviderSource::new( + Arc::new(input.provider.clone()), + input.ctx.attributes.parent, + ); // Group processing let processing_start = Instant::now(); @@ -340,7 +339,7 @@ where let results = conflict_resolving_pool.process_groups_backtest( groups, &input.ctx, - block_state.clone(), + source.clone(), Arc::clone(&simulation_cache), ); let processing_duration = processing_start.elapsed(); @@ -350,7 +349,7 @@ where let mut block_building_result_assembler = BlockBuildingResultAssembler::new( &config, Arc::clone(&best_results), - block_state.clone(), + source.clone(), input.ctx.clone(), CancellationToken::new(), String::from("backtest_builder"), diff --git a/crates/rbuilder/src/building/cached_reads.rs b/crates/rbuilder/src/building/cached_reads.rs index 8bfe077d7..206deec52 100644 --- a/crates/rbuilder/src/building/cached_reads.rs +++ b/crates/rbuilder/src/building/cached_reads.rs @@ -5,7 +5,7 @@ use alloy_primitives::{Address, B256, U256}; use dashmap::DashMap; use reth::revm::database::StateProviderDatabase; use reth_errors::ProviderError; -use reth_provider::StateProvider; +use reth_provider::{StateProvider, StateProviderBox}; use revm::{bytecode::Bytecode, state::AccountInfo, Database as RevmDatabase}; use std::sync::{ atomic::{AtomicU64, Ordering}, @@ -43,9 +43,9 @@ impl Drop for SharedCachedReads { } /// Database that wraps a reth state provider with a shared read cache. -#[derive(Clone)] +/// Intentionally not `Clone` since StateProvider is not cloneable. pub struct CachedDB { - state_provider: Arc, + state_provider: StateProviderBox, shared_cache: Arc, } @@ -56,10 +56,7 @@ impl std::fmt::Debug for CachedDB { } impl CachedDB { - pub fn new( - state_provider: Arc, - shared_cache: Arc, - ) -> Self { + pub fn new(state_provider: StateProviderBox, shared_cache: Arc) -> Self { Self { state_provider, shared_cache, diff --git a/crates/rbuilder/src/building/conflict.rs b/crates/rbuilder/src/building/conflict.rs index 324df3e72..d163560f0 100644 --- a/crates/rbuilder/src/building/conflict.rs +++ b/crates/rbuilder/src/building/conflict.rs @@ -7,11 +7,7 @@ use alloy_primitives::{Address, U256}; use itertools::Itertools; use rbuilder_primitives::{Order, OrderId}; use reth::providers::StateProviderBox; -use reth_provider::StateProvider; -use std::{ - collections::{HashMap, HashSet}, - sync::Arc, -}; +use std::collections::{HashMap, HashSet}; /// Conflict generated by executing an order before another. #[derive(Debug, Clone, PartialEq, Eq, Hash)] @@ -33,7 +29,6 @@ pub fn find_conflict_slow( ctx: &BlockBuildingContext, orders: &[Order], ) -> eyre::Result> { - let state_provider = Arc::::from(state_provider); let mut block_state_db = CachedDB::new(state_provider, ctx.shared_cached_reads.clone()); let mut local_ctx = ThreadBlockBuildingContext::default(); // We use empty combined refunds because the value of the bundle will diff --git a/crates/rbuilder/src/building/mod.rs b/crates/rbuilder/src/building/mod.rs index 9d214d3ae..84d2c59a7 100644 --- a/crates/rbuilder/src/building/mod.rs +++ b/crates/rbuilder/src/building/mod.rs @@ -55,7 +55,8 @@ use reth_payload_builder::EthPayloadBuilderAttributes; use reth_primitives::BlockBody; use reth_primitives_traits::{proofs, Block as _}; use revm::{ - context_interface::result::InvalidTransaction, database::states::bundle_state::BundleRetention, + context_interface::result::InvalidTransaction, + database::{states::bundle_state::BundleRetention, DatabaseCommitExt as _}, primitives::hardfork::SpecId, }; use serde::Deserialize; @@ -173,6 +174,7 @@ impl BlockBuildingContext { gas_limit, withdrawals: Some(attributes.withdrawals.clone()), parent_beacon_block_root: attributes.parent_beacon_block_root, + extra_data: extra_data.clone().into(), }, ) .ok()?; diff --git a/crates/rbuilder/src/building/order_commit.rs b/crates/rbuilder/src/building/order_commit.rs index fb7d2575e..3ae7a892f 100644 --- a/crates/rbuilder/src/building/order_commit.rs +++ b/crates/rbuilder/src/building/order_commit.rs @@ -24,12 +24,21 @@ use reth_primitives::Receipt; use revm::{ context::result::{ExecutionResult, ResultAndState}, context_interface::result::{EVMError, InvalidTransaction}, - database::{states::bundle_state::BundleRetention, BundleState, State}, + database::{bal::EvmDatabaseError, states::bundle_state::BundleRetention, BundleState, State}, Database as _, DatabaseCommit, }; use std::{collections::HashMap, sync::Arc}; use thiserror::Error; +/// revm 34 wraps DB errors in `EvmDatabaseError`; plain account reads never produce a +/// block-access-list error, so map back to the underlying provider error. +fn provider_error(err: EvmDatabaseError) -> ProviderError { + match err { + EvmDatabaseError::Database(err) => err, + EvmDatabaseError::Bal(err) => ProviderError::other(err), + } +} + #[derive(Clone)] pub struct BlockState { db: DB, @@ -104,7 +113,8 @@ where let mut db = self.new_db_ref(); Ok(db .as_mut() - .basic(address)? + .basic(address) + .map_err(provider_error)? .map(|acc| acc.balance) .unwrap_or_default()) } @@ -113,7 +123,8 @@ where let mut db = self.new_db_ref(); Ok(db .as_mut() - .basic(address)? + .basic(address) + .map_err(provider_error)? .map(|acc| acc.nonce) .unwrap_or_default()) } @@ -122,7 +133,8 @@ where let mut db = self.new_db_ref(); Ok(db .as_mut() - .basic(address)? + .basic(address) + .map_err(provider_error)? .map(|acc| acc.code_hash) .unwrap_or_else(|| KECCAK_EMPTY)) } @@ -429,7 +441,9 @@ pub enum CriticalCommitOrderError { #[error("Reth error: {0}")] Reth(#[from] ProviderError), #[error("EVM error: {0}")] - EVM(#[from] EVMError), + EVM(#[from] EVMError>), + #[error("EVM database error: {0}")] + EvmDatabase(#[from] EvmDatabaseError), /// This could happen if we can't fit a balance in a I256 (unlikely/impossible since the ETH total supply is several orders of magnitude bellow I256::max) #[error("BigIntConversionError error: {0}")] BigIntConversionError(#[from] alloy_primitives::BigIntConversionError), @@ -1117,7 +1131,7 @@ fn execute_evm( evm_env: EvmEnv, tx_with_blobs: &TransactionSignedEcRecoveredWithBlobs, used_state_tracer: Option<&mut UsedStateTrace>, - db: impl Database, + db: impl Database>, blocklist: &HashSet
, ) -> Result, CriticalCommitOrderError> where diff --git a/crates/rbuilder/src/building/payout_tx.rs b/crates/rbuilder/src/building/payout_tx.rs index 30afc154a..24428c433 100644 --- a/crates/rbuilder/src/building/payout_tx.rs +++ b/crates/rbuilder/src/building/payout_tx.rs @@ -11,7 +11,10 @@ use reth_chainspec::ChainSpec; use reth_errors::ProviderError; use reth_evm::Evm; use reth_primitives::{Recovered, Transaction, TransactionSigned}; -use revm::context::result::{EVMError, ExecutionResult}; +use revm::{ + context::result::{EVMError, ExecutionResult}, + database::bal::EvmDatabaseError, +}; pub fn create_payout_tx( chain_spec: &ChainSpec, @@ -43,7 +46,9 @@ pub enum PayoutTxErr { #[error("Signature error: {0}")] SignError(#[from] secp256k1::Error), #[error("EVM error: {0}")] - EvmError(#[from] EVMError), + EvmError(#[from] EVMError>), + #[error("EVM database error: {0}")] + EvmDatabase(#[from] EvmDatabaseError), } impl PartialEq for PayoutTxErr { @@ -52,6 +57,7 @@ impl PartialEq for PayoutTxErr { (PayoutTxErr::Reth(_), PayoutTxErr::Reth(_)) => true, (PayoutTxErr::SignError(a), PayoutTxErr::SignError(b)) => a == b, (PayoutTxErr::EvmError(_), PayoutTxErr::EvmError(_)) => true, + (PayoutTxErr::EvmDatabase(_), PayoutTxErr::EvmDatabase(_)) => true, _ => false, } } @@ -220,7 +226,7 @@ mod tests { use reth_chainspec::{EthereumHardfork, MAINNET}; use reth_db::{tables, transaction::DbTxMut}; use reth_primitives::Account; - use reth_provider::{test_utils::create_test_provider_factory_with_chain_spec, StateProvider}; + use reth_provider::test_utils::create_test_provider_factory_with_chain_spec; use revm::primitives::hardfork::SpecId; use std::sync::Arc; @@ -270,8 +276,10 @@ mod tests { false, U256::ZERO, ); - let state_provider: Arc = Arc::from(provider_factory.latest().unwrap()); - let cached = CachedDB::new(state_provider, Arc::new(SharedCachedReads::default())); + let cached = CachedDB::new( + provider_factory.latest().unwrap(), + Arc::new(SharedCachedReads::default()), + ); let mut state = BlockState::new(cached); let estimate_result = diff --git a/crates/rbuilder/src/building/sim.rs b/crates/rbuilder/src/building/sim.rs index 1452afaed..e99f640e4 100644 --- a/crates/rbuilder/src/building/sim.rs +++ b/crates/rbuilder/src/building/sim.rs @@ -20,7 +20,6 @@ use alloy_primitives::Address; use rand::seq::SliceRandom; use rbuilder_primitives::{Order, OrderId, SimulatedOrder}; use reth_errors::ProviderError; -use reth_provider::StateProvider; use std::{ cmp::{max, min, Ordering}, collections::hash_map::Entry, @@ -349,7 +348,7 @@ where { let nonces = { let state = provider.history_by_block_hash(ctx.attributes.parent)?; - NonceCache::new(state.into()) + NonceCache::new(state) }; let mut sim_tree = SimTree::new(nonces); @@ -364,8 +363,7 @@ where } let mut sim_errors = Vec::new(); - let initial_provider = - Arc::::from(provider.history_by_block_hash(ctx.attributes.parent)?); + let initial_provider = provider.history_by_block_hash(ctx.attributes.parent)?; let mut state_for_sim = CachedDB::new(initial_provider, ctx.shared_cached_reads.clone()); let mut local_ctx = ThreadBlockBuildingContext::default(); loop { diff --git a/crates/rbuilder/src/building/testing/bundle_tests/setup.rs b/crates/rbuilder/src/building/testing/bundle_tests/setup.rs index 67ed2be13..25b429bb9 100644 --- a/crates/rbuilder/src/building/testing/bundle_tests/setup.rs +++ b/crates/rbuilder/src/building/testing/bundle_tests/setup.rs @@ -14,7 +14,6 @@ use rbuilder_primitives::{ order_builder::OrderBuilder, BundleRefund, BundleReplacementData, SimulatedOrder, TransactionSignedEcRecoveredWithBlobs, TxRevertBehavior, }; -use reth_provider::StateProvider; use revm::database::states::BundleState; use std::sync::Arc; use std::sync::OnceLock; @@ -214,8 +213,6 @@ impl TestSetup { } #[allow(clippy::result_large_err)] fn try_commit_order(&mut self) -> eyre::Result> { - let state_provider: Arc = - Arc::from(self.test_chain.provider_factory().latest()?); let mut local_ctx = ThreadBlockBuildingContext::default(); let sim_order = SimulatedOrder::new( @@ -231,7 +228,7 @@ impl TestSetup { let mut results = Vec::new(); for _ in 0..2 { let cached = CachedDB::new( - state_provider.clone(), + self.test_chain.provider_factory().latest()?, Arc::new(SharedCachedReads::default()), ); let mut block_state = @@ -299,9 +296,10 @@ impl TestSetup { } fn make_block_state(&self) -> eyre::Result> { - let state_provider: Arc = - Arc::from(self.test_chain.provider_factory().latest()?); - let cached = CachedDB::new(state_provider, Arc::new(SharedCachedReads::default())); + let cached = CachedDB::new( + self.test_chain.provider_factory().latest()?, + Arc::new(SharedCachedReads::default()), + ); Ok( BlockState::new(cached) .with_bundle_state(self.bundle_state.clone().unwrap_or_default()), diff --git a/crates/rbuilder/src/building/testing/evm_inspector_tests/setup.rs b/crates/rbuilder/src/building/testing/evm_inspector_tests/setup.rs index 4633c67a6..8c5771cd7 100644 --- a/crates/rbuilder/src/building/testing/evm_inspector_tests/setup.rs +++ b/crates/rbuilder/src/building/testing/evm_inspector_tests/setup.rs @@ -9,8 +9,6 @@ use alloy_primitives::Address; use rbuilder_primitives::evm_inspector::{RBuilderEVMInspector, UsedStateTrace}; use reth_evm::Evm; use reth_primitives::{Recovered, TransactionSigned}; -use reth_provider::StateProvider; -use std::sync::Arc; #[derive(Debug)] pub struct TestSetup { @@ -91,10 +89,8 @@ impl TestSetup { let mut inspector = RBuilderEVMInspector::new(&tx, Some(&mut used_state_trace)); // block state - let state_provider: Arc = - Arc::from(self.test_chain.provider_factory().latest()?); let cached = CachedDB::new( - state_provider, + self.test_chain.provider_factory().latest()?, self.test_chain .block_building_context() .shared_cached_reads diff --git a/crates/rbuilder/src/building/testing/test_chain_state.rs b/crates/rbuilder/src/building/testing/test_chain_state.rs index 11ac87655..81e096d37 100644 --- a/crates/rbuilder/src/building/testing/test_chain_state.rs +++ b/crates/rbuilder/src/building/testing/test_chain_state.rs @@ -139,7 +139,7 @@ impl TestChainState { { let provider = provider_factory.provider_rw()?; provider.insert_block( - Block::new(genesis_header.header().clone(), BlockBody::default()) + &Block::new(genesis_header.header().clone(), BlockBody::default()) .try_into_recovered() .unwrap(), )?; diff --git a/crates/rbuilder/src/building/tx_sim_cache/mod.rs b/crates/rbuilder/src/building/tx_sim_cache/mod.rs index 789f2fb9a..35f05463d 100644 --- a/crates/rbuilder/src/building/tx_sim_cache/mod.rs +++ b/crates/rbuilder/src/building/tx_sim_cache/mod.rs @@ -11,7 +11,7 @@ use itertools::Itertools; use rbuilder_primitives::evm_inspector::UsedStateTrace; use result_store::{ActionResult, ExecutionResultStore, NextAction}; use reth_errors::ProviderError; -use revm::{context::result::ResultAndState, state::AccountInfo}; +use revm::{context::result::ResultAndState, database::bal::EvmDatabaseError, state::AccountInfo}; use tracing::info; use crate::utils::signed_uint_delta; @@ -223,7 +223,7 @@ impl TxExecutionCache { pub fn get_cached_result( &self, - mut db: impl Database, + mut db: impl Database>, tx_hash: &B256, coinbase: &Address, ) -> Result { diff --git a/crates/rbuilder/src/building/tx_sim_cache/result_store.rs b/crates/rbuilder/src/building/tx_sim_cache/result_store.rs index a8f244e61..19e9fe1ae 100644 --- a/crates/rbuilder/src/building/tx_sim_cache/result_store.rs +++ b/crates/rbuilder/src/building/tx_sim_cache/result_store.rs @@ -143,6 +143,7 @@ mod tests { balance: u256(balance), nonce: 0, code_hash: Default::default(), + account_id: None, code: None, }), } diff --git a/crates/rbuilder/src/integration/test_data/playground.yaml b/crates/rbuilder/src/integration/test_data/playground.yaml new file mode 100644 index 000000000..4f2fc7bfa --- /dev/null +++ b/crates/rbuilder/src/integration/test_data/playground.yaml @@ -0,0 +1,20 @@ +# Custom builder-playground recipe used by the integration CI. +# +# Same as the built-in `l1` recipe but pins the reth execution client to the version rbuilder is +# built against (1.11.3, rev d6324d6). builder-playground's `l1` recipe hardcodes reth v1.9.3, whose +# on-disk DB (no RocksDB / older format) cannot be opened by rbuilder's reth 1.11 `ProviderFactory`. +# +# Setting `release` makes the reth `el` service run as a native host binary (UseHostExecution), which +# is required so rbuilder can bind the reth DB directly — this replaces the old `--use-native-reth` +# flag. The arch/URL is resolved exactly like the built-in reth release +# (reth-v1.11.3-x86_64-unknown-linux-gnu.tar.gz). +base: l1 + +recipe: + reth: + services: + el: + release: + name: reth + org: paradigmxyz + version: v1.11.3 diff --git a/crates/rbuilder/src/live_builder/base_config.rs b/crates/rbuilder/src/live_builder/base_config.rs index 2cc0a26c2..815036b47 100644 --- a/crates/rbuilder/src/live_builder/base_config.rs +++ b/crates/rbuilder/src/live_builder/base_config.rs @@ -93,6 +93,7 @@ pub struct BaseConfig { pub reth_datadir: Option, pub reth_db_path: Option, pub reth_static_files_path: Option, + pub reth_rocksdb_path: Option, /// Backwards compatibility. Downloads blocklist from a file. /// Same as setting a file name on blocklist. @@ -298,6 +299,7 @@ impl BaseConfig { self.reth_datadir.as_deref(), self.reth_db_path.as_deref(), self.reth_static_files_path.as_deref(), + self.reth_rocksdb_path.as_deref(), self.chain_spec()?, false, if skip_root_hash { @@ -474,7 +476,6 @@ impl BaseConfig { pub const DEFAULT_CL_NODE_URL: &str = "http://127.0.0.1:3500"; pub const DEFAULT_EL_NODE_IPC_PATH: &str = "/tmp/reth.ipc"; pub const DEFAULT_INCOMING_BUNDLES_PORT: u16 = 8645; -pub const DEFAULT_RETH_DB_PATH: &str = "/mnt/data/reth"; /// This will update every 2.4 hours, super reasonable. pub const DEFAULT_BLOCKLIST_URL_MAX_AGE_HOURS: u64 = 24; pub const DEFAULT_REQUIRE_NON_EMPTY_BLOCKLIST: bool = false; @@ -500,9 +501,10 @@ impl Default for BaseConfig { ignore_cancellable_orders: true, ignore_blobs: false, chain: "mainnet".to_string(), - reth_datadir: Some(DEFAULT_RETH_DB_PATH.parse().unwrap()), + reth_datadir: None, reth_db_path: None, reth_static_files_path: None, + reth_rocksdb_path: None, blocklist_file_path: None, blocklist: None, blocklist_url_max_age_hours: None, @@ -557,6 +559,7 @@ pub fn create_provider_factory( reth_datadir: Option<&Path>, reth_db_path: Option<&Path>, reth_static_files_path: Option<&Path>, + reth_rocksdb_path: Option<&Path>, chain_spec: Arc, rw: bool, root_hash_config: Option, @@ -584,7 +587,7 @@ pub fn create_provider_factory( open_reth_db(&reth_db_path) }?; - let reth_static_files_path = match (reth_static_files_path, reth_datadir) { + let reth_static_files_path = match (reth_static_files_path, reth_datadir.clone()) { (Some(reth_static_files_path), _) => PathBuf::from(reth_static_files_path), (None, Some(reth_datadir)) => reth_datadir.join("static_files"), (None, None) => { @@ -592,8 +595,21 @@ pub fn create_provider_factory( } }; - let provider_factory_reopener = - ProviderFactoryReopener::new(db, chain_spec, reth_static_files_path, root_hash_config)?; + let reth_rocksdb_path = match (reth_rocksdb_path, reth_datadir) { + (Some(reth_rocksdb_path), _) => PathBuf::from(reth_rocksdb_path), + (None, Some(reth_datadir)) => reth_datadir.join("rocksdb"), + (None, None) => { + eyre::bail!("Either reth_rocksdb_path or reth_datadir must be provided") + } + }; + + let provider_factory_reopener = ProviderFactoryReopener::new( + db, + chain_spec, + reth_static_files_path, + reth_rocksdb_path, + root_hash_config, + )?; if provider_factory_reopener .provider_factory_unchecked() @@ -632,7 +648,10 @@ mod test { use reth_db::init_db; use reth_db_common::init::init_genesis; use reth_node_core::dirs::{DataDirPath, MaybePlatformPath}; - use reth_provider::{providers::StaticFileProvider, ProviderFactory}; + use reth_provider::{ + providers::{RocksDBProvider, StaticFileProvider}, + ProviderFactory, + }; use tempfile::TempDir; use tokio_util::sync::CancellationToken; @@ -666,49 +685,72 @@ mod test { let data_dir = MaybePlatformPath::::from(tempdir.keep()); let data_dir = data_dir.unwrap_or_chain_default(Chain::mainnet(), DatadirArgs::default()); - let db = Arc::new(init_db(data_dir.data_dir(), Default::default()).unwrap()); + // Initialize the db at the same path `create_provider_factory` resolves to + // (`/db`). reth 1.11's `ProviderFactory::new` reads storage settings on open and + // errors on an uninitialized db, so the setup must initialize the exact path under test. + let db = Arc::new(init_db(data_dir.db(), Default::default()).unwrap()); let provider_factory = ProviderFactory::>::new( db, SEPOLIA.clone(), StaticFileProvider::read_write(data_dir.static_files().as_path()).unwrap(), - ); + // Initialize RocksDB with the default tables so `create_provider_factory` can open it read-only below. + RocksDBProvider::builder(data_dir.rocksdb().as_path()) + .with_default_tables() + .build() + .unwrap(), + crate::utils::reth_task_runtime(), + ) + .unwrap(); init_genesis(&provider_factory).unwrap(); + // Release the read-write static-files lock before exercising `create_provider_factory`, + // which opens the same path read-only: reth 1.11's storage lock rejects a same-process + // re-lock while the setup factory still holds it. + drop(provider_factory); // Create longer-lived PathBuf values let data_dir_path = data_dir.data_dir(); let db_path = data_dir.db(); let static_files_path = data_dir.static_files(); + let rocksdb_path = data_dir.rocksdb(); let test_cases = [ - // use main dir to resolve reth_db and static_files - (Some(data_dir_path), None, None, true), + // use main dir to resolve reth_db, static_files and rocksdb + (Some(data_dir_path), None, None, None, true), // use main dir to resolve reth_db and provide static_files ( Some(data_dir_path), None, Some(static_files_path.clone()), + None, true, ), - // provide both reth_db and static_files + // provide reth_db, static_files and rocksdb explicitly ( None, Some(db_path.as_path()), Some(static_files_path.clone()), + Some(rocksdb_path.as_path()), true, ), // fail to provide main dir to resolve empty static_files - (None, Some(db_path.as_path()), None, false), + (None, Some(db_path.as_path()), None, None, false), // fail to provide main dir to resolve empty reth_db - (None, None, Some(static_files_path), false), + (None, None, Some(static_files_path), None, false), ]; - for (reth_datadir_path, reth_db_path, reth_static_files_path, should_succeed) in - test_cases.iter() + for ( + reth_datadir_path, + reth_db_path, + reth_static_files_path, + reth_rocksdb_path, + should_succeed, + ) in test_cases.iter() { let result = create_provider_factory( reth_datadir_path.as_deref(), reth_db_path.as_deref(), reth_static_files_path.as_deref(), + reth_rocksdb_path.as_deref(), Default::default(), true, None, diff --git a/crates/rbuilder/src/live_builder/block_output/best_block_from_algorithms.rs b/crates/rbuilder/src/live_builder/block_output/best_block_from_algorithms.rs index 946416ec0..dc4f30500 100644 --- a/crates/rbuilder/src/live_builder/block_output/best_block_from_algorithms.rs +++ b/crates/rbuilder/src/live_builder/block_output/best_block_from_algorithms.rs @@ -1,7 +1,9 @@ use ahash::HashMap; use derivative::Derivative; -use crate::building::builders::block_building_helper::BiddableUnfinishedBlock; +use crate::building::builders::block_building_helper::{ + BiddableUnfinishedBlock, BlockBuildingHelperError, +}; /// BestBlockFromAlgorithms maintains last block by each algorithm /// When new block is created we choose best (by profit) block from last blocks produced by each algorithm. @@ -17,7 +19,7 @@ impl BestBlockFromAlgorithms { pub fn update_with_new_block( &mut self, unfinished_block: BiddableUnfinishedBlock, - ) -> Option { + ) -> Result, BlockBuildingHelperError> { self.last_block_by_algorithm.insert( unfinished_block.block.builder_name().to_string(), unfinished_block, @@ -32,10 +34,10 @@ impl BestBlockFromAlgorithms { .built_block_trace() .transactions_hash(); if self.last_best_block_hash == best_block_hash { - None + Ok(None) } else { self.last_best_block_hash = best_block_hash; - Some(last_best_block.clone()) + Ok(Some(last_best_block.try_clone()?)) } } } @@ -108,7 +110,9 @@ mod tests { let mut data_gen = TestDataGenerator::new(); let mut state = BestBlockFromAlgorithms::default(); let block = data_gen.create_block(U256::from(LOW_VAL), NAME_1); - let best_block = state.update_with_new_block(block.clone()); + let best_block = state + .update_with_new_block(block.try_clone().unwrap()) + .unwrap(); assert_eq!(block.true_block_value, best_block.unwrap().true_block_value); } @@ -119,8 +123,10 @@ mod tests { let mut state = BestBlockFromAlgorithms::default(); let block_low = data_gen.create_block(U256::from(LOW_VAL), NAME_1); let block_high = data_gen.create_block(U256::from(HIGH_VAL), NAME_2); - let _ = state.update_with_new_block(block_low); - let best_block = state.update_with_new_block(block_high.clone()); + let _ = state.update_with_new_block(block_low).unwrap(); + let best_block = state + .update_with_new_block(block_high.try_clone().unwrap()) + .unwrap(); assert_eq!( block_high.true_block_value, best_block.unwrap().true_block_value @@ -134,8 +140,10 @@ mod tests { let mut state = BestBlockFromAlgorithms::default(); let block_low = data_gen.create_block(U256::from(LOW_VAL), NAME_1); let block_high = data_gen.create_block(U256::from(HIGH_VAL), NAME_1); - let _ = state.update_with_new_block(block_low); - let best_block = state.update_with_new_block(block_high.clone()); + let _ = state.update_with_new_block(block_low).unwrap(); + let best_block = state + .update_with_new_block(block_high.try_clone().unwrap()) + .unwrap(); assert_eq!( block_high.true_block_value, best_block.unwrap().true_block_value @@ -150,8 +158,10 @@ mod tests { let block_high = data_gen.create_block(U256::from(HIGH_VAL), NAME_1); let block_low = data_gen.create_block(U256::from(LOW_VAL), NAME_1); - let _ = state.update_with_new_block(block_high); - let best_block = state.update_with_new_block(block_low.clone()); + let _ = state.update_with_new_block(block_high).unwrap(); + let best_block = state + .update_with_new_block(block_low.try_clone().unwrap()) + .unwrap(); assert_eq!( block_low.true_block_value, best_block.unwrap().true_block_value @@ -166,8 +176,10 @@ mod tests { let block_high = data_gen.create_block(U256::from(HIGH_VAL), NAME_1); let block_low = data_gen.create_block(U256::from(LOW_VAL), NAME_2); - let _ = state.update_with_new_block(block_high); - let best_block = state.update_with_new_block(block_low.clone()); + let _ = state.update_with_new_block(block_high).unwrap(); + let best_block = state + .update_with_new_block(block_low.try_clone().unwrap()) + .unwrap(); assert!(best_block.is_none()); } @@ -178,8 +190,10 @@ mod tests { let mut state = BestBlockFromAlgorithms::default(); let block = data_gen.create_block(U256::from(LOW_VAL), NAME_1); - let _ = state.update_with_new_block(block.clone()); - let best_block = state.update_with_new_block(block); + let _ = state + .update_with_new_block(block.try_clone().unwrap()) + .unwrap(); + let best_block = state.update_with_new_block(block).unwrap(); assert!(best_block.is_none()); } } diff --git a/crates/rbuilder/src/live_builder/block_output/unfinished_block_processing.rs b/crates/rbuilder/src/live_builder/block_output/unfinished_block_processing.rs index 7fe3ba2fc..a642b78a8 100644 --- a/crates/rbuilder/src/live_builder/block_output/unfinished_block_processing.rs +++ b/crates/rbuilder/src/live_builder/block_output/unfinished_block_processing.rs @@ -197,7 +197,7 @@ impl PrefinalizedBlockInner { } else { // we clone here because finalizing block multiple times is not supported self.block_building_helper - .box_clone() + .try_clone()? .finalize_block(local_ctx, value, subsidy, competition_bid_context) .map(Some) } @@ -273,7 +273,7 @@ impl MultiPrefinalizedBlock { sent_to_bidder: OffsetDateTime, block_building_helper: Box, local_ctx: ThreadBlockBuildingContext, - ) -> Self { + ) -> Result { let start = Instant::now(); let last_index = last_finalize_commands.len() - 1; let mut prefinalized_blocks_by_relay_set = HashMap::default(); @@ -299,7 +299,7 @@ impl MultiPrefinalizedBlock { { if index != last_index { insert_prefinalized_block( - block_building_helper.box_clone(), + block_building_helper.try_clone()?, local_ctx.clone(), relay_set.clone(), last_finalize_command.clone(), @@ -317,11 +317,11 @@ impl MultiPrefinalizedBlock { let creation_duration = start.elapsed(); add_block_multi_bid_copy_duration(creation_duration); - Self { + Ok(Self { block_id, prefinalized_blocks_by_relay_set, creation_duration, - } + }) } } @@ -397,18 +397,21 @@ impl UnfinishedBuiltBlocksInput { } } - pub fn new_block(&self, block: BiddableUnfinishedBlock) { + pub fn new_block( + &self, + block: BiddableUnfinishedBlock, + ) -> Result<(), BlockBuildingHelperError> { self.built_block_cache .update_from_new_unfinished_block(block.block()); let mut block = if let Some(block) = self .best_block_from_algorithms .lock() - .update_with_new_block(block) + .update_with_new_block(block)? { block } else { - return; + return Ok(()); }; block.chosen_as_best_at = OffsetDateTime::now_utc(); info!(block_id=block.id().0,true_block_value = ?block.true_block_value,chosen_as_best_at=?block.chosen_as_best_at,algo=block.block.builder_name(), "New best block chosen"); @@ -420,6 +423,7 @@ impl UnfinishedBuiltBlocksInput { // update last_unfinalized_block self.last_unfinalized_block.set(block); + Ok(()) } fn seal_command(&self, bid: SlotBidderSealBidCommand) { @@ -574,14 +578,22 @@ impl UnfinishedBuiltBlocksInput { } //let multi_prefinalized_block = MultiPrefinalizedBlock::new_single_prefinalized_block( - let multi_prefinalized_block = MultiPrefinalizedBlock::new( + let multi_prefinalized_block = match MultiPrefinalizedBlock::new( block_id, &self.last_finalize_commands, chosen_as_best_at, OffsetDateTime::now_utc(), block_building_helper, local_ctx, - ); + ) { + Ok(multi_prefinalized_block) => multi_prefinalized_block, + Err(err) => { + if err.is_critical() { + error!(?err, "Failed to create multi prefinalized block"); + } + continue; + } + }; self.pre_finalized_multi_blocks .lock() .push(multi_prefinalized_block); diff --git a/crates/rbuilder/src/live_builder/config.rs b/crates/rbuilder/src/live_builder/config.rs index 5de658107..d78db0005 100644 --- a/crates/rbuilder/src/live_builder/config.rs +++ b/crates/rbuilder/src/live_builder/config.rs @@ -762,6 +762,7 @@ pub fn create_provider_factory( reth_datadir: Option<&Path>, reth_db_path: Option<&Path>, reth_static_files_path: Option<&Path>, + reth_rocksdb_path: Option<&Path>, chain_spec: Arc, root_hash_config: Option, ) -> eyre::Result>>> { @@ -781,8 +782,21 @@ pub fn create_provider_factory( } }; - let provider_factory_reopener = - ProviderFactoryReopener::new(db, chain_spec, reth_static_files_path, root_hash_config)?; + let reth_rocksdb_path = match (reth_rocksdb_path, reth_datadir) { + (Some(reth_rocksdb_path), _) => PathBuf::from(reth_rocksdb_path), + (None, Some(reth_datadir)) => reth_datadir.join("rocksdb"), + (None, None) => { + eyre::bail!("Either reth_rocksdb_path or reth_datadir must be provided") + } + }; + + let provider_factory_reopener = ProviderFactoryReopener::new( + db, + chain_spec, + reth_static_files_path, + reth_rocksdb_path, + root_hash_config, + )?; if provider_factory_reopener .provider_factory_unchecked() diff --git a/crates/rbuilder/src/live_builder/order_input/txpool_fetcher.rs b/crates/rbuilder/src/live_builder/order_input/txpool_fetcher.rs index 3c47a2e8f..6b0b6ec59 100644 --- a/crates/rbuilder/src/live_builder/order_input/txpool_fetcher.rs +++ b/crates/rbuilder/src/live_builder/order_input/txpool_fetcher.rs @@ -118,7 +118,9 @@ async fn get_tx_with_blobs( mod test { use super::*; - use alloy_consensus::{SidecarBuilder, SimpleCoder}; + use alloy_consensus::{ + BlobTransactionSidecar, BlobTransactionSidecarVariant, SidecarBuilder, SimpleCoder, + }; use alloy_network::{EthereumWallet, TransactionBuilder}; use alloy_node_bindings::Anvil; use alloy_primitives::U256; @@ -161,7 +163,8 @@ mod test { let sidecar: SidecarBuilder = SidecarBuilder::from_slice("Blobs are fun!".as_bytes()); - let sidecar = sidecar.build().unwrap(); + let sidecar = sidecar.build::().unwrap(); + let sidecar = BlobTransactionSidecarVariant::Eip4844(sidecar); let gas_price = provider.get_gas_price().await.unwrap(); let eip1559_est = provider.estimate_eip1559_fees().await.unwrap(); diff --git a/crates/rbuilder/src/live_builder/simulation/mod.rs b/crates/rbuilder/src/live_builder/simulation/mod.rs index f065fcff1..b3c9db7b4 100644 --- a/crates/rbuilder/src/live_builder/simulation/mod.rs +++ b/crates/rbuilder/src/live_builder/simulation/mod.rs @@ -151,7 +151,7 @@ where return; } }; - NonceCache::new(state.into()) + NonceCache::new(state) }; let sim_tree = SimTree::new(nonces); diff --git a/crates/rbuilder/src/live_builder/simulation/sim_worker.rs b/crates/rbuilder/src/live_builder/simulation/sim_worker.rs index 4b24a12d8..e684e960b 100644 --- a/crates/rbuilder/src/live_builder/simulation/sim_worker.rs +++ b/crates/rbuilder/src/live_builder/simulation/sim_worker.rs @@ -9,7 +9,6 @@ use crate::{ telemetry::{self, add_sim_thread_utilisation_timings, mark_order_simulation_end}, }; use parking_lot::Mutex; -use reth_provider::StateProvider; use std::{ sync::Arc, thread::sleep, @@ -29,7 +28,7 @@ pub fn run_sim_worker

( ) where P: StateProviderFactory, { - 'main: loop { + loop { if global_cancellation.is_cancelled() { return; } @@ -51,14 +50,21 @@ pub fn run_sim_worker

( let mut last_sim_finished = Instant::now(); - let state_provider: Arc = + // Open one state provider for the whole context and reuse it (and its shared read cache) + // across every order. + let state_provider = match provider.history_by_block_hash(current_sim_context.block_ctx.attributes.parent) { - Ok(state_provider) => Arc::from(state_provider), + Ok(state_provider) => state_provider, Err(err) => { error!(?err, "Error while getting state for block"); - continue 'main; + continue; } }; + let mut cached = CachedDB::new( + state_provider, + current_sim_context.block_ctx.shared_cached_reads.clone(), + ); + while let Ok(cancellable_task) = current_sim_context.requests.recv() { // Avoid starting sims when the output channel is closed. if current_sim_context.results.is_closed() { @@ -70,10 +76,6 @@ pub fn run_sim_worker

( let order_id = task.order.id(); let start_time = Instant::now(); - let cached = CachedDB::new( - state_provider.clone(), - current_sim_context.block_ctx.shared_cached_reads.clone(), - ); let mut block_state = BlockState::new(cached); let sim_result = simulate_order( task.parents.clone(), @@ -82,6 +84,8 @@ pub fn run_sim_worker

( &mut local_ctx, &mut block_state, ); + // Reclaim the cache (live provider + shared reads) for the next order. + cached = block_state.into_db(); let sim_ok = match sim_result { Ok(sim_result) => { let sim_ok = match sim_result.result { diff --git a/crates/rbuilder/src/provider/ipc_state_provider.rs b/crates/rbuilder/src/provider/ipc_state_provider.rs index 7dbd9ac83..09b002887 100644 --- a/crates/rbuilder/src/provider/ipc_state_provider.rs +++ b/crates/rbuilder/src/provider/ipc_state_provider.rs @@ -56,7 +56,7 @@ pub struct IpcStateProviderFactory { ipc_provider: RpcProvider, code_cache: Arc>, - state_provider_by_hash: Arc>>, + state_provider_by_hash: Arc>, } impl IpcStateProviderFactory { @@ -126,14 +126,16 @@ impl StateProviderFactory for IpcStateProviderFactory { return Ok(Box::new(state)); } - let state = IpcStateProvider::into_boxed( + // `IpcStateProvider` is cheap to clone and shares its per-block caches between clones, so + // we keep one in the cache and hand out a clone to preserve the previous sharing semantics. + let state = IpcStateProvider::new( self.ipc_provider.clone(), block.into(), self.code_cache.clone(), ); - self.state_provider_by_hash.insert(block, *state.clone()); - Ok(state) + self.state_provider_by_hash.insert(block, state.clone()); + Ok(Box::new(state)) } /// Gets block header given block hash @@ -197,13 +199,13 @@ pub struct IpcStateProvider { ipc_provider: RpcProvider, block_id: BlockId, - // Per block cache - block_hash_cache: DashMap, + // Per block cache, shared between clones so cloning a provider keeps the warmed-up cache. + block_hash_cache: Arc>, // Note: It's ok to cache Account (and Storage) even in case of None, this is because StateProvider gives the // state for some past block, so if account didn't exist the first time, it cannot magically // appear later on - account_cache: DashMap>, - storage_cache: DashMap<(Address, StorageKey), Option>, + account_cache: Arc>>, + storage_cache: Arc>>, // Global cache (cache not related to specific block) code_cache: Arc>, @@ -222,22 +224,19 @@ impl IpcStateProvider { code_cache, - block_hash_cache: DashMap::new(), - storage_cache: DashMap::new(), - account_cache: DashMap::new(), + block_hash_cache: Arc::new(DashMap::new()), + storage_cache: Arc::new(DashMap::new()), + account_cache: Arc::new(DashMap::new()), } } /// Crates new instance of state provider on the heap - // Box::new(Arc::new(Self)) is required because StateProviderFactory returns Box - // Note: this is known clippy issue: https://github.com/rust-lang/rust-clippy/issues/7472 - #[allow(clippy::redundant_allocation)] fn into_boxed( ipc_provider: RpcProvider, block_id: BlockId, code_cache: Arc>, - ) -> Box> { - Box::new(Arc::new(Self::new(ipc_provider, block_id, code_cache))) + ) -> Box { + Box::new(Self::new(ipc_provider, block_id, code_cache)) } } @@ -286,6 +285,16 @@ impl StateProvider for IpcStateProvider { Ok(storage) } + + /// Get storage using a pre-hashed storage key. Unsupported over IPC: the plain storage key + /// required by `eth_getStorageAt` cannot be recovered from its hash. + fn storage_by_hashed_key( + &self, + _account: Address, + _hashed_storage_key: StorageKey, + ) -> ProviderResult> { + Err(ProviderError::UnsupportedProvider) + } } impl BlockHashReader for IpcStateProvider { diff --git a/crates/rbuilder/src/provider/mod.rs b/crates/rbuilder/src/provider/mod.rs index 67a28d9a7..457e5f3cd 100644 --- a/crates/rbuilder/src/provider/mod.rs +++ b/crates/rbuilder/src/provider/mod.rs @@ -1,4 +1,4 @@ -use std::sync::mpsc; +use std::sync::{mpsc, Arc}; use crate::{ building::ThreadBlockBuildingContext, live_builder::simulation::SimulatedOrderCommand, @@ -12,6 +12,32 @@ use reth_errors::ProviderResult; use reth_provider::StateProviderBox; use revm::database::BundleState; +/// Opens a [`StateProviderBox`] for a fixed parent block from a shared [`StateProviderFactory`]. +/// +/// This is the unit shared across building threads instead of a single already-opened provider: +/// the factory handle and the block id are `Send + Sync`, so the source is too, and each consumer +/// opens its own `Send`-only provider on demand. Pairing the factory with the parent block also +/// removes the class of bugs where a provider is opened for the wrong block. +#[derive(Clone)] +pub struct StateProviderSource { + factory: Arc, + parent_hash: BlockHash, +} + +impl StateProviderSource { + pub fn new(factory: Arc, parent_hash: BlockHash) -> Self { + Self { + factory, + parent_hash, + } + } + + /// Opens a fresh state provider for the configured parent block. + pub fn state_provider(&self) -> ProviderResult { + self.factory.history_by_block_hash(self.parent_hash) + } +} + pub mod ipc_state_provider; pub mod reth_prov; pub mod state_provider_factory_from_provider_factory; diff --git a/crates/rbuilder/src/provider/reth_prov.rs b/crates/rbuilder/src/provider/reth_prov.rs index c3ed1c270..c9a13602a 100644 --- a/crates/rbuilder/src/provider/reth_prov.rs +++ b/crates/rbuilder/src/provider/reth_prov.rs @@ -4,8 +4,9 @@ use alloy_eips::BlockNumHash; use alloy_primitives::{BlockHash, BlockNumber, B256}; use reth_errors::ProviderResult; use reth_provider::{ - BlockReader, DatabaseProviderFactory, HeaderProvider, PruneCheckpointReader, - StageCheckpointReader, StateProviderBox, TrieReader, + BlockReader, ChangeSetReader, DBProvider, DatabaseProviderFactory, HeaderProvider, + PruneCheckpointReader, StageCheckpointReader, StateProviderBox, StorageChangeSetReader, + StorageSettingsCache, }; use tracing::error; @@ -30,8 +31,15 @@ impl

StateProviderFactoryFromRethProvider

{ impl

StateProviderFactory for StateProviderFactoryFromRethProvider

where P: DatabaseProviderFactory< - Provider: BlockReader + TrieReader + StageCheckpointReader + PruneCheckpointReader, + Provider: BlockReader + + StageCheckpointReader + + PruneCheckpointReader + + ChangeSetReader + + StorageChangeSetReader + + DBProvider + + StorageSettingsCache, > + reth_provider::StateProviderFactory + + reth_provider::HashedPostStateProvider + HeaderProvider

+ Clone + 'static, @@ -69,7 +77,6 @@ where } fn root_hasher(&self, parent_num_hash: BlockNumHash) -> ProviderResult> { - let hasher = self.history_by_block_hash(parent_num_hash.hash)?; let parent_state_root = self .provider .header_by_hash_or_number(parent_num_hash.hash.into())? @@ -82,7 +89,7 @@ where parent_state_root, self.root_hash_context.clone(), self.provider.clone(), - hasher, + self.provider.clone(), ))) } } diff --git a/crates/rbuilder/src/roothash/mod.rs b/crates/rbuilder/src/roothash/mod.rs index e4db93915..c98849f5b 100644 --- a/crates/rbuilder/src/roothash/mod.rs +++ b/crates/rbuilder/src/roothash/mod.rs @@ -4,10 +4,12 @@ use alloy_primitives::{Address, Bytes, B256}; use eth_sparse_mpt::*; use reth::providers::providers::ConsistentDbView; use reth_provider::{ - providers::OverlayStateProviderFactory, BlockReader, DatabaseProviderFactory, - HashedPostStateProvider, PruneCheckpointReader, StageCheckpointReader, TrieReader, + providers::OverlayStateProviderFactory, BlockReader, ChangeSetReader, DBProvider, + DatabaseProviderFactory, HashedPostStateProvider, PruneCheckpointReader, StageCheckpointReader, + StorageChangeSetReader, StorageSettingsCache, }; use reth_trie::TrieInput; +use reth_trie_db::ChangesetCache; use reth_trie_parallel::root::{ParallelStateRoot, ParallelStateRootError}; use revm::database::BundleState; use tracing::trace; @@ -81,7 +83,13 @@ pub fn calculate_account_proofs

( ) -> Result>, RootHashError> where P: DatabaseProviderFactory< - Provider: BlockReader + TrieReader + StageCheckpointReader + PruneCheckpointReader, + Provider: BlockReader + + StageCheckpointReader + + PruneCheckpointReader + + ChangeSetReader + + StorageChangeSetReader + + DBProvider + + StorageSettingsCache, > + Send + Sync + Clone @@ -121,19 +129,26 @@ fn calculate_parallel_root_hash( where HasherType: HashedPostStateProvider, P: DatabaseProviderFactory< - Provider: BlockReader + TrieReader + StageCheckpointReader + PruneCheckpointReader, + Provider: BlockReader + + StageCheckpointReader + + PruneCheckpointReader + + ChangeSetReader + + StorageChangeSetReader + + DBProvider + + StorageSettingsCache, > + Send + Sync + Clone + 'static, { - let overlay = OverlayStateProviderFactory::new(provider); + let overlay = OverlayStateProviderFactory::new(provider, ChangesetCache::new()); let hashed_post_state = hasher.hashed_post_state(outcome); let parallel_root_calculator = ParallelStateRoot::new( overlay, TrieInput::from_state(hashed_post_state) .prefix_sets .freeze(), + crate::utils::reth_task_runtime(), ); parallel_root_calculator.incremental_root() } @@ -150,9 +165,15 @@ pub fn calculate_state_root( config: &RootHashContext, ) -> Result where - HasherType: HashedPostStateProvider, + HasherType: HashedPostStateProvider + Send + Sync, P: DatabaseProviderFactory< - Provider: BlockReader + TrieReader + StageCheckpointReader + PruneCheckpointReader, + Provider: BlockReader + + StageCheckpointReader + + PruneCheckpointReader + + ChangeSetReader + + StorageChangeSetReader + + DBProvider + + StorageSettingsCache, > + Send + Sync + Clone diff --git a/crates/rbuilder/src/utils/mod.rs b/crates/rbuilder/src/utils/mod.rs index c9239b201..8e38db51b 100644 --- a/crates/rbuilder/src/utils/mod.rs +++ b/crates/rbuilder/src/utils/mod.rs @@ -10,9 +10,7 @@ use rbuilder_primitives::{ serialize::{RawTx, TxEncoding}, TransactionSignedEcRecoveredWithBlobs, }; -use reth_chainspec::ChainSpec; -use reth_evm_ethereum::revm_spec_by_timestamp_and_block_number; -use revm::context::CfgEnv; +use reth::tasks::{Runtime, RuntimeBuilder, RuntimeConfig}; use time::{format_description::well_known::Rfc3339, OffsetDateTime}; pub mod bls; @@ -32,6 +30,31 @@ pub use provider_factory_reopen::{ ProviderFactoryReopener, RootHasherImpl, }; +/// Process-wide reth task [`Runtime`] shared by every rbuilder component that needs one +/// (`ProviderFactory`, `ParallelStateRoot`). Built once on first use and cached: the reth +/// `Runtime` owns several rayon thread pools, so rebuilding it per call would spawn and tear +/// down those pools every time. The returned handle is `Arc`-backed, so cloning is cheap. +/// +/// Attaches to the ambient tokio runtime when first called from within one, otherwise builds a +/// standalone runtime. +pub(crate) fn reth_task_runtime() -> Runtime { + static RUNTIME: std::sync::OnceLock = std::sync::OnceLock::new(); + RUNTIME + .get_or_init(|| { + let config = match tokio::runtime::Handle::try_current() { + Ok(handle) => RuntimeConfig::with_existing_handle(handle), + Err(_) => RuntimeConfig::default(), + }; + // Invariant: building the process-wide task runtime is a startup operation. If it + // fails the builder cannot compute state roots or open the provider factory, so there + // is no meaningful way to continue. + RuntimeBuilder::new(config) + .build() + .expect("failed to build the process-wide reth task runtime") + }) + .clone() +} + pub mod reconnect; mod tx_signer; @@ -140,13 +163,6 @@ pub fn gen_uid() -> u64 { rand::random() } -pub fn default_cfg_env(chain_spec: &ChainSpec, block_timestamp: u64, block_number: u64) -> CfgEnv { - let spec = revm_spec_by_timestamp_and_block_number(chain_spec, block_timestamp, block_number); - CfgEnv::new() - .with_chain_id(chain_spec.chain().id()) - .with_spec(spec) -} - pub fn unix_timestamp_now() -> u64 { time::OffsetDateTime::now_utc() .unix_timestamp() diff --git a/crates/rbuilder/src/utils/noncer.rs b/crates/rbuilder/src/utils/noncer.rs index 4234ff172..8ddd7a7f3 100644 --- a/crates/rbuilder/src/utils/noncer.rs +++ b/crates/rbuilder/src/utils/noncer.rs @@ -2,7 +2,7 @@ use alloy_primitives::Address; use dashmap::DashMap; use derivative::Derivative; use reth_errors::ProviderResult; -use reth_provider::StateProvider; +use reth_provider::{StateProvider, StateProviderBox}; use std::sync::Arc; /// Struct to get nonces for Addresses, caching the results. @@ -10,12 +10,12 @@ use std::sync::Arc; #[derivative(Debug)] pub struct NonceCache { #[derivative(Debug = "ignore")] - state: Arc, + state: StateProviderBox, cache: Arc>, } impl NonceCache { - pub fn new(state: Arc) -> Self { + pub fn new(state: StateProviderBox) -> Self { Self { state, cache: Arc::new(DashMap::default()), diff --git a/crates/rbuilder/src/utils/provider_factory_reopen.rs b/crates/rbuilder/src/utils/provider_factory_reopen.rs index 1a9f29d19..0b28dfbc3 100644 --- a/crates/rbuilder/src/utils/provider_factory_reopen.rs +++ b/crates/rbuilder/src/utils/provider_factory_reopen.rs @@ -13,15 +13,16 @@ use alloy_eips::BlockNumHash; use alloy_primitives::{Address, BlockHash, BlockNumber, Bytes, B256}; use eth_sparse_mpt::*; use parking_lot::Mutex; +use rbuilder_utils::reth_db::open_rocksdb_read_only; use reth::providers::{BlockHashReader, ChainSpecProvider, ProviderFactory}; use reth_db::DatabaseError; use reth_errors::{ProviderError, ProviderResult, RethResult}; use reth_node_api::{NodePrimitives, NodeTypesWithDB}; use reth_provider::{ providers::{ProviderNodeTypes, StaticFileProvider}, - BlockNumReader, BlockReader, DatabaseProviderFactory, HashedPostStateProvider, HeaderProvider, - PruneCheckpointReader, StageCheckpointReader, StateProviderBox, StaticFileProviderFactory, - TrieReader, + BlockNumReader, BlockReader, ChangeSetReader, DBProvider, DatabaseProviderFactory, + HashedPostStateProvider, HeaderProvider, PruneCheckpointReader, StageCheckpointReader, + StateProviderBox, StorageChangeSetReader, StorageSettingsCache, }; use revm::database::BundleState; use std::{ @@ -31,6 +32,15 @@ use std::{ }; use tracing::{debug, error}; +/// On-disk paths a [`ProviderFactoryReopener`] needs to recreate its [`ProviderFactory`] when it +/// detects an inconsistency. `None` for factories built via [`ProviderFactoryReopener::new_from_existing`] +/// (tests), which cannot recover these paths from an existing factory and never reopen. +#[derive(Debug, Clone)] +struct ReopenPaths { + static_files_path: PathBuf, + rocksdb_path: PathBuf, +} + /// This struct is used as a workaround for https://github.com/paradigmxyz/reth/issues/7836 /// it shares one instance of the provider factory that is recreated when inconsistency is detected. /// This struct should be used on the level of the whole program and ProviderFactory should be extracted from it @@ -39,9 +49,9 @@ use tracing::{debug, error}; pub struct ProviderFactoryReopener { provider_factory: Arc>>, chain_spec: Arc, - static_files_path: PathBuf, - /// Patch to disable checking on test mode. Is ugly but ProviderFactoryReopener should die shortly (5/24/2024). - testing_mode: bool, + /// Paths to recreate the factory on reopen. `None` disables consistency checks and reopening + /// (used by tests via [`Self::new_from_existing`]). + reopen_paths: Option, /// None ->No root hash (MockRootHasher) root_hash_config: Option, } @@ -52,20 +62,25 @@ impl ProviderFactoryReopener db: N::DB, chain_spec: Arc, static_files_path: PathBuf, + rocksdb_path: PathBuf, root_hash_config: Option, ) -> RethResult { let provider_factory = ProviderFactory::new( db, chain_spec.clone(), StaticFileProvider::read_only(static_files_path.as_path(), true).unwrap(), - ); + open_rocksdb_read_only(rocksdb_path.as_path())?, + super::reth_task_runtime(), + )?; Ok(Self { provider_factory: Arc::new(Mutex::new(provider_factory)), chain_spec, - static_files_path, + reopen_paths: Some(ReopenPaths { + static_files_path, + rocksdb_path, + }), root_hash_config, - testing_mode: false, }) } @@ -74,13 +89,11 @@ impl ProviderFactoryReopener root_hash_config: Option, ) -> RethResult { let chain_spec = provider_factory.chain_spec(); - let static_files_path = provider_factory.static_file_provider().path().to_path_buf(); Ok(Self { provider_factory: Arc::new(Mutex::new(provider_factory)), chain_spec, - static_files_path, + reopen_paths: None, root_hash_config, - testing_mode: true, }) } @@ -97,38 +110,44 @@ impl ProviderFactoryReopener /// If the current block number is already known at the time of calling this method, you may pass it to /// avoid an additional DB lookup for the latest block number. pub fn check_consistency_and_reopen_if_needed(&self) -> eyre::Result> { + // Without reopen paths (factories built via `new_from_existing`) consistency checks are + // disabled, since the factory cannot be recreated. + let Some(reopen_paths) = &self.reopen_paths else { + return Ok(self.provider_factory_unchecked()); + }; + let best_block_number = self .provider_factory_unchecked() .last_block_number() .map_err(|err| eyre::eyre!("Error getting best block number: {:?}", err))?; let mut provider_factory = self.provider_factory.lock(); - if !self.testing_mode { - match check_block_hash_reader_health(best_block_number, provider_factory.deref_mut()) { - Ok(()) => {} - Err(err) => { - debug!(?err, "Provider factory is inconsistent, reopening"); - inc_provider_reopen_counter(); + match check_block_hash_reader_health(best_block_number, provider_factory.deref_mut()) { + Ok(()) => {} + Err(err) => { + debug!(?err, "Provider factory is inconsistent, reopening"); + inc_provider_reopen_counter(); - *provider_factory = ProviderFactory::new( - provider_factory.db_ref().clone(), - self.chain_spec.clone(), - StaticFileProvider::read_only(self.static_files_path.as_path(), true) - .unwrap(), - ); - } + *provider_factory = ProviderFactory::new( + provider_factory.db_ref().clone(), + self.chain_spec.clone(), + StaticFileProvider::read_only(reopen_paths.static_files_path.as_path(), true) + .unwrap(), + open_rocksdb_read_only(reopen_paths.rocksdb_path.as_path())?, + super::reth_task_runtime(), + )?; } + } - match check_block_hash_reader_health(best_block_number, provider_factory.deref_mut()) { - Ok(()) => {} - Err(err) => { - inc_provider_bad_reopen_counter(); + match check_block_hash_reader_health(best_block_number, provider_factory.deref_mut()) { + Ok(()) => {} + Err(err) => { + inc_provider_bad_reopen_counter(); - eyre::bail!( - "Provider factory is inconsistent after reopening: {:?}", - err - ); - } + eyre::bail!( + "Provider factory is inconsistent after reopening: {:?}", + err + ); } } Ok(provider_factory.clone()) @@ -294,9 +313,15 @@ impl RootHasherImpl { impl RootHasher for RootHasherImpl where - HasherType: HashedPostStateProvider, + HasherType: HashedPostStateProvider + Send + Sync, T: DatabaseProviderFactory< - Provider: BlockReader + TrieReader + StageCheckpointReader + PruneCheckpointReader, + Provider: BlockReader + + StageCheckpointReader + + PruneCheckpointReader + + ChangeSetReader + + StorageChangeSetReader + + DBProvider + + StorageSettingsCache, > + Send + Sync + Clone diff --git a/crates/reth-rbuilder/src/main.rs b/crates/reth-rbuilder/src/main.rs index 999a1ba78..d20f1534c 100644 --- a/crates/reth-rbuilder/src/main.rs +++ b/crates/reth-rbuilder/src/main.rs @@ -22,8 +22,9 @@ use reth::{ }; use reth_node_ethereum::{node::EthereumAddOns, EthereumNode}; use reth_provider::{ - providers::BlockchainProvider, BlockReader, ChainSpecProvider, DatabaseProviderFactory, - HeaderProvider, PruneCheckpointReader, StageCheckpointReader, TrieReader, + providers::BlockchainProvider, BlockReader, ChainSpecProvider, ChangeSetReader, DBProvider, + DatabaseProviderFactory, HashedPostStateProvider, HeaderProvider, PruneCheckpointReader, + StageCheckpointReader, StorageChangeSetReader, StorageSettingsCache, }; use reth_transaction_pool::{blobstore::DiskFileBlobStore, EthTransactionPool}; use std::{ @@ -88,8 +89,15 @@ fn spawn_rbuilder

( config_path: PathBuf, ) where P: DatabaseProviderFactory< - Provider: BlockReader + TrieReader + StageCheckpointReader + PruneCheckpointReader, + Provider: BlockReader + + StageCheckpointReader + + PruneCheckpointReader + + ChangeSetReader + + StorageChangeSetReader + + DBProvider + + StorageSettingsCache, > + reth_provider::StateProviderFactory + + HashedPostStateProvider + HeaderProvider

+ reth_provider::ChainSpecProvider + Clone