Summary
Pectra
This release contains fixes for all known pectra issues.
Performance
This release enables the new State Root Task for OP-Reth users by default.
It significantly improves the average engine_newPayload
call latencies for Base Mainnet, and helps to alleviate the spikes caused by certain transactions that use a lot of storage (for example XEN contracts).
For more technical details on how the new design works, see https://github.com/paradigmxyz/reth/blob/main/crates/engine/tree/docs/root.md.
OP Stack
This release contains preparations for the upcoming Isthmus hardfork:
Reth SDK
In 1.3.0 #[cfg(feature = “optimism”)]
feature flags on primitives types were removed. Most OP stack crates still required an optimism feature to be compiled, and were incompatible with ethereum crates that depended on revm
because revm also used feature flags to support the OP stack. These are now removed in revm 20.0.0
.
This release includes the transition to the new revm API and introduced a new abstraction layer for interacting with EVM in alloy-evm
for both ethereum and the OP stack. alloy-evm
is no-std compatible and fully built on top of alloy and revm types. It contains all implementations that are required to execute a block, e.g. BlockExecutor
with support for all system transactions (EIP-2935, EIP-4788, EIP-7002, EIP-7251).
alloy-evm
is intended to be zk friendly and should provide the ethereum and OP stack STF out of the box. This is only the initial rollout, more incremental changes and additional features are expected.
This release fully transitioned to revm 20.0.0 and uses alloy-evm.
Developers that currently work with a modified EVM implementation can take a look at the custom evm/precompiles example . Users are encouraged to report limitations and suggestions for documentation.
EVM API
With this release, ConfigureEvmEnv
and BlockExecutionStrategyFactory
traits are merged into a single ConfigureEvm
trait which provides access to both EVM and BlockExecutor
(previously BlockExecutionStrategy
). For detailed overview of the abstraction, see ConfigureEvm docs.
Block builders are also encouraged to migrate to the new BlockBuilder
API that is available on the ConfigureEvm
trait. With 1.3.0 release, ConfigureEvm
stores a BlockAssember
that defines how a block header should be built. BlockBuilder
can be used by payload builders to reduce their responsibilities to only choosing transactions to apply in the block.
This approach has been applied to both Ethereum and Optimism payload builders which can be used as a reference.
Compatible alloy-* version with this release is 0.12.5
Components
- Simplified Payload builder setup: #14700
Upcoming features
Upcoming releases will focus on unifying the remaining transaction types between reth and alloy #14961 in addition to improved ergonomics
Ress
This release contains native support for ress
RLPx subprotocol for stateless nodes. The subprotocol is disabled by default and can be enabled by passing --ress.enable
CLI argument. See protocol documentation for more info: https://github.com/paradigmxyz/reth/tree/main/crates/ress/protocol
Update Priority
This table provides priorities for which classes of users should update particular components.
User Class | Priority |
---|---|
Payload Builders | low |
Non-Payload Builders | low |
Tesnet operators | high |
See Update Priorities for more information about this table.
All Changes
- fix: use clang v10 (#15000)
- chore: add workflow for building binaries (#14999)
- Revert "meta: downgrade ubuntu for windows" (#14998)
- deps: downgrade cc to 1.2.15 (#14996)
- meta: downgrade ubuntu for windows (#14995)
- meta: bump ubuntu for release (#14994)
- meta: bump rust version for reproducible build (#14991)
- meta: install cross from main for release (#14992)
- Chore: move tree config from engine-tree to engine-primitives (#14890)
- chore: bump version 1.3.0 (#14986)
- chore: blanket implementation for
OpPooledTx
(#14990) - chore: bump revm (#14988)
- docs(ress): fix witness format (#14984)
- chore: add ress code owner (#14985)
- chore: bump alloy-trie (#14983)
- use cross main in docker-git and docker instead of taiki-e action (#14978)
- Bump vergen to 9.0 #14904 (#14940)
- feat(optimism): enable state root task by default (#14977)
- chore: bump alloy 0.12.5 (#14976)
- feat: integrate ress (#14959)
- chore: add
From<BlockExecutionError> for PayloadBuilderError
(#14973) - chore: rm reth-prmitives from ethereum crates (#14972)
- chore: rm reth-prmitives from stages (#14970)
- chore: rm reth-prmitives from e2eutils (#14971)
- chore: add sparse trie logs with time elapsed (#14967)
- chore: remove reth-primitives dep db crates (#14968)
- chore: rm reth-prmitives from rpc compat (#14965)
- chore: rm reth-prmitives from rpc builder (#14966)
- chore: bump revm (#14954)
- Update metrics.md (#14813)
- chore: rm reth-prmitives from rpc (#14957)
- chore: remove reth-primitives dep from eth api (#14958)
- chore: Use cargo-chef to build the hivetests docker image (#14884)
- chore: reorder trait impl fns (#14956)
- fix: call validate_execution_requests from validate_version_specific_fields for ethereum engine validator (#14932)
- test: complete mine block test in e2e testsuite (#14849)
- chore: feature propagation (#14951)
- chore: bump revm (#14947)
- fix(docker-nightly) use cross main (#14948)
- chore: remove commented SparseTrieEvent (#14946)
- ci: allow unmaintained humantime (#14950)
- chore(
SessionManager
): send message without&mut self
requirement (#14949) - chore: rm rpc conversion types (#14942)
- chore: bump alloy-chains (#14944)
- chore: use B256 Display for state root test assertion (#14943)
- Parse L1 block values in Interop fork (#14869)
- chore: enable revm portable by default for op-reth (#14937)
- chore: simplify rpc tx conversion (#14736)
- Add other variant on Block import err (#14938)
- chore: simplify
NodePrimitives
bounds (#14936) - feat(ress): limit active connections (#14928)
- add nightly builds (#14934)
- chore: enable revm portable feature by default for binaries (#14931)
- fix: exex head ahead of host (#14001)
- feat: implement compact for alloy ethereum transaction (#14908)
- feat/emit better payload events (#14923)
- fix: disable not only if requested (#14927)
- feat(op, txpool): introduce OpPooledTx trait (#14926)
- fix: clear tree state on unwind (#14866)
- feat: add bincode support to opreceipt (#14872)
- chore: remove reth-primitives dep from commands (#14919)
- chore: remove reth-primitives dep from chain-state (#14914)
- refactor: unify EVM traits (#14920)
- feat: implement InMemorySize for TxEnvelope and OpTxEnvelope #14913 (#14922)
- chore: remove reth-primitives dep from op rpc (#14915)
- chore: bump alloy-evm (#14917)
- chore: remove reth-primitives dep from consensus-common (#14912)
- chore: remove reth-primitives dep from evm (#14911)
- chore: Add 0x prefix and use macro if possible (#14907)
- docs: correct activation note (#14910)
- chore: add FactoryTx for getting tx associated types (#14909)
- chore: replace withencoded with alloy's (#14905)
- chore(ci): Remove redundant licenses from allow list (#14903)
- replace reth-primitives deps in txpool with reth-primitives-traits (#14306)
- fix: generate-jwt.sh dir with whitespace (#14896)
- changed block_with_senders() to recovered_block() (#14894)
- chore: impl encodable for tx (#14893)
- feat(trie): update sparse trie storage roots independently (#14874)
- chore: bump alloy 0.12 (#14891)
- chore: update advisories (#14889)
- feat: don't include operator fee params in receipts when both zero (#14880)
- perf(tree): chunk multiproofs (#14800)
- chore(deps): Bump op-alloy (#14882)
- changed sealed_block_with_senders_range() into recovered_block_range() (#14876)
- fix(l2-withdrawals-root): isthmus header custom genesis (#14875)
- feat: add helper for eth body conversion (#14864)
- chore: add 0x prefix to
b256!
andaddress!
calls (#14871) - modified get_sealed_block_with_senders() to get_recovered_block_with_senders() (#14865)
- chore(primitives-traits): remove duplicate IntoIterator bounds in generics (#14861)
- chore: remove StateRoot variant from BlockValidationError (#14858)
- chore: bump alloy-evm and revm (#14855)
- refactor: prepare BlockExecutionError for move to alloy-evm (#14857)
- Added 0x prefix to transaction hash test values (#14854)
- chore: auto_impl TrieCursorFactory for reference (#14856)
- feat: add validate known account to optimism rpc (#14851)
- feat: integrate alloy-hardforks (#14853)
- feat: configuration of the tokio runtime (#14837)
- fix(mev_simBundle): log at trace rather than info level (#14852)
- test: partially tx response for tx fetcher (#14817)
- invoke on_unsupported_by_peer of ConnectionHandler (#14411)
- fix(rpc) enforce limit on reward percentiles (#14847)
- fix(l2-withdrawals-root): Fix genesis hash for custom op chain (#14845)
- chore: bump version 1.2.2 (#14846)
- fix(eth_callBundle): Fix ethSentToCoinbase calculation (#14816)
- refactor: use tokio to fetch storage proofs (#14838)
- Added 0x prefix (#14843)
- fix(l2-withdrawals-root): Compute op devnet genesis hash from genesis header (#14839)
- fix: filter by deposit signature hash (#14841)
- refactor: prepare EthereumHardforks for move to alloy-evm (#14835)
- feat(tree): multiproof manager metrics (#14819)
- Fix: Increase gas limit in chain config (#14830)
- refactor: remove
Primitives
AT fromBlockExecutionStrategy
(#14833) - fix: apply eip2935 for op (#14832)
- fix: correctly configure
extraData
for Ethereum blocks (#14831) - feat:
BlockAssember
+BlockBuilder
(#14808) - chore(hive): run devp2p/eth tests (#14826)
- fix: filter for more events when watching
StaticFileProvider
directory (#14827) - feat: e2e testsuite actions (#14773)
- fix: use txpool.lifetime in pool maintainer correctly (#14823)
- fix: only check for best block number (#14822)
- feat(net):
ress
subprotocol (#14687) - chore: ignore ethereum-tests in local codespell check (#14815)
- chore: ignore flaky bsc p2p test (#14818)
- Added engine_getBlobV1 metrics in grafana dashboard (#14732)
- refactor: move isthmus helpers to reth-optimism-consensus (#14811)
- fix: correctly prune
HeaderNumbers
(#14812) - fix: no-std for storage-api (#14810)
- docs: typos (#14806)
- feat:
ConfigureEvm::NextBlockEnvCtx
(#14801) - Feat: add a
discv4
test to verify the bootnode event behaviour (#14787) - fix(tree): use only in-memory blocks when constructing trie input (#14729)
- feat(reth-ipc): add request_timeout to client builder (#14788)
- chore: misc tree (#14797)
- Fixed grammatical errors, typos, and spelling mistakes (#14796)
- chore: allow result too large (#14795)
- refactor LaunchContext::with function. (#14792)
- chore: use interop timestamp (#14782)
- chore(deps): weekly
cargo update
(#14785) - feat: Feature gate traits inside storage-api that still depend on db-api (#14647)
- chore(ci): unpin op-geth for kurtosis-op (#14781)
- chore(sdk): Use
EthApiBuilder
instead ofFnOnce
trait (#14442) - Add dedicated Optimism Storage impl (#14654)
- Add pools evicted transactions metrics (#13946)
- fix broken link (#14768)
- refactor(tree): remove
root.rs
(#14778) - Stateful overridable handshake (#14567)
- chore(sdk): clean up op engine caps (#14775)
- chore(payload): Move
ExecutionPayloadValidator
intoreth-ethereum-payload-builder
(#14751) - feat: add rlp support for snap message types (#14718)
- feat(isthmus): Integrate
OpExecutionPayloadValidator
(#14207) - test(tree): move state root task test to payload processor (#14772)
- remove Option on is_paris_activated call (#14771)
- User receipt Serdebincodecompat for chain type serde (#14669)
- fix incorrect async func LaunchContextWith::with_resolved_peers; (#14769)
- fix: sepolia paris block (#14766)
- chore: use block fn directly (#14765)
- fix(tree): state root task duration (#14763)
- Modified op-reth to always use all OP bootnodes when none are explicitly provided #14603 (#14619)
- fix: no-std for op crates (#14762)
- feat(trie): utility methods for getting difference for
MultiProofTargets
(#14761) - chore(deps): Use async closure in
bin
crates (#14725) - chore: fix examples lint not running in ci (#14760)
- chore(tree): remove old
insert_block_inner
method (#14754) - chore(deps): Bump msrv (#14724)
- chore(tree): report prewarm metrics (#14759)
- chore: small
NodeBuilder
simplification (#14755) - chore: simplify provider builder setup (#14756)
- feat:
DebugNodeLauncher
(#14738) - refactor: introduce payload processor (#14589)
- feat: add helper conversion from revm Account (#14750)
- fix(grafana): use correct datasource in variables (#14752)
- feat: pending block support in
BlockExecutionStrategyFactory
(#14730) - chore(trie): convert
MultiProofTargets
into unit struct (#14748) - refactor: extract api trait methods into metered methods (#14740)
- feat(trie):
HashedPostState::multi_proof_targets
(#14747) - feat(grafana): human-readable job variable selector (#14719)
- refactor(e2e): do not use
EngineApiClient
(#14739) - chore(deps): avoid duplicate crates (#14681)
- feat(op): add builder methods for tx conditional and pool overrides (#14741)
- feat: allow to transfer Executor accross threads (#14728)
- feat(reth-bench): generic transactions for send-payload commands (#14721)
- chore(storage): cleanup consistent view revert state checks (#14734)
- feat(engine): Op engine capabilities (#14733)
- feat: Avoid propagating transactions with conditionals, closes #14706 (#14722)
- fix: correctly set txtype for
eth_call
(#14727) - feat: allow applying overrides for non-
CacheDB
databases (#14713) - feat(tree): state root task multiproof metrics (#14534)
- fix: fix log key format for target_block_number argument (#14699)
- chore: always set mint in deposit tx receipt (#14716)
- feat: extract insert_state to ProviderCaches (#14714)
- Add Clonable Error Handling to ProviderError Enum (#14712)
- Added 0x prefix to all hex, macros and b256 (#14711)
- refactor: introduce
BasicPayloadServiceBuilder
(#14700) - Refactor Session Management and Improve Documentation (#14707)
- refactor(engine-api): change payload fn arg with
ExecutionPayload
(#14673) - correction / fix comments (#14573)
- chore: fixed duplicate phrase issue in block description (#14698)
- feat(l2-withdrawals): Verify l2 withdrawals root in
PayloadValidator
(#14636) - remove needlessness async block and await op (#14694)
- chore: use
rx
overtx
for receiver name (#14693) - feat: add helper for RecoveredBlock::clone_transactions_recovered (#14689)
- feat: re-introduce
debug.reorg
logic (#14676) - refactor: implement
BlockExecutionStrategyFactory
directly onEvmConfig
(#14675) - Implement ExecutionPayload for OpExecutionData (#14682)
- Disable default features for tracing #14526 (#14530)
- chore(sdk): Complete adapters for
NodePrimitives
ATs (#14672) - feat(storage): log revert state outcome in consistent view (#14684)
- chore(ci): remove batcher extra param from kurtosis op network config (#14679)
- refactor: merge signed tx traits (#14622)
- chore(hive): fix eest limit filtering (#14671)
- fix: dead link txn_manager.rs (#14670)
- Add RLP encoding/decoding for RawCapabilityMessage (#14638) (#14661)
- Make PayloadOrAttributes generic over ExecutionData (#14666)
- feat(op-pool-tx): add new field to store encoded 2718 bytes (#14665)
- chore(deps): weekly
cargo update
(#14663) - Removed unused BlockBatchRecord type (#14659)
- feat(trie): parallel proof metrics (#14633)
- feat: Add withdrawals support to debug build-block command (#14493)
- Correcting Verb Form in Headers Downloader and Stage Documentation (#14641)
- chore: rm clone for bincodecompat receipt (#14628)
- Relax EngineApi ExecutionData bounds (#14648)
- chore: allow new advisory (#14650)
- Extracted TransactionsManagerConfig creation as a standalone function (#14645)
- chore: add required rand feature for test (#14644)
- Feat: Introduce db_models crate into storage-api crate and update imports (#14640)
- feat(trie): add sparse trie Display impl (#14544)
- Changed "match" to "if let some" to fix build errors (#14637)
- feat: integrate
TxEnv
conversions (#14630) - feat(root): metrics and logs for state root config (#14631)
- feat(engine): allow to override has_enough_parallelism (#14608)
- Remove unused Senderrecovery variant (#14629)
- Return RecoveredBlock in ensure_well_formed_payload (#14625)
- perf(trie): optimize in memory cursor (#14600)
- add metrics for engine_getBlobsV1 (#14621)
- feat(l2-withdrawals): Define
OpExecutionPayloadValidator
(#14591) - fix: conditional check (#14616)
- feat: re-use
BlockExecutionStrategy
in payload building (#14609) - chore: pre alloc on send raw (#14611)
- fix: handle
Deposit
inTryFrom<AnyRpcTransaction>
(#14614) - chore(tree): replace LRU with FIFO for block tracking (#14587)
- feat(l2-withdrawals): Move l2 withdrawals root computation into
reth-optimism-storage
(#14610) - chore: remove outdated log (#14612)
- chore(payload): Custom
PayloadError
variant (#14607) - test(db): complete DatabaseProviderFactory impl for MockEthProvider (#14605)
- chore: remove
'static
bound fromConfigureEvmEnv
(#14606) - feat: expose
InvalidTxError
inBlockExecutionError
(#14597) - chore(docs): Fix docs (#14602)
- perf(tree): insert account cache only when not present (#14599)
- refactor: use
BlockExecutorProvider
inInvalidBlockWitnessHook
(#14594) - feat(tree): increase state root task thread pool size (#14455)
- chore: fix codspeed build (#14588)
- peers.add_and_connect(): try to connect even if the peer has been added (#14581)
- integration test of network state change (#14575)
- feat:
BlockExecutionStrategy::execute_transaction
API (#14586) - chore(deps): Bump
op-alloy
(#14585) - refactor:
BlockExecutionStrategy
API (#14480) - Add interop hardfork in all relevant places. (#14582)
- chore(deps): bump breaking deps (#14570)
- chore(deps): Bump
op-alloy
(#14579) - refactor: simplify
SystemCaller
API (#14578) - feat(l2-withdrawals): Decompose
ExecutionPayloadValidator::ensure_well_formed_payload
(#14566) - chore(hive): rename expected eest failures (#14577)
- chore: bump revm (#14568)
- chore: handle all revm errors (#14574)
- feat(reth-bench): substract block fetch waiting time from benchmark duration (#14299)
- chore: make return for debug_codeByHash optional (#14572)
- chore(chainspec): use
MAINNET_PRUNE_DELETE_LIMIT
inMAINNET
(#14569) - chore(chainspec): remove
MAINNET
usage fromChainSpec::default
(#14565) - feat(op): isthmus genesis header (#14560)
- fix: add clear tx l1 cost back (#14564)
- feat:
no_std
forreth-evm
(#14561) - chore: bump alloy-evm (#14559)
- fix(root): spawn state root task only if host has enough parallelism (#14555)
- chore: phase out reth-primitives from optimism consensus (#14548)
- chore: remove needless clippy lint (#14550)
- Add Alias and update usage for emvenv (#14547)
- chore: remove
optimism
feature (#14545) - chore(db): move
mod tables
to db-api (#14540) - feat:
alloy-evm
and new revm integration (#14021) - chore(db): remove generic from iter_static_files (#14542)
- feat(op, txpool, metrics): add metric for removed conditional txs (#14541)
- chore(storage-api): reduce dependence on reth-db (#14539)
- chore: fix warning in examples (#14537)
- fix: make genesis header for op (#14538)
- feat(debug-client): improve RPC BlockProvider implementation (#14536)
- chore: allow missing total difficulty when loading node head (#14533)
- extending engine capabilities (#14528)
- feat: use
PROMETHEUS_URL
env var for Grafana in Docker Compose (#14531) - chore(hive): update name of expected failure
eip7702_set_code_tx
(#14532) - feat(rpc): Implement debug_codeByHash. (#14524)
- chore(optimism/chainspec): Remove redundant crate prefixes. (#14525)
- docs: update broken link run-a-node.md (#14521)
- chore: relax bounds on RPC types (#14529)
- chore(docs): add book/cli to workspace exclusions (#14527)
- chore(deps): weekly
cargo update
(#14522) - Removed weird ProviderError variants (#14518)
- fix: use correct table types on drop (#14519)
- feat: Extend Maybeconditional with helper fn (#14511)
- refactor: replace into bound with standalone function (#14512)
- feat: use
SealedHeader
inChainSpec
(#14514) - feat: reexport reth-trie with trie feature (#14513)
- feat(op, txpool): add additional update routine for conditionals (#14497)
- feat(l2-withdrawals): consensus rules (#14308)
- chore: add Uniswap Labs bootnodes (#14507)
- Add serde-bincode-compat for receipt (#14399)
- fix(mev): Fix issues in mev_simBundle. (#14502)
- chore(deps): Replace
derive_more::Error
withthiserror::Error
(#14501) - feat(evm, root): pass state change source to state hook (#14494)
- perf: do not fetch proofs for selfdestructed accounts (#14486)
- chore(trie): small cleanups (#14496)
- chore(root): state root task and sparse trie task logs (#14495)
- feat(trie): add DecodedAccountProof and DecodedMultiProof (#14425)
- refactor(trie): struct for passing hash and tree masks in sparse trie (#14468)
- fix(isthmus): include storage updates in l2 withdrawals root computation (#14307)
- feat: Make db-models no-std (#14459)
- chore: rm reth_primitives from rpc_testing_util (#14488)
- feat(grafana): add proof panels to trie dashboard (#14484)
- chore: disable storage-api default features (#14474)
- chore: add elided lifetime to impl Iterator (#14481)
- fix: handle tree event on new payload (#14475)
- feat(reth-bench): send-payload CLI (#14472)
- Disable default features for optimism crates in workspace manifest (#14467)
- test(stages): download 15MB test file instead of 500MB (#14476)
- fix static file derive (#14473)
- Revert "Disable default features for
reth-storage-api
in workspace manifest" (#14471) - Disable default features for
reth-storage-api
in workspace manifest (#14466) - feat: drop ExEx WAL on
reth db drop
(#11855) - Simplified the sequencer forwarding RPC calls (#14386)
- [Feature]: Add Opstack superchain registry support for genesis files (#14260)
- refactor: remove
PostExecutionInput
(#14464) - chore: phase out reth-primitives from storage-api (#14462)
- chore: no_std for reth-execution-types (#14465)
- Upstream ExecutionData to alloy (#14188)
- chore: rm comment about hardfork (#14463)
- fix typo (#14461)
- chore: fix (#14456)
- fix: add lifetime (#14460)
- feat(mev): Enable mev_ namespace. (#14457)
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.3.0-x86_64-unknown-linux-gnu.tar.gz | PGP Signature | |
aarch64 | reth-v1.3.0-aarch64-unknown-linux-gnu.tar.gz | PGP Signature | |
x86_64 | reth-v1.3.0-x86_64-pc-windows-gnu.tar.gz | PGP Signature | |
x86_64 | reth-v1.3.0-x86_64-apple-darwin.tar.gz | PGP Signature | |
aarch64 | reth-v1.3.0-aarch64-apple-darwin.tar.gz | PGP Signature | |
System | Option | - | Resource |
Docker | paradigmxyz/reth | ||
Docker (Reproducible) | paradigmxyz/reth-reproducible |