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:
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
asBlockId
oneth_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
onfull_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 fetchingdebug_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
andDecodable2718
forPooledTransactionsElement
(#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
toBlockchainProvider2
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
onCanonicalInMemoryState
(#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 |