Skip to content

v1.3.0

Latest

Choose a tag to compare

@github-actions github-actions released this 08 Sep 07:08
dfae5d4

Summary

morph-reth v1.3.0 upgrades the reth dependency to v2.5.2 and adds bounded historical proof history, together with RPC alignment fixes and an engine fix for derivation followers.

Highlights

  • reth v2.4.0 → v2.5.2 (#188, #191) — major dependency upgrade with follow-up fixes: EngineValidator::on_canonical_head_changed is now properly forwarded so upstream txpool prewarming keeps working through the Morph wrapper, and EIP-2780 intrinsic gas is spec-derived instead of hardcoded, with a guard test asserting no Morph hardfork enables Amsterdam state-gas semantics. crossbeam-epoch is bumped for RUSTSEC-2026-0204.
  • Bounded historical proof history (#142) — new morph-proofs / morph-proofs-exex crates persist per-block change sets behind an ExEx and serve eth_getProof at historical heights, plus a new eth_getMultiProof RPC (consolidated multiproof expanded into one EIP-1186 response per target, in request order). Retention is bounded to seven days; proof requests are bounded along account-target and storage-key dimensions and run on reth's blocking pool under --rpc.proof-permits so they cannot starve the Engine API.
  • RPC alignment with morph-geth — absent Morph receipt fee fields (feeTokenID/feeRate/tokenScale/feeLimit) now serialize as JSON null instead of "0x0" (#192), so indexer checks like feeTokenID != null work as intended; Some(0) is kept for MorphTx v1 ETH-fee. eth_estimateGas now validates fee-token registration in simulation paths and aligns fee-token / L1 data fee handling with geth (#182).
  • Engine fix for derivation followers (#180) — engine_newSafeL2Block no longer pulls transactions from the local txpool when reconstructing an L1-committed block. Previously a follower could absorb gossiped transactions that the sequencer committed to later blocks, fork off the sequencer at that height, and later stall with "nonce too low".
  • Upstream eth_config (#193) — the Morph eth_config wrapper is dropped in favor of upstream reth's implementation, with Ethereum system contracts suppressed.

Breaking Changes & Upgrade Notes

  • RPC response change: for standard (non-MorphTx) transactions, receipt feeTokenID/feeRate/tokenScale/feeLimit are now null rather than "0x0". This restores morph-geth parity; consumers that assumed "0x0" must accept null.
  • Rollout order with the morph node: reth 2.5.2 raises the worst-case unpersisted block window from 16 to 21. Upgrade the consensus node to a build carrying the raised backfill depth (morph-l2/morph #43) before or together with this release — with an older node, a hard kill (SIGKILL/OOM) that leaves a gap deeper than 16 blocks cannot be backfilled. Graceful shutdown persists up to head and is unaffected.
  • Proof history requires storage v2 and retains seven days. To enable it: sync to tip, stop the node, run proofs init (a full snapshot at tip, not a historical backfill), then start. See the proofs README for flags (--proofs-history.*) and debug_proofsSyncStatus.
  • No intentional transaction-format breaking changes are included in this release.

All Changes

  • chore: prepare v1.3.0 release (#197)
  • refactor(rpc): use upstream reth eth_config (#193)
  • chore: upgrade reth dependencies to v2.5.2 (#188)
  • fix(rpc): emit null for absent Morph receipt fee fields (#192)
  • fix(rpc): align eth_estimateGas with geth on fee tokens and L1 data fee (#182)
  • fix(engine): keep the txpool out of engine_newSafeL2Block (#180)
  • feat(proofs): add bounded historical proof history (#142)
  • chore(ci): bump the actions-weekly group with 2 updates (#195)
  • chore(ci): bump the actions-weekly group with 2 updates (#176)

Binaries

System Architecture Binary
x86_64 morph-reth-1.3.0-x86_64-linux.tar.gz
aarch64 morph-reth-1.3.0-aarch64-linux.tar.gz
Docker ghcr.io/morph-l2/morph-reth:v1.3.0