All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
- Lightweight custom chainspec mode (
--chain light:<path-or-json>) for warm datadir restarts without reparsing large genesis allocs, including automatic.light.jsonsidecar generation from full file-based genesis specs (#253)
- Upgraded Reth from v2.0.0 to v2.2.0, with matching Alloy 2.x, revm 38.0.0, alloy-evm 0.34.0, reth-codecs 0.3.1, Tokio 1.52, Clap 4.6, and related dependency updates (#223, #236, #250)
- Updated Engine API payload handling for Amsterdam-era fields, including payload attribute slot numbers and V6 execution payload block access list / slot number propagation.
- Updated EvNode batch transaction gas validation and block execution accounting for Amsterdam/EIP-8037 state gas and transaction gas-limit cap semantics.
- Changed FeeVault from Hyperlane
HypNativeMinterbridging to a simpler native-token splitter:distribute()now sends the bridge share tobridgeRecipientand the remainder tootherRecipient; storage layout, constructor args, events, scripts, and docs were updated accordingly. - Split
ev-deployer initinto explicit mode subcommands; useev-deployer init genesisorev-deployer init deployinstead of the old singleinitcommand. ev-deployerconfig validation now rejects duplicate deployment addresses and requires addresses only for genesis mode, while deploy mode computes addresses from CREATE2 inputs.
- Tracing fields now use display formatting where appropriate, improving structured logs for addresses, hashes, gas limits, and errors (#255)
- Native minting precompile authorization, ABI decode, balance overflow, and insufficient-balance failures now halt the precompile call instead of surfacing as fatal precompile errors
- Preallocated block receipt storage from the transaction-count hint to reduce avoidable allocations during block execution
- Preserved existing lightweight chainspec sidecars when a new full genesis produces a different genesis hash, writing a hash-specific sidecar instead of overwriting the old one (#253)
Note: v0.3.0 was never released (only
v0.3.0-betashipped). Changes originally staged under v0.3.0 are rolled into v0.4.0 below so the upgrade path is v0.2.x → v0.4.0.
ev-deployerCLI (bin/ev-deployer) for generating genesis alloc entries with embedded contract bytecodes (#167)ev-devbinary (bin/ev-dev): one-command local development chain with pre-funded Hardhat accounts, similar to Anvil or Hardhat Node- Transaction sponsor service (
bin/sponsor-service) for signing EvNode transactions on behalf of users via JSON-RPC proxy (#141) - Granular tracing instrumentation spans across payload building, transaction validation, and EVM execution
EV_TRACE_LEVELenv var to control OTLP span export verbosity independently fromRUST_LOGstdout log level (#156)- EvNode transaction type (0x76) with atomic batch calls and fee-payer sponsorship (#103)
- Viem client library (
@evstack/evnode-viem) for building, signing, and sponsoring EvNode transactions (#112) - End-to-end tests for the EvNode client (#118)
- Tini init process in Docker images for proper signal handling (#115)
- Upgraded Reth from v1.8.4 to v2.0.0 with Osaka/EOF hardfork support, Storage V2, revm 36.0.0, and alloy-evm 0.30.0 (#106, #207)
reth-primitivesimports migrated toalloy_consensusandreth_ethereum_primitives(upstream crate removed)- Txpool fallback (pulling pending transactions when Engine API attributes are empty) restricted to
--devmode only - Migrated build system from Makefile to Justfile
- Disabled default features on several reth crates to unblock SP1 proving work (#111)
- Removed unused
thiserrordependency fromev-precompilescrate
- Payload builder now uses
decode_2718_exactinstead ofnetwork_decodefor Engine API payloads, fixing silent drops of valid type 0x76 and EIP-1559/EIP-2930 transactions (#219) - Payload builder now pulls pending transactions from the txpool in
--devmode, fixingcast sendand other RPC-submitted transactions not being included in blocks - Txpool now uses sponsor balance for pending/queued ordering in sponsored EvNode transactions, and validates executor balance separately for call value transfers (#141)
- Permissioned EVM deploy allowlist validation when gas is explicitly specified (#122)
- Additional test coverage for deploy allowlist edge cases across all transaction types
- Permissioned EVM support allowing configurable address-based access control (#100)
- EIP-1559 settings to chain configuration for customizing base fee parameters (#99)
- AdminProxy contract for administrative operations (#97)
- ADR 003: typed sponsorship transactions and batch execution documentation (#96)
- Fee system guide documentation (#101)