diff --git a/CHANGELOG.sf.md b/CHANGELOG.sf.md index e66d1d45fb..28a7ecf1a4 100644 --- a/CHANGELOG.sf.md +++ b/CHANGELOG.sf.md @@ -1,3 +1,17 @@ +## Unreleased + +### Added + +* Firehose traces EIP-8130 transactions (type `0x79`, enabled by Everest) as + `TRX_TYPE_ACCOUNT_ABSTRACTION`, instead of stopping the node. The transaction's own fields are in + `TransactionTrace.account_abstraction_trx_input`, with each signed call linked to the call that + executed it, and `committed_phases` is in `TransactionReceipt.account_abstraction_trx_output`. + The calls of a phase that reverted are `state_reverted`, including the ones that succeeded before + it, while the phases that committed keep their state even though the transaction is `FAILED`. + The payer's gas purchase and refund, the fee payouts, the nonce increment, the nonce manager + writes and the delegation code are recorded on the root call. + Keystore account changes, which only Zenith enables, still stop the node. + ## v1.5.0-fh3.1-1 ### Changed diff --git a/Cargo.lock b/Cargo.lock index 91d44f22c8..56e376737b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4869,10 +4869,13 @@ dependencies = [ "alloy-eips 2.4.1", "alloy-genesis", "alloy-primitives", + "alloy-signer 2.4.1", "base-common-consensus", "base-execution-chainspec", + "base-execution-eip8130", "base-execution-evm", "base-execution-firehose", + "base-test-utils", "eyre", "firehose-tracer", "firehose-tracer-test", @@ -9927,9 +9930,9 @@ checksum = "9844ddc3a6e533d62bba727eb6c28b5d360921d5175e9ff0f1e621a5c590a4d5" [[package]] name = "firehose-tracer" -version = "5.6.0" +version = "5.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3dbf414244eeb38aa54b38fc82ac982a2587cffb5a9d86f808bdea1698d61a1e" +checksum = "13e2e57e7576a3f4da038684d23aa2a69360b034e60feab88aeec0593ca4714d" dependencies = [ "alloy-consensus 2.4.1", "alloy-eips 2.4.1", @@ -9950,9 +9953,9 @@ dependencies = [ [[package]] name = "firehose-tracer-prestate" -version = "5.6.0" +version = "5.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29ed9ac9b60374bf1aa11b1b20376051817acdc1758932797a292aa6329105d8" +checksum = "630884e25b18bf0fa75c7c6f8e504ffddf95dcd5b7cc71e3f47320fa97ffd7ba" dependencies = [ "alloy-consensus 2.4.1", "alloy-eips 2.4.1", @@ -9975,9 +9978,9 @@ dependencies = [ [[package]] name = "firehose-tracer-test" -version = "5.6.0" +version = "5.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44af0c41df9cfc759b5638536b8d8d3800c36286211394402ced965c8ba85c4e" +checksum = "fb25c3ae3ecb8c3eab2a0c9badd4f5f094122738e52054671491d1d782d76ac8" dependencies = [ "alloy-primitives", "alloy-rlp", @@ -16314,7 +16317,7 @@ checksum = "1e061d1b48cb8d38042de4ae0a7a6401009d6143dc80d2e2d6f31f0bdd6470c7" [[package]] name = "reth-basic-payload-builder" version = "2.5.2" -source = "git+https://github.com/streamingfast/reth.git?tag=base-v2.5.2.8-fh3.1#3605fcb480ef42c14622e1f50c4d1d8c1bba6c6a" +source = "git+https://github.com/streamingfast/reth.git?tag=base-v2.5.2.8-fh3.1-2#b30d7e3cfdd3d56f736e1e37493bbcda60bed848" dependencies = [ "alloy-consensus 2.4.1", "alloy-eips 2.4.1", @@ -16341,7 +16344,7 @@ dependencies = [ [[package]] name = "reth-chain-state" version = "2.5.2" -source = "git+https://github.com/streamingfast/reth.git?tag=base-v2.5.2.8-fh3.1#3605fcb480ef42c14622e1f50c4d1d8c1bba6c6a" +source = "git+https://github.com/streamingfast/reth.git?tag=base-v2.5.2.8-fh3.1-2#b30d7e3cfdd3d56f736e1e37493bbcda60bed848" dependencies = [ "alloy-consensus 2.4.1", "alloy-eips 2.4.1", @@ -16372,7 +16375,7 @@ dependencies = [ [[package]] name = "reth-chainspec" version = "2.5.2" -source = "git+https://github.com/streamingfast/reth.git?tag=base-v2.5.2.8-fh3.1#3605fcb480ef42c14622e1f50c4d1d8c1bba6c6a" +source = "git+https://github.com/streamingfast/reth.git?tag=base-v2.5.2.8-fh3.1-2#b30d7e3cfdd3d56f736e1e37493bbcda60bed848" dependencies = [ "alloy-chains", "alloy-consensus 2.4.1", @@ -16392,7 +16395,7 @@ dependencies = [ [[package]] name = "reth-cli" version = "2.5.2" -source = "git+https://github.com/streamingfast/reth.git?tag=base-v2.5.2.8-fh3.1#3605fcb480ef42c14622e1f50c4d1d8c1bba6c6a" +source = "git+https://github.com/streamingfast/reth.git?tag=base-v2.5.2.8-fh3.1-2#b30d7e3cfdd3d56f736e1e37493bbcda60bed848" dependencies = [ "alloy-genesis", "clap", @@ -16405,7 +16408,7 @@ dependencies = [ [[package]] name = "reth-cli-commands" version = "2.5.2" -source = "git+https://github.com/streamingfast/reth.git?tag=base-v2.5.2.8-fh3.1#3605fcb480ef42c14622e1f50c4d1d8c1bba6c6a" +source = "git+https://github.com/streamingfast/reth.git?tag=base-v2.5.2.8-fh3.1-2#b30d7e3cfdd3d56f736e1e37493bbcda60bed848" dependencies = [ "alloy-chains", "alloy-consensus 2.4.1", @@ -16494,7 +16497,7 @@ dependencies = [ [[package]] name = "reth-cli-runner" version = "2.5.2" -source = "git+https://github.com/streamingfast/reth.git?tag=base-v2.5.2.8-fh3.1#3605fcb480ef42c14622e1f50c4d1d8c1bba6c6a" +source = "git+https://github.com/streamingfast/reth.git?tag=base-v2.5.2.8-fh3.1-2#b30d7e3cfdd3d56f736e1e37493bbcda60bed848" dependencies = [ "reth-tasks", "tokio", @@ -16504,7 +16507,7 @@ dependencies = [ [[package]] name = "reth-cli-util" version = "2.5.2" -source = "git+https://github.com/streamingfast/reth.git?tag=base-v2.5.2.8-fh3.1#3605fcb480ef42c14622e1f50c4d1d8c1bba6c6a" +source = "git+https://github.com/streamingfast/reth.git?tag=base-v2.5.2.8-fh3.1-2#b30d7e3cfdd3d56f736e1e37493bbcda60bed848" dependencies = [ "alloy-eips 2.4.1", "alloy-primitives", @@ -16555,7 +16558,7 @@ dependencies = [ [[package]] name = "reth-config" version = "2.5.2" -source = "git+https://github.com/streamingfast/reth.git?tag=base-v2.5.2.8-fh3.1#3605fcb480ef42c14622e1f50c4d1d8c1bba6c6a" +source = "git+https://github.com/streamingfast/reth.git?tag=base-v2.5.2.8-fh3.1-2#b30d7e3cfdd3d56f736e1e37493bbcda60bed848" dependencies = [ "eyre", "humantime-serde", @@ -16572,7 +16575,7 @@ dependencies = [ [[package]] name = "reth-consensus" version = "2.5.2" -source = "git+https://github.com/streamingfast/reth.git?tag=base-v2.5.2.8-fh3.1#3605fcb480ef42c14622e1f50c4d1d8c1bba6c6a" +source = "git+https://github.com/streamingfast/reth.git?tag=base-v2.5.2.8-fh3.1-2#b30d7e3cfdd3d56f736e1e37493bbcda60bed848" dependencies = [ "alloy-consensus 2.4.1", "alloy-eip7928 0.4.5", @@ -16586,7 +16589,7 @@ dependencies = [ [[package]] name = "reth-consensus-common" version = "2.5.2" -source = "git+https://github.com/streamingfast/reth.git?tag=base-v2.5.2.8-fh3.1#3605fcb480ef42c14622e1f50c4d1d8c1bba6c6a" +source = "git+https://github.com/streamingfast/reth.git?tag=base-v2.5.2.8-fh3.1-2#b30d7e3cfdd3d56f736e1e37493bbcda60bed848" dependencies = [ "alloy-consensus 2.4.1", "alloy-eips 2.4.1", @@ -16599,7 +16602,7 @@ dependencies = [ [[package]] name = "reth-consensus-debug-client" version = "2.5.2" -source = "git+https://github.com/streamingfast/reth.git?tag=base-v2.5.2.8-fh3.1#3605fcb480ef42c14622e1f50c4d1d8c1bba6c6a" +source = "git+https://github.com/streamingfast/reth.git?tag=base-v2.5.2.8-fh3.1-2#b30d7e3cfdd3d56f736e1e37493bbcda60bed848" dependencies = [ "alloy-consensus 2.4.1", "alloy-eips 2.4.1", @@ -16624,7 +16627,7 @@ dependencies = [ [[package]] name = "reth-db" version = "2.5.2" -source = "git+https://github.com/streamingfast/reth.git?tag=base-v2.5.2.8-fh3.1#3605fcb480ef42c14622e1f50c4d1d8c1bba6c6a" +source = "git+https://github.com/streamingfast/reth.git?tag=base-v2.5.2.8-fh3.1-2#b30d7e3cfdd3d56f736e1e37493bbcda60bed848" dependencies = [ "alloy-primitives", "derive_more 2.1.1", @@ -16653,7 +16656,7 @@ dependencies = [ [[package]] name = "reth-db-api" version = "2.5.2" -source = "git+https://github.com/streamingfast/reth.git?tag=base-v2.5.2.8-fh3.1#3605fcb480ef42c14622e1f50c4d1d8c1bba6c6a" +source = "git+https://github.com/streamingfast/reth.git?tag=base-v2.5.2.8-fh3.1-2#b30d7e3cfdd3d56f736e1e37493bbcda60bed848" dependencies = [ "alloy-consensus 2.4.1", "alloy-primitives", @@ -16679,7 +16682,7 @@ dependencies = [ [[package]] name = "reth-db-common" version = "2.5.2" -source = "git+https://github.com/streamingfast/reth.git?tag=base-v2.5.2.8-fh3.1#3605fcb480ef42c14622e1f50c4d1d8c1bba6c6a" +source = "git+https://github.com/streamingfast/reth.git?tag=base-v2.5.2.8-fh3.1-2#b30d7e3cfdd3d56f736e1e37493bbcda60bed848" dependencies = [ "alloy-consensus 2.4.1", "alloy-genesis", @@ -16709,7 +16712,7 @@ dependencies = [ [[package]] name = "reth-db-models" version = "2.5.2" -source = "git+https://github.com/streamingfast/reth.git?tag=base-v2.5.2.8-fh3.1#3605fcb480ef42c14622e1f50c4d1d8c1bba6c6a" +source = "git+https://github.com/streamingfast/reth.git?tag=base-v2.5.2.8-fh3.1-2#b30d7e3cfdd3d56f736e1e37493bbcda60bed848" dependencies = [ "alloy-eips 2.4.1", "alloy-primitives", @@ -16724,7 +16727,7 @@ dependencies = [ [[package]] name = "reth-discv4" version = "2.5.2" -source = "git+https://github.com/streamingfast/reth.git?tag=base-v2.5.2.8-fh3.1#3605fcb480ef42c14622e1f50c4d1d8c1bba6c6a" +source = "git+https://github.com/streamingfast/reth.git?tag=base-v2.5.2.8-fh3.1-2#b30d7e3cfdd3d56f736e1e37493bbcda60bed848" dependencies = [ "alloy-primitives", "alloy-rlp", @@ -16749,7 +16752,7 @@ dependencies = [ [[package]] name = "reth-discv5" version = "2.5.2" -source = "git+https://github.com/streamingfast/reth.git?tag=base-v2.5.2.8-fh3.1#3605fcb480ef42c14622e1f50c4d1d8c1bba6c6a" +source = "git+https://github.com/streamingfast/reth.git?tag=base-v2.5.2.8-fh3.1-2#b30d7e3cfdd3d56f736e1e37493bbcda60bed848" dependencies = [ "alloy-primitives", "alloy-rlp", @@ -16773,7 +16776,7 @@ dependencies = [ [[package]] name = "reth-dns-discovery" version = "2.5.2" -source = "git+https://github.com/streamingfast/reth.git?tag=base-v2.5.2.8-fh3.1#3605fcb480ef42c14622e1f50c4d1d8c1bba6c6a" +source = "git+https://github.com/streamingfast/reth.git?tag=base-v2.5.2.8-fh3.1-2#b30d7e3cfdd3d56f736e1e37493bbcda60bed848" dependencies = [ "alloy-primitives", "dashmap", @@ -16797,7 +16800,7 @@ dependencies = [ [[package]] name = "reth-downloaders" version = "2.5.2" -source = "git+https://github.com/streamingfast/reth.git?tag=base-v2.5.2.8-fh3.1#3605fcb480ef42c14622e1f50c4d1d8c1bba6c6a" +source = "git+https://github.com/streamingfast/reth.git?tag=base-v2.5.2.8-fh3.1-2#b30d7e3cfdd3d56f736e1e37493bbcda60bed848" dependencies = [ "alloy-consensus 2.4.1", "alloy-eips 2.4.1", @@ -16832,7 +16835,7 @@ dependencies = [ [[package]] name = "reth-e2e-test-utils" version = "2.5.2" -source = "git+https://github.com/streamingfast/reth.git?tag=base-v2.5.2.8-fh3.1#3605fcb480ef42c14622e1f50c4d1d8c1bba6c6a" +source = "git+https://github.com/streamingfast/reth.git?tag=base-v2.5.2.8-fh3.1-2#b30d7e3cfdd3d56f736e1e37493bbcda60bed848" dependencies = [ "alloy-consensus 2.4.1", "alloy-eips 2.4.1", @@ -16889,7 +16892,7 @@ dependencies = [ [[package]] name = "reth-ecies" version = "2.5.2" -source = "git+https://github.com/streamingfast/reth.git?tag=base-v2.5.2.8-fh3.1#3605fcb480ef42c14622e1f50c4d1d8c1bba6c6a" +source = "git+https://github.com/streamingfast/reth.git?tag=base-v2.5.2.8-fh3.1-2#b30d7e3cfdd3d56f736e1e37493bbcda60bed848" dependencies = [ "aes", "alloy-primitives", @@ -16916,7 +16919,7 @@ dependencies = [ [[package]] name = "reth-engine-local" version = "2.5.2" -source = "git+https://github.com/streamingfast/reth.git?tag=base-v2.5.2.8-fh3.1#3605fcb480ef42c14622e1f50c4d1d8c1bba6c6a" +source = "git+https://github.com/streamingfast/reth.git?tag=base-v2.5.2.8-fh3.1-2#b30d7e3cfdd3d56f736e1e37493bbcda60bed848" dependencies = [ "alloy-consensus 2.4.1", "alloy-primitives", @@ -16939,7 +16942,7 @@ dependencies = [ [[package]] name = "reth-engine-primitives" version = "2.5.2" -source = "git+https://github.com/streamingfast/reth.git?tag=base-v2.5.2.8-fh3.1#3605fcb480ef42c14622e1f50c4d1d8c1bba6c6a" +source = "git+https://github.com/streamingfast/reth.git?tag=base-v2.5.2.8-fh3.1-2#b30d7e3cfdd3d56f736e1e37493bbcda60bed848" dependencies = [ "alloy-consensus 2.4.1", "alloy-eips 2.4.1", @@ -16966,7 +16969,7 @@ dependencies = [ [[package]] name = "reth-engine-tree" version = "2.5.2" -source = "git+https://github.com/streamingfast/reth.git?tag=base-v2.5.2.8-fh3.1#3605fcb480ef42c14622e1f50c4d1d8c1bba6c6a" +source = "git+https://github.com/streamingfast/reth.git?tag=base-v2.5.2.8-fh3.1-2#b30d7e3cfdd3d56f736e1e37493bbcda60bed848" dependencies = [ "alloy-consensus 2.4.1", "alloy-eip7928 0.4.5", @@ -17023,7 +17026,7 @@ dependencies = [ [[package]] name = "reth-engine-util" version = "2.5.2" -source = "git+https://github.com/streamingfast/reth.git?tag=base-v2.5.2.8-fh3.1#3605fcb480ef42c14622e1f50c4d1d8c1bba6c6a" +source = "git+https://github.com/streamingfast/reth.git?tag=base-v2.5.2.8-fh3.1-2#b30d7e3cfdd3d56f736e1e37493bbcda60bed848" dependencies = [ "alloy-consensus 2.4.1", "alloy-primitives", @@ -17053,7 +17056,7 @@ dependencies = [ [[package]] name = "reth-era" version = "2.5.2" -source = "git+https://github.com/streamingfast/reth.git?tag=base-v2.5.2.8-fh3.1#3605fcb480ef42c14622e1f50c4d1d8c1bba6c6a" +source = "git+https://github.com/streamingfast/reth.git?tag=base-v2.5.2.8-fh3.1-2#b30d7e3cfdd3d56f736e1e37493bbcda60bed848" dependencies = [ "alloy-consensus 2.4.1", "alloy-eips 2.4.1", @@ -17071,7 +17074,7 @@ dependencies = [ [[package]] name = "reth-era-downloader" version = "2.5.2" -source = "git+https://github.com/streamingfast/reth.git?tag=base-v2.5.2.8-fh3.1#3605fcb480ef42c14622e1f50c4d1d8c1bba6c6a" +source = "git+https://github.com/streamingfast/reth.git?tag=base-v2.5.2.8-fh3.1-2#b30d7e3cfdd3d56f736e1e37493bbcda60bed848" dependencies = [ "alloy-primitives", "bytes", @@ -17087,7 +17090,7 @@ dependencies = [ [[package]] name = "reth-era-utils" version = "2.5.2" -source = "git+https://github.com/streamingfast/reth.git?tag=base-v2.5.2.8-fh3.1#3605fcb480ef42c14622e1f50c4d1d8c1bba6c6a" +source = "git+https://github.com/streamingfast/reth.git?tag=base-v2.5.2.8-fh3.1-2#b30d7e3cfdd3d56f736e1e37493bbcda60bed848" dependencies = [ "alloy-consensus 2.4.1", "alloy-primitives", @@ -17111,7 +17114,7 @@ dependencies = [ [[package]] name = "reth-errors" version = "2.5.2" -source = "git+https://github.com/streamingfast/reth.git?tag=base-v2.5.2.8-fh3.1#3605fcb480ef42c14622e1f50c4d1d8c1bba6c6a" +source = "git+https://github.com/streamingfast/reth.git?tag=base-v2.5.2.8-fh3.1-2#b30d7e3cfdd3d56f736e1e37493bbcda60bed848" dependencies = [ "reth-consensus", "reth-execution-errors", @@ -17122,7 +17125,7 @@ dependencies = [ [[package]] name = "reth-eth-wire" version = "2.5.2" -source = "git+https://github.com/streamingfast/reth.git?tag=base-v2.5.2.8-fh3.1#3605fcb480ef42c14622e1f50c4d1d8c1bba6c6a" +source = "git+https://github.com/streamingfast/reth.git?tag=base-v2.5.2.8-fh3.1-2#b30d7e3cfdd3d56f736e1e37493bbcda60bed848" dependencies = [ "alloy-chains", "alloy-primitives", @@ -17151,7 +17154,7 @@ dependencies = [ [[package]] name = "reth-eth-wire-types" version = "2.5.2" -source = "git+https://github.com/streamingfast/reth.git?tag=base-v2.5.2.8-fh3.1#3605fcb480ef42c14622e1f50c4d1d8c1bba6c6a" +source = "git+https://github.com/streamingfast/reth.git?tag=base-v2.5.2.8-fh3.1-2#b30d7e3cfdd3d56f736e1e37493bbcda60bed848" dependencies = [ "alloy-chains", "alloy-consensus 2.4.1", @@ -17177,7 +17180,7 @@ dependencies = [ [[package]] name = "reth-ethereum-consensus" version = "2.5.2" -source = "git+https://github.com/streamingfast/reth.git?tag=base-v2.5.2.8-fh3.1#3605fcb480ef42c14622e1f50c4d1d8c1bba6c6a" +source = "git+https://github.com/streamingfast/reth.git?tag=base-v2.5.2.8-fh3.1-2#b30d7e3cfdd3d56f736e1e37493bbcda60bed848" dependencies = [ "alloy-consensus 2.4.1", "alloy-eips 2.4.1", @@ -17193,7 +17196,7 @@ dependencies = [ [[package]] name = "reth-ethereum-engine-primitives" version = "2.5.2" -source = "git+https://github.com/streamingfast/reth.git?tag=base-v2.5.2.8-fh3.1#3605fcb480ef42c14622e1f50c4d1d8c1bba6c6a" +source = "git+https://github.com/streamingfast/reth.git?tag=base-v2.5.2.8-fh3.1-2#b30d7e3cfdd3d56f736e1e37493bbcda60bed848" dependencies = [ "alloy-eips 2.4.1", "alloy-primitives", @@ -17209,7 +17212,7 @@ dependencies = [ [[package]] name = "reth-ethereum-forks" version = "2.5.2" -source = "git+https://github.com/streamingfast/reth.git?tag=base-v2.5.2.8-fh3.1#3605fcb480ef42c14622e1f50c4d1d8c1bba6c6a" +source = "git+https://github.com/streamingfast/reth.git?tag=base-v2.5.2.8-fh3.1-2#b30d7e3cfdd3d56f736e1e37493bbcda60bed848" dependencies = [ "alloy-eip2124", "alloy-hardforks 0.4.7", @@ -17223,7 +17226,7 @@ dependencies = [ [[package]] name = "reth-ethereum-payload-builder" version = "2.5.2" -source = "git+https://github.com/streamingfast/reth.git?tag=base-v2.5.2.8-fh3.1#3605fcb480ef42c14622e1f50c4d1d8c1bba6c6a" +source = "git+https://github.com/streamingfast/reth.git?tag=base-v2.5.2.8-fh3.1-2#b30d7e3cfdd3d56f736e1e37493bbcda60bed848" dependencies = [ "alloy-consensus 2.4.1", "alloy-eips 2.4.1", @@ -17253,7 +17256,7 @@ dependencies = [ [[package]] name = "reth-ethereum-primitives" version = "2.5.2" -source = "git+https://github.com/streamingfast/reth.git?tag=base-v2.5.2.8-fh3.1#3605fcb480ef42c14622e1f50c4d1d8c1bba6c6a" +source = "git+https://github.com/streamingfast/reth.git?tag=base-v2.5.2.8-fh3.1-2#b30d7e3cfdd3d56f736e1e37493bbcda60bed848" dependencies = [ "alloy-consensus 2.4.1", "alloy-eips 2.4.1", @@ -17267,7 +17270,7 @@ dependencies = [ [[package]] name = "reth-etl" version = "2.5.2" -source = "git+https://github.com/streamingfast/reth.git?tag=base-v2.5.2.8-fh3.1#3605fcb480ef42c14622e1f50c4d1d8c1bba6c6a" +source = "git+https://github.com/streamingfast/reth.git?tag=base-v2.5.2.8-fh3.1-2#b30d7e3cfdd3d56f736e1e37493bbcda60bed848" dependencies = [ "rayon", "reth-db-api", @@ -17277,7 +17280,7 @@ dependencies = [ [[package]] name = "reth-evm" version = "2.5.2" -source = "git+https://github.com/streamingfast/reth.git?tag=base-v2.5.2.8-fh3.1#3605fcb480ef42c14622e1f50c4d1d8c1bba6c6a" +source = "git+https://github.com/streamingfast/reth.git?tag=base-v2.5.2.8-fh3.1-2#b30d7e3cfdd3d56f736e1e37493bbcda60bed848" dependencies = [ "alloy-consensus 2.4.1", "alloy-eip7928 0.4.5", @@ -17303,7 +17306,7 @@ dependencies = [ [[package]] name = "reth-evm-ethereum" version = "2.5.2" -source = "git+https://github.com/streamingfast/reth.git?tag=base-v2.5.2.8-fh3.1#3605fcb480ef42c14622e1f50c4d1d8c1bba6c6a" +source = "git+https://github.com/streamingfast/reth.git?tag=base-v2.5.2.8-fh3.1-2#b30d7e3cfdd3d56f736e1e37493bbcda60bed848" dependencies = [ "alloy-consensus 2.4.1", "alloy-eips 2.4.1", @@ -17323,7 +17326,7 @@ dependencies = [ [[package]] name = "reth-execution-cache" version = "2.5.2" -source = "git+https://github.com/streamingfast/reth.git?tag=base-v2.5.2.8-fh3.1#3605fcb480ef42c14622e1f50c4d1d8c1bba6c6a" +source = "git+https://github.com/streamingfast/reth.git?tag=base-v2.5.2.8-fh3.1-2#b30d7e3cfdd3d56f736e1e37493bbcda60bed848" dependencies = [ "alloy-primitives", "fixed-cache", @@ -17341,7 +17344,7 @@ dependencies = [ [[package]] name = "reth-execution-errors" version = "2.5.2" -source = "git+https://github.com/streamingfast/reth.git?tag=base-v2.5.2.8-fh3.1#3605fcb480ef42c14622e1f50c4d1d8c1bba6c6a" +source = "git+https://github.com/streamingfast/reth.git?tag=base-v2.5.2.8-fh3.1-2#b30d7e3cfdd3d56f736e1e37493bbcda60bed848" dependencies = [ "alloy-evm", "alloy-primitives", @@ -17354,7 +17357,7 @@ dependencies = [ [[package]] name = "reth-execution-types" version = "2.5.2" -source = "git+https://github.com/streamingfast/reth.git?tag=base-v2.5.2.8-fh3.1#3605fcb480ef42c14622e1f50c4d1d8c1bba6c6a" +source = "git+https://github.com/streamingfast/reth.git?tag=base-v2.5.2.8-fh3.1-2#b30d7e3cfdd3d56f736e1e37493bbcda60bed848" dependencies = [ "alloy-consensus 2.4.1", "alloy-eips 2.4.1", @@ -17373,7 +17376,7 @@ dependencies = [ [[package]] name = "reth-exex" version = "2.5.2" -source = "git+https://github.com/streamingfast/reth.git?tag=base-v2.5.2.8-fh3.1#3605fcb480ef42c14622e1f50c4d1d8c1bba6c6a" +source = "git+https://github.com/streamingfast/reth.git?tag=base-v2.5.2.8-fh3.1-2#b30d7e3cfdd3d56f736e1e37493bbcda60bed848" dependencies = [ "alloy-consensus 2.4.1", "alloy-eips 2.4.1", @@ -17411,7 +17414,7 @@ dependencies = [ [[package]] name = "reth-exex-test-utils" version = "2.5.2" -source = "git+https://github.com/streamingfast/reth.git?tag=base-v2.5.2.8-fh3.1#3605fcb480ef42c14622e1f50c4d1d8c1bba6c6a" +source = "git+https://github.com/streamingfast/reth.git?tag=base-v2.5.2.8-fh3.1-2#b30d7e3cfdd3d56f736e1e37493bbcda60bed848" dependencies = [ "alloy-eips 2.4.1", "eyre", @@ -17443,7 +17446,7 @@ dependencies = [ [[package]] name = "reth-exex-types" version = "2.5.2" -source = "git+https://github.com/streamingfast/reth.git?tag=base-v2.5.2.8-fh3.1#3605fcb480ef42c14622e1f50c4d1d8c1bba6c6a" +source = "git+https://github.com/streamingfast/reth.git?tag=base-v2.5.2.8-fh3.1-2#b30d7e3cfdd3d56f736e1e37493bbcda60bed848" dependencies = [ "alloy-eips 2.4.1", "alloy-primitives", @@ -17457,7 +17460,7 @@ dependencies = [ [[package]] name = "reth-firehose" version = "2.5.2" -source = "git+https://github.com/streamingfast/reth.git?tag=base-v2.5.2.8-fh3.1#3605fcb480ef42c14622e1f50c4d1d8c1bba6c6a" +source = "git+https://github.com/streamingfast/reth.git?tag=base-v2.5.2.8-fh3.1-2#b30d7e3cfdd3d56f736e1e37493bbcda60bed848" dependencies = [ "alloy-consensus 2.4.1", "alloy-eip7928 0.4.5", @@ -17486,7 +17489,7 @@ dependencies = [ [[package]] name = "reth-firehose-tests" version = "2.5.2" -source = "git+https://github.com/streamingfast/reth.git?tag=base-v2.5.2.8-fh3.1#3605fcb480ef42c14622e1f50c4d1d8c1bba6c6a" +source = "git+https://github.com/streamingfast/reth.git?tag=base-v2.5.2.8-fh3.1-2#b30d7e3cfdd3d56f736e1e37493bbcda60bed848" dependencies = [ "alloy-consensus 2.4.1", "alloy-eips 2.4.1", @@ -17513,7 +17516,7 @@ dependencies = [ [[package]] name = "reth-fs-util" version = "2.5.2" -source = "git+https://github.com/streamingfast/reth.git?tag=base-v2.5.2.8-fh3.1#3605fcb480ef42c14622e1f50c4d1d8c1bba6c6a" +source = "git+https://github.com/streamingfast/reth.git?tag=base-v2.5.2.8-fh3.1-2#b30d7e3cfdd3d56f736e1e37493bbcda60bed848" dependencies = [ "serde", "serde_json", @@ -17523,7 +17526,7 @@ dependencies = [ [[package]] name = "reth-invalid-block-hooks" version = "2.5.2" -source = "git+https://github.com/streamingfast/reth.git?tag=base-v2.5.2.8-fh3.1#3605fcb480ef42c14622e1f50c4d1d8c1bba6c6a" +source = "git+https://github.com/streamingfast/reth.git?tag=base-v2.5.2.8-fh3.1-2#b30d7e3cfdd3d56f736e1e37493bbcda60bed848" dependencies = [ "alloy-consensus 2.4.1", "alloy-primitives", @@ -17549,7 +17552,7 @@ dependencies = [ [[package]] name = "reth-ipc" version = "2.5.2" -source = "git+https://github.com/streamingfast/reth.git?tag=base-v2.5.2.8-fh3.1#3605fcb480ef42c14622e1f50c4d1d8c1bba6c6a" +source = "git+https://github.com/streamingfast/reth.git?tag=base-v2.5.2.8-fh3.1-2#b30d7e3cfdd3d56f736e1e37493bbcda60bed848" dependencies = [ "bytes", "futures", @@ -17569,7 +17572,7 @@ dependencies = [ [[package]] name = "reth-libmdbx" version = "2.5.2" -source = "git+https://github.com/streamingfast/reth.git?tag=base-v2.5.2.8-fh3.1#3605fcb480ef42c14622e1f50c4d1d8c1bba6c6a" +source = "git+https://github.com/streamingfast/reth.git?tag=base-v2.5.2.8-fh3.1-2#b30d7e3cfdd3d56f736e1e37493bbcda60bed848" dependencies = [ "bitflags 2.13.1", "byteorder", @@ -17586,7 +17589,7 @@ dependencies = [ [[package]] name = "reth-mdbx-sys" version = "2.5.2" -source = "git+https://github.com/streamingfast/reth.git?tag=base-v2.5.2.8-fh3.1#3605fcb480ef42c14622e1f50c4d1d8c1bba6c6a" +source = "git+https://github.com/streamingfast/reth.git?tag=base-v2.5.2.8-fh3.1-2#b30d7e3cfdd3d56f736e1e37493bbcda60bed848" dependencies = [ "bindgen 0.72.1", "cc", @@ -17595,7 +17598,7 @@ dependencies = [ [[package]] name = "reth-metrics" version = "2.5.2" -source = "git+https://github.com/streamingfast/reth.git?tag=base-v2.5.2.8-fh3.1#3605fcb480ef42c14622e1f50c4d1d8c1bba6c6a" +source = "git+https://github.com/streamingfast/reth.git?tag=base-v2.5.2.8-fh3.1-2#b30d7e3cfdd3d56f736e1e37493bbcda60bed848" dependencies = [ "futures", "libc", @@ -17609,7 +17612,7 @@ dependencies = [ [[package]] name = "reth-net-banlist" version = "2.5.2" -source = "git+https://github.com/streamingfast/reth.git?tag=base-v2.5.2.8-fh3.1#3605fcb480ef42c14622e1f50c4d1d8c1bba6c6a" +source = "git+https://github.com/streamingfast/reth.git?tag=base-v2.5.2.8-fh3.1-2#b30d7e3cfdd3d56f736e1e37493bbcda60bed848" dependencies = [ "alloy-primitives", "ipnet", @@ -17618,7 +17621,7 @@ dependencies = [ [[package]] name = "reth-net-nat" version = "2.5.2" -source = "git+https://github.com/streamingfast/reth.git?tag=base-v2.5.2.8-fh3.1#3605fcb480ef42c14622e1f50c4d1d8c1bba6c6a" +source = "git+https://github.com/streamingfast/reth.git?tag=base-v2.5.2.8-fh3.1-2#b30d7e3cfdd3d56f736e1e37493bbcda60bed848" dependencies = [ "futures-util", "if-addrs 0.14.0", @@ -17632,7 +17635,7 @@ dependencies = [ [[package]] name = "reth-network" version = "2.5.2" -source = "git+https://github.com/streamingfast/reth.git?tag=base-v2.5.2.8-fh3.1#3605fcb480ef42c14622e1f50c4d1d8c1bba6c6a" +source = "git+https://github.com/streamingfast/reth.git?tag=base-v2.5.2.8-fh3.1-2#b30d7e3cfdd3d56f736e1e37493bbcda60bed848" dependencies = [ "alloy-consensus 2.4.1", "alloy-eips 2.4.1", @@ -17691,7 +17694,7 @@ dependencies = [ [[package]] name = "reth-network-api" version = "2.5.2" -source = "git+https://github.com/streamingfast/reth.git?tag=base-v2.5.2.8-fh3.1#3605fcb480ef42c14622e1f50c4d1d8c1bba6c6a" +source = "git+https://github.com/streamingfast/reth.git?tag=base-v2.5.2.8-fh3.1-2#b30d7e3cfdd3d56f736e1e37493bbcda60bed848" dependencies = [ "alloy-consensus 2.4.1", "alloy-primitives", @@ -17716,7 +17719,7 @@ dependencies = [ [[package]] name = "reth-network-p2p" version = "2.5.2" -source = "git+https://github.com/streamingfast/reth.git?tag=base-v2.5.2.8-fh3.1#3605fcb480ef42c14622e1f50c4d1d8c1bba6c6a" +source = "git+https://github.com/streamingfast/reth.git?tag=base-v2.5.2.8-fh3.1-2#b30d7e3cfdd3d56f736e1e37493bbcda60bed848" dependencies = [ "alloy-consensus 2.4.1", "alloy-eip7928 0.4.5", @@ -17740,7 +17743,7 @@ dependencies = [ [[package]] name = "reth-network-peers" version = "2.5.2" -source = "git+https://github.com/streamingfast/reth.git?tag=base-v2.5.2.8-fh3.1#3605fcb480ef42c14622e1f50c4d1d8c1bba6c6a" +source = "git+https://github.com/streamingfast/reth.git?tag=base-v2.5.2.8-fh3.1-2#b30d7e3cfdd3d56f736e1e37493bbcda60bed848" dependencies = [ "alloy-primitives", "alloy-rlp", @@ -17755,7 +17758,7 @@ dependencies = [ [[package]] name = "reth-network-types" version = "2.5.2" -source = "git+https://github.com/streamingfast/reth.git?tag=base-v2.5.2.8-fh3.1#3605fcb480ef42c14622e1f50c4d1d8c1bba6c6a" +source = "git+https://github.com/streamingfast/reth.git?tag=base-v2.5.2.8-fh3.1-2#b30d7e3cfdd3d56f736e1e37493bbcda60bed848" dependencies = [ "alloy-eip2124", "humantime-serde", @@ -17769,7 +17772,7 @@ dependencies = [ [[package]] name = "reth-nippy-jar" version = "2.5.2" -source = "git+https://github.com/streamingfast/reth.git?tag=base-v2.5.2.8-fh3.1#3605fcb480ef42c14622e1f50c4d1d8c1bba6c6a" +source = "git+https://github.com/streamingfast/reth.git?tag=base-v2.5.2.8-fh3.1-2#b30d7e3cfdd3d56f736e1e37493bbcda60bed848" dependencies = [ "anyhow", "bincode 1.3.3", @@ -17786,7 +17789,7 @@ dependencies = [ [[package]] name = "reth-node-api" version = "2.5.2" -source = "git+https://github.com/streamingfast/reth.git?tag=base-v2.5.2.8-fh3.1#3605fcb480ef42c14622e1f50c4d1d8c1bba6c6a" +source = "git+https://github.com/streamingfast/reth.git?tag=base-v2.5.2.8-fh3.1-2#b30d7e3cfdd3d56f736e1e37493bbcda60bed848" dependencies = [ "alloy-rpc-types-engine", "eyre", @@ -17810,7 +17813,7 @@ dependencies = [ [[package]] name = "reth-node-builder" version = "2.5.2" -source = "git+https://github.com/streamingfast/reth.git?tag=base-v2.5.2.8-fh3.1#3605fcb480ef42c14622e1f50c4d1d8c1bba6c6a" +source = "git+https://github.com/streamingfast/reth.git?tag=base-v2.5.2.8-fh3.1-2#b30d7e3cfdd3d56f736e1e37493bbcda60bed848" dependencies = [ "alloy-consensus 2.4.1", "alloy-eips 2.4.1", @@ -17879,7 +17882,7 @@ dependencies = [ [[package]] name = "reth-node-core" version = "2.5.2" -source = "git+https://github.com/streamingfast/reth.git?tag=base-v2.5.2.8-fh3.1#3605fcb480ef42c14622e1f50c4d1d8c1bba6c6a" +source = "git+https://github.com/streamingfast/reth.git?tag=base-v2.5.2.8-fh3.1-2#b30d7e3cfdd3d56f736e1e37493bbcda60bed848" dependencies = [ "alloy-consensus 2.4.1", "alloy-eips 2.4.1", @@ -17934,7 +17937,7 @@ dependencies = [ [[package]] name = "reth-node-ethereum" version = "2.5.2" -source = "git+https://github.com/streamingfast/reth.git?tag=base-v2.5.2.8-fh3.1#3605fcb480ef42c14622e1f50c4d1d8c1bba6c6a" +source = "git+https://github.com/streamingfast/reth.git?tag=base-v2.5.2.8-fh3.1-2#b30d7e3cfdd3d56f736e1e37493bbcda60bed848" dependencies = [ "alloy-consensus 2.4.1", "alloy-eips 2.4.1", @@ -17983,7 +17986,7 @@ dependencies = [ [[package]] name = "reth-node-ethstats" version = "2.5.2" -source = "git+https://github.com/streamingfast/reth.git?tag=base-v2.5.2.8-fh3.1#3605fcb480ef42c14622e1f50c4d1d8c1bba6c6a" +source = "git+https://github.com/streamingfast/reth.git?tag=base-v2.5.2.8-fh3.1-2#b30d7e3cfdd3d56f736e1e37493bbcda60bed848" dependencies = [ "alloy-consensus 2.4.1", "alloy-primitives", @@ -18007,7 +18010,7 @@ dependencies = [ [[package]] name = "reth-node-events" version = "2.5.2" -source = "git+https://github.com/streamingfast/reth.git?tag=base-v2.5.2.8-fh3.1#3605fcb480ef42c14622e1f50c4d1d8c1bba6c6a" +source = "git+https://github.com/streamingfast/reth.git?tag=base-v2.5.2.8-fh3.1-2#b30d7e3cfdd3d56f736e1e37493bbcda60bed848" dependencies = [ "alloy-consensus 2.4.1", "alloy-eips 2.4.1", @@ -18031,7 +18034,7 @@ dependencies = [ [[package]] name = "reth-node-metrics" version = "2.5.2" -source = "git+https://github.com/streamingfast/reth.git?tag=base-v2.5.2.8-fh3.1#3605fcb480ef42c14622e1f50c4d1d8c1bba6c6a" +source = "git+https://github.com/streamingfast/reth.git?tag=base-v2.5.2.8-fh3.1-2#b30d7e3cfdd3d56f736e1e37493bbcda60bed848" dependencies = [ "bytes", "eyre", @@ -18060,7 +18063,7 @@ dependencies = [ [[package]] name = "reth-node-types" version = "2.5.2" -source = "git+https://github.com/streamingfast/reth.git?tag=base-v2.5.2.8-fh3.1#3605fcb480ef42c14622e1f50c4d1d8c1bba6c6a" +source = "git+https://github.com/streamingfast/reth.git?tag=base-v2.5.2.8-fh3.1-2#b30d7e3cfdd3d56f736e1e37493bbcda60bed848" dependencies = [ "reth-chainspec", "reth-db-api", @@ -18072,7 +18075,7 @@ dependencies = [ [[package]] name = "reth-payload-builder" version = "2.5.2" -source = "git+https://github.com/streamingfast/reth.git?tag=base-v2.5.2.8-fh3.1#3605fcb480ef42c14622e1f50c4d1d8c1bba6c6a" +source = "git+https://github.com/streamingfast/reth.git?tag=base-v2.5.2.8-fh3.1-2#b30d7e3cfdd3d56f736e1e37493bbcda60bed848" dependencies = [ "alloy-consensus 2.4.1", "alloy-primitives", @@ -18096,7 +18099,7 @@ dependencies = [ [[package]] name = "reth-payload-builder-primitives" version = "2.5.2" -source = "git+https://github.com/streamingfast/reth.git?tag=base-v2.5.2.8-fh3.1#3605fcb480ef42c14622e1f50c4d1d8c1bba6c6a" +source = "git+https://github.com/streamingfast/reth.git?tag=base-v2.5.2.8-fh3.1-2#b30d7e3cfdd3d56f736e1e37493bbcda60bed848" dependencies = [ "pin-project", "reth-payload-primitives", @@ -18108,7 +18111,7 @@ dependencies = [ [[package]] name = "reth-payload-primitives" version = "2.5.2" -source = "git+https://github.com/streamingfast/reth.git?tag=base-v2.5.2.8-fh3.1#3605fcb480ef42c14622e1f50c4d1d8c1bba6c6a" +source = "git+https://github.com/streamingfast/reth.git?tag=base-v2.5.2.8-fh3.1-2#b30d7e3cfdd3d56f736e1e37493bbcda60bed848" dependencies = [ "alloy-consensus 2.4.1", "alloy-eips 2.4.1", @@ -18131,7 +18134,7 @@ dependencies = [ [[package]] name = "reth-payload-util" version = "2.5.2" -source = "git+https://github.com/streamingfast/reth.git?tag=base-v2.5.2.8-fh3.1#3605fcb480ef42c14622e1f50c4d1d8c1bba6c6a" +source = "git+https://github.com/streamingfast/reth.git?tag=base-v2.5.2.8-fh3.1-2#b30d7e3cfdd3d56f736e1e37493bbcda60bed848" dependencies = [ "alloy-consensus 2.4.1", "alloy-primitives", @@ -18141,7 +18144,7 @@ dependencies = [ [[package]] name = "reth-payload-validator" version = "2.5.2" -source = "git+https://github.com/streamingfast/reth.git?tag=base-v2.5.2.8-fh3.1#3605fcb480ef42c14622e1f50c4d1d8c1bba6c6a" +source = "git+https://github.com/streamingfast/reth.git?tag=base-v2.5.2.8-fh3.1-2#b30d7e3cfdd3d56f736e1e37493bbcda60bed848" dependencies = [ "alloy-consensus 2.4.1", "alloy-rpc-types-engine", @@ -18184,7 +18187,7 @@ dependencies = [ [[package]] name = "reth-provider" version = "2.5.2" -source = "git+https://github.com/streamingfast/reth.git?tag=base-v2.5.2.8-fh3.1#3605fcb480ef42c14622e1f50c4d1d8c1bba6c6a" +source = "git+https://github.com/streamingfast/reth.git?tag=base-v2.5.2.8-fh3.1-2#b30d7e3cfdd3d56f736e1e37493bbcda60bed848" dependencies = [ "alloy-consensus 2.4.1", "alloy-eip7928 0.4.5", @@ -18234,7 +18237,7 @@ dependencies = [ [[package]] name = "reth-prune" version = "2.5.2" -source = "git+https://github.com/streamingfast/reth.git?tag=base-v2.5.2.8-fh3.1#3605fcb480ef42c14622e1f50c4d1d8c1bba6c6a" +source = "git+https://github.com/streamingfast/reth.git?tag=base-v2.5.2.8-fh3.1-2#b30d7e3cfdd3d56f736e1e37493bbcda60bed848" dependencies = [ "alloy-consensus 2.4.1", "alloy-primitives", @@ -18261,7 +18264,7 @@ dependencies = [ [[package]] name = "reth-prune-types" version = "2.5.2" -source = "git+https://github.com/streamingfast/reth.git?tag=base-v2.5.2.8-fh3.1#3605fcb480ef42c14622e1f50c4d1d8c1bba6c6a" +source = "git+https://github.com/streamingfast/reth.git?tag=base-v2.5.2.8-fh3.1-2#b30d7e3cfdd3d56f736e1e37493bbcda60bed848" dependencies = [ "alloy-primitives", "arbitrary", @@ -18277,7 +18280,7 @@ dependencies = [ [[package]] name = "reth-revm" version = "2.5.2" -source = "git+https://github.com/streamingfast/reth.git?tag=base-v2.5.2.8-fh3.1#3605fcb480ef42c14622e1f50c4d1d8c1bba6c6a" +source = "git+https://github.com/streamingfast/reth.git?tag=base-v2.5.2.8-fh3.1-2#b30d7e3cfdd3d56f736e1e37493bbcda60bed848" dependencies = [ "alloy-primitives", "alloy-rlp", @@ -18292,7 +18295,7 @@ dependencies = [ [[package]] name = "reth-rpc" version = "2.5.2" -source = "git+https://github.com/streamingfast/reth.git?tag=base-v2.5.2.8-fh3.1#3605fcb480ef42c14622e1f50c4d1d8c1bba6c6a" +source = "git+https://github.com/streamingfast/reth.git?tag=base-v2.5.2.8-fh3.1-2#b30d7e3cfdd3d56f736e1e37493bbcda60bed848" dependencies = [ "alloy-consensus 2.4.1", "alloy-dyn-abi", @@ -18368,7 +18371,7 @@ dependencies = [ [[package]] name = "reth-rpc-api" version = "2.5.2" -source = "git+https://github.com/streamingfast/reth.git?tag=base-v2.5.2.8-fh3.1#3605fcb480ef42c14622e1f50c4d1d8c1bba6c6a" +source = "git+https://github.com/streamingfast/reth.git?tag=base-v2.5.2.8-fh3.1-2#b30d7e3cfdd3d56f736e1e37493bbcda60bed848" dependencies = [ "alloy-eips 2.4.1", "alloy-genesis", @@ -18398,7 +18401,7 @@ dependencies = [ [[package]] name = "reth-rpc-builder" version = "2.5.2" -source = "git+https://github.com/streamingfast/reth.git?tag=base-v2.5.2.8-fh3.1#3605fcb480ef42c14622e1f50c4d1d8c1bba6c6a" +source = "git+https://github.com/streamingfast/reth.git?tag=base-v2.5.2.8-fh3.1-2#b30d7e3cfdd3d56f736e1e37493bbcda60bed848" dependencies = [ "alloy-network 2.4.1", "alloy-provider", @@ -18441,7 +18444,7 @@ dependencies = [ [[package]] name = "reth-rpc-convert" version = "2.5.2" -source = "git+https://github.com/streamingfast/reth.git?tag=base-v2.5.2.8-fh3.1#3605fcb480ef42c14622e1f50c4d1d8c1bba6c6a" +source = "git+https://github.com/streamingfast/reth.git?tag=base-v2.5.2.8-fh3.1-2#b30d7e3cfdd3d56f736e1e37493bbcda60bed848" dependencies = [ "alloy-consensus 2.4.1", "alloy-evm", @@ -18461,7 +18464,7 @@ dependencies = [ [[package]] name = "reth-rpc-engine-api" version = "2.5.2" -source = "git+https://github.com/streamingfast/reth.git?tag=base-v2.5.2.8-fh3.1#3605fcb480ef42c14622e1f50c4d1d8c1bba6c6a" +source = "git+https://github.com/streamingfast/reth.git?tag=base-v2.5.2.8-fh3.1-2#b30d7e3cfdd3d56f736e1e37493bbcda60bed848" dependencies = [ "alloy-eips 2.4.1", "alloy-primitives", @@ -18492,7 +18495,7 @@ dependencies = [ [[package]] name = "reth-rpc-eth-api" version = "2.5.2" -source = "git+https://github.com/streamingfast/reth.git?tag=base-v2.5.2.8-fh3.1#3605fcb480ef42c14622e1f50c4d1d8c1bba6c6a" +source = "git+https://github.com/streamingfast/reth.git?tag=base-v2.5.2.8-fh3.1-2#b30d7e3cfdd3d56f736e1e37493bbcda60bed848" dependencies = [ "alloy-consensus 2.4.1", "alloy-dyn-abi", @@ -18539,7 +18542,7 @@ dependencies = [ [[package]] name = "reth-rpc-eth-types" version = "2.5.2" -source = "git+https://github.com/streamingfast/reth.git?tag=base-v2.5.2.8-fh3.1#3605fcb480ef42c14622e1f50c4d1d8c1bba6c6a" +source = "git+https://github.com/streamingfast/reth.git?tag=base-v2.5.2.8-fh3.1-2#b30d7e3cfdd3d56f736e1e37493bbcda60bed848" dependencies = [ "alloy-chains", "alloy-consensus 2.4.1", @@ -18590,7 +18593,7 @@ dependencies = [ [[package]] name = "reth-rpc-layer" version = "2.5.2" -source = "git+https://github.com/streamingfast/reth.git?tag=base-v2.5.2.8-fh3.1#3605fcb480ef42c14622e1f50c4d1d8c1bba6c6a" +source = "git+https://github.com/streamingfast/reth.git?tag=base-v2.5.2.8-fh3.1-2#b30d7e3cfdd3d56f736e1e37493bbcda60bed848" dependencies = [ "alloy-rpc-types-engine", "http 1.4.2", @@ -18604,7 +18607,7 @@ dependencies = [ [[package]] name = "reth-rpc-server-types" version = "2.5.2" -source = "git+https://github.com/streamingfast/reth.git?tag=base-v2.5.2.8-fh3.1#3605fcb480ef42c14622e1f50c4d1d8c1bba6c6a" +source = "git+https://github.com/streamingfast/reth.git?tag=base-v2.5.2.8-fh3.1-2#b30d7e3cfdd3d56f736e1e37493bbcda60bed848" dependencies = [ "alloy-eips 2.4.1", "alloy-primitives", @@ -18635,7 +18638,7 @@ dependencies = [ [[package]] name = "reth-stages" version = "2.5.2" -source = "git+https://github.com/streamingfast/reth.git?tag=base-v2.5.2.8-fh3.1#3605fcb480ef42c14622e1f50c4d1d8c1bba6c6a" +source = "git+https://github.com/streamingfast/reth.git?tag=base-v2.5.2.8-fh3.1-2#b30d7e3cfdd3d56f736e1e37493bbcda60bed848" dependencies = [ "alloy-consensus 2.4.1", "alloy-primitives", @@ -18686,7 +18689,7 @@ dependencies = [ [[package]] name = "reth-stages-api" version = "2.5.2" -source = "git+https://github.com/streamingfast/reth.git?tag=base-v2.5.2.8-fh3.1#3605fcb480ef42c14622e1f50c4d1d8c1bba6c6a" +source = "git+https://github.com/streamingfast/reth.git?tag=base-v2.5.2.8-fh3.1-2#b30d7e3cfdd3d56f736e1e37493bbcda60bed848" dependencies = [ "alloy-eips 2.4.1", "alloy-primitives", @@ -18714,7 +18717,7 @@ dependencies = [ [[package]] name = "reth-stages-types" version = "2.5.2" -source = "git+https://github.com/streamingfast/reth.git?tag=base-v2.5.2.8-fh3.1#3605fcb480ef42c14622e1f50c4d1d8c1bba6c6a" +source = "git+https://github.com/streamingfast/reth.git?tag=base-v2.5.2.8-fh3.1-2#b30d7e3cfdd3d56f736e1e37493bbcda60bed848" dependencies = [ "alloy-primitives", "arbitrary", @@ -18728,7 +18731,7 @@ dependencies = [ [[package]] name = "reth-static-file" version = "2.5.2" -source = "git+https://github.com/streamingfast/reth.git?tag=base-v2.5.2.8-fh3.1#3605fcb480ef42c14622e1f50c4d1d8c1bba6c6a" +source = "git+https://github.com/streamingfast/reth.git?tag=base-v2.5.2.8-fh3.1-2#b30d7e3cfdd3d56f736e1e37493bbcda60bed848" dependencies = [ "alloy-primitives", "parking_lot", @@ -18748,7 +18751,7 @@ dependencies = [ [[package]] name = "reth-static-file-types" version = "2.5.2" -source = "git+https://github.com/streamingfast/reth.git?tag=base-v2.5.2.8-fh3.1#3605fcb480ef42c14622e1f50c4d1d8c1bba6c6a" +source = "git+https://github.com/streamingfast/reth.git?tag=base-v2.5.2.8-fh3.1-2#b30d7e3cfdd3d56f736e1e37493bbcda60bed848" dependencies = [ "alloy-primitives", "clap", @@ -18763,7 +18766,7 @@ dependencies = [ [[package]] name = "reth-storage-api" version = "2.5.2" -source = "git+https://github.com/streamingfast/reth.git?tag=base-v2.5.2.8-fh3.1#3605fcb480ef42c14622e1f50c4d1d8c1bba6c6a" +source = "git+https://github.com/streamingfast/reth.git?tag=base-v2.5.2.8-fh3.1-2#b30d7e3cfdd3d56f736e1e37493bbcda60bed848" dependencies = [ "alloy-consensus 2.4.1", "alloy-eip7928 0.4.5", @@ -18789,7 +18792,7 @@ dependencies = [ [[package]] name = "reth-storage-errors" version = "2.5.2" -source = "git+https://github.com/streamingfast/reth.git?tag=base-v2.5.2.8-fh3.1#3605fcb480ef42c14622e1f50c4d1d8c1bba6c6a" +source = "git+https://github.com/streamingfast/reth.git?tag=base-v2.5.2.8-fh3.1-2#b30d7e3cfdd3d56f736e1e37493bbcda60bed848" dependencies = [ "alloy-eips 2.4.1", "alloy-primitives", @@ -18806,7 +18809,7 @@ dependencies = [ [[package]] name = "reth-storage-overlay" version = "2.5.2" -source = "git+https://github.com/streamingfast/reth.git?tag=base-v2.5.2.8-fh3.1#3605fcb480ef42c14622e1f50c4d1d8c1bba6c6a" +source = "git+https://github.com/streamingfast/reth.git?tag=base-v2.5.2.8-fh3.1-2#b30d7e3cfdd3d56f736e1e37493bbcda60bed848" dependencies = [ "alloy-eips 2.4.1", "alloy-primitives", @@ -18833,7 +18836,7 @@ dependencies = [ [[package]] name = "reth-tasks" version = "2.5.2" -source = "git+https://github.com/streamingfast/reth.git?tag=base-v2.5.2.8-fh3.1#3605fcb480ef42c14622e1f50c4d1d8c1bba6c6a" +source = "git+https://github.com/streamingfast/reth.git?tag=base-v2.5.2.8-fh3.1-2#b30d7e3cfdd3d56f736e1e37493bbcda60bed848" dependencies = [ "crossbeam-utils", "dashmap", @@ -18854,7 +18857,7 @@ dependencies = [ [[package]] name = "reth-testing-utils" version = "2.5.2" -source = "git+https://github.com/streamingfast/reth.git?tag=base-v2.5.2.8-fh3.1#3605fcb480ef42c14622e1f50c4d1d8c1bba6c6a" +source = "git+https://github.com/streamingfast/reth.git?tag=base-v2.5.2.8-fh3.1-2#b30d7e3cfdd3d56f736e1e37493bbcda60bed848" dependencies = [ "alloy-consensus 2.4.1", "alloy-eips 2.4.1", @@ -18870,7 +18873,7 @@ dependencies = [ [[package]] name = "reth-tokio-util" version = "2.5.2" -source = "git+https://github.com/streamingfast/reth.git?tag=base-v2.5.2.8-fh3.1#3605fcb480ef42c14622e1f50c4d1d8c1bba6c6a" +source = "git+https://github.com/streamingfast/reth.git?tag=base-v2.5.2.8-fh3.1-2#b30d7e3cfdd3d56f736e1e37493bbcda60bed848" dependencies = [ "tokio", "tokio-stream", @@ -18880,7 +18883,7 @@ dependencies = [ [[package]] name = "reth-tracing" version = "2.5.2" -source = "git+https://github.com/streamingfast/reth.git?tag=base-v2.5.2.8-fh3.1#3605fcb480ef42c14622e1f50c4d1d8c1bba6c6a" +source = "git+https://github.com/streamingfast/reth.git?tag=base-v2.5.2.8-fh3.1-2#b30d7e3cfdd3d56f736e1e37493bbcda60bed848" dependencies = [ "clap", "eyre", @@ -18900,7 +18903,7 @@ dependencies = [ [[package]] name = "reth-tracing-otlp" version = "2.5.2" -source = "git+https://github.com/streamingfast/reth.git?tag=base-v2.5.2.8-fh3.1#3605fcb480ef42c14622e1f50c4d1d8c1bba6c6a" +source = "git+https://github.com/streamingfast/reth.git?tag=base-v2.5.2.8-fh3.1-2#b30d7e3cfdd3d56f736e1e37493bbcda60bed848" dependencies = [ "base64 0.22.1", "clap", @@ -18919,7 +18922,7 @@ dependencies = [ [[package]] name = "reth-transaction-pool" version = "2.5.2" -source = "git+https://github.com/streamingfast/reth.git?tag=base-v2.5.2.8-fh3.1#3605fcb480ef42c14622e1f50c4d1d8c1bba6c6a" +source = "git+https://github.com/streamingfast/reth.git?tag=base-v2.5.2.8-fh3.1-2#b30d7e3cfdd3d56f736e1e37493bbcda60bed848" dependencies = [ "alloy-consensus 2.4.1", "alloy-eips 2.4.1", @@ -18962,7 +18965,7 @@ dependencies = [ [[package]] name = "reth-trie" version = "2.5.2" -source = "git+https://github.com/streamingfast/reth.git?tag=base-v2.5.2.8-fh3.1#3605fcb480ef42c14622e1f50c4d1d8c1bba6c6a" +source = "git+https://github.com/streamingfast/reth.git?tag=base-v2.5.2.8-fh3.1-2#b30d7e3cfdd3d56f736e1e37493bbcda60bed848" dependencies = [ "alloy-consensus 2.4.1", "alloy-eips 2.4.1", @@ -18988,7 +18991,7 @@ dependencies = [ [[package]] name = "reth-trie-common" version = "2.5.2" -source = "git+https://github.com/streamingfast/reth.git?tag=base-v2.5.2.8-fh3.1#3605fcb480ef42c14622e1f50c4d1d8c1bba6c6a" +source = "git+https://github.com/streamingfast/reth.git?tag=base-v2.5.2.8-fh3.1-2#b30d7e3cfdd3d56f736e1e37493bbcda60bed848" dependencies = [ "alloy-consensus 2.4.1", "alloy-primitives", @@ -19015,7 +19018,7 @@ dependencies = [ [[package]] name = "reth-trie-db" version = "2.5.2" -source = "git+https://github.com/streamingfast/reth.git?tag=base-v2.5.2.8-fh3.1#3605fcb480ef42c14622e1f50c4d1d8c1bba6c6a" +source = "git+https://github.com/streamingfast/reth.git?tag=base-v2.5.2.8-fh3.1-2#b30d7e3cfdd3d56f736e1e37493bbcda60bed848" dependencies = [ "alloy-primitives", "reth-db-api", @@ -19031,7 +19034,7 @@ dependencies = [ [[package]] name = "reth-trie-parallel" version = "2.5.2" -source = "git+https://github.com/streamingfast/reth.git?tag=base-v2.5.2.8-fh3.1#3605fcb480ef42c14622e1f50c4d1d8c1bba6c6a" +source = "git+https://github.com/streamingfast/reth.git?tag=base-v2.5.2.8-fh3.1-2#b30d7e3cfdd3d56f736e1e37493bbcda60bed848" dependencies = [ "alloy-evm", "alloy-primitives", @@ -19055,7 +19058,7 @@ dependencies = [ [[package]] name = "reth-trie-sparse" version = "2.5.2" -source = "git+https://github.com/streamingfast/reth.git?tag=base-v2.5.2.8-fh3.1#3605fcb480ef42c14622e1f50c4d1d8c1bba6c6a" +source = "git+https://github.com/streamingfast/reth.git?tag=base-v2.5.2.8-fh3.1-2#b30d7e3cfdd3d56f736e1e37493bbcda60bed848" dependencies = [ "alloy-primitives", "alloy-trie", diff --git a/Cargo.toml b/Cargo.toml index 8a1b98718f..3b56cc485e 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -640,15 +640,15 @@ notify = "8.2" governor = "0.7" # Firehose tracer (defined by the streamingfast reth fork, release/base-2.x branch). -reth-firehose = { git = "https://github.com/streamingfast/reth.git", tag = "base-v2.5.2.8-fh3.1" } -reth-firehose-tests = { git = "https://github.com/streamingfast/reth.git", tag = "base-v2.5.2.8-fh3.1" } -firehose-tracer = "5.6.0" +reth-firehose = { git = "https://github.com/streamingfast/reth.git", tag = "base-v2.5.2.8-fh3.1-2" } +reth-firehose-tests = { git = "https://github.com/streamingfast/reth.git", tag = "base-v2.5.2.8-fh3.1-2" } +firehose-tracer = "5.7.0" # Shared tracing-regression framework (capture / invariants / projection / golden). -firehose-tracer-test = "5.6.0" +firehose-tracer-test = "5.7.0" # Chain-agnostic generator for replayable Firehose prestate fixtures. -firehose-tracer-prestate = "5.6.0" +firehose-tracer-prestate = "5.7.0" [patch.crates-io] # SF fork of alloy-evm that routes system calls (EIP-4788, EIP-2935, etc.) through the @@ -656,74 +656,74 @@ firehose-tracer-prestate = "5.6.0" alloy-evm = { git = "https://github.com/streamingfast/evm.git", tag = "v0.38.0-sf" } [patch."https://github.com/base/reth"] -reth-basic-payload-builder = { git = "https://github.com/streamingfast/reth.git", tag = "base-v2.5.2.8-fh3.1" } -reth-chain-state = { git = "https://github.com/streamingfast/reth.git", tag = "base-v2.5.2.8-fh3.1" } -reth-chainspec = { git = "https://github.com/streamingfast/reth.git", tag = "base-v2.5.2.8-fh3.1" } -reth-cli = { git = "https://github.com/streamingfast/reth.git", tag = "base-v2.5.2.8-fh3.1" } -reth-cli-commands = { git = "https://github.com/streamingfast/reth.git", tag = "base-v2.5.2.8-fh3.1" } -reth-cli-runner = { git = "https://github.com/streamingfast/reth.git", tag = "base-v2.5.2.8-fh3.1" } -reth-cli-util = { git = "https://github.com/streamingfast/reth.git", tag = "base-v2.5.2.8-fh3.1" } -reth-consensus = { git = "https://github.com/streamingfast/reth.git", tag = "base-v2.5.2.8-fh3.1" } -reth-consensus-common = { git = "https://github.com/streamingfast/reth.git", tag = "base-v2.5.2.8-fh3.1" } -reth-db = { git = "https://github.com/streamingfast/reth.git", tag = "base-v2.5.2.8-fh3.1" } -reth-db-api = { git = "https://github.com/streamingfast/reth.git", tag = "base-v2.5.2.8-fh3.1" } -reth-db-common = { git = "https://github.com/streamingfast/reth.git", tag = "base-v2.5.2.8-fh3.1" } -reth-db-models = { git = "https://github.com/streamingfast/reth.git", tag = "base-v2.5.2.8-fh3.1" } -reth-discv4 = { git = "https://github.com/streamingfast/reth.git", tag = "base-v2.5.2.8-fh3.1" } -reth-discv5 = { git = "https://github.com/streamingfast/reth.git", tag = "base-v2.5.2.8-fh3.1" } -reth-e2e-test-utils = { git = "https://github.com/streamingfast/reth.git", tag = "base-v2.5.2.8-fh3.1" } -reth-ecies = { git = "https://github.com/streamingfast/reth.git", tag = "base-v2.5.2.8-fh3.1" } -reth-engine-primitives = { git = "https://github.com/streamingfast/reth.git", tag = "base-v2.5.2.8-fh3.1" } -reth-engine-tree = { git = "https://github.com/streamingfast/reth.git", tag = "base-v2.5.2.8-fh3.1" } -reth-errors = { git = "https://github.com/streamingfast/reth.git", tag = "base-v2.5.2.8-fh3.1" } -reth-eth-wire = { git = "https://github.com/streamingfast/reth.git", tag = "base-v2.5.2.8-fh3.1" } -reth-eth-wire-types = { git = "https://github.com/streamingfast/reth.git", tag = "base-v2.5.2.8-fh3.1" } -reth-ethereum-forks = { git = "https://github.com/streamingfast/reth.git", tag = "base-v2.5.2.8-fh3.1" } -reth-ethereum-primitives = { git = "https://github.com/streamingfast/reth.git", tag = "base-v2.5.2.8-fh3.1" } -reth-evm = { git = "https://github.com/streamingfast/reth.git", tag = "base-v2.5.2.8-fh3.1" } -reth-evm-ethereum = { git = "https://github.com/streamingfast/reth.git", tag = "base-v2.5.2.8-fh3.1" } -reth-execution-cache = { git = "https://github.com/streamingfast/reth.git", tag = "base-v2.5.2.8-fh3.1" } -reth-execution-errors = { git = "https://github.com/streamingfast/reth.git", tag = "base-v2.5.2.8-fh3.1" } -reth-execution-types = { git = "https://github.com/streamingfast/reth.git", tag = "base-v2.5.2.8-fh3.1" } -reth-exex = { git = "https://github.com/streamingfast/reth.git", tag = "base-v2.5.2.8-fh3.1" } -reth-exex-test-utils = { git = "https://github.com/streamingfast/reth.git", tag = "base-v2.5.2.8-fh3.1" } -reth-ipc = { git = "https://github.com/streamingfast/reth.git", tag = "base-v2.5.2.8-fh3.1" } -reth-net-nat = { git = "https://github.com/streamingfast/reth.git", tag = "base-v2.5.2.8-fh3.1" } -reth-network = { git = "https://github.com/streamingfast/reth.git", tag = "base-v2.5.2.8-fh3.1" } -reth-network-api = { git = "https://github.com/streamingfast/reth.git", tag = "base-v2.5.2.8-fh3.1" } -reth-network-p2p = { git = "https://github.com/streamingfast/reth.git", tag = "base-v2.5.2.8-fh3.1" } -reth-network-peers = { git = "https://github.com/streamingfast/reth.git", tag = "base-v2.5.2.8-fh3.1" } -reth-node-api = { git = "https://github.com/streamingfast/reth.git", tag = "base-v2.5.2.8-fh3.1" } -reth-node-builder = { git = "https://github.com/streamingfast/reth.git", tag = "base-v2.5.2.8-fh3.1" } -reth-node-core = { git = "https://github.com/streamingfast/reth.git", tag = "base-v2.5.2.8-fh3.1" } -reth-node-ethereum = { git = "https://github.com/streamingfast/reth.git", tag = "base-v2.5.2.8-fh3.1" } -reth-node-metrics = { git = "https://github.com/streamingfast/reth.git", tag = "base-v2.5.2.8-fh3.1" } -reth-payload-builder = { git = "https://github.com/streamingfast/reth.git", tag = "base-v2.5.2.8-fh3.1" } -reth-payload-builder-primitives = { git = "https://github.com/streamingfast/reth.git", tag = "base-v2.5.2.8-fh3.1" } -reth-payload-primitives = { git = "https://github.com/streamingfast/reth.git", tag = "base-v2.5.2.8-fh3.1" } -reth-payload-util = { git = "https://github.com/streamingfast/reth.git", tag = "base-v2.5.2.8-fh3.1" } -reth-payload-validator = { git = "https://github.com/streamingfast/reth.git", tag = "base-v2.5.2.8-fh3.1" } -reth-provider = { git = "https://github.com/streamingfast/reth.git", tag = "base-v2.5.2.8-fh3.1" } -reth-prune-types = { git = "https://github.com/streamingfast/reth.git", tag = "base-v2.5.2.8-fh3.1" } -reth-revm = { git = "https://github.com/streamingfast/reth.git", tag = "base-v2.5.2.8-fh3.1" } -reth-rpc = { git = "https://github.com/streamingfast/reth.git", tag = "base-v2.5.2.8-fh3.1" } -reth-rpc-api = { git = "https://github.com/streamingfast/reth.git", tag = "base-v2.5.2.8-fh3.1" } -reth-rpc-convert = { git = "https://github.com/streamingfast/reth.git", tag = "base-v2.5.2.8-fh3.1" } -reth-rpc-engine-api = { git = "https://github.com/streamingfast/reth.git", tag = "base-v2.5.2.8-fh3.1" } -reth-rpc-eth-api = { git = "https://github.com/streamingfast/reth.git", tag = "base-v2.5.2.8-fh3.1" } -reth-rpc-eth-types = { git = "https://github.com/streamingfast/reth.git", tag = "base-v2.5.2.8-fh3.1" } -reth-rpc-layer = { git = "https://github.com/streamingfast/reth.git", tag = "base-v2.5.2.8-fh3.1" } -reth-rpc-server-types = { git = "https://github.com/streamingfast/reth.git", tag = "base-v2.5.2.8-fh3.1" } -reth-stages-types = { git = "https://github.com/streamingfast/reth.git", tag = "base-v2.5.2.8-fh3.1" } -reth-storage-api = { git = "https://github.com/streamingfast/reth.git", tag = "base-v2.5.2.8-fh3.1" } -reth-storage-errors = { git = "https://github.com/streamingfast/reth.git", tag = "base-v2.5.2.8-fh3.1" } -reth-tasks = { git = "https://github.com/streamingfast/reth.git", tag = "base-v2.5.2.8-fh3.1" } -reth-testing-utils = { git = "https://github.com/streamingfast/reth.git", tag = "base-v2.5.2.8-fh3.1" } -reth-tokio-util = { git = "https://github.com/streamingfast/reth.git", tag = "base-v2.5.2.8-fh3.1" } -reth-tracing = { git = "https://github.com/streamingfast/reth.git", tag = "base-v2.5.2.8-fh3.1" } -reth-tracing-otlp = { git = "https://github.com/streamingfast/reth.git", tag = "base-v2.5.2.8-fh3.1" } -reth-transaction-pool = { git = "https://github.com/streamingfast/reth.git", tag = "base-v2.5.2.8-fh3.1" } -reth-trie = { git = "https://github.com/streamingfast/reth.git", tag = "base-v2.5.2.8-fh3.1" } -reth-trie-common = { git = "https://github.com/streamingfast/reth.git", tag = "base-v2.5.2.8-fh3.1" } -reth-trie-db = { git = "https://github.com/streamingfast/reth.git", tag = "base-v2.5.2.8-fh3.1" } -reth-trie-parallel = { git = "https://github.com/streamingfast/reth.git", tag = "base-v2.5.2.8-fh3.1" } +reth-basic-payload-builder = { git = "https://github.com/streamingfast/reth.git", tag = "base-v2.5.2.8-fh3.1-2" } +reth-chain-state = { git = "https://github.com/streamingfast/reth.git", tag = "base-v2.5.2.8-fh3.1-2" } +reth-chainspec = { git = "https://github.com/streamingfast/reth.git", tag = "base-v2.5.2.8-fh3.1-2" } +reth-cli = { git = "https://github.com/streamingfast/reth.git", tag = "base-v2.5.2.8-fh3.1-2" } +reth-cli-commands = { git = "https://github.com/streamingfast/reth.git", tag = "base-v2.5.2.8-fh3.1-2" } +reth-cli-runner = { git = "https://github.com/streamingfast/reth.git", tag = "base-v2.5.2.8-fh3.1-2" } +reth-cli-util = { git = "https://github.com/streamingfast/reth.git", tag = "base-v2.5.2.8-fh3.1-2" } +reth-consensus = { git = "https://github.com/streamingfast/reth.git", tag = "base-v2.5.2.8-fh3.1-2" } +reth-consensus-common = { git = "https://github.com/streamingfast/reth.git", tag = "base-v2.5.2.8-fh3.1-2" } +reth-db = { git = "https://github.com/streamingfast/reth.git", tag = "base-v2.5.2.8-fh3.1-2" } +reth-db-api = { git = "https://github.com/streamingfast/reth.git", tag = "base-v2.5.2.8-fh3.1-2" } +reth-db-common = { git = "https://github.com/streamingfast/reth.git", tag = "base-v2.5.2.8-fh3.1-2" } +reth-db-models = { git = "https://github.com/streamingfast/reth.git", tag = "base-v2.5.2.8-fh3.1-2" } +reth-discv4 = { git = "https://github.com/streamingfast/reth.git", tag = "base-v2.5.2.8-fh3.1-2" } +reth-discv5 = { git = "https://github.com/streamingfast/reth.git", tag = "base-v2.5.2.8-fh3.1-2" } +reth-e2e-test-utils = { git = "https://github.com/streamingfast/reth.git", tag = "base-v2.5.2.8-fh3.1-2" } +reth-ecies = { git = "https://github.com/streamingfast/reth.git", tag = "base-v2.5.2.8-fh3.1-2" } +reth-engine-primitives = { git = "https://github.com/streamingfast/reth.git", tag = "base-v2.5.2.8-fh3.1-2" } +reth-engine-tree = { git = "https://github.com/streamingfast/reth.git", tag = "base-v2.5.2.8-fh3.1-2" } +reth-errors = { git = "https://github.com/streamingfast/reth.git", tag = "base-v2.5.2.8-fh3.1-2" } +reth-eth-wire = { git = "https://github.com/streamingfast/reth.git", tag = "base-v2.5.2.8-fh3.1-2" } +reth-eth-wire-types = { git = "https://github.com/streamingfast/reth.git", tag = "base-v2.5.2.8-fh3.1-2" } +reth-ethereum-forks = { git = "https://github.com/streamingfast/reth.git", tag = "base-v2.5.2.8-fh3.1-2" } +reth-ethereum-primitives = { git = "https://github.com/streamingfast/reth.git", tag = "base-v2.5.2.8-fh3.1-2" } +reth-evm = { git = "https://github.com/streamingfast/reth.git", tag = "base-v2.5.2.8-fh3.1-2" } +reth-evm-ethereum = { git = "https://github.com/streamingfast/reth.git", tag = "base-v2.5.2.8-fh3.1-2" } +reth-execution-cache = { git = "https://github.com/streamingfast/reth.git", tag = "base-v2.5.2.8-fh3.1-2" } +reth-execution-errors = { git = "https://github.com/streamingfast/reth.git", tag = "base-v2.5.2.8-fh3.1-2" } +reth-execution-types = { git = "https://github.com/streamingfast/reth.git", tag = "base-v2.5.2.8-fh3.1-2" } +reth-exex = { git = "https://github.com/streamingfast/reth.git", tag = "base-v2.5.2.8-fh3.1-2" } +reth-exex-test-utils = { git = "https://github.com/streamingfast/reth.git", tag = "base-v2.5.2.8-fh3.1-2" } +reth-ipc = { git = "https://github.com/streamingfast/reth.git", tag = "base-v2.5.2.8-fh3.1-2" } +reth-net-nat = { git = "https://github.com/streamingfast/reth.git", tag = "base-v2.5.2.8-fh3.1-2" } +reth-network = { git = "https://github.com/streamingfast/reth.git", tag = "base-v2.5.2.8-fh3.1-2" } +reth-network-api = { git = "https://github.com/streamingfast/reth.git", tag = "base-v2.5.2.8-fh3.1-2" } +reth-network-p2p = { git = "https://github.com/streamingfast/reth.git", tag = "base-v2.5.2.8-fh3.1-2" } +reth-network-peers = { git = "https://github.com/streamingfast/reth.git", tag = "base-v2.5.2.8-fh3.1-2" } +reth-node-api = { git = "https://github.com/streamingfast/reth.git", tag = "base-v2.5.2.8-fh3.1-2" } +reth-node-builder = { git = "https://github.com/streamingfast/reth.git", tag = "base-v2.5.2.8-fh3.1-2" } +reth-node-core = { git = "https://github.com/streamingfast/reth.git", tag = "base-v2.5.2.8-fh3.1-2" } +reth-node-ethereum = { git = "https://github.com/streamingfast/reth.git", tag = "base-v2.5.2.8-fh3.1-2" } +reth-node-metrics = { git = "https://github.com/streamingfast/reth.git", tag = "base-v2.5.2.8-fh3.1-2" } +reth-payload-builder = { git = "https://github.com/streamingfast/reth.git", tag = "base-v2.5.2.8-fh3.1-2" } +reth-payload-builder-primitives = { git = "https://github.com/streamingfast/reth.git", tag = "base-v2.5.2.8-fh3.1-2" } +reth-payload-primitives = { git = "https://github.com/streamingfast/reth.git", tag = "base-v2.5.2.8-fh3.1-2" } +reth-payload-util = { git = "https://github.com/streamingfast/reth.git", tag = "base-v2.5.2.8-fh3.1-2" } +reth-payload-validator = { git = "https://github.com/streamingfast/reth.git", tag = "base-v2.5.2.8-fh3.1-2" } +reth-provider = { git = "https://github.com/streamingfast/reth.git", tag = "base-v2.5.2.8-fh3.1-2" } +reth-prune-types = { git = "https://github.com/streamingfast/reth.git", tag = "base-v2.5.2.8-fh3.1-2" } +reth-revm = { git = "https://github.com/streamingfast/reth.git", tag = "base-v2.5.2.8-fh3.1-2" } +reth-rpc = { git = "https://github.com/streamingfast/reth.git", tag = "base-v2.5.2.8-fh3.1-2" } +reth-rpc-api = { git = "https://github.com/streamingfast/reth.git", tag = "base-v2.5.2.8-fh3.1-2" } +reth-rpc-convert = { git = "https://github.com/streamingfast/reth.git", tag = "base-v2.5.2.8-fh3.1-2" } +reth-rpc-engine-api = { git = "https://github.com/streamingfast/reth.git", tag = "base-v2.5.2.8-fh3.1-2" } +reth-rpc-eth-api = { git = "https://github.com/streamingfast/reth.git", tag = "base-v2.5.2.8-fh3.1-2" } +reth-rpc-eth-types = { git = "https://github.com/streamingfast/reth.git", tag = "base-v2.5.2.8-fh3.1-2" } +reth-rpc-layer = { git = "https://github.com/streamingfast/reth.git", tag = "base-v2.5.2.8-fh3.1-2" } +reth-rpc-server-types = { git = "https://github.com/streamingfast/reth.git", tag = "base-v2.5.2.8-fh3.1-2" } +reth-stages-types = { git = "https://github.com/streamingfast/reth.git", tag = "base-v2.5.2.8-fh3.1-2" } +reth-storage-api = { git = "https://github.com/streamingfast/reth.git", tag = "base-v2.5.2.8-fh3.1-2" } +reth-storage-errors = { git = "https://github.com/streamingfast/reth.git", tag = "base-v2.5.2.8-fh3.1-2" } +reth-tasks = { git = "https://github.com/streamingfast/reth.git", tag = "base-v2.5.2.8-fh3.1-2" } +reth-testing-utils = { git = "https://github.com/streamingfast/reth.git", tag = "base-v2.5.2.8-fh3.1-2" } +reth-tokio-util = { git = "https://github.com/streamingfast/reth.git", tag = "base-v2.5.2.8-fh3.1-2" } +reth-tracing = { git = "https://github.com/streamingfast/reth.git", tag = "base-v2.5.2.8-fh3.1-2" } +reth-tracing-otlp = { git = "https://github.com/streamingfast/reth.git", tag = "base-v2.5.2.8-fh3.1-2" } +reth-transaction-pool = { git = "https://github.com/streamingfast/reth.git", tag = "base-v2.5.2.8-fh3.1-2" } +reth-trie = { git = "https://github.com/streamingfast/reth.git", tag = "base-v2.5.2.8-fh3.1-2" } +reth-trie-common = { git = "https://github.com/streamingfast/reth.git", tag = "base-v2.5.2.8-fh3.1-2" } +reth-trie-db = { git = "https://github.com/streamingfast/reth.git", tag = "base-v2.5.2.8-fh3.1-2" } +reth-trie-parallel = { git = "https://github.com/streamingfast/reth.git", tag = "base-v2.5.2.8-fh3.1-2" } diff --git a/crates/common/evm/src/eip8130_phase_statuses.rs b/crates/common/evm/src/eip8130_phase_statuses.rs index fbe2530e1a..f24092554f 100644 --- a/crates/common/evm/src/eip8130_phase_statuses.rs +++ b/crates/common/evm/src/eip8130_phase_statuses.rs @@ -98,4 +98,18 @@ impl Eip8130PhaseStatuses { pub const fn take() -> Vec { Vec::new() } + + /// Returns a copy of the statuses recorded by the most recent [`Self::set`] on this + /// thread, leaving them in place for [`Self::take`]. Empty in `no_std` builds. + #[cfg(feature = "std")] + pub fn peek() -> Vec { + PHASE_STATUSES.with(|cell| cell.borrow().clone()) + } + + /// Returns a copy of the statuses recorded by the most recent [`Self::set`] on this + /// thread, leaving them in place for [`Self::take`]. Empty in `no_std` builds. + #[cfg(not(feature = "std"))] + pub const fn peek() -> Vec { + Vec::new() + } } diff --git a/crates/execution/firehose-tests/Cargo.toml b/crates/execution/firehose-tests/Cargo.toml index b942e837c5..cb38219552 100644 --- a/crates/execution/firehose-tests/Cargo.toml +++ b/crates/execution/firehose-tests/Cargo.toml @@ -43,5 +43,12 @@ serde_json.workspace = true name = "prestate" path = "tests/prestate.rs" +[[test]] +name = "eip8130" +path = "tests/eip8130.rs" + [dev-dependencies] k256.workspace = true +alloy-signer.workspace = true +base-test-utils.workspace = true +base-execution-eip8130.workspace = true diff --git a/crates/execution/firehose-tests/src/lib.rs b/crates/execution/firehose-tests/src/lib.rs index 6614099bf7..e3fb99c2d7 100644 --- a/crates/execution/firehose-tests/src/lib.rs +++ b/crates/execution/firehose-tests/src/lib.rs @@ -5,10 +5,10 @@ pub use firehose_tracer_test::{ BlockDiff, BlockInvariants, BlockProjection, FirehoseCapture, Golden, InvariantConfig, ProductionReplay, SymbolTable, Violation, VolatilePolicy, }; -pub use reth_firehose_tests::RunOutcome; +pub use reth_firehose_tests::{RunOutcome, TraceContext}; mod prestate; -pub use prestate::run_prestate; +pub use prestate::{run_block, run_prestate}; mod capture; pub use capture::BaseFirehoseCapture; diff --git a/crates/execution/firehose-tests/src/prestate.rs b/crates/execution/firehose-tests/src/prestate.rs index 7fa77f9fbe..4e1dcbc7cf 100644 --- a/crates/execution/firehose-tests/src/prestate.rs +++ b/crates/execution/firehose-tests/src/prestate.rs @@ -11,20 +11,20 @@ use std::{path::Path, sync::Arc}; use alloy_consensus::{ - Header, + Block, Header, constants::{EMPTY_OMMER_ROOT_HASH, EMPTY_ROOT_HASH}, proofs::calculate_transaction_root, }; use alloy_eips::{eip2718::Decodable2718, eip4895::Withdrawals}; use alloy_primitives::B256; -use base_common_consensus::{BasePrimitives, BaseTransactionSigned}; +use base_common_consensus::{BaseBlockBody, BasePrimitives, BaseTransactionSigned}; use base_execution_chainspec::BaseChainSpec; use base_execution_evm::BaseEvmConfig; use base_execution_firehose::{OpPostTxExtras, OpPreTxAdjust}; use eyre::Context; use reth_firehose::{FirehoseBlockTracer, run_wrapped_block}; use reth_firehose_tests::{ - RunOutcome, TraceContext, decode_hex, parse_fire_block_for, seed_cache_db, + Prestate, RunOutcome, TraceContext, decode_hex, parse_fire_block_for, seed_cache_db, }; use reth_primitives_traits::{Block as _, RecoveredBlock}; use reth_revm::State; @@ -37,23 +37,31 @@ use revm::database::{CacheDB, EmptyDB}; /// `FIRE BLOCK` line emitted for the executed block; assert against it with `BlockInvariants` and a /// `BlockProjection` golden (see `tests/prestate.rs`). pub fn run_prestate(case_folder: &Path) -> eyre::Result { - use alloy_consensus::Block; - use base_common_consensus::BaseBlockBody; - use reth_firehose_tests::Prestate; - let prestate_path = case_folder.join("prestate.json"); let prestate: Prestate = serde_json::from_slice(&std::fs::read(&prestate_path)?) .with_context(|| format!("reading prestate.json at {}", prestate_path.display()))?; - let chain_spec = Arc::new(BaseChainSpec::from_genesis(prestate.genesis.clone())); - let parent_hash = chain_spec.inner.genesis_hash(); - let tx_bytes = decode_hex(&prestate.input).context("decoding prestate.input hex")?; let signed_tx = BaseTransactionSigned::decode_2718(&mut tx_bytes.as_slice()) .context("EIP-2718-decoding prestate.input as a signed transaction")?; - let transactions = vec![signed_tx]; - let header = build_op_header(&prestate.context, parent_hash, &transactions); + run_block(&prestate.genesis, &prestate.context, vec![signed_tx]) +} + +/// Run `transactions` as one block on top of `genesis` through the Firehose harness, with the +/// block fields taken from `context`, and return the captured Block. +/// +/// [`run_prestate`] runs a fixture folder through it. Tests that build their genesis and sign +/// their transactions in code, such as the EIP-8130 cases, call it directly. +pub fn run_block( + genesis: &alloy_genesis::Genesis, + context: &TraceContext, + transactions: Vec, +) -> eyre::Result { + let chain_spec = Arc::new(BaseChainSpec::from_genesis(genesis.clone())); + let parent_hash = chain_spec.inner.genesis_hash(); + + let header = build_op_header(context, parent_hash, &transactions); // OP Stack post-Canyon blocks always carry a withdrawals list (may be empty). // An absent slot would change the header keccak vs Geth's representation. @@ -70,14 +78,14 @@ pub fn run_prestate(case_folder: &Path) -> eyre::Result { block.try_into_recovered().map_err(|_| eyre::eyre!("recovering tx senders"))?; let mut db = CacheDB::new(EmptyDB::default()); - seed_cache_db(&mut db, &prestate.genesis)?; + seed_cache_db(&mut db, genesis)?; let mut state = State::builder().with_database(db).with_bundle_update().build(); let evm_config = BaseEvmConfig::base(chain_spec); let (mut tracer, buffer) = firehose_tracer::Tracer::with_buffer( firehose_tracer::config::Config::default(), - firehose_tracer::config::ChainConfig::from_genesis(&prestate.genesis), + firehose_tracer::config::ChainConfig::from_genesis(genesis), "base-firehose-tests", env!("CARGO_PKG_VERSION"), ); diff --git a/crates/execution/firehose-tests/tests/eip8130.rs b/crates/execution/firehose-tests/tests/eip8130.rs new file mode 100644 index 0000000000..681015379b --- /dev/null +++ b/crates/execution/firehose-tests/tests/eip8130.rs @@ -0,0 +1,360 @@ +//! Firehose tracing of EIP-8130 transactions (type `0x79`), run through the real Base executor +//! and the Firehose wrapper on an Everest genesis. + +use alloy_eips::eip2718::Encodable2718; +use alloy_genesis::{Genesis, GenesisAccount}; +use alloy_primitives::{Address, Bytes, U256, address, bytes}; +use alloy_signer::SignerSync; +use base_common_consensus::{ + AccountChange, BaseTransactionSigned, BaseTxEnvelope, Call, Delegation, Eip8130Constants, + Eip8130Signed, Predeploys, TxEip8130, +}; +use base_execution_eip8130::{Eip8130GasSchedule, IntrinsicGas, IntrinsicGasInput}; +use base_firehose_tests::{BlockInvariants, TraceContext, run_block}; +use base_test_utils::{Account, build_test_genesis_everest}; +use firehose_tracer::pb::sf::ethereum::r#type::v2::{ + self as pbeth, TransactionTrace, balance_change::Reason, +}; + +/// Contract whose code is `PUSH1 0 PUSH1 0 REVERT`. +const REVERTER: Address = address!("0x00000000000000000000000000000000000ad0ad"); +const NONCE_MANAGER: Address = address!("0x813000000000000000000000000000000000aa01"); +const BENEFICIARY: Address = address!("0x4200000000000000000000000000000000000011"); + +fn genesis() -> Genesis { + let mut genesis = build_test_genesis_everest(); + genesis.alloc.insert( + REVERTER, + GenesisAccount { code: Some(bytes!("60006000fd")), ..Default::default() }, + ); + genesis +} + +const fn context(genesis: &Genesis) -> TraceContext { + TraceContext { + number: 1, + timestamp: genesis.timestamp + 2, + gas_limit: 30_000_000, + miner: BENEFICIARY, + base_fee_per_gas: Some(1), + difficulty: Some(U256::ZERO), + } +} + +fn call(to: Address, value: u64) -> Call { + Call { to, value: U256::from(value), data: Bytes::new() } +} + +const fn unsigned(chain_id: u64, calls: Vec>) -> TxEip8130 { + TxEip8130 { + chain_id, + sender: None, + nonce_key: U256::ZERO, + nonce_sequence: 0, + valid_after: 0, + valid_before: 0, + max_priority_fee_per_gas: 1, + max_fee_per_gas: 1_000_000_000, + gas_limit: 300_000, + account_changes: Vec::new(), + calls, + metadata: Bytes::new(), + payer: None, + } +} + +/// Signs `tx` as Alice, paying for herself unless `payer` is set. +fn sign(tx: TxEip8130, payer: Option) -> BaseTransactionSigned { + let alice = Account::Alice; + let sender_auth: Bytes = alice + .signer() + .sign_hash_sync(&tx.sender_signature_hash()) + .expect("sign") + .as_bytes() + .to_vec() + .into(); + let payer_auth: Bytes = payer.map_or_else(Bytes::new, |payer| { + let signature = + payer.signer().sign_hash_sync(&tx.payer_signature_hash(alice.address())).expect("sign"); + [Eip8130Constants::K1_AUTHENTICATOR.as_slice(), signature.as_bytes().as_slice()] + .concat() + .into() + }); + Eip8130Signed::new(tx, sender_auth, payer_auth).into() +} + +fn run(tx: BaseTransactionSigned) -> TransactionTrace { + let genesis = genesis(); + run_in(&genesis, &context(&genesis), tx) +} + +fn run_in( + genesis: &Genesis, + context: &TraceContext, + tx: BaseTransactionSigned, +) -> TransactionTrace { + let outcome = run_block(genesis, context, vec![tx]).expect("block runs"); + BlockInvariants::assert(&outcome.block).expect("block invariants hold"); + outcome.block.transaction_traces.into_iter().next().expect("one transaction") +} + +fn call_indexes(trx: &TransactionTrace) -> Vec> { + trx.account_abstraction_trx_input + .as_ref() + .expect("account_abstraction_trx_input") + .call_phases + .iter() + .map(|phase| phase.calls.iter().map(|call| call.call_index).collect()) + .collect() +} + +fn root_balance_changes(trx: &TransactionTrace) -> Vec<(Address, i32)> { + trx.calls[0] + .balance_changes + .iter() + .map(|change| (Address::from_slice(&change.address), change.reason)) + .collect() +} + +fn committed_phases(trx: &TransactionTrace) -> u64 { + trx.receipt + .as_ref() + .and_then(|r| r.account_abstraction_trx_output.as_ref()) + .expect("account_abstraction_trx_output") + .committed_phases +} + +#[test] +fn failed_phase_reverts_its_calls_and_keeps_committed_ones() { + let genesis = genesis(); + let bob = Account::Bob.address(); + let charlie = Account::Charlie.address(); + let tx = unsigned( + genesis.config.chain_id, + vec![ + vec![call(bob, 1)], + vec![call(charlie, 2), call(REVERTER, 0), call(bob, 3)], + vec![call(charlie, 4)], + ], + ); + let trx = run(sign(tx, None)); + + assert_eq!(pbeth::transaction_trace::Type::TrxTypeAccountAbstraction as i32, trx.r#type); + assert_eq!(pbeth::TransactionTraceStatus::Failed as i32, trx.status); + assert_eq!(1, committed_phases(&trx)); + assert!(trx.to.is_empty(), "the calls carry the targets"); + assert_eq!(Account::Alice.address().as_slice(), trx.from.as_slice()); + + // Calls: #1 root, #2 bob (phase 0), #3 charlie and #4 reverter (phase 1). + assert_eq!(vec![vec![2], vec![3, 4, 0], vec![0]], call_indexes(&trx)); + let reverted: Vec = trx.calls.iter().map(|call| call.state_reverted).collect(); + assert_eq!(vec![false, false, true, true], reverted); + assert!(!trx.calls[0].status_failed, "the root call is never failed"); + + let alice = Account::Alice.address(); + let root = root_balance_changes(&trx); + assert_eq!(root.first(), Some(&(alice, Reason::GasBuy as i32)), "payer charged first"); + assert!(root.contains(&(alice, Reason::GasRefund as i32)), "payer refunded"); + assert!( + root.contains(&(BENEFICIARY, Reason::RewardTransactionFee as i32)), + "tip to the beneficiary" + ); + assert!( + root.contains(&(Predeploys::BASE_FEE_VAULT, Reason::RewardTransactionFee as i32)), + "base fee to its vault" + ); + assert!( + root.iter().all(|(_, reason)| *reason != Reason::Transfer as i32), + "no fee movement left as a transfer: {root:?}" + ); + assert_eq!(1, trx.calls[0].nonce_changes.len(), "account nonce for nonce key 0"); +} + +#[test] +fn named_payer_and_nonce_channel() { + let genesis = genesis(); + let bob = Account::Bob.address(); + let mut tx = unsigned(genesis.config.chain_id, vec![vec![call(Account::Charlie.address(), 1)]]); + tx.nonce_key = U256::from(7); + tx.payer = Some(bob); + let trx = run(sign(tx, Some(Account::Bob))); + + assert_eq!(pbeth::TransactionTraceStatus::Succeeded as i32, trx.status); + let input = trx.account_abstraction_trx_input.as_ref().expect("account_abstraction_trx_input"); + assert_eq!(bob.as_slice(), input.payer.as_slice()); + assert_eq!(vec![7u8], input.nonce_key.as_ref().expect("nonce key").bytes); + assert_eq!(vec![vec![2]], call_indexes(&trx)); + + let root = root_balance_changes(&trx); + assert_eq!(root.first(), Some(&(bob, Reason::GasBuy as i32)), "the payer is charged"); + assert!(root.contains(&(bob, Reason::GasRefund as i32)), "the payer is refunded"); + assert!( + !root.iter().any(|(address, _)| *address == Account::Alice.address()), + "the sender pays nothing: {root:?}" + ); + + let root_call = &trx.calls[0]; + assert!(root_call.nonce_changes.is_empty(), "a nonce channel leaves the account nonce"); + assert!( + root_call.storage_changes.iter().any(|change| change.address == NONCE_MANAGER.to_vec()), + "the channel sequence is a nonce manager storage write" + ); +} + +#[test] +fn delegation_is_a_code_change_on_the_root_call() { + let genesis = genesis(); + let target = address!("0x00000000000000000000000000000000000de1e9"); + let mut tx = unsigned(genesis.config.chain_id, vec![vec![call(Account::Bob.address(), 1)]]); + tx.account_changes = vec![AccountChange::Delegation(Delegation { target })]; + let trx = run(sign(tx, None)); + + let input = trx.account_abstraction_trx_input.as_ref().expect("account_abstraction_trx_input"); + assert_eq!(1, input.account_changes.len()); + + let alice = Account::Alice.address(); + let code_change = trx.calls[0] + .code_changes + .iter() + .find(|change| change.address == alice.to_vec()) + .expect("the sender's delegation code is recorded on the root call"); + assert_eq!([&[0xef, 0x01, 0x00][..], target.as_slice()].concat(), code_change.new_code); +} + +#[test] +fn open_payer_signature_that_does_not_recover_rejects_the_block() { + let genesis = genesis(); + let mut tx = unsigned(genesis.config.chain_id, vec![vec![call(Account::Bob.address(), 1)]]); + tx.payer = Some(Eip8130Constants::OPEN_PAYER); + let sender_auth: Bytes = Account::Alice + .signer() + .sign_hash_sync(&tx.sender_signature_hash()) + .expect("sign") + .as_bytes() + .to_vec() + .into(); + // `v` must be 27 or 28, so this payer signature never recovers. + let payer_auth = Bytes::from(vec![0x11; 65]); + let tx = Eip8130Signed::new(tx, sender_auth, payer_auth).into(); + + let result = run_block(&genesis, &context(&genesis), vec![tx]); + assert!(result.is_err(), "the block is rejected instead of traced"); +} + +#[test] +fn payer_that_is_the_beneficiary_gets_its_refund_then_its_tip() { + let genesis = genesis(); + let alice = Account::Alice.address(); + let mut context = context(&genesis); + context.miner = alice; + let tx = unsigned(genesis.config.chain_id, vec![vec![call(Account::Bob.address(), 1)]]); + let trx = run_in(&genesis, &context, sign(tx, None)); + + let root_reasons: Vec = trx.calls[0] + .balance_changes + .iter() + .filter(|change| change.address == alice.to_vec()) + .map(|change| change.reason) + .collect(); + assert_eq!( + vec![Reason::GasBuy as i32, Reason::GasRefund as i32, Reason::RewardTransactionFee as i32], + root_reasons, + "the payer is charged, refunded, then tipped" + ); + + // Across every call, including the 1 wei the payer sends in its call, each change of the + // payer starts where the previous one ended. + let mut changes: Vec<_> = trx + .calls + .iter() + .flat_map(|call| &call.balance_changes) + .filter(|change| change.address == alice.to_vec()) + .collect(); + changes.sort_by_key(|change| change.ordinal); + for pair in changes.windows(2) { + assert_eq!( + big(&pair[0].new_value), + big(&pair[1].old_value), + "each change starts where the previous one ended" + ); + } +} + +#[test] +fn nonce_free_transaction_records_its_replay_entry_and_no_nonce_change() { + let genesis = genesis(); + let context = context(&genesis); + let mut tx = unsigned(genesis.config.chain_id, vec![vec![call(Account::Bob.address(), 1)]]); + tx.nonce_key = Eip8130Constants::NONCE_KEY_MAX; + tx.valid_before = context.timestamp + 10; + let trx = run_in(&genesis, &context, sign(tx, None)); + + assert_eq!(pbeth::TransactionTraceStatus::Succeeded as i32, trx.status); + let input = trx.account_abstraction_trx_input.as_ref().expect("account_abstraction_trx_input"); + assert_eq!(vec![0xff; 32], input.nonce_key.as_ref().expect("nonce key").bytes); + let root = &trx.calls[0]; + assert!(root.nonce_changes.is_empty(), "nonce-free mode leaves every nonce alone"); + assert!( + root.storage_changes.iter().any(|change| change.address == NONCE_MANAGER.to_vec()), + "the replay entry is a nonce manager storage write" + ); +} + +#[test] +fn failure_in_the_first_phase_commits_nothing() { + let genesis = genesis(); + let bob = Account::Bob.address(); + let tx = unsigned(genesis.config.chain_id, vec![vec![call(REVERTER, 0)], vec![call(bob, 1)]]); + let trx = run(sign(tx, None)); + + assert_eq!(pbeth::TransactionTraceStatus::Failed as i32, trx.status); + assert_eq!(0, committed_phases(&trx)); + assert_eq!(vec![vec![2], vec![0]], call_indexes(&trx)); + let reverted: Vec = trx.calls.iter().map(|call| call.state_reverted).collect(); + assert_eq!(vec![false, true], reverted, "only the reverted call is reverted"); + assert_eq!( + root_balance_changes(&trx).first(), + Some(&(Account::Alice.address(), Reason::GasBuy as i32)), + "the fees are still charged" + ); +} + +#[test] +fn call_refused_for_lack_of_new_account_gas_is_left_unlinked() { + let genesis = genesis(); + let alice = Account::Alice; + let fresh = address!("0x00000000000000000000000000000000000fe5e1"); + let mut tx = unsigned(genesis.config.chain_id, vec![vec![call(fresh, 1)]]); + + // One gas short of the new-account charge once the sender-intrinsic gas is paid, so the + // protocol refuses the call before it runs. + let shortfall = Eip8130GasSchedule::NEW_ACCOUNT_COST - 1; + let mut gas_limit = shortfall; + for _ in 0..8 { + tx.gas_limit = gas_limit; + let signed = sign(tx.clone(), None); + let BaseTxEnvelope::Eip8130(envelope) = &signed else { panic!("an EIP-8130 envelope") }; + let intrinsic = IntrinsicGas::compute( + envelope, + &signed.encoded_2718(), + &IntrinsicGasInput::new(alice.address(), true), + ) + .expect("intrinsic gas"); + let next = intrinsic.sender_intrinsic() + shortfall; + if next == gas_limit { + break; + } + gas_limit = next; + } + tx.gas_limit = gas_limit; + let trx = run(sign(tx, None)); + + assert_eq!(pbeth::TransactionTraceStatus::Failed as i32, trx.status); + assert_eq!(0, committed_phases(&trx)); + assert_eq!(vec![vec![0]], call_indexes(&trx), "the refused call never ran"); + assert_eq!(1, trx.calls.len(), "only the root call"); +} + +fn big(value: &Option) -> U256 { + value.as_ref().map_or(U256::ZERO, |value| U256::from_be_slice(&value.bytes)) +} diff --git a/crates/execution/firehose/src/extras.rs b/crates/execution/firehose/src/extras.rs index 59ad68e2dc..d3659e73ec 100644 --- a/crates/execution/firehose/src/extras.rs +++ b/crates/execution/firehose/src/extras.rs @@ -17,18 +17,29 @@ //! into the event. use alloy_evm::Evm as _; -use alloy_primitives::{Address, Bytes, U256}; -use base_common_consensus::Predeploys; +use alloy_primitives::{Address, B256, Bytes, U256}; +use base_common_consensus::{AccountChange, Predeploys}; use base_common_evm::{ - BaseContext, BaseEvm, BaseSpecId, BaseTxTr, BaseUpgrade, DEPOSIT_TRANSACTION_TYPE, + BaseContext, BaseEvm, BaseSpecId, BaseTransaction, BaseTxTr, BaseUpgrade, + DEPOSIT_TRANSACTION_TYPE, Eip8130PhaseStatuses, +}; +use firehose_tracer::{ + firehose_debug, + pb::sf::ethereum::r#type::v2::{ + AccountAbstractionAccountChange, AccountAbstractionCallInput, AccountAbstractionCallPhase, + AccountAbstractionTrxInput, AccountAbstractionTrxOutput, + account_abstraction_account_change, balance_change::Reason, + }, + types::{TxEvent, TxType}, + utils::u256_to_protobuf, +}; +use reth_firehose::{ + PostTxExtras, PreTxAdjust, + inspector::{FirehoseInspectorApi, RootJournalReasons}, }; -use firehose_tracer::firehose_debug; -use firehose_tracer::pb::sf::ethereum::r#type::v2::balance_change::Reason; -use firehose_tracer::types::{TxEvent, TxType}; -use reth_firehose::inspector::FirehoseInspectorApi; -use reth_firehose::{PostTxExtras, PreTxAdjust}; use reth_revm::revm::{ - context_interface::ContextTr, + context::TxEnv, + context_interface::{Block as _, ContextTr}, handler::PrecompileProvider, inspector::Inspector, interpreter::{InterpreterResult, interpreter::EthInterpreter}, @@ -45,17 +56,27 @@ where I: Inspector, EthInterpreter> + FirehoseInspectorApi, P: PrecompileProvider, Output = InterpreterResult>, { - fn emit_post_tx_extras( - &self, - evm: &mut BaseEvm, - gas_used: u64, - base_fee: u64, - ) { + fn emit_post_tx_extras(&self, evm: &mut BaseEvm, gas_used: u64, base_fee: u64) { firehose_debug!( "OpPostTxExtras::emit_post_tx_extras called (gas_used={}, base_fee={})", gas_used, base_fee ); + // An EIP-8130 transaction credits its fee recipients on the journal inside its root call + // (see `OpPreTxAdjust`), so only its committed phase count is left to record. The + // receipt builder has not consumed the phase statuses yet: it runs at commit. Phases stop + // at the first revert, so the committed ones are the leading `0x01` statuses. + if evm.ctx().tx().is_eip8130() { + let committed_phases = + Eip8130PhaseStatuses::peek().iter().take_while(|status| **status == 0x01).count() + as u64; + let (_, inspector, _) = evm.components_mut(); + inspector.tracer_mut().set_account_abstraction_trx_output( + AccountAbstractionTrxOutput { committed_phases }, + ); + return; + } + // Deposit txs return early in `BaseHandler::reward_beneficiary` without crediting any // vault — skip them here so we do not emit phantom entries. let (enveloped, spec): (Bytes, BaseSpecId) = { @@ -70,19 +91,13 @@ where // emit nothing rather than panic: the tracer stays consistent with the handler, // which would have errored out before reaching `reward_beneficiary`. let Some(bytes) = tx.enveloped_tx().cloned() else { - firehose_debug!( - "OpPostTxExtras: non-deposit tx has no enveloped bytes — skipping" - ); + firehose_debug!("OpPostTxExtras: non-deposit tx has no enveloped bytes — skipping"); return; }; (bytes, *ctx.cfg().spec()) }; - firehose_debug!( - "OpPostTxExtras: enveloped_len={}, spec={:?}", - enveloped.len(), - spec - ); + firehose_debug!("OpPostTxExtras: enveloped_len={}, spec={:?}", enveloped.len(), spec); // CRITICAL: `calculate_tx_l1_cost` caches its result on `L1BlockInfo.tx_l1_cost` // (see `l1block.rs:297`). The OP handler relies on that cache being `None` at the @@ -169,9 +184,15 @@ where fn adjust_tx_event( &self, evm: &mut BaseEvm, + tx_env: &BaseTransaction, tx_event: &mut TxEvent, sender: Address, ) { + if matches!(tx_event.tx_type, TxType::AccountAbstraction) { + Self::adjust_eip8130_tx_event(evm, tx_env, tx_event, sender); + return; + } + // Only OP deposit txs need any fixup — every other envelope carries a real nonce and // is correctly classified as `GasBuy` by the generic depth-0 inspector path. if !matches!(tx_event.tx_type, TxType::OptimismDeposit) { @@ -200,3 +221,125 @@ where inspector.set_root_balance_reason(Reason::IncreaseMint); } } + +impl OpPreTxAdjust { + /// Fills the fields of an EIP-8130 transaction (type `0x79`) the generic mapper cannot read + /// from the envelope, and records its fees from the journal. + /// + /// The executor charges the payer, increments the nonce and applies the account changes on + /// the journal before the root call, and refunds the payer and credits the beneficiary and + /// the fee vaults after the last call, all outside the calls below the root call. The + /// inspector records them inside the root call with the reasons set here. + pub fn adjust_eip8130_tx_event( + evm: &mut BaseEvm, + tx_env: &BaseTransaction, + tx_event: &mut TxEvent, + sender: Address, + ) where + DB: alloy_evm::Database, + I: Inspector, EthInterpreter> + FirehoseInspectorApi, + P: PrecompileProvider, Output = InterpreterResult>, + { + // Every type 0x79 transaction environment is built from its envelope, so this cannot + // fail. The tracer has no transaction context yet, so the message carries it. + let Some(parts) = tx_env.eip8130_parts() else { + panic!( + "Firehose cannot trace transaction {} (index {}) at block #{}: an EIP-8130 \ + transaction reached the EVM without its envelope", + tx_event.hash, + tx_event.index, + evm.ctx().block().number() + ); + }; + let signed = &parts.signed; + let tx = signed.tx(); + let beneficiary = evm.ctx().block().beneficiary(); + + // An open payer signature that does not recover makes the transaction invalid: the + // executor rejects it before the root call and the block is discarded, so there is + // nothing to trace. + let Ok(payer) = signed.resolved_payer(sender) else { + return; + }; + + let account_changes = tx + .account_changes + .iter() + .map(|change| match change { + AccountChange::Delegation(delegation) => AccountAbstractionAccountChange { + change: Some(account_abstraction_account_change::Change::DelegationTarget( + if delegation.target.is_zero() { + Vec::new() + } else { + delegation.target.to_vec() + }, + )), + }, + // Keystore entries are gated by Zenith, which only genesis can activate. + AccountChange::Create(_) | AccountChange::ConfigChange(_) => panic!( + "Firehose cannot trace transaction {}: the block model has no Keystore \ + account change, so this node cannot emit this block", + tx_event.hash + ), + }) + .collect(); + + let call_phases = tx + .calls + .iter() + .map(|calls| AccountAbstractionCallPhase { + calls: calls + .iter() + .map(|call| AccountAbstractionCallInput { + to: call.to.to_vec(), + value: u256_to_protobuf(call.value), + data: call.data.to_vec(), + call_index: 0, + }) + .collect(), + }) + .collect(); + + tx_event.to = None; + // `sender_auth` ends with the sender's `r || s || v` secp256k1 signature, after the + // 20-byte authenticator selector when the sender is named. + let sender_auth = signed.sender_auth(); + if let Some(signature) = sender_auth.get(sender_auth.len().saturating_sub(65)..) + && signature.len() == 65 + { + tx_event.r = B256::from_slice(&signature[..32]); + tx_event.s = B256::from_slice(&signature[32..64]); + // Typed transactions record the y-parity, trimmed like a big integer. + let y_parity = signature[64].saturating_sub(27); + tx_event.v = Some(if y_parity == 0 { + Bytes::new() + } else { + Bytes::copy_from_slice(&[y_parity]) + }); + } + tx_event.account_abstraction_trx_input = Some(AccountAbstractionTrxInput { + nonce_key: u256_to_protobuf(tx.nonce_key), + payer: payer.to_vec(), + valid_after: tx.valid_after, + valid_before: tx.valid_before, + metadata: tx.metadata.to_vec(), + account_changes, + call_phases, + sender_auth: Vec::new(), + }); + + let (_, inspector, _) = evm.components_mut(); + inspector.set_root_journal_reasons(RootJournalReasons { + decreases: vec![(payer, Reason::GasBuy)], + // In the order `Eip8130Executor::settle_fees` credits them: an account listed twice, + // such as a payer that is also the beneficiary, takes its reasons in this order. + increases: vec![ + (payer, Reason::GasRefund), + (Predeploys::BASE_FEE_VAULT, Reason::RewardTransactionFee), + (beneficiary, Reason::RewardTransactionFee), + (Predeploys::L1_FEE_VAULT, Reason::RewardTransactionFee), + (Predeploys::OPERATOR_FEE_VAULT, Reason::RewardTransactionFee), + ], + }); + } +}