Releases: morph-l2/morph-reth
v0.3.0
Summary
Highlights
-
New
morph_RPC namespace (#106) — addsmorph_getTransactionHashesByReference,
backed by a newmorph-reference-indexcrate (dedicated MDBX store) and an ExEx
that indexes Morph-tx references from the Jade activation block onward. Ships
with startup backfill + reorg-aware reconcile, gated readiness, and
lag-threshold guards. Compatible with geth-style hex-quantityoffset/
limiton the wire. -
Build-profile gradient and production-deploy retune (#104) — adds explicit
dev/release/profiling/maxperf/bench/hivetestsprofiles
to the workspace. Production deploys (Dockerfile, EC2 build, tag-push release
CI) now default to theprofilingprofile, which captured ~80% ofmaxperf's
hot-path gains in our benchmarks while avoidingmaxperf's ERC20 long-tail
regression.x86_64release artifacts now target thex86-64-v3baseline
(Haswell+ / Excavator+) pluspclmulqdq.
Breaking Changes
- Removed
engine_appendBatchSignatureandBatchSignature(#105) — the
consensus layer (tendermint / morphnode) stopped calling this method after
batch generation moved out of the consensus path into the tx-submitter
(morph-l2/go-ethereum#319,morph-l2/tendermint#35,
morph-l2/morph#939). Operators must run a tendermint / morphnode build
that no longer issues the call.
Notable Cleanups
refactor(evm): removed unreachableapply_curie_hard_forkdead code; every
Morph chain config setscurieBlock = 0and the L1GasPriceOracle Curie slots
are initialized post-launch via a regular transaction (mainnet block 863) (#101).fix(clippy): silencedunnecessary_sort_by(#100).
Compatibility
- No state-DB schema changes for the main reth datadir.
- New optional reference-index DB at
<datadir>/morph/reference_index/—
created and backfilled on first start; takes a few minutes for the
post-Jade range to become queryable. The RPC returns
-32000 "reference index initializing"until ready.
Full Changelog: v0.2.2...v0.3.0
All Changes
- chore: bump version to 0.3.0 (#107)
- chore(ci): bump docker/metadata-action from 5 to 6 (#99)
- refactor(evm): remove unused apply_curie_hard_fork dead code (#101)
- feat(rpc): implement morph_getTransactionHashesByReference (#106)
- refactor(engine-api): remove engine_appendBatchSignature and BatchSignature (#105)
- chore: add workspace build profile gradient and wire prod deploys to profiling (#104)
- fix(evm): use sort_by_key to satisfy clippy unnecessary_sort_by lint (#100)
Binaries
| System | Architecture | Binary |
|---|---|---|
| x86_64 | morph-reth-0.3.0-x86_64-linux.tar.gz | |
| aarch64 | morph-reth-0.3.0-aarch64-linux.tar.gz | |
| Docker | ghcr.io/morph-l2/morph-reth:v0.3.0 |
v0.2.2
Summary
This release introduces Prometheus metrics for observability, fixes --version to correctly display morph-reth identity, and
updates CI dependencies.
Highlights
- Engine API & Payload Builder Metrics: Added Prometheus counters, histograms, and gauges for Engine API calls
(newL2Block,assembleL2Block,fork_choice_updated) and payload building (block gas, tx counts, build duration). Enables
Grafana dashboards and alerting for node operators. - Version Metadata Override:
morph-reth --versionnow shows morph-reth's own version, commit SHA, and build info instead
of the upstream reth fork values. The-devsuffix is automatically appended for non-tagged builds. - CI: Bumped
docker/build-push-actionfrom v6 to v7.
All Changes
- feat(metrics): add Prometheus metrics for Engine API and payload builder (#97)
- feat(node): override version metadata with morph-reth info (#95)
- chore(ci): bump docker/build-push-action from 6 to 7 (#96)
Binaries
| System | Architecture | Binary |
|---|---|---|
| x86_64 | morph-reth-0.2.2-x86_64-linux.tar.gz | |
| aarch64 | morph-reth-0.2.2-aarch64-linux.tar.gz | |
| Docker | ghcr.io/morph-l2/morph-reth:v0.2.2 |
v0.2.1
Summary
All Changes
- feat(p2p): hardcode Morph bootnodes in chainspec and simplify startup (#94)
- fix(engine-api): add engine_appendBatchSignature no-op stub for sync nodes (#93)
- chore: bump version to 0.2.1 (#90)
- fix(evm): restore tx_gas_limit_cap override to disable EIP-7825 on Morph (#91)
- fix(build): use git CLI for fetching cargo git dependencies on EC2 (#92)
- fix(release): remove checklists from release notes (#85)
- fix(rpc): handle eth_config when no timestamp fork is active yet (#86)
- perf(txpool): reuse state provider across batch transaction validation (#88)
- chore(deps): upgrade vergen/vergen-git2 to 9.1.0, remove [patch.crates-io] (#89)
Binaries
| System | Architecture | Binary |
|---|---|---|
| x86_64 | morph-reth-0.2.1-x86_64-linux.tar.gz | |
| aarch64 | morph-reth-0.2.1-aarch64-linux.tar.gz | |
| Docker | ghcr.io/morph-l2/morph-reth:v0.2.1 |
v0.2.0
Summary
This is the first public release of morph-reth, the Reth-based execution client for Morph L2. It establishes the complete CI/CD
infrastructure and delivers a series of correctness fixes validated against Morph mainnet and Hoodi testnet.
New Features
- eth_config RPC method — Morph-specific chain configuration endpoint (#72)
- Jade fork activation timestamps — Mainnet and Hoodi hardfork schedules are now set (#51)
Bug Fixes
- BLOCKHASH opcode — Aligned with Morph geth semantics (chain_id || block_number hash) (#38)
- State root validator — Restored pre-Jade ZK-trie state root hook (#47)
- L2 header alignment — Fixed field mismatch between assemble and import paths (#58)
- Trace replay — Fixed Morph trace replay on Cancun-active chains (#57)
- L1 message gas price — baseFee now returned as effectiveGasPrice for L1 messages (#60)
- Payload serialization — nextL1MessageIndex serialized as bare uint64 instead of hex (#73)
- EVM — Removed unnecessary EIP-7825 tx gas limit cap override (#79)
- Chainspec — MORPH_BASE_FEE used as genesis default (#74)
- Engine API — resolve_kind(WaitForPending) used for correct payload resolution (#82)
- Security — Fixed lz4_flex memory leak (GHSA-vvp9-7p8x-rfvv) and keccak ARMv8 unsoundness (GHSA-2326-pfpj-vk5v) (#41, #53)
Infrastructure
- Multi-platform Docker images (linux/amd64, linux/arm64) — build time reduced from ~200min to ~20min via cross-compilation
- Full CI pipeline: build, lint, test, cargo-deny, release, and Docker workflows
- Reproducible release binaries for x86_64 and aarch64 Linux with SHA256 checksums
All Changes
- fix(release): use cross main branch to fix mdbx-sys build (#84)
- chore: add Cross.toml for cross-compilation clang/llvm dependencies (#83)
- fix(engine-api): use resolve_kind(WaitForPending) instead of best_payload (#82)
- chore: add Makefile and MakefileEc2.mk, update README (#78)
- fix(evm): remove unnecessary EIP-7825 tx gas limit cap override (#79)
- refactor(chainspec): rename jadeTime to jadeForkTime for go-ethereum compatibility (#80)
- chore: bump version to 0.2.0 (#77)
- chore(ci): bump docker/login-action from 3 to 4 (#81)
- fix(chainspec): use MORPH_BASE_FEE as genesis default instead of INITIAL_BASE_FEE (#74)
- chore(ci): bump marocchino/sticky-pull-request-comment from 2 to 3 (#75)
- ci: use mold linker for faster CI builds (#71)
- ci: add Docker multi-platform build and Release workflows (#70)
- ci: add dependabot for GitHub Actions version updates (#69)
- ci: add automatic PR labeling from linked issues (#67)
- ci: add PR title conventional commit validation (#66)
- ci(lint): add typos spell checker and editorconfig (#65)
- test: add E2E test infrastructure and helpers (#63)
- test: add unit tests across all morph-reth crates (#62)
- ci: replace manual cargo cache with Swatinem/rust-cache (#68)
- ci(deny): add cargo-deny dependency audit workflow (#61)
- feat: implement eth_config RPC with morph extension (#72)
- fix(payload): serialize nextL1MessageIndex as bare uint64, not hex string (#73)
- fix(txpool): enforce hardfork activation for EIP-7702 and MorphTx (#59)
- fix(primitives): return baseFee as effectiveGasPrice for L1 messages (#60)
- fix: align L2 header fields between assemble and import paths (#58)
- Fix Morph trace replay on Cancun-active chains (#57)
- refactor: simplify logic across crates (#56)
- chore(local-test): unify mainnet/hoodi scripts with MORPH_NETWORK selector (#54)
- fix(deps): bump tracing-subscriber to 0.3.20 to fix ANSI log poisoning (#52)
- fix(deps): bump lz4_flex to 0.11.6 to fix uninitialized memory leak (GHSA-vvp9-7p8x-rfvv) (#53)
- docs: sync README and tooling docs (#50)
- feat(chainspec): set Jade fork activation timestamps (#51)
- fix: pre-audit security hardening and bug fixes (#48)
- fix(node): restore StateRootValidator hook for pre-Jade state root ha… (#47)
- deps: downgrade reth to paradigmxyz/reth v1.10.0 (#46)
- fix(serde): add default for TxMorph version/feeTokenId/feeLimit fields (#44)
- docs: improve README accuracy, add LICENSE and CONTRIBUTING files (#42)
- fix(deps): upgrade keccak to 0.1.6 to fix ARMv8 unsoundness (GHSA-2326-pfpj-vk5v) (#41)
- fix(revm): restore original_value after revm-state 9.0.0 (#39)
- fix(revm): align BLOCKHASH with Morph geth semantics (#38)
- refactor(engine-api): simplify engine API and fix code quality issues (#35)
Binaries
| System | Architecture | Binary |
|---|---|---|
| x86_64 | morph-reth-0.2.0-x86_64-linux.tar.gz | |
| aarch64 | morph-reth-0.2.0-aarch64-linux.tar.gz | |
| Docker | ghcr.io/morph-l2/morph-reth:v0.2.0 |