diff --git a/.github/assets/check_wasm.sh b/.github/assets/check_wasm.sh index 3c72a8d189e..50f39021e53 100755 --- a/.github/assets/check_wasm.sh +++ b/.github/assets/check_wasm.sh @@ -68,6 +68,7 @@ exclude_crates=( reth-payload-builder # reth-metrics reth-provider # tokio reth-prune # tokio + reth-prune-db # mdbx reth-stages-api # reth-provider, reth-prune reth-static-file # tokio reth-transaction-pool # c-kzg diff --git a/Cargo.lock b/Cargo.lock index dbfc2f99a6f..c4ce21d0753 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -88,9 +88,9 @@ checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923" [[package]] name = "alloy-chains" -version = "0.2.14" +version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf01dd83a1ca5e4807d0ca0223c9615e211ce5db0a9fd1443c2778cacf89b546" +checksum = "0bbb778f50ecb0cebfb5c05580948501927508da7bd628833a8c4bd8545e23e2" dependencies = [ "alloy-primitives", "alloy-rlp", @@ -253,9 +253,9 @@ dependencies = [ [[package]] name = "alloy-evm" -version = "0.22.4" +version = "0.22.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83ce19ea6140497670b1b7e721f9a9ce88022fe475a5e4e6a68a403499cca209" +checksum = "28bd79e109f2b3ff81ed1a93ed3d07cf175ca627fd4fad176df721041cc40dcc" dependencies = [ "alloy-consensus", "alloy-eips", @@ -370,9 +370,9 @@ dependencies = [ [[package]] name = "alloy-op-evm" -version = "0.22.4" +version = "0.22.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d7aeaf6051f53880a65b547c43e3b05ee42f68236b1f43f013abfe4eadc47bb" +checksum = "35db78840a29b14fec51f3399a6dc82ecc815a5766eb80b32e69a0c92adddc14" dependencies = [ "alloy-consensus", "alloy-eips", @@ -515,7 +515,7 @@ checksum = "64b728d511962dda67c1bc7ea7c03736ec275ed2cf4c35d9585298ac9ccf3b73" dependencies = [ "proc-macro2", "quote", - "syn 2.0.107", + "syn 2.0.108", ] [[package]] @@ -765,7 +765,7 @@ dependencies = [ "proc-macro-error2", "proc-macro2", "quote", - "syn 2.0.107", + "syn 2.0.108", ] [[package]] @@ -781,7 +781,7 @@ dependencies = [ "proc-macro-error2", "proc-macro2", "quote", - "syn 2.0.107", + "syn 2.0.108", "syn-solidity", "tiny-keccak", ] @@ -798,7 +798,7 @@ dependencies = [ "macro-string", "proc-macro2", "quote", - "syn 2.0.107", + "syn 2.0.108", "syn-solidity", ] @@ -931,7 +931,7 @@ dependencies = [ "darling 0.21.3", "proc-macro2", "quote", - "syn 2.0.107", + "syn 2.0.108", ] [[package]] @@ -1016,7 +1016,7 @@ dependencies = [ "proc-macro-error2", "proc-macro2", "quote", - "syn 2.0.107", + "syn 2.0.108", ] [[package]] @@ -1158,7 +1158,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "62945a2f7e6de02a31fe400aa489f0e0f5b2502e69f95f853adb82a96c7a6b60" dependencies = [ "quote", - "syn 2.0.107", + "syn 2.0.108", ] [[package]] @@ -1196,7 +1196,7 @@ dependencies = [ "num-traits", "proc-macro2", "quote", - "syn 2.0.107", + "syn 2.0.108", ] [[package]] @@ -1285,7 +1285,7 @@ checksum = "213888f660fddcca0d257e88e54ac05bca01885f258ccdf695bafd77031bb69d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.107", + "syn 2.0.108", ] [[package]] @@ -1402,7 +1402,7 @@ checksum = "c7c24de15d275a1ecfd47a380fb4d5ec9bfe0933f309ed5e705b775596a3574d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.107", + "syn 2.0.108", ] [[package]] @@ -1413,7 +1413,7 @@ checksum = "9035ad2d096bed7955a320ee7e2230574d28fd3c3a0f186cbea1ff3c7eed5dbb" dependencies = [ "proc-macro2", "quote", - "syn 2.0.107", + "syn 2.0.108", ] [[package]] @@ -1451,7 +1451,7 @@ checksum = "ffdcb70bdbc4d478427380519163274ac86e52916e10f0a8889adf0f96d3fee7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.107", + "syn 2.0.108", ] [[package]] @@ -1569,7 +1569,7 @@ version = "0.71.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5f58bf3d7db68cfbac37cfc485a8d711e87e064c3d0fe0435b92f7a407f9d6b3" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "cexpr", "clang-sys", "itertools 0.13.0", @@ -1578,7 +1578,7 @@ dependencies = [ "regex", "rustc-hash", "shlex", - "syn 2.0.107", + "syn 2.0.108", ] [[package]] @@ -1587,7 +1587,7 @@ version = "0.72.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "993776b509cfb49c750f11b8f07a46fa23e0a1386ffc01fb1e7d343efc387895" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "cexpr", "clang-sys", "itertools 0.13.0", @@ -1596,7 +1596,7 @@ dependencies = [ "regex", "rustc-hash", "shlex", - "syn 2.0.107", + "syn 2.0.108", ] [[package]] @@ -1638,12 +1638,12 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitflags" -version = "2.9.4" +version = "2.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2261d10cca569e4643e526d8dc2e62e433cc8aba21ab764233731f8d369bf394" +checksum = "812e12b5285cc515a9c72a5c1d3b6d46a19dac5acfef5265968c166106e31dd3" dependencies = [ "arbitrary", - "serde", + "serde_core", ] [[package]] @@ -1695,7 +1695,7 @@ version = "0.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2c340fe0f0b267787095cbe35240c6786ff19da63ec7b69367ba338eace8169b" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "boa_interner", "boa_macros", "boa_string", @@ -1711,7 +1711,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f620c3f06f51e65c0504ddf04978be1b814ac6586f0b45f6019801ab5efd37f9" dependencies = [ "arrayvec", - "bitflags 2.9.4", + "bitflags 2.10.0", "boa_ast", "boa_gc", "boa_interner", @@ -1786,7 +1786,7 @@ checksum = "9fd3f870829131332587f607a7ff909f1af5fc523fd1b192db55fbbdf52e8d3c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.107", + "syn 2.0.108", "synstructure", ] @@ -1796,7 +1796,7 @@ version = "0.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9cc142dac798cdc6e2dbccfddeb50f36d2523bb977a976e19bdb3ae19b740804" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "boa_ast", "boa_interner", "boa_macros", @@ -1914,7 +1914,7 @@ checksum = "f9abbd1bc6865053c427f7198e6af43bfdedc55ab791faed4fbd361d789575ff" dependencies = [ "proc-macro2", "quote", - "syn 2.0.107", + "syn 2.0.108", ] [[package]] @@ -2116,9 +2116,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.5.49" +version = "4.5.50" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4512b90fa68d3a9932cea5184017c5d200f5921df706d45e853537dea51508f" +checksum = "0c2cfd7bf8a6017ddaa4e32ffe7403d547790db06bd171c1c53926faab501623" dependencies = [ "clap_builder", "clap_derive", @@ -2126,9 +2126,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.5.49" +version = "4.5.50" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0025e98baa12e766c67ba13ff4695a887a1eba19569aad00a472546795bd6730" +checksum = "0a4c05b9e80c5ccd3a7ef080ad7b6ba7d6fc00a985b8b157197075677c82c7a0" dependencies = [ "anstream", "anstyle", @@ -2145,7 +2145,7 @@ dependencies = [ "heck", "proc-macro2", "quote", - "syn 2.0.107", + "syn 2.0.108", ] [[package]] @@ -2537,7 +2537,7 @@ version = "0.28.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "829d955a0bb380ef178a640b91779e3987da38c9aea133b20614cfed8cdea9c6" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "crossterm_winapi", "mio", "parking_lot", @@ -2553,7 +2553,7 @@ version = "0.29.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d8b9f2e4c67f833b660cdb0a3523065869fb35570177239812ed4c905aeff87b" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "crossterm_winapi", "document-features", "parking_lot", @@ -2653,7 +2653,7 @@ checksum = "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.107", + "syn 2.0.108", ] [[package]] @@ -2687,7 +2687,7 @@ dependencies = [ "proc-macro2", "quote", "strsim", - "syn 2.0.107", + "syn 2.0.108", ] [[package]] @@ -2702,7 +2702,7 @@ dependencies = [ "quote", "serde", "strsim", - "syn 2.0.107", + "syn 2.0.108", ] [[package]] @@ -2713,7 +2713,7 @@ checksum = "fc34b93ccb385b40dc71c6fceac4b2ad23662c7eeb248cf10d529b7e055b6ead" dependencies = [ "darling_core 0.20.11", "quote", - "syn 2.0.107", + "syn 2.0.108", ] [[package]] @@ -2724,7 +2724,7 @@ checksum = "d38308df82d1080de0afee5d069fa14b0326a88c14f15c5ccda35b4a6c414c81" dependencies = [ "darling_core 0.21.3", "quote", - "syn 2.0.107", + "syn 2.0.108", ] [[package]] @@ -2777,7 +2777,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8d162beedaa69905488a8da94f5ac3edb4dd4788b732fadb7bd120b2625c1976" dependencies = [ "data-encoding", - "syn 2.0.107", + "syn 2.0.108", ] [[package]] @@ -2836,7 +2836,7 @@ checksum = "ef941ded77d15ca19b40374869ac6000af1c9f2a4c0f3d4c70926287e6364a8f" dependencies = [ "proc-macro2", "quote", - "syn 2.0.107", + "syn 2.0.108", ] [[package]] @@ -2847,7 +2847,7 @@ checksum = "1e567bd82dcff979e4b03460c307b3cdc9e96fde3d73bed1496d2bc75d9dd62a" dependencies = [ "proc-macro2", "quote", - "syn 2.0.107", + "syn 2.0.108", ] [[package]] @@ -2868,7 +2868,7 @@ dependencies = [ "darling 0.20.11", "proc-macro2", "quote", - "syn 2.0.107", + "syn 2.0.108", ] [[package]] @@ -2878,7 +2878,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ab63b0e2bf4d5928aff72e83a7dace85d7bba5fe12dcc3c5a572d78caffd3f3c" dependencies = [ "derive_builder_core", - "syn 2.0.107", + "syn 2.0.108", ] [[package]] @@ -2899,7 +2899,7 @@ dependencies = [ "convert_case", "proc-macro2", "quote", - "syn 2.0.107", + "syn 2.0.108", "unicode-xid", ] @@ -3013,7 +3013,7 @@ checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.107", + "syn 2.0.108", ] [[package]] @@ -3024,9 +3024,9 @@ checksum = "aac81fa3e28d21450aa4d2ac065992ba96a1d7303efbce51a95f4fd175b67562" [[package]] name = "document-features" -version = "0.2.11" +version = "0.2.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95249b50c6c185bee49034bcb378a49dc2b5dff0be90ff6616d31d64febab05d" +checksum = "d4b8a88685455ed29a21542a33abd9cb6510b6b129abadabdcef0f4c55bc8f61" dependencies = [ "litrs", ] @@ -3092,7 +3092,7 @@ dependencies = [ "enum-ordinalize", "proc-macro2", "quote", - "syn 2.0.107", + "syn 2.0.108", ] [[package]] @@ -3200,7 +3200,7 @@ dependencies = [ "heck", "proc-macro2", "quote", - "syn 2.0.107", + "syn 2.0.108", ] [[package]] @@ -3220,7 +3220,7 @@ checksum = "0d28318a75d4aead5c4db25382e8ef717932d0346600cacae6357eb5941bc5ff" dependencies = [ "proc-macro2", "quote", - "syn 2.0.107", + "syn 2.0.108", ] [[package]] @@ -3296,7 +3296,7 @@ dependencies = [ "darling 0.20.11", "proc-macro2", "quote", - "syn 2.0.107", + "syn 2.0.108", ] [[package]] @@ -3823,9 +3823,9 @@ dependencies = [ [[package]] name = "flate2" -version = "1.1.4" +version = "1.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc5a4e564e38c699f2880d3fda590bedc2e69f3f84cd48b457bd892ce61d0aa9" +checksum = "bfe33edd8e85a12a67454e37f8c75e730830d83e313556ab9ebf9ee7fbeb3bfb" dependencies = [ "crc32fast", "miniz_oxide", @@ -3944,7 +3944,7 @@ checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" dependencies = [ "proc-macro2", "quote", - "syn 2.0.107", + "syn 2.0.108", ] [[package]] @@ -4072,7 +4072,7 @@ version = "0.20.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2deb07a133b1520dc1a5690e9bd08950108873d7ed5de38dcc74d3b5ebffa110" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "libc", "libgit2-sys", "log", @@ -4740,7 +4740,7 @@ checksum = "1ec89e9337638ecdc08744df490b221a7399bf8d164eb52a665454e60e075ad6" dependencies = [ "proc-macro2", "quote", - "syn 2.0.107", + "syn 2.0.108", ] [[package]] @@ -4797,7 +4797,7 @@ checksum = "a0eb5a3343abf848c0984fe4604b2b105da9539376e24fc0a3b0007411ae4fd9" dependencies = [ "proc-macro2", "quote", - "syn 2.0.107", + "syn 2.0.108", ] [[package]] @@ -4851,9 +4851,12 @@ dependencies = [ [[package]] name = "indoc" -version = "2.0.6" +version = "2.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4c7245a08504955605670dbf141fceab975f15ca21570696aebe9d2e71576bd" +checksum = "79cf5c93f93228cf8efb3ba362535fb11199ac548a09ce117c9b1adc3030d706" +dependencies = [ + "rustversion", +] [[package]] name = "infer" @@ -4867,7 +4870,7 @@ version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f37dccff2791ab604f9babef0ba14fbe0be30bd368dc541e2b08d07c8aa908f3" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "inotify-sys", "libc", ] @@ -4901,7 +4904,7 @@ dependencies = [ "indoc", "proc-macro2", "quote", - "syn 2.0.107", + "syn 2.0.108", ] [[package]] @@ -4967,20 +4970,20 @@ dependencies = [ [[package]] name = "is-terminal" -version = "0.4.16" +version = "0.4.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e04d7f318608d35d4b61ddd75cbdaee86b023ebe2bd5a66ee0915f0bf93095a9" +checksum = "3640c1c38b8e4e43584d8df18be5fc6b0aa314ce6ebf51b53313d4306cca8e46" dependencies = [ "hermit-abi", "libc", - "windows-sys 0.59.0", + "windows-sys 0.61.2", ] [[package]] name = "is_terminal_polyfill" -version = "1.70.1" +version = "1.70.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7943c866cc5cd64cbc25b2e01621d07fa8eb2a1a23160ee81ce38704e97b8ecf" +checksum = "a6cb138bb79a146c1bd460005623e142ef0181e3d0219cb493e02f7d08a35695" [[package]] name = "itertools" @@ -5161,7 +5164,7 @@ dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn 2.0.107", + "syn 2.0.108", ] [[package]] @@ -5374,7 +5377,7 @@ version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "416f7e718bdb06000964960ffa43b4335ad4012ae8b99060261aa4a8088d5ccb" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "libc", "redox_syscall", ] @@ -5433,9 +5436,9 @@ checksum = "241eaef5fd12c88705a01fc1066c48c4b36e0dd4377dcdc7ec3942cea7a69956" [[package]] name = "litrs" -version = "0.4.2" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f5e54036fe321fd421e10d732f155734c4e4afd610dd556d9a82833ab3ee0bed" +checksum = "11d3d7f243d5c5a8b9bb5d6dd2b1602c0cb0b9db1621bafc7ed66e35ff9fe092" [[package]] name = "lock_api" @@ -5532,7 +5535,7 @@ checksum = "1b27834086c65ec3f9387b096d66e99f221cf081c2b738042aa252bcd41204e3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.107", + "syn 2.0.108", ] [[package]] @@ -5563,9 +5566,9 @@ checksum = "f52b00d39961fc5b2736ea853c9cc86238e165017a493d1d5c8eac6bdc4cc273" [[package]] name = "memmap2" -version = "0.9.8" +version = "0.9.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "843a98750cd611cc2965a8213b53b43e715f13c37a9e096c6408e69990961db7" +checksum = "744133e4a0e0a658e1374cf3bf8e415c4052a15a111acd372764c55b4177d490" dependencies = [ "libc", ] @@ -5598,7 +5601,7 @@ dependencies = [ "proc-macro2", "quote", "regex", - "syn 2.0.107", + "syn 2.0.108", ] [[package]] @@ -5831,7 +5834,7 @@ version = "8.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4d3d07927151ff8575b7087f245456e549fea62edf0ec4e565a5ee50c8402bc3" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "fsevent-sys", "inotify", "kqueue", @@ -5960,9 +5963,9 @@ dependencies = [ [[package]] name = "num_enum" -version = "0.7.4" +version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a973b4e44ce6cad84ce69d797acf9a044532e4184c4f267913d1b546a0727b7a" +checksum = "b1207a7e20ad57b847bbddc6776b968420d38292bbfe2089accff5e19e82454c" dependencies = [ "num_enum_derive", "rustversion", @@ -5970,14 +5973,14 @@ dependencies = [ [[package]] name = "num_enum_derive" -version = "0.7.4" +version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77e878c846a8abae00dd069496dbe8751b16ac1c3d6bd2a7283a938e8228f90d" +checksum = "ff32365de1b6743cb203b710788263c44a03de03802daf96092f2da4fe6ba4d7" dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn 2.0.107", + "syn 2.0.108", ] [[package]] @@ -6016,9 +6019,9 @@ dependencies = [ [[package]] name = "once_cell_polyfill" -version = "1.70.1" +version = "1.70.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4895175b425cb1f87721b59f0f286c2092bd4af812243672510e1ac53e2e0ad" +checksum = "384b8ab6d37215f3c5301a95a4accb5d64aa607f1fcb26a11b5303878451b4fe" [[package]] name = "oorandom" @@ -6305,7 +6308,7 @@ dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn 2.0.107", + "syn 2.0.108", ] [[package]] @@ -6440,7 +6443,7 @@ dependencies = [ "phf_shared 0.11.3", "proc-macro2", "quote", - "syn 2.0.107", + "syn 2.0.108", ] [[package]] @@ -6453,7 +6456,7 @@ dependencies = [ "phf_shared 0.13.1", "proc-macro2", "quote", - "syn 2.0.107", + "syn 2.0.108", ] [[package]] @@ -6491,7 +6494,7 @@ checksum = "6e918e4ff8c4549eb882f14b3a4bc8c8bc93de829416eacf579f1207a8fbf861" dependencies = [ "proc-macro2", "quote", - "syn 2.0.107", + "syn 2.0.108", ] [[package]] @@ -6624,7 +6627,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "479ca8adacdd7ce8f1fb39ce9ecccbfe93a3f1344b3d0d97f20bc0196208f62b" dependencies = [ "proc-macro2", - "syn 2.0.107", + "syn 2.0.108", ] [[package]] @@ -6675,14 +6678,14 @@ dependencies = [ "proc-macro-error-attr2", "proc-macro2", "quote", - "syn 2.0.107", + "syn 2.0.108", ] [[package]] name = "proc-macro2" -version = "1.0.101" +version = "1.0.103" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89ae43fd86e4158d6db51ad8e2b80f313af9cc74f5c0e03ccb87de09998732de" +checksum = "5ee95bc4ef87b8d5ba32e8b7714ccc834865276eab0aed5c9958d00ec45f49e8" dependencies = [ "unicode-ident", ] @@ -6693,7 +6696,7 @@ version = "0.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cc5b72d8145275d844d4b5f6d4e1eef00c8cd889edb6035c21675d1bb1f45c9f" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "chrono", "flate2", "hex", @@ -6707,7 +6710,7 @@ version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "25485360a54d6861439d60facef26de713b1e126bf015ec8f98239467a2b82f7" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "procfs-core 0.18.0", "rustix 1.1.2", ] @@ -6718,7 +6721,7 @@ version = "0.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "239df02d8349b06fc07398a3a1697b06418223b1c7725085e801e7c0fc6a12ec" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "chrono", "hex", ] @@ -6729,7 +6732,7 @@ version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e6401bf7b6af22f78b563665d15a22e9aef27775b79b149a66ca022468a4e405" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "hex", ] @@ -6741,7 +6744,7 @@ checksum = "2bb0be07becd10686a0bb407298fb425360a5c44a663774406340c59a22de4ce" dependencies = [ "bit-set", "bit-vec", - "bitflags 2.9.4", + "bitflags 2.10.0", "lazy_static", "num-traits", "rand 0.9.2", @@ -6771,7 +6774,7 @@ checksum = "4ee1c9ac207483d5e7db4940700de86a9aae46ef90c48b57f99fe7edb8345e49" dependencies = [ "proc-macro2", "quote", - "syn 2.0.107", + "syn 2.0.108", ] [[package]] @@ -6782,7 +6785,7 @@ checksum = "095a99f75c69734802359b682be8daaf8980296731f6470434ea2c652af1dd30" dependencies = [ "proc-macro2", "quote", - "syn 2.0.107", + "syn 2.0.108", ] [[package]] @@ -6805,7 +6808,7 @@ dependencies = [ "itertools 0.14.0", "proc-macro2", "quote", - "syn 2.0.107", + "syn 2.0.108", ] [[package]] @@ -6814,7 +6817,7 @@ version = "0.9.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "57206b407293d2bcd3af849ce869d52068623f19e1b5ff8e8778e3309439682b" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "memchr", "unicase", ] @@ -7052,7 +7055,7 @@ version = "0.29.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "eabd94c2f37801c20583fc49dd5cd6b0ba68c716787c2dd6ed18571e1e63117b" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "cassowary", "compact_str", "crossterm 0.28.1", @@ -7073,7 +7076,7 @@ version = "11.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "498cd0dc59d73224351ee52a95fee0f1a617a2eae0e7d9d720cc622c73a54186" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", ] [[package]] @@ -7108,7 +7111,7 @@ version = "0.5.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", ] [[package]] @@ -7150,7 +7153,7 @@ checksum = "b7186006dcb21920990093f30e3dea63b7d6e977bf1256be20c3563a5db070da" dependencies = [ "proc-macro2", "quote", - "syn 2.0.107", + "syn 2.0.108", ] [[package]] @@ -7482,6 +7485,7 @@ dependencies = [ "reth-primitives-traits", "reth-provider", "reth-prune", + "reth-prune-db", "reth-prune-types", "reth-revm", "reth-stages", @@ -7563,7 +7567,7 @@ dependencies = [ "proc-macro2", "quote", "similar-asserts", - "syn 2.0.107", + "syn 2.0.108", ] [[package]] @@ -8677,7 +8681,7 @@ dependencies = [ name = "reth-libmdbx" version = "1.8.2" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "byteorder", "codspeed-criterion-compat", "dashmap 6.1.0", @@ -8959,6 +8963,7 @@ dependencies = [ "reth-primitives-traits", "reth-provider", "reth-prune", + "reth-prune-db", "reth-rpc", "reth-rpc-api", "reth-rpc-builder", @@ -9806,27 +9811,19 @@ dependencies = [ name = "reth-prune" version = "1.8.2" dependencies = [ - "alloy-eips", "alloy-primitives", - "assert_matches", - "itertools 0.14.0", "metrics", - "rayon", "reth-config", "reth-db", - "reth-db-api", "reth-errors", "reth-exex-types", "reth-metrics", "reth-primitives-traits", "reth-provider", "reth-prune-types", - "reth-stages", - "reth-static-file-types", "reth-testing-utils", "reth-tokio-util", "reth-tracing", - "rustc-hash", "thiserror 2.0.17", "tokio", "tracing", @@ -9835,6 +9832,25 @@ dependencies = [ [[package]] name = "reth-prune-db" version = "1.8.2" +dependencies = [ + "alloy-eips", + "alloy-primitives", + "assert_matches", + "itertools 0.14.0", + "rayon", + "reth-db", + "reth-db-api", + "reth-primitives-traits", + "reth-provider", + "reth-prune", + "reth-prune-types", + "reth-stages", + "reth-static-file-types", + "reth-testing-utils", + "reth-tracing", + "rustc-hash", + "tracing", +] [[package]] name = "reth-prune-types" @@ -10351,6 +10367,7 @@ dependencies = [ "reth-primitives-traits", "reth-provider", "reth-prune", + "reth-prune-db", "reth-prune-types", "reth-revm", "reth-stages-api", @@ -10384,6 +10401,7 @@ dependencies = [ "reth-primitives-traits", "reth-provider", "reth-prune", + "reth-prune-db", "reth-stages-types", "reth-static-file", "reth-static-file-types", @@ -10623,7 +10641,7 @@ dependencies = [ "aquamarine", "assert_matches", "auto_impl", - "bitflags 2.9.4", + "bitflags 2.10.0", "codspeed-criterion-compat", "futures", "futures-util", @@ -11068,7 +11086,7 @@ version = "8.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9e6bd5e669b02007872a8ca2643a14e308fe1739ee4475d74122587c3388a06a" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "revm-bytecode", "revm-primitives", "serde", @@ -11205,7 +11223,7 @@ dependencies = [ "regex", "relative-path", "rustc_version 0.4.1", - "syn 2.0.107", + "syn 2.0.108", "unicode-ident", ] @@ -11301,7 +11319,7 @@ version = "0.38.44" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fdb5bc1ae2baa591800df16c9ca78619bf65c0488b41b96ccec5d11220d8c154" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "errno", "libc", "linux-raw-sys 0.4.15", @@ -11314,7 +11332,7 @@ version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cd15f8a2c5551a84d56efdc1cd049089e409ac19a3072d5037a17fd70719ff3e" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "errno", "libc", "linux-raw-sys 0.11.0", @@ -11323,9 +11341,9 @@ dependencies = [ [[package]] name = "rustls" -version = "0.23.33" +version = "0.23.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "751e04a496ca00bb97a5e043158d23d66b5aabf2e1d5aa2a0aaebb1aafe6f82c" +checksum = "6a9586e9ee2b4f8fab52a0048ca7334d7024eef48e2cb9407e3497bb7cab7fa7" dependencies = [ "log", "once_cell", @@ -11553,7 +11571,7 @@ version = "3.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b3297343eaf830f66ede390ea39da1d462b6b0c1b000f420d0a83f898bbbe6ef" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "core-foundation", "core-foundation-sys", "libc", @@ -11646,7 +11664,7 @@ checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" dependencies = [ "proc-macro2", "quote", - "syn 2.0.107", + "syn 2.0.108", ] [[package]] @@ -11697,9 +11715,9 @@ dependencies = [ [[package]] name = "serde_with" -version = "3.15.0" +version = "3.15.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6093cd8c01b25262b84927e0f7151692158fab02d961e04c979d3903eba7ecc5" +checksum = "aa66c845eee442168b2c8134fec70ac50dc20e760769c8ba0ad1319ca1959b04" dependencies = [ "base64 0.22.1", "chrono", @@ -11716,14 +11734,14 @@ dependencies = [ [[package]] name = "serde_with_macros" -version = "3.15.0" +version = "3.15.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7e6c180db0816026a61afa1cff5344fb7ebded7e4d3062772179f2501481c27" +checksum = "b91a903660542fced4e99881aa481bdbaec1634568ee02e0b8bd57c64cb38955" dependencies = [ "darling 0.21.3", "proc-macro2", "quote", - "syn 2.0.107", + "syn 2.0.108", ] [[package]] @@ -12047,7 +12065,7 @@ dependencies = [ "proc-macro2", "quote", "rustversion", - "syn 2.0.107", + "syn 2.0.108", ] [[package]] @@ -12059,7 +12077,7 @@ dependencies = [ "heck", "proc-macro2", "quote", - "syn 2.0.107", + "syn 2.0.108", ] [[package]] @@ -12081,9 +12099,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.107" +version = "2.0.108" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a26dbd934e5451d21ef060c018dae56fc073894c5a7896f882928a76e6d081b" +checksum = "da58917d35242480a05c2897064da0a80589a2a0476c9a3f2fdc83b53502e917" dependencies = [ "proc-macro2", "quote", @@ -12099,7 +12117,7 @@ dependencies = [ "paste", "proc-macro2", "quote", - "syn 2.0.107", + "syn 2.0.108", ] [[package]] @@ -12119,7 +12137,7 @@ checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" dependencies = [ "proc-macro2", "quote", - "syn 2.0.107", + "syn 2.0.108", ] [[package]] @@ -12164,7 +12182,7 @@ version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ac9ee8b664c9f1740cd813fea422116f8ba29997bb7c878d1940424889802897" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "log", "num-traits", ] @@ -12200,7 +12218,7 @@ dependencies = [ "cfg-if", "proc-macro2", "quote", - "syn 2.0.107", + "syn 2.0.108", ] [[package]] @@ -12211,7 +12229,7 @@ checksum = "5c89e72a01ed4c579669add59014b9a524d609c0c88c6a585ce37485879f6ffb" dependencies = [ "proc-macro2", "quote", - "syn 2.0.107", + "syn 2.0.108", "test-case-core", ] @@ -12251,7 +12269,7 @@ dependencies = [ "prettyplease", "proc-macro2", "quote", - "syn 2.0.107", + "syn 2.0.108", ] [[package]] @@ -12299,7 +12317,7 @@ checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.107", + "syn 2.0.108", ] [[package]] @@ -12310,7 +12328,7 @@ checksum = "3ff15c8ecd7de3849db632e14d18d2571fa09dfc5ed93479bc4485c7a517c913" dependencies = [ "proc-macro2", "quote", - "syn 2.0.107", + "syn 2.0.108", ] [[package]] @@ -12475,7 +12493,7 @@ checksum = "af407857209536a95c8e56f8231ef2c2e2aff839b22e07a1ffcbc617e9db9fa5" dependencies = [ "proc-macro2", "quote", - "syn 2.0.107", + "syn 2.0.108", ] [[package]] @@ -12668,7 +12686,7 @@ checksum = "adc82fd73de2a9722ac5da747f12383d2bfdb93591ee6c58486e0097890f05f2" dependencies = [ "async-compression", "base64 0.22.1", - "bitflags 2.9.4", + "bitflags 2.10.0", "bytes", "futures-core", "futures-util", @@ -12735,7 +12753,7 @@ checksum = "81383ab64e72a7a8b8e13130c49e3dab29def6d0c7d76a03087b3cf71c5c6903" dependencies = [ "proc-macro2", "quote", - "syn 2.0.107", + "syn 2.0.108", ] [[package]] @@ -12895,7 +12913,7 @@ dependencies = [ "darling 0.20.11", "proc-macro2", "quote", - "syn 2.0.107", + "syn 2.0.108", ] [[package]] @@ -12989,9 +13007,9 @@ checksum = "75b844d17643ee918803943289730bec8aac480150456169e647ed0b576ba539" [[package]] name = "unicode-ident" -version = "1.0.19" +version = "1.0.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f63a545481291138910575129486daeaf8ac54aee4387fe7906919f7830c7d9d" +checksum = "462eeb75aeb73aea900253ce739c8e18a67423fadf006037cd3ff27e82748a06" [[package]] name = "unicode-segmentation" @@ -13176,7 +13194,7 @@ checksum = "d674d135b4a8c1d7e813e2f8d1c9a58308aee4a680323066025e53132218bd91" dependencies = [ "proc-macro2", "quote", - "syn 2.0.107", + "syn 2.0.108", ] [[package]] @@ -13257,7 +13275,7 @@ dependencies = [ "log", "proc-macro2", "quote", - "syn 2.0.107", + "syn 2.0.108", "wasm-bindgen-shared", ] @@ -13292,7 +13310,7 @@ checksum = "9f07d2f20d4da7b26400c9f4a0511e6e0345b040694e8a75bd41d578fa4421d7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.107", + "syn 2.0.108", "wasm-bindgen-backend", "wasm-bindgen-shared", ] @@ -13547,7 +13565,7 @@ checksum = "9107ddc059d5b6fbfbffdfa7a7fe3e22a226def0b2608f72e9d552763d3e1ad7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.107", + "syn 2.0.108", ] [[package]] @@ -13558,7 +13576,7 @@ checksum = "053e2e040ab57b9dc951b72c264860db7eb3b0200ba345b4e4c3b14f67855ddf" dependencies = [ "proc-macro2", "quote", - "syn 2.0.107", + "syn 2.0.108", ] [[package]] @@ -13569,7 +13587,7 @@ checksum = "29bee4b38ea3cde66011baa44dba677c432a78593e202392d1e9070cf2a7fca7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.107", + "syn 2.0.108", ] [[package]] @@ -13580,7 +13598,7 @@ checksum = "3f316c4a2570ba26bbec722032c4099d8c8bc095efccdc15688708623367e358" dependencies = [ "proc-macro2", "quote", - "syn 2.0.107", + "syn 2.0.108", ] [[package]] @@ -14094,7 +14112,7 @@ checksum = "2380878cad4ac9aac1e2435f3eb4020e8374b5f13c296cb75b4620ff8e229154" dependencies = [ "proc-macro2", "quote", - "syn 2.0.107", + "syn 2.0.108", "synstructure", ] @@ -14106,7 +14124,7 @@ checksum = "38da3c9736e16c5d3c8c597a9aaa5d1fa565d0532ae05e27c24aa62fb32c0ab6" dependencies = [ "proc-macro2", "quote", - "syn 2.0.107", + "syn 2.0.108", "synstructure", ] @@ -14127,7 +14145,7 @@ checksum = "88d2b8d9c68ad2b9e4340d7832716a4d21a22a1154777ad56ea55c51a9cf3831" dependencies = [ "proc-macro2", "quote", - "syn 2.0.107", + "syn 2.0.108", ] [[package]] @@ -14147,7 +14165,7 @@ checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502" dependencies = [ "proc-macro2", "quote", - "syn 2.0.107", + "syn 2.0.108", "synstructure", ] @@ -14168,7 +14186,7 @@ checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" dependencies = [ "proc-macro2", "quote", - "syn 2.0.107", + "syn 2.0.108", ] [[package]] @@ -14212,7 +14230,7 @@ checksum = "6eafa6dfb17584ea3e2bd6e76e0cc15ad7af12b09abdd1ca55961bed9b1063c6" dependencies = [ "proc-macro2", "quote", - "syn 2.0.107", + "syn 2.0.108", ] [[package]] @@ -14223,7 +14241,7 @@ checksum = "5b96237efa0c878c64bd89c436f661be4e46b2f3eff1ebb976f7ef2321d2f58f" dependencies = [ "proc-macro2", "quote", - "syn 2.0.107", + "syn 2.0.108", ] [[package]] diff --git a/Cargo.toml b/Cargo.toml index 324135b2233..2b850ee7fad 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -96,6 +96,7 @@ members = [ "crates/prune/db", "crates/prune/prune", "crates/prune/types", + "crates/prune/db", "crates/ress/protocol", "crates/ress/provider", "crates/revm/", @@ -430,6 +431,7 @@ reth-primitives = { path = "crates/primitives", default-features = false } reth-primitives-traits = { path = "crates/primitives-traits", default-features = false } reth-provider = { path = "crates/storage/provider" } reth-prune = { path = "crates/prune/prune" } +reth-prune-db = { path = "crates/prune/db" } reth-prune-types = { path = "crates/prune/types", default-features = false } reth-revm = { path = "crates/revm", default-features = false } reth-rpc = { path = "crates/rpc/rpc" } diff --git a/crates/cli/commands/Cargo.toml b/crates/cli/commands/Cargo.toml index da1a5318f25..3b3eebad869 100644 --- a/crates/cli/commands/Cargo.toml +++ b/crates/cli/commands/Cargo.toml @@ -43,6 +43,7 @@ reth-node-metrics.workspace = true reth-ethereum-primitives = { workspace = true, optional = true } reth-provider.workspace = true reth-prune.workspace = true +reth-prune-db.workspace = true reth-prune-types = { workspace = true, optional = true } reth-revm.workspace = true reth-stages.workspace = true diff --git a/crates/cli/commands/src/prune.rs b/crates/cli/commands/src/prune.rs index cae0fa00901..6fd3360a5be 100644 --- a/crates/cli/commands/src/prune.rs +++ b/crates/cli/commands/src/prune.rs @@ -4,6 +4,7 @@ use clap::Parser; use reth_chainspec::{EthChainSpec, EthereumHardforks}; use reth_cli::chainspec::ChainSpecParser; use reth_prune::PrunerBuilder; +use reth_prune_db::build_with_provider_factory; use reth_static_file::StaticFileProducer; use std::sync::Arc; use tracing::info; @@ -34,9 +35,10 @@ impl> PruneComma if let Some(prune_tip) = lowest_static_file_height { info!(target: "reth::cli", ?prune_tip, ?config, "Pruning data from database..."); // Run the pruner according to the configuration, and don't enforce any limits on it - let mut pruner = PrunerBuilder::new(config) - .delete_limit(usize::MAX) - .build_with_provider_factory(provider_factory); + let mut pruner = build_with_provider_factory( + PrunerBuilder::new(config).delete_limit(usize::MAX), + provider_factory, + ); pruner.run(prune_tip)?; info!(target: "reth::cli", "Pruned data from database"); diff --git a/crates/node/builder/Cargo.toml b/crates/node/builder/Cargo.toml index c1224d35e5a..e8060439438 100644 --- a/crates/node/builder/Cargo.toml +++ b/crates/node/builder/Cargo.toml @@ -43,6 +43,7 @@ reth-payload-builder.workspace = true reth-primitives-traits.workspace = true reth-provider.workspace = true reth-prune.workspace = true +reth-prune-db.workspace = true reth-rpc.workspace = true reth-rpc-api.workspace = true reth-rpc-builder.workspace = true diff --git a/crates/node/builder/src/launch/engine.rs b/crates/node/builder/src/launch/engine.rs index 93309b65b19..8ba46d52ff7 100644 --- a/crates/node/builder/src/launch/engine.rs +++ b/crates/node/builder/src/launch/engine.rs @@ -166,7 +166,10 @@ impl EngineNodeLauncher { pruner_builder = pruner_builder.finished_exex_height(exex_manager_handle.finished_height()); } - let pruner = pruner_builder.build_with_provider_factory(ctx.provider_factory().clone()); + let pruner = reth_prune_db::build_with_provider_factory( + pruner_builder, + ctx.provider_factory().clone(), + ); let pruner_events = pruner.events(); info!(target: "reth::cli", prune_config=?ctx.prune_config(), "Pruner initialized"); diff --git a/crates/prune/db/Cargo.toml b/crates/prune/db/Cargo.toml index 269a87bf7b6..a01b091090c 100644 --- a/crates/prune/db/Cargo.toml +++ b/crates/prune/db/Cargo.toml @@ -9,7 +9,34 @@ repository.workspace = true exclude.workspace = true description = "Database integration with prune implementation" -[dependencies] - [lints] workspace = true + +[dependencies] +# reth +reth-db-api.workspace = true +reth-provider.workspace = true +reth-prune-types.workspace = true +reth-primitives-traits.workspace = true +reth-static-file-types.workspace = true +reth-prune.workspace = true + +# ethereum +alloy-eips.workspace = true + +# misc +tracing.workspace = true +itertools.workspace = true +rayon.workspace = true +rustc-hash.workspace = true +alloy-primitives.workspace = true + +[dev-dependencies] +# reth +reth-db = { workspace = true, features = ["test-utils"] } +reth-stages = { workspace = true, features = ["test-utils"] } +reth-primitives-traits = { workspace = true, features = ["arbitrary"] } +reth-testing-utils.workspace = true +reth-tracing.workspace = true + +assert_matches.workspace = true diff --git a/crates/prune/db/src/builder.rs b/crates/prune/db/src/builder.rs new file mode 100644 index 00000000000..7d47582543f --- /dev/null +++ b/crates/prune/db/src/builder.rs @@ -0,0 +1,66 @@ +use crate::set::from_components; +use alloy_eips::Encodable2718; +use reth_db_api::{table::Value, transaction::DbTxMut}; +use reth_primitives_traits::NodePrimitives; +use reth_provider::{ + providers::StaticFileProvider, BlockReader, ChainStateBlockReader, DBProvider, + DatabaseProviderFactory, NodePrimitivesProvider, PruneCheckpointReader, PruneCheckpointWriter, + StaticFileProviderFactory, +}; +use reth_prune::{segments::SegmentSet, Pruner, PrunerBuilder}; + +/// Builds a [Pruner] from the current configuration with the given provider factory. +pub fn build_with_provider_factory( + builder: PrunerBuilder, + provider_factory: PF, +) -> Pruner +where + PF: DatabaseProviderFactory< + ProviderRW: PruneCheckpointWriter + + PruneCheckpointReader + + BlockReader + + ChainStateBlockReader + + StaticFileProviderFactory< + Primitives: NodePrimitives, + >, + > + StaticFileProviderFactory< + Primitives = ::Primitives, + >, +{ + let segments: SegmentSet = + from_components(provider_factory.static_file_provider(), builder.segments); + + Pruner::new_with_factory( + provider_factory, + segments.into_vec(), + builder.block_interval, + builder.delete_limit, + builder.timeout, + builder.finished_exex_height, + ) +} + +/// Builds a [Pruner] from the current configuration with the given static file provider. +pub fn build( + builder: PrunerBuilder, + static_file_provider: StaticFileProvider, +) -> Pruner +where + Provider: StaticFileProviderFactory< + Primitives: NodePrimitives, + > + DBProvider + + BlockReader + + ChainStateBlockReader + + PruneCheckpointWriter + + PruneCheckpointReader, +{ + let segments: SegmentSet = from_components(static_file_provider, builder.segments); + + Pruner::new( + segments.into_vec(), + builder.block_interval, + builder.delete_limit, + builder.timeout, + builder.finished_exex_height, + ) +} diff --git a/crates/prune/prune/src/db_ext.rs b/crates/prune/db/src/db_ext.rs similarity index 99% rename from crates/prune/prune/src/db_ext.rs rename to crates/prune/db/src/db_ext.rs index 63ab87c446a..979939df307 100644 --- a/crates/prune/prune/src/db_ext.rs +++ b/crates/prune/db/src/db_ext.rs @@ -1,10 +1,10 @@ -use crate::PruneLimiter; use reth_db_api::{ cursor::{DbCursorRO, DbCursorRW, RangeWalker}, table::{Table, TableRow}, transaction::DbTxMut, DatabaseError, }; +use reth_prune::PruneLimiter; use std::{fmt::Debug, ops::RangeBounds}; use tracing::debug; diff --git a/crates/prune/db/src/lib.rs b/crates/prune/db/src/lib.rs index ef777085e54..46402fb4853 100644 --- a/crates/prune/db/src/lib.rs +++ b/crates/prune/db/src/lib.rs @@ -1 +1,22 @@ -//! An integration of `reth-prune` with `reth-db`. +//! Database integration with prune implementation for MDBX. + +#![doc( + html_logo_url = "https://raw.githubusercontent.com/paradigmxyz/reth/main/assets/reth-docs.png", + html_favicon_url = "https://avatars0.githubusercontent.com/u/97369466?s=256", + issue_tracker_base_url = "https://github.com/paradigmxyz/reth/issues/" +)] +#![cfg_attr(not(test), warn(unused_crate_dependencies))] +#![cfg_attr(docsrs, feature(doc_cfg))] + +mod builder; +mod db_ext; +pub(crate) mod receipts; +mod set; +mod user; + +pub use builder::{build, build_with_provider_factory}; +pub use set::from_components; +pub use user::{ + AccountHistory, MerkleChangeSets, Receipts as UserReceipts, SenderRecovery, StorageHistory, + TransactionLookup, +}; diff --git a/crates/prune/prune/src/segments/receipts.rs b/crates/prune/db/src/receipts.rs similarity index 95% rename from crates/prune/prune/src/segments/receipts.rs rename to crates/prune/db/src/receipts.rs index 68a12552013..1dac9fb2221 100644 --- a/crates/prune/prune/src/segments/receipts.rs +++ b/crates/prune/db/src/receipts.rs @@ -1,15 +1,16 @@ //! Common receipts pruning logic. //! -//! - [`crate::segments::user::Receipts`] is responsible for pruning receipts according to the -//! user-configured settings (for example, on a full node or with a custom prune config) +//! - [`crate::user::Receipts`] is responsible for pruning receipts according to the user-configured +//! settings (for example, on a full node or with a custom prune config) -use crate::{db_ext::DbTxPruneExt, segments::PruneInput, PrunerError}; +use crate::db_ext::DbTxPruneExt; use reth_db_api::{table::Value, tables, transaction::DbTxMut}; use reth_primitives_traits::NodePrimitives; use reth_provider::{ errors::provider::ProviderResult, BlockReader, DBProvider, NodePrimitivesProvider, PruneCheckpointWriter, TransactionsProvider, }; +use reth_prune::{segments::PruneInput, PrunerError}; use reth_prune_types::{PruneCheckpoint, PruneSegment, SegmentOutput, SegmentOutputCheckpoint}; use tracing::trace; @@ -79,7 +80,6 @@ pub(crate) fn save_checkpoint( #[cfg(test)] mod tests { - use crate::segments::{PruneInput, PruneLimiter, SegmentOutput}; use alloy_primitives::{BlockNumber, TxNumber, B256}; use assert_matches::assert_matches; use itertools::{ @@ -88,8 +88,10 @@ mod tests { }; use reth_db_api::tables; use reth_provider::{DBProvider, DatabaseProviderFactory, PruneCheckpointReader}; + use reth_prune::{segments::PruneInput, PruneLimiter}; use reth_prune_types::{ PruneCheckpoint, PruneInterruptReason, PruneMode, PruneProgress, PruneSegment, + SegmentOutput, }; use reth_stages::test_utils::{StorageKind, TestStageDB}; use reth_testing_utils::generators::{ diff --git a/crates/prune/db/src/set.rs b/crates/prune/db/src/set.rs new file mode 100644 index 00000000000..e8555d1317f --- /dev/null +++ b/crates/prune/db/src/set.rs @@ -0,0 +1,55 @@ +use crate::{ + user::MerkleChangeSets, AccountHistory, SenderRecovery, StorageHistory, TransactionLookup, + UserReceipts, +}; +use alloy_eips::Encodable2718; +use reth_db_api::{table::Value, transaction::DbTxMut}; +use reth_primitives_traits::NodePrimitives; +use reth_provider::{ + providers::StaticFileProvider, BlockReader, ChainStateBlockReader, DBProvider, + PruneCheckpointReader, PruneCheckpointWriter, StaticFileProviderFactory, +}; +use reth_prune::segments::SegmentSet; +use reth_prune_types::PruneModes; + +/// Creates a [`SegmentSet`] from an existing components, such as [`StaticFileProvider`] and +/// [`PruneModes`]. +pub fn from_components( + _static_file_provider: StaticFileProvider, + prune_modes: PruneModes, +) -> SegmentSet +where + Provider: StaticFileProviderFactory< + Primitives: NodePrimitives, + > + DBProvider + + ChainStateBlockReader + + PruneCheckpointWriter + + PruneCheckpointReader + + BlockReader, +{ + #[allow(deprecated)] + let PruneModes { + sender_recovery, + transaction_lookup, + receipts, + account_history, + storage_history, + bodies_history: _, + merkle_changesets, + receipts_log_filter: _, + } = prune_modes; + + SegmentSet::default() + // Merkle changesets + .segment(MerkleChangeSets::new(merkle_changesets)) + // Account history + .segment_opt(account_history.map(AccountHistory::new)) + // Storage history + .segment_opt(storage_history.map(StorageHistory::new)) + // User receipts + .segment_opt(receipts.map(UserReceipts::new)) + // Transaction lookup + .segment_opt(transaction_lookup.map(TransactionLookup::new)) + // Sender recovery + .segment_opt(sender_recovery.map(SenderRecovery::new)) +} diff --git a/crates/prune/prune/src/segments/user/account_history.rs b/crates/prune/db/src/user/account_history.rs similarity index 96% rename from crates/prune/prune/src/segments/user/account_history.rs rename to crates/prune/db/src/user/account_history.rs index 317337f050e..221d69937da 100644 --- a/crates/prune/prune/src/segments/user/account_history.rs +++ b/crates/prune/db/src/user/account_history.rs @@ -1,11 +1,11 @@ -use crate::{ - db_ext::DbTxPruneExt, - segments::{user::history::prune_history_indices, PruneInput, Segment}, - PrunerError, -}; +use crate::{db_ext::DbTxPruneExt, user::history::prune_history_indices}; use itertools::Itertools; use reth_db_api::{models::ShardedKey, tables, transaction::DbTxMut}; use reth_provider::DBProvider; +use reth_prune::{ + segments::{PruneInput, Segment}, + PrunerError, +}; use reth_prune_types::{ PruneMode, PrunePurpose, PruneSegment, SegmentOutput, SegmentOutputCheckpoint, }; @@ -18,12 +18,14 @@ use tracing::{instrument, trace}; /// [`tables::AccountsHistory`]. We want to prune them to the same block number. const ACCOUNT_HISTORY_TABLES_TO_PRUNE: usize = 2; +/// Responsible for pruning account history tables. #[derive(Debug)] pub struct AccountHistory { mode: PruneMode, } impl AccountHistory { + /// Creates a new account history pruner with `mode`. pub const fn new(mode: PruneMode) -> Self { Self { mode } } @@ -126,14 +128,15 @@ where #[cfg(test)] mod tests { - use crate::segments::{ - user::account_history::ACCOUNT_HISTORY_TABLES_TO_PRUNE, AccountHistory, PruneInput, - PruneLimiter, Segment, SegmentOutput, - }; + use crate::{user::account_history::ACCOUNT_HISTORY_TABLES_TO_PRUNE, AccountHistory}; use alloy_primitives::{BlockNumber, B256}; use assert_matches::assert_matches; use reth_db_api::{tables, BlockNumberList}; use reth_provider::{DBProvider, DatabaseProviderFactory, PruneCheckpointReader}; + use reth_prune::{ + segments::{PruneInput, Segment}, + PruneLimiter, SegmentOutput, + }; use reth_prune_types::{ PruneCheckpoint, PruneInterruptReason, PruneMode, PruneProgress, PruneSegment, }; diff --git a/crates/prune/prune/src/segments/user/history.rs b/crates/prune/db/src/user/history.rs similarity index 100% rename from crates/prune/prune/src/segments/user/history.rs rename to crates/prune/db/src/user/history.rs diff --git a/crates/prune/prune/src/segments/user/merkle_change_sets.rs b/crates/prune/db/src/user/merkle_change_sets.rs similarity index 96% rename from crates/prune/prune/src/segments/user/merkle_change_sets.rs rename to crates/prune/db/src/user/merkle_change_sets.rs index 89cc4567b7d..8f5852876fa 100644 --- a/crates/prune/prune/src/segments/user/merkle_change_sets.rs +++ b/crates/prune/db/src/user/merkle_change_sets.rs @@ -1,8 +1,4 @@ -use crate::{ - db_ext::DbTxPruneExt, - segments::{PruneInput, Segment}, - PrunerError, -}; +use crate::db_ext::DbTxPruneExt; use alloy_primitives::B256; use reth_db_api::{models::BlockNumberHashedAddress, table::Value, tables, transaction::DbTxMut}; use reth_primitives_traits::NodePrimitives; @@ -10,17 +6,23 @@ use reth_provider::{ errors::provider::ProviderResult, BlockReader, ChainStateBlockReader, DBProvider, NodePrimitivesProvider, PruneCheckpointWriter, TransactionsProvider, }; +use reth_prune::{ + segments::{PruneInput, Segment}, + PrunerError, +}; use reth_prune_types::{ PruneCheckpoint, PruneMode, PrunePurpose, PruneSegment, SegmentOutput, SegmentOutputCheckpoint, }; use tracing::{instrument, trace}; +/// Responsible for pruning merkle change sets tables. #[derive(Debug)] pub struct MerkleChangeSets { mode: PruneMode, } impl MerkleChangeSets { + /// Creates a new merkle change sets pruner with `mode`. pub const fn new(mode: PruneMode) -> Self { Self { mode } } diff --git a/crates/prune/prune/src/segments/user/mod.rs b/crates/prune/db/src/user/mod.rs similarity index 100% rename from crates/prune/prune/src/segments/user/mod.rs rename to crates/prune/db/src/user/mod.rs diff --git a/crates/prune/prune/src/segments/user/receipts.rs b/crates/prune/db/src/user/receipts.rs similarity index 85% rename from crates/prune/prune/src/segments/user/receipts.rs rename to crates/prune/db/src/user/receipts.rs index 03faddc1d5b..7f3357794be 100644 --- a/crates/prune/prune/src/segments/user/receipts.rs +++ b/crates/prune/db/src/user/receipts.rs @@ -1,22 +1,25 @@ -use crate::{ - segments::{PruneInput, Segment}, - PrunerError, -}; +use crate::receipts; use reth_db_api::{table::Value, transaction::DbTxMut}; use reth_primitives_traits::NodePrimitives; use reth_provider::{ errors::provider::ProviderResult, BlockReader, DBProvider, NodePrimitivesProvider, PruneCheckpointWriter, TransactionsProvider, }; +use reth_prune::{ + segments::{PruneInput, Segment}, + PrunerError, +}; use reth_prune_types::{PruneCheckpoint, PruneMode, PrunePurpose, PruneSegment, SegmentOutput}; use tracing::instrument; +/// Responsible for pruning receipts tables. #[derive(Debug)] pub struct Receipts { mode: PruneMode, } impl Receipts { + /// Creates a new receipts pruner with `mode`. pub const fn new(mode: PruneMode) -> Self { Self { mode } } @@ -44,7 +47,7 @@ where #[instrument(target = "pruner", skip(self, provider), ret(level = "trace"))] fn prune(&self, provider: &Provider, input: PruneInput) -> Result { - crate::segments::receipts::prune(provider, input) + receipts::prune(provider, input) } fn save_checkpoint( @@ -52,6 +55,6 @@ where provider: &Provider, checkpoint: PruneCheckpoint, ) -> ProviderResult<()> { - crate::segments::receipts::save_checkpoint(provider, checkpoint) + receipts::save_checkpoint(provider, checkpoint) } } diff --git a/crates/prune/prune/src/segments/user/sender_recovery.rs b/crates/prune/db/src/user/sender_recovery.rs similarity index 95% rename from crates/prune/prune/src/segments/user/sender_recovery.rs rename to crates/prune/db/src/user/sender_recovery.rs index 9fbad8c428c..24c9cc3f5b3 100644 --- a/crates/prune/prune/src/segments/user/sender_recovery.rs +++ b/crates/prune/db/src/user/sender_recovery.rs @@ -1,21 +1,23 @@ -use crate::{ - db_ext::DbTxPruneExt, +use crate::db_ext::DbTxPruneExt; +use reth_db_api::{tables, transaction::DbTxMut}; +use reth_provider::{BlockReader, DBProvider, TransactionsProvider}; +use reth_prune::{ segments::{PruneInput, Segment}, PrunerError, }; -use reth_db_api::{tables, transaction::DbTxMut}; -use reth_provider::{BlockReader, DBProvider, TransactionsProvider}; use reth_prune_types::{ PruneMode, PrunePurpose, PruneSegment, SegmentOutput, SegmentOutputCheckpoint, }; use tracing::{instrument, trace}; +/// Responsible for pruning sender recovery tables. #[derive(Debug)] pub struct SenderRecovery { mode: PruneMode, } impl SenderRecovery { + /// Creates a new sender recovery pruner with `mode`. pub const fn new(mode: PruneMode) -> Self { Self { mode } } @@ -82,7 +84,7 @@ where #[cfg(test)] mod tests { - use crate::segments::{PruneInput, PruneLimiter, Segment, SegmentOutput, SenderRecovery}; + use crate::SenderRecovery; use alloy_primitives::{BlockNumber, TxNumber, B256}; use assert_matches::assert_matches; use itertools::{ @@ -92,7 +94,13 @@ mod tests { use reth_db_api::tables; use reth_primitives_traits::SignerRecoverable; use reth_provider::{DBProvider, DatabaseProviderFactory, PruneCheckpointReader}; - use reth_prune_types::{PruneCheckpoint, PruneMode, PruneProgress, PruneSegment}; + use reth_prune::{ + segments::{PruneInput, Segment}, + PruneLimiter, + }; + use reth_prune_types::{ + PruneCheckpoint, PruneMode, PruneProgress, PruneSegment, SegmentOutput, + }; use reth_stages::test_utils::{StorageKind, TestStageDB}; use reth_testing_utils::generators::{self, random_block_range, BlockRangeParams}; use std::ops::Sub; diff --git a/crates/prune/prune/src/segments/user/storage_history.rs b/crates/prune/db/src/user/storage_history.rs similarity index 94% rename from crates/prune/prune/src/segments/user/storage_history.rs rename to crates/prune/db/src/user/storage_history.rs index a4ad37bf789..212661ad466 100644 --- a/crates/prune/prune/src/segments/user/storage_history.rs +++ b/crates/prune/db/src/user/storage_history.rs @@ -1,8 +1,4 @@ -use crate::{ - db_ext::DbTxPruneExt, - segments::{user::history::prune_history_indices, PruneInput, Segment, SegmentOutput}, - PrunerError, -}; +use crate::{db_ext::DbTxPruneExt, user::history::prune_history_indices}; use itertools::Itertools; use reth_db_api::{ models::{storage_sharded_key::StorageShardedKey, BlockNumberAddress}, @@ -10,7 +6,13 @@ use reth_db_api::{ transaction::DbTxMut, }; use reth_provider::DBProvider; -use reth_prune_types::{PruneMode, PrunePurpose, PruneSegment, SegmentOutputCheckpoint}; +use reth_prune::{ + segments::{PruneInput, Segment}, + PrunerError, +}; +use reth_prune_types::{ + PruneMode, PrunePurpose, PruneSegment, SegmentOutput, SegmentOutputCheckpoint, +}; use rustc_hash::FxHashMap; use tracing::{instrument, trace}; @@ -20,12 +22,14 @@ use tracing::{instrument, trace}; /// [`tables::StoragesHistory`]. We want to prune them to the same block number. const STORAGE_HISTORY_TABLES_TO_PRUNE: usize = 2; +/// Responsible for pruning storage history tables. #[derive(Debug)] pub struct StorageHistory { mode: PruneMode, } impl StorageHistory { + /// Creates a new storage history pruner with `mode`. pub const fn new(mode: PruneMode) -> Self { Self { mode } } @@ -133,15 +137,18 @@ where #[cfg(test)] mod tests { - use crate::segments::{ - user::storage_history::STORAGE_HISTORY_TABLES_TO_PRUNE, PruneInput, PruneLimiter, Segment, - SegmentOutput, StorageHistory, - }; + use crate::{user::storage_history::STORAGE_HISTORY_TABLES_TO_PRUNE, StorageHistory}; use alloy_primitives::{BlockNumber, B256}; use assert_matches::assert_matches; use reth_db_api::{tables, BlockNumberList}; use reth_provider::{DBProvider, DatabaseProviderFactory, PruneCheckpointReader}; - use reth_prune_types::{PruneCheckpoint, PruneMode, PruneProgress, PruneSegment}; + use reth_prune::{ + segments::{PruneInput, Segment}, + PruneLimiter, + }; + use reth_prune_types::{ + PruneCheckpoint, PruneMode, PruneProgress, PruneSegment, SegmentOutput, + }; use reth_stages::test_utils::{StorageKind, TestStageDB}; use reth_testing_utils::generators::{ self, random_block_range, random_changeset_range, random_eoa_accounts, BlockRangeParams, diff --git a/crates/prune/prune/src/segments/user/transaction_lookup.rs b/crates/prune/db/src/user/transaction_lookup.rs similarity index 96% rename from crates/prune/prune/src/segments/user/transaction_lookup.rs rename to crates/prune/db/src/user/transaction_lookup.rs index fed90d84f2d..0f1ab2e34a0 100644 --- a/crates/prune/prune/src/segments/user/transaction_lookup.rs +++ b/crates/prune/db/src/user/transaction_lookup.rs @@ -1,24 +1,26 @@ -use crate::{ - db_ext::DbTxPruneExt, - segments::{PruneInput, Segment, SegmentOutput}, - PrunerError, -}; +use crate::db_ext::DbTxPruneExt; use alloy_eips::eip2718::Encodable2718; use rayon::prelude::*; use reth_db_api::{tables, transaction::DbTxMut}; use reth_provider::{BlockReader, DBProvider, PruneCheckpointReader, StaticFileProviderFactory}; +use reth_prune::{ + segments::{PruneInput, Segment}, + PrunerError, +}; use reth_prune_types::{ - PruneCheckpoint, PruneMode, PrunePurpose, PruneSegment, SegmentOutputCheckpoint, + PruneCheckpoint, PruneMode, PrunePurpose, PruneSegment, SegmentOutput, SegmentOutputCheckpoint, }; use reth_static_file_types::StaticFileSegment; use tracing::{debug, instrument, trace}; +/// Prunes transaction lookup entries from the database. #[derive(Debug)] pub struct TransactionLookup { mode: PruneMode, } impl TransactionLookup { + /// Creates a new [`TransactionLookup`] with the given prune mode. pub const fn new(mode: PruneMode) -> Self { Self { mode } } @@ -144,7 +146,7 @@ where #[cfg(test)] mod tests { - use crate::segments::{PruneInput, PruneLimiter, Segment, SegmentOutput, TransactionLookup}; + use crate::TransactionLookup; use alloy_primitives::{BlockNumber, TxNumber, B256}; use assert_matches::assert_matches; use itertools::{ @@ -153,8 +155,13 @@ mod tests { }; use reth_db_api::tables; use reth_provider::{DBProvider, DatabaseProviderFactory, PruneCheckpointReader}; + use reth_prune::{ + segments::{PruneInput, Segment}, + PruneLimiter, + }; use reth_prune_types::{ PruneCheckpoint, PruneInterruptReason, PruneMode, PruneProgress, PruneSegment, + SegmentOutput, }; use reth_stages::test_utils::{StorageKind, TestStageDB}; use reth_testing_utils::generators::{self, random_block_range, BlockRangeParams}; diff --git a/crates/prune/prune/Cargo.toml b/crates/prune/prune/Cargo.toml index 615a793bb89..723c4acb796 100644 --- a/crates/prune/prune/Cargo.toml +++ b/crates/prune/prune/Cargo.toml @@ -14,17 +14,11 @@ workspace = true [dependencies] # reth reth-exex-types.workspace = true -reth-db-api.workspace = true reth-errors.workspace = true reth-provider.workspace = true reth-tokio-util.workspace = true reth-config.workspace = true reth-prune-types.workspace = true -reth-primitives-traits.workspace = true -reth-static-file-types.workspace = true - -# ethereum -alloy-eips.workspace = true # metrics reth-metrics.workspace = true @@ -34,17 +28,11 @@ alloy-primitives.workspace = true # misc tracing.workspace = true thiserror.workspace = true -itertools.workspace = true -rayon.workspace = true tokio.workspace = true -rustc-hash.workspace = true [dev-dependencies] # reth reth-db = { workspace = true, features = ["test-utils"] } -reth-stages = { workspace = true, features = ["test-utils"] } reth-primitives-traits = { workspace = true, features = ["arbitrary"] } reth-testing-utils.workspace = true reth-tracing.workspace = true - -assert_matches.workspace = true diff --git a/crates/prune/prune/src/builder.rs b/crates/prune/prune/src/builder.rs index f61aa6bd46d..1ed7d9a51cb 100644 --- a/crates/prune/prune/src/builder.rs +++ b/crates/prune/prune/src/builder.rs @@ -1,14 +1,5 @@ -use crate::{segments::SegmentSet, Pruner}; -use alloy_eips::eip2718::Encodable2718; use reth_config::PruneConfig; -use reth_db_api::{table::Value, transaction::DbTxMut}; use reth_exex_types::FinishedExExHeight; -use reth_primitives_traits::NodePrimitives; -use reth_provider::{ - providers::StaticFileProvider, BlockReader, ChainStateBlockReader, DBProvider, - DatabaseProviderFactory, NodePrimitivesProvider, PruneCheckpointReader, PruneCheckpointWriter, - StaticFileProviderFactory, -}; use reth_prune_types::PruneModes; use std::time::Duration; use tokio::sync::watch; @@ -17,15 +8,15 @@ use tokio::sync::watch; #[derive(Debug, Clone)] pub struct PrunerBuilder { /// Minimum pruning interval measured in blocks. - block_interval: usize, + pub block_interval: usize, /// Pruning configuration for every part of the data that can be pruned. - segments: PruneModes, + pub segments: PruneModes, /// The delete limit for pruner, per run. - delete_limit: usize, + pub delete_limit: usize, /// Time a pruner job can run before timing out. - timeout: Option, + pub timeout: Option, /// The finished height of all `ExEx`'s. - finished_exex_height: watch::Receiver, + pub finished_exex_height: watch::Receiver, } impl PrunerBuilder { @@ -71,59 +62,6 @@ impl PrunerBuilder { self.finished_exex_height = finished_exex_height; self } - - /// Builds a [Pruner] from the current configuration with the given provider factory. - pub fn build_with_provider_factory(self, provider_factory: PF) -> Pruner - where - PF: DatabaseProviderFactory< - ProviderRW: PruneCheckpointWriter - + PruneCheckpointReader - + BlockReader - + ChainStateBlockReader - + StaticFileProviderFactory< - Primitives: NodePrimitives, - >, - > + StaticFileProviderFactory< - Primitives = ::Primitives, - >, - { - let segments = - SegmentSet::from_components(provider_factory.static_file_provider(), self.segments); - - Pruner::new_with_factory( - provider_factory, - segments.into_vec(), - self.block_interval, - self.delete_limit, - self.timeout, - self.finished_exex_height, - ) - } - - /// Builds a [Pruner] from the current configuration with the given static file provider. - pub fn build( - self, - static_file_provider: StaticFileProvider, - ) -> Pruner - where - Provider: StaticFileProviderFactory< - Primitives: NodePrimitives, - > + DBProvider - + BlockReader - + ChainStateBlockReader - + PruneCheckpointWriter - + PruneCheckpointReader, - { - let segments = SegmentSet::::from_components(static_file_provider, self.segments); - - Pruner::new( - segments.into_vec(), - self.block_interval, - self.delete_limit, - self.timeout, - self.finished_exex_height, - ) - } } impl Default for PrunerBuilder { diff --git a/crates/prune/prune/src/lib.rs b/crates/prune/prune/src/lib.rs index 4da07d495e7..f5ca18a4ce3 100644 --- a/crates/prune/prune/src/lib.rs +++ b/crates/prune/prune/src/lib.rs @@ -10,7 +10,6 @@ #![cfg_attr(docsrs, feature(doc_cfg))] mod builder; -mod db_ext; mod error; mod limiter; mod metrics; diff --git a/crates/prune/prune/src/segments/mod.rs b/crates/prune/prune/src/segments/mod.rs index 43be33a75d1..f0c14e339f1 100644 --- a/crates/prune/prune/src/segments/mod.rs +++ b/crates/prune/prune/src/segments/mod.rs @@ -1,6 +1,4 @@ -mod receipts; mod set; -mod user; use crate::{PruneLimiter, PrunerError}; use alloy_primitives::{BlockNumber, TxNumber}; @@ -9,10 +7,6 @@ use reth_prune_types::{PruneCheckpoint, PruneMode, PrunePurpose, PruneSegment, S pub use set::SegmentSet; use std::{fmt::Debug, ops::RangeInclusive}; use tracing::error; -pub use user::{ - AccountHistory, MerkleChangeSets, Receipts as UserReceipts, SenderRecovery, StorageHistory, - TransactionLookup, -}; /// A segment represents a pruning of some portion of the data. /// @@ -51,11 +45,11 @@ pub trait Segment: Debug + Send + Sync { #[derive(Debug)] #[cfg_attr(test, derive(Clone))] pub struct PruneInput { - pub(crate) previous_checkpoint: Option, + pub previous_checkpoint: Option, /// Target block up to which the pruning needs to be done, inclusive. - pub(crate) to_block: BlockNumber, + pub to_block: BlockNumber, /// Limits pruning of a segment. - pub(crate) limiter: PruneLimiter, + pub limiter: PruneLimiter, } impl PruneInput { @@ -67,7 +61,7 @@ impl PruneInput { /// 2. If checkpoint doesn't exist, return 0. /// /// To get the range end: get last tx number for `to_block`. - pub(crate) fn get_next_tx_num_range( + pub fn get_next_tx_num_range( &self, provider: &Provider, ) -> ProviderResult>> { @@ -113,7 +107,7 @@ impl PruneInput { /// 2. If checkpoint doesn't exist, use block 0. /// /// To get the range end: use block `to_block`. - pub(crate) fn get_next_block_range(&self) -> Option> { + pub fn get_next_block_range(&self) -> Option> { let from_block = self.get_start_next_block_range(); let range = from_block..=self.to_block; if range.is_empty() { @@ -127,7 +121,7 @@ impl PruneInput { /// /// 1. If checkpoint exists, use next block. /// 2. If checkpoint doesn't exist, use block 0. - pub(crate) fn get_start_next_block_range(&self) -> u64 { + pub fn get_start_next_block_range(&self) -> u64 { self.previous_checkpoint .and_then(|checkpoint| checkpoint.block_number) // Checkpoint exists, prune from the next block after the highest pruned one diff --git a/crates/prune/prune/src/segments/set.rs b/crates/prune/prune/src/segments/set.rs index 4538773d7d2..a105bd01fad 100644 --- a/crates/prune/prune/src/segments/set.rs +++ b/crates/prune/prune/src/segments/set.rs @@ -1,15 +1,4 @@ -use crate::segments::{ - AccountHistory, MerkleChangeSets, Segment, SenderRecovery, StorageHistory, TransactionLookup, - UserReceipts, -}; -use alloy_eips::eip2718::Encodable2718; -use reth_db_api::{table::Value, transaction::DbTxMut}; -use reth_primitives_traits::NodePrimitives; -use reth_provider::{ - providers::StaticFileProvider, BlockReader, ChainStateBlockReader, DBProvider, - PruneCheckpointReader, PruneCheckpointWriter, StaticFileProviderFactory, -}; -use reth_prune_types::PruneModes; +use crate::segments::Segment; /// Collection of [`Segment`]. Thread-safe, allocated on the heap. #[derive(Debug)] @@ -43,50 +32,6 @@ impl SegmentSet { } } -impl SegmentSet -where - Provider: StaticFileProviderFactory< - Primitives: NodePrimitives, - > + DBProvider - + PruneCheckpointWriter - + PruneCheckpointReader - + BlockReader - + ChainStateBlockReader, -{ - /// Creates a [`SegmentSet`] from an existing components, such as [`StaticFileProvider`] and - /// [`PruneModes`]. - pub fn from_components( - _static_file_provider: StaticFileProvider, - prune_modes: PruneModes, - ) -> Self { - #[expect(deprecated)] - let PruneModes { - sender_recovery, - transaction_lookup, - receipts, - account_history, - storage_history, - bodies_history: _, - merkle_changesets, - receipts_log_filter: (), - } = prune_modes; - - Self::default() - // Merkle changesets - .segment(MerkleChangeSets::new(merkle_changesets)) - // Account history - .segment_opt(account_history.map(AccountHistory::new)) - // Storage history - .segment_opt(storage_history.map(StorageHistory::new)) - // User receipts - .segment_opt(receipts.map(UserReceipts::new)) - // Transaction lookup - .segment_opt(transaction_lookup.map(TransactionLookup::new)) - // Sender recovery - .segment_opt(sender_recovery.map(SenderRecovery::new)) - } -} - impl Default for SegmentSet { fn default() -> Self { Self { inner: Vec::new() } diff --git a/crates/stages/api/Cargo.toml b/crates/stages/api/Cargo.toml index c8eb81289d0..f3af9a93176 100644 --- a/crates/stages/api/Cargo.toml +++ b/crates/stages/api/Cargo.toml @@ -19,6 +19,7 @@ reth-network-p2p.workspace = true reth-tokio-util.workspace = true reth-consensus.workspace = true reth-prune.workspace = true +reth-prune-db.workspace = true reth-errors.workspace = true reth-stages-types.workspace = true reth-static-file-types.workspace = true diff --git a/crates/stages/api/src/pipeline/mod.rs b/crates/stages/api/src/pipeline/mod.rs index e8542c36da6..bbda7b8f1d7 100644 --- a/crates/stages/api/src/pipeline/mod.rs +++ b/crates/stages/api/src/pipeline/mod.rs @@ -280,9 +280,10 @@ impl Pipeline { if let Some(prune_tip) = lowest_static_file_height { // Run the pruner so we don't potentially end up with higher height in the database vs // static files during a pipeline unwind - let mut pruner = PrunerBuilder::new(Default::default()) - .delete_limit(usize::MAX) - .build_with_provider_factory(self.provider_factory.clone()); + let mut pruner = reth_prune_db::build_with_provider_factory( + PrunerBuilder::new(Default::default()).delete_limit(usize::MAX), + self.provider_factory.clone(), + ); pruner.run(prune_tip)?; } diff --git a/crates/stages/stages/Cargo.toml b/crates/stages/stages/Cargo.toml index 32114c58e1b..c55c74564d3 100644 --- a/crates/stages/stages/Cargo.toml +++ b/crates/stages/stages/Cargo.toml @@ -32,6 +32,7 @@ reth-provider.workspace = true reth-execution-types.workspace = true reth-ethereum-primitives = { workspace = true, optional = true } reth-prune.workspace = true +reth-prune-db.workspace = true reth-prune-types.workspace = true reth-storage-errors.workspace = true reth-revm.workspace = true diff --git a/crates/stages/stages/src/stages/prune.rs b/crates/stages/stages/src/stages/prune.rs index 3161d4b1412..ddcce665244 100644 --- a/crates/stages/stages/src/stages/prune.rs +++ b/crates/stages/stages/src/stages/prune.rs @@ -52,10 +52,12 @@ where } fn execute(&mut self, provider: &Provider, input: ExecInput) -> Result { - let mut pruner = PrunerBuilder::default() - .segments(self.prune_modes.clone()) - .delete_limit(self.commit_threshold) - .build::(provider.static_file_provider()); + let mut pruner = reth_prune_db::build::( + PrunerBuilder::default() + .segments(self.prune_modes.clone()) + .delete_limit(self.commit_threshold), + provider.static_file_provider(), + ); let result = pruner.run_with_provider(provider, input.target())?; if result.progress.is_finished() {