github paradigmxyz/reth v1.1.0
Reth v1.1.0

21 hours ago

image

Summary

Reth Engine 2.0

This release enables the new performant engine architecture for ethereum chains by default. This was previously opt-in, as the --engine.experimental flag.

Important

Nodes which do not want to use the new engine MUST now add --engine.legacy to their cli flags to preserve the old engine behavior.

Using --engine.legacy is recommended for stakers / payload builders, as the previous architecture has been tested in production for a longer period of time. Validators that update to 1.1.0 without changing any command line flags will not be using the previous architecture, hence the recommendation to add the --engine.legacy flag.

The new engine is not enabled for op-reth by default, and must still be enabled using the --engine.experimental flag. We encourage op-reth users to use this flag.

Important

Applications which access the database externally, and require the database to be at the head of the chain, should use --engine.legacy

Engine 2.0 overview

The previous engine architecture required that the node database be always at the head of the chain. This requirement made it simple to reason about the database, but required that the node's engine_forkchoiceUpdated API synchronously commit to the database, which caused high latency for the API. Removing this requirement required a rewrite of the node's consensus handling logic.

This new engine architecture yields great performance improvement when syncing near the tip of the chain. Here is the engine_forkchoiceUpdated latency with the old engine:

And here is the engine_forkchoiceUpdated latency with the new engine:

ExEx breaking changes and improvements

The ExExNotifications::recv and ExExNotifications::poll_recv are now removed.

ExExNotifications::with_head is introduced - this method allows exex notifications to work properly with the new engine, and requires users to specify a head block. This head block determines where the exex notifications will start from.

Engine 2.0 improvements

There have been some performance improvements and bug fixes for the new engine architecture since 1.0.8:

  • fix: acquire permit first (#11537)
  • fix: in-memory trie updates pruning (#11580)

op-reth related enhancements and fixes

We have fixed some issues for op-reth instances running with --engine.experimental:

  • feat: store safe block num as well (#11648)
  • fix: persist finalized block (#11623)
  • fix: always handle payload building for opstack (#11629)

There are also various fixes not related to the new engine architecture:

  • fix: set system tx correctly (#11601)
  • fix(op-reth): add jemalloc feature to optimism-cli for version (#11543)

Observability improvements

New metrics have been added, and the dashboard has been improved:

  • feat(evm, trie): more metrics (#11613)
  • Add metrics for failed deliveries to Grafana dashboard (#11481)
  • fix(grafana): remove rate function from panel "Transactions by Type in Pool" (#11542)
  • grafana: add metrics of all transactions in pool by type (#11515)

RPC improvements

  • fix: use original bytes for codes (#11593)
  • chore(rpc): remove include_preimage param on debug_execution_witness (#11466)
  • fix(rpc-eth-types): incorrect error msg(; -> :) (#11503)
  • fix(provider): fix sub overflow on tx_range queries for empty blocks (#11568)
  • chore: enforce window (#11540)
  • perf(rpc): optimistically retrieve block if near the tip on eth_getLogs (#11582)

Update Priority

This table provides priorities for which classes of users should update particular components.

User Class Priority
Payload Builders Low priority
Non-Payload Builders Medium priority

See Update Priorities for more information about this table.

All Changes

  • feat: store safe block num as well (#11648)
  • chore: preempt single block downloading (#11647)
  • fix: don't unwrap missing requests (#11646)
  • chore(rpc): don't recover sender if we have it (#11645)
  • feat(bin): make experimental engine default (#11612)
  • chore: release 1.1.0 (#11640)
  • feat(ci): move book clippy and tests to matrix (#11618)
  • feat(exex): commit only notifications with unfinalized blocks to WAL (#11638)
  • feat(ci): add Kurtosis workflow (#11615)
  • docs: clarify op-mainnet --debug.tip (#11634)
  • Broadcast external IP from NAT in enode record (#10274)
  • Remove duplicate EngineTypes comment (#11624)
  • feat(trie): noop hashed cursors (#11627)
  • chore(trie): make initialization of in-memory trie cursors pub (#11628)
  • fix: always handle payload building for opstack (#11629)
  • feat(evm, trie): more metrics (#11613)
  • fix: actually commit (#11626)
  • chore(ci): disable hive discord alerts (#11625)
  • chore(metrics): remove redundant starting metrics log (#11621)
  • fix: persist finalized block (#11623)
  • test: add sanity test for local txs args (#11620)
  • chore: bump op-alloy (#11617)
  • fix(witness): destroyed slots as proof targets (#11596)
  • fix: 7702 gas fields (#11614)
  • chore(rpc): use block_hash as BlockId on eth_callMany (#11595)
  • perf(rpc): optimistically retrieve block if near the tip on eth_getLogs (#11582)
  • fix(net): add concurrency param from config to TransactionFetcherInfo (#11600)
  • fix(grafana): set instance variable from reth_info metric (#11607)
  • feat: add helper function to provde the tx manager config (#11608)
  • feat: add tx propagation mode (#11594)
  • fix(trie): prefix set extension (#11605)
  • fix: set system tx correctly (#11601)
  • fix: set deposit gasprice correctly (#11603)
  • fix(net): max inflight tx reqs default (#11602)
  • fix: active inflight count (#11598)
  • perf(rpc): use Arc<BlockWithSenders on full_block_cache (#11585)
  • fix: use original bytes for codes (#11593)
  • fix: simplify reorg handling (#11592)
  • docs: delete missing part path (#11590)
  • feat: add mul support for SubPoolLimit (#11591)
  • chore: also derive arb for test (#11588)
  • chore(rpc): use block_hash instead on fetching debug_trace_block block (#11587)
  • chore(ci): remove expected failures related to checksummed addresses (#11589)
  • chore: bump alloy primitives 0 8 7 (#11586)
  • chore(providers): test race condition on all BlockchainProvider2 macro tests (#11574)
  • fix: in-memory trie updates pruning (#11580)
  • fix(exex): exhaust backfill job when using a stream (#11578)
  • feat: impl Encodable2718 and Decodable2718 for PooledTransactionsElement (#11482)
  • chore: rm bad cap function (#11562)
  • chore: replace some revm deps (#11579)
  • chore: rm unused optimism feature from engine api (#11577)
  • feat: adding a new method to network config builder (#11569)
  • chore(provider): add more test coverage on BlockchainProvider non-range queries (#11564)
  • fix(provider): fix sub overflow on tx_range queries for empty blocks (#11568)
  • chore: relax trait bound for EthTransactions (#11571)
  • fix: actually configure the custom gas limit (#11565)
  • docs(exex): include code for ExEx book from real files (#11545)
  • Added InternalBlockExecutionError to execute.rs exports (#11525)
  • chore: rm unused optimism feature from compat (#11560)
  • feat(trie): expose storage proofs (#11550)
  • chore: rm unused optimism feature (#11559)
  • chore: chain manual serialisation implementation (#11538)
  • Introduce Op PayloadTypes Impl (#11558)
  • chore: rm redundant type hint (#11557)
  • chore: move ethfiltererror (#11552)
  • fix(grafana): remove rate function from panel "Transactions by Type in Pool" (#11542)
  • fix(op-reth): add jemalloc feature to optimism-cli for version (#11543)
  • Introduce Eth PayloadTypes Impl (#11519)
  • Refactor get_payload_bodies_by_hash_with to be non-blocking (#11511)
  • chore: enforce window (#11540)
  • feat(exex): subscribe to notifications with head using ExExContext (#11500)
  • grafana: add metrics of all transactions in pool by type (#11515)
  • chore: dont fail on ttd (#11539)
  • fix: acquire permit first (#11537)
  • ci: add windows cargo check (#11468)
  • feat: add get_highest_tx_by_sender to pools (#11514)
  • chore: delete rpc-types (#11528)
  • rpc: use eth_api() method (#11516)
  • fix(tree): make state methods work for historical blocks (#11265)
  • feat(provider): add test_race to BlockchainProvider2 tests (#11523)
  • test: add unit tests for PruneLimiter (#11517)
  • chore(deps): weekly cargo update (#11518)
  • feat: expose Op node network_config helper (#11506)
  • feat: add PoolBuilderConfigOverrides (#11507)
  • fix: cap gas limit properly (#11505)
  • chore: rm from genesis impl (#11509)
  • chore(lint): fix clippy::needles_lifetimes (#11496)
  • chore: Remove duplicate EthereumChainSpecParser in favor of existing EthChainSpecParser (#11412)
  • Add metrics for failed deliveries to Grafana dashboard (#11481)
  • feat: rpc replace function created (#11501)
  • Reexport optimism specific crates from op-reth (#11499)
  • fix(rpc-eth-types): incorrect error msg(; -> :) (#11503)
  • chore(provider): add more test coverage on BlockchainProvider::*by_block_range queries (#11488)
  • chore(lint): fix lint storage (#11485)
  • chore: rm deposit contract config for op (#11479)
  • test: ensure default hash matches (#11486)
  • chore(provider): add more test coverage on BlockchainProvider::*by_tx_range queries (#11480)
  • chore(lint): fix lint primitives (#11487)
  • chore(sdk): SealedHeader generic over header (#11429)
  • chore(db): capture tx opening backtrace in debug mode (#11477)
  • fix(exex): use thresholds in stream backfill (#11478)
  • chore(exex): more backfill debug logs (#11476)
  • chore: op chainspec (#11415)
  • feat: Add metrics to track transactions by type in txpool (#11403)
  • chore: use block.body directly (#11474)
  • feat: cleaned up prepare_call_env() (#11469)
  • feat(perf): integrate OnStateHook in executor (#11345)
  • test: add unit tests for CanonicalChain (#11472)
  • Relax Trait Bounds on TransactionPool::Transaction and EthPoolTransaction (#11079)
  • feat: make addons stateful (#11204)
  • chore(rpc): remove include_preimage param on debug_execution_witness (#11466)
  • chore: use block_ref on CanonicalInMemoryState (#11467)

Binaries

See pre-built binaries documentation.

The binaries are signed with the PGP key: 50FB 7CC5 5B2E 8AFA 59FE 03B7 AA5E D56A 7FBF 253E

System Architecture Binary PGP Signature
x86_64 reth-v1.1.0-x86_64-unknown-linux-gnu.tar.gz PGP Signature
aarch64 reth-v1.1.0-aarch64-unknown-linux-gnu.tar.gz PGP Signature
x86_64 reth-v1.1.0-x86_64-pc-windows-gnu.tar.gz PGP Signature
x86_64 reth-v1.1.0-x86_64-apple-darwin.tar.gz PGP Signature
aarch64 reth-v1.1.0-aarch64-apple-darwin.tar.gz PGP Signature
System Option - Resource
Docker paradigmxyz/reth

Don't miss a new reth release

NewReleases is sending notifications on new releases.