Releases: bluealloy/revm
Release list
tag v111 revm v40.0.2
v111
Date: 2026-05-22
v111 is a maintenance release that extends DBErrorMarker so callers can distinguish fatal database errors from recoverable BAL validation failures (#3704). The change adds is_fatal(&self) -> bool to the DBErrorMarker trait with a default of true, preserving existing fail-stop behavior for every current implementor. EvmDatabaseError overrides the default so the Database(_) variant is fatal and the Bal(_) variant is non-fatal — letting callers distinguish a real underlying database failure from a BAL validation issue that may be retried or surfaced differently.
Version bumps
revm-database-interface: 12.0.0 → 12.1.0 (✓ API compatible changes)revm-context-interface: 19.0.1 → 19.0.2 (✓ dependency bump)revm-context: 18.0.1 → 18.0.2 (✓ dependency bump)revm-database: 15.0.0 → 15.0.1 (✓ dependency bump)revm-interpreter: 37.0.1 → 37.0.2 (✓ dependency bump)revm-precompile: 36.0.1 → 36.0.2 (✓ dependency bump)revm-handler: 20.0.1 → 20.0.2 (✓ dependency bump)revm-inspector: 21.0.1 → 21.0.2 (✓ dependency bump)revm-statetest-types: 19.0.1 → 19.0.2 (✓ dependency bump)revm: 40.0.1 → 40.0.2 (✓ dependency bump)revme: 17.0.1 → 17.0.2 (✓ dependency bump)
Commits
- feat(database): add
is_fataltoDBErrorMarkerby @rakita in #3704 - chore: release by @github-actions[bot] in #3705
- chore: v111 release prep by @rakita in #3706
Full Changelog: v110...v111
tag v110 revm v40.0.1
v110
Date: 2026-05-21
v110 is a maintenance release that removes the dead refill_amount tracking from the EIP-8037 reservoir model (#3699). The change drops GasTracker.refill_amount and the parallel field on PrecompileOutput. The field tracked cumulative reservoir refills — refill_reservoir calls from 0→x→0 storage restorations and failed CREATE refunds — but the revert/halt unwinding it was meant to support is already covered by the signed-sum invariant child.reservoir + child.state_gas_spent: refill_reservoir(r) does reservoir += r; state_gas_spent -= r, so their sum is conserved across refills and recovers the pre-call value. Every read site — last_frame_result save/restore, the handle_reservoir_remaining_gas success branch, and precompile_provider — only fed the field back into itself, and nothing downstream consulted it. Net diff is −56 / +3 across 6 files.
Two compatibility notes are worth calling out. GasTracker derives serde::Serialize/Deserialize under the serde feature, so removing refill_amount is a serialization-format break for any external consumer that persists GasTracker. PrecompileOutput has no serde derive, so it is only a Rust-ABI break there.
Version bumps
revm-context-interface: 19.0.0 → 19.0.1 (✓ API compatible changes)revm-context: 18.0.0 → 18.0.1 (✓ dependency bump)revm-interpreter: 37.0.0 → 37.0.1 (✓ API compatible changes)revm-precompile: 36.0.0 → 36.0.1 (✓ API compatible changes)revm-handler: 20.0.0 → 20.0.1 (✓ API compatible changes)revm-inspector: 21.0.0 → 21.0.1 (✓ dependency bump)revm-statetest-types: 19.0.0 → 19.0.1 (✓ dependency bump)revm: 40.0.0 → 40.0.1 (✓ dependency bump)revme: 17.0.0 → 17.0.1 (✓ dependency bump)
Commits
- refactor(eip8037): remove dead
refill_amounttracking by @rakita in #3699 - chore(deps): bump EmbarkStudios/cargo-deny-action from 2.0.17 to 2.0.18 by @dependabot[bot] in #3691
- chore(deps): bump crate-ci/typos from 1.46.0 to 1.46.1 by @dependabot[bot] in #3693
- chore(deps): bump taiki-e/install-action from 2.77.1 to 2.77.7 by @dependabot[bot] in #3694
- chore(deps): bump MarcoIeni/release-plz-action from 0.5.128 to 0.5.129 by @dependabot[bot] in #3692
- chore: release by @github-actions[bot] in #3701
- chore: v110 release prep by @rakita in #3702
Full Changelog: v109...v110
tag v109 revm v40.0.0
v109 (2026-05-20)
REVM v109 Release Notes
Date: 2026-05-20
v109 is a semver-correction release with no new code changes on top of v108. It re-cuts the workspace so that revm-database-interface is bumped as a
major version, accurately reflecting the API breaks shipped in v108 (BAL error context, non-max account/transaction index types, commit_iter
semantics). All transitively dependent crates are bumped accordingly.
Why a separate release
The v108 cut left revm-database-interface at 11.1.0 (minor), but the changes that landed in that window — most notably the non-max index-type
optimizations (#3605, #3610) and the BAL error-context rework (#3619) — are API breaks for downstream databases. v109 re-publishes the affected crates with
the correct major bump so downstream consumers can pin against semver accurately.
Version bumps
revm-database-interface: 11.1.0 → 12.0.0 (⚠ API breaking changes)revm-context-interface: 18.0.0 → 19.0.0 (⚠ dependency bump)revm-database: 14.0.0 → 15.0.0 (⚠ dependency bump)revm-context: 17.0.0 → 18.0.0 (⚠ dependency bump)revm-interpreter: 36.0.0 → 37.0.0 (⚠ dependency bump)revm-precompile: 35.0.0 → 36.0.0 (⚠ dependency bump)revm-handler: 19.0.0 → 20.0.0 (⚠ dependency bump)revm-inspector: 20.0.0 → 21.0.0 (⚠ dependency bump)revm-statetest-types: 18.0.0 → 19.0.0 (⚠ dependency bump)revm: 39.0.0 → 40.0.0 (⚠ dependency bump)revm-ee-tests: 0.2.0 → 0.3.0 (⚠ dependency bump)revme: 16.0.0 → 17.0.0 (⚠ dependency bump)
What's Changed
Full Changelog: v108...v109
tag v108 revm v39.0.0
REVM v108 Release Notes
Date: 2026-05-19
v108 brings REVM in line with Amsterdam bal-devnet-7, finalizing the
EIP-8037 state-gas/reservoir model that landed experimentally in v106 and
v107.
Headline changes
- EIP-8037 — Amsterdam bal-devnet-7 (#3667). Final wiring for the
state-gas reservoir model, BAL bookkeeping, and the matching gas
accounting paths across handler / interpreter / context. op-revmremoved from the workspace (#3568). The Optimism variant
has moved to its own home at
ethereum-optimism/optimism.
REVM no longer ships anop-revmcrate.- Instructions now return
Result(#3558). The instruction-function
signature changed to returnResult<_, _>so that fallible opcodes can
surface errors without ad-hoc control flow. This is a breaking change
for anyone authoring custom instruction tables / handlers. Journaltraits restructured (#3663). The journal trait hierarchy
has been split and reorganized; expect import / impl-site churn for
downstream databases and custom contexts.- Centralized cfg→journal sync (#3686).
CfgEnvsynchronization with
the journal now lives in one place, eliminating drift between handler
paths.
New features
feat(state):Bal::try_from_alloyfor converting an alloy BAL into
the REVMBaltype (#3665), with a borrowed-input variant added in
#3670.feat(database):State::has_balhelper (#3604).feat(state): optimized index types usingnon-maxfor transaction
IDs (#3610) and account IDs (#3605).feat(primitives):SpecId::NEXTadded and thenum_enumdependency
dropped (#3593).feat:InitialAndFloorGasis now propagated through
validate_against_state_and_deduct_caller(#3577), so the floor-gas
accounting from EIP-7623 is visible to validation.feat: BAL errors now show the offending address or slot (#3619), and
the docs aroundBalErrorhave been expanded (#3666).handler: senders with nonce atu64::MAXare now rejected before
execution (#3531).
Performance
perf(precompile): vendorblake2b_simdfor BLAKE2 compression
(#3609); precompile init now uses a staticOnceLockarray (#3602);
precompiles are no longer cloned on warmup (#3586).perf(interpreter): instruction and gas tables are now separated
(#3561);init_code_hashis cached inCreateInputsso inspectors can
reuse it without re-hashing (#3664).perf: empty-account loads no longer allocate (#3590); the
memory_limitcheck is moved into the cold resize path so the hot
path is shorter (#3599).perf(database):commit_itersemantics preserved while improving its
performance (#3681).
Bug fixes
fix(precompile): halt withPrecompileOOGwhen a precompile
over-spends its gas budget (#3639); re-add
PrecompileOutput::gas_refunded(#3574); use SIGMA period 10 in the
blake2 portable path (#3616); tighten thecfgon the blake2 AVX2
module so it only compiles where it's actually usable (#3613).fix(bal): record storage writes to zero for self-destructed accounts
(#3573); canonicalize BAL alloy ordering (#3618).fix(context): use thestorage_by_account_idfast path inSLOAD
(#3535).fix(handler): skipreimburse_caller/reward_beneficiarywhen
fee charging is disabled (#3559).fix(inspector): usebuild_result_gasininspect_run_system_call
(#3637).fix(bytecode): markBytecode::new_analyzedasunsafeto reflect
its invariants (#3557).fix: opcode struct panics / safety hardening (#3566).fix: gracefully handle commits of non-cached accounts (#3657).
Refactors
refactor(interpreter): unify call handlers (#3626); dedup account
loading across host instructions (#3562); remove the unused
loop_controlmodule (#3555).refactor: thread the reservoir through OOG constructors (#3580); pass
the reservoir intofirst_frame_input(#3578); remove the pointer
field fromGasParams(#3608).refactor: change&mut selfto&selfon read-only methods (#3669);
prefergetoverget_mutwhere mutation isn't needed (#3643).refactor(gas): simplifylog2floor(#3629).refactor: drop unused spec ids (#3649) and unused
MemoryExtensionResult(#3646).
Tests, CI, docs
test(ee-tests): switch toinstafor snapshot assertions (#3654)
and sort snapshot map keys so results are stable across hashers
(#3655).test: custom-opcode integration test added (#3576).ci: run the develop EEST fixtures by default (#3645); pin GitHub
Actions to SHA and apply least-privilege permissions (#3567); update
test workflows (#3620).docs: README inee-testsnow referenceseip8037.mdinstead of
the staletip1016.md(#3648).chore: enable and fixclippy::missing_const_for_fn(#3592); audit
#[allow]attributes (#3611); bumpalloy2.0 crates (#3565) and
alloy-eip7928(#3627); bumprustls-webpkifor an advisory (#3600).
Crate version bumps
| Crate | From | To | Compat |
|---|---|---|---|
revm-primitives |
23.0.0 | 24.0.0 | ⚠ breaking |
revm-bytecode |
10.0.0 | 11.0.0 | ⚠ breaking |
revm-state |
11.0.1 | 12.0.0 | ⚠ breaking |
revm-database-interface |
11.0.1 | 11.1.0 | ✓ compatible |
revm-context-interface |
17.0.1 | 18.0.0 | ⚠ breaking |
revm-context |
16.0.1 | 17.0.0 | ⚠ breaking |
revm-database |
13.0.1 | 14.0.0 | ✓ compatible |
revm-interpreter |
35.0.1 | 36.0.0 | ⚠ breaking |
revm-precompile |
34.0.0 | 35.0.0 | ⚠ breaking |
revm-handler |
18.1.0 | 19.0.0 | ⚠ breaking |
revm-inspector |
19.0.0 | 20.0.0 | ⚠ breaking |
revm-statetest-types |
17.0.1 | 18.0.0 | ✓ compatible |
revm |
38.0.0 | 39.0.0 | ✓ compatible |
revme |
15.0.0 | 16.0.0 | ✓ compatible |
op-revm is no longer released from this repository — see
ethereum-optimism/optimism
for the maintained version.
Migration notes
- Instruction authors: update custom instructions to the new
Result-returning signature introduced in #3558. - Custom journals / databases: rework impls against the restructured
Journaltrait hierarchy (#3663). - op-revm users: switch your dependency to the
op-revmcrate
published fromethereum-optimism/optimism(#3568). - BAL consumers:
Bal::try_from_alloy(#3665, #3670) is the
recommended conversion path; BAL error messages now carry address /
slot context.
See MIGRATION_GUIDE.md for the worked-example migration of the
breaking APIs.
Commits
- chore(interpreter): remove unused loop_control module by @decofe in #3555
- chore(deps): bump alloy 2.0 crates by @mattsse in #3565
- fix(handler): skip gas reimbursement and beneficiary reward when fee charge is disabled by @davidberiro in #3559
- fix(bytecode): mark
Bytecode::new_analyzedas unsafe by @decofe in #3557 - chore: rm op-revm (migrated to ethereum-optimism/optimism) by @rakita in #3568
- ci: pin GitHub Actions to SHA, add least-privilege permissions by @decofe in #3567
- chore(deps): bump CodSpeedHQ/action from 4.13.0 to 4.13.1 by @dependabot[bot] in #3569
- chore(deps): bump taiki-e/install-action from 2.75.0 to 2.75.1 by @dependabot[bot] in #3570
- fix: opcode struct panics/safety by @DaniPopes in #3566
- refactor(interpreter): dedup account loading across host instructions by @DaniPopes in #3562
- fix: re-add
PrecompileOutput::gas_refundedby @klkvr in #3574 - fix(bal): record storage writes to zero for selfdestructed accounts by @rakita in #3573
- feat propagate
InitialAndFloorGasto stateful validation by @klkvr in #3577 - refactor: pass reservoir into
first_frame_inputby @klkvr in #3578 - test: add custom opcode integration test by @decofe in #3576
- refactor: thread reservoir through OOG constructors by @rakita in #3580
- perf(interpreter): separate instruction and gas tables by @DaniPopes in #3561
- test: fix missed merge conflict by @DaniPopes in #3587
- perf: avoid cloning precompiles on warmup by @DaniPopes in #3586
- chore: missed clippy by @DaniPopes in #3591
- perf: no alloc for empty accounts by @DaniPopes in #3590
- chore(deps): bump crate-ci/typos from 1.45.0 to 1.45.1 by @dependabot[bot] in #3596
- chore(deps): bump actions/upload-artifact from 7.0.0 to 7.0.1 by @dependabot[bot] in #3595
- chore(deps): bump taiki-e/install-action from 2.75.13 to 2.75.14 by @dependabot[bot] in #3594
- chore: enable and fix clippy::missing_const_for_fn by @DaniPopes in #3592
- chore: bump rustls-webpki for advisory by @DaniPopes in #3600
- refactor!: return Result from instruction functions by @DaniPopes in #3558
- feat(database): add State::has_bal helper by @mattsse in #3...
tag v107 revm v38.0.0
Maintenance release with handler API refinements.
Bug Fixes
- Record storage writes to zero for selfdestructed accounts in BAL (#3573) — Prevents stale pre-selfdestruct values leaking to later transactions.
- Re-add
PrecompileOutput::gas_refunded(#3574) — Field was inadvertently removed in v106.
Refactoring & Breaking Changes
- Propagate
InitialAndFloorGastovalidate_against_state_and_deduct_caller(#3577) — Handler gains a&mut InitialAndFloorGasparameter. - Pass reservoir into
first_frame_input(#3578) — Replaces&InitialAndFloorGaswith a precomputedreservoir: u64;CreateInputs::newandcreate_init_framegain a trailingreservoirparam.
Full Changelog: v106...v107
tag v106 revm v37.0.0
Release v106
Features
- EIP-8037 / TIP-1016 state gas support (#3406) — Introduces the state gas reservoir model for separating state and execution gas accounting.
- Amsterdam devnet3 EIP updates (#3438) — Partial implementation of Amsterdam devnet3 EIP changes.
frame_startandframe_endon Inspector trait (#3518) — New inspector hooks for observing frame lifecycle events.- Crate-level re-exports for all revm- dependencies* (#3507) — Each revm sub-crate now re-exports its public dependencies for easier downstream use.
CallInput::as_bytes(#3515) — Convenience accessor for raw call input bytes.- Local context accessors on
CallInput(#3537) — Access local context fields directly fromCallInput. - revme: list all failed tests with
--keep-going(#3491) — Summary of all failures printed at the end of test runs.
Bug Fixes
- Reject transactions with nonce at u64::MAX (#3553) — Prevents nonce overflow.
- Ensure both inspectors receive paired call/create events in tuple impl (#3473) — Fixes missing events when using inspector tuples.
- swap/swapn/exchange report StackOverflow on underflow (#3483) — Correct error variant for stack underflow in swap operations.
- Expose
JournalLoadErrorfromload_account_mut_skip_cold_load(#3477) — Error type was previously hidden. - Make
BytecodeOrd consistent with PartialEq and Hash (#3479) — Fixes ordering inconsistency. - Make
DummyHostreturn defaults instead of errors for storage ops (#3503) — Better behavior for testing. - revme: use transact state for debug "State after" output (#3498)
- revme: guard unconditional println in blockchaintest for --json mode (#3500)
Refactoring & Breaking Changes
- Use
AnyErrorforPrecompileError::FatalandEVMError::Custom(#3502) — Replaces stringly-typed errors withAnyError. - Remove option for known bytecode (#3532) — Simplifies bytecode handling.
- Deprecate
set_specand clean up deprecation attrs (#3550) - Move EIP-8037 gas cap validation into
validate_initial_tx_gas(#3552) - Remove unused gas-related functions (#3534)
- Take large array args by reference in precompiles (#3524)
Performance
- Remove redundant log clone in inspector precompile path (#3520)
What's Changed
- ci: add cargo-semver-checks to catch breaking changes in PRs by @decofe in #3476
- fix: ensure both inspectors receive paired call/create events in tuple impl by @bobtajson in #3473
- chore: bump aws-lc-rs from 1.16.0 to 1.16.1 by @rakita in #3481
- chore: simplify stack dup by @DaniPopes in #3478
- fix: make Bytecode Ord consistent with PartialEq and Hash by @zeroprooff in #3479
- fix: expose JournalLoadError from load_account_mut_skip_cold_load by @rakita in #3477
- fix(handler): rename misleading
underflowvariable tosuccessby @zeroprooff in #3486 - chore: remove unused bytecode dependency from revm-statetest-types by @bobtajson in #3485
- fix(interpreter): swap/swapn/exchange report StackOverflow on underflow by @bluebluesaku in #3483
- chore(revme): use alloy-trie instead of triehash by @DaniPopes in #3488
- feat(revme): list all failed tests at the end with --keep-going by @rakita in #3491
- chore: bump c-kzg from 2.1.6 to 2.1.7 by @rakita in #3495
- docs: clarify PrecompileError::Fatal vs Other and EVMError::Custom by @mattsse in #3496
- feat: Amsterdam devnet3 EIP updates by @rakita in #3438
- ci: exclude revme from semver-checks by @bluebluesaku in #3501
- fix(revme): guard unconditional println in blockchaintest for --json mode by @bluebluesaku in #3500
- fix(revme): use transact state for debug State after output by @rakita in #3498
- fix: make DummyHost return defaults instead of errors for storage ops by @decofe in #3503
- ci: remove semver-checks workflow by @rakita in #3508
- feat: add crate-level re-exports for all revm-* dependencies by @rakita in #3507
- refactor: use AnyError for PrecompileError::Fatal and EVMError::Custom by @ndavd in #3502
- feat: add CallInput::as_bytes by @DaniPopes in #3515
- Add [OpTrace] to awesome list by @tanghaosuan11 in #3514
- fix(op-revm): use typed error for missing enveloped tx in all paths by @bluebluesaku in #3509
- chore: remove no-op background transition merge builder toggle by @saylor-mik87786 in #3510
- feat(inspector): add
frame_startandframe_endtoInspectortrait by @mablr in #3518 - chore: add comment about frame stack initial capacity by @DaniPopes in #3527
- bench: add secp256r1 (P256) precompile benchmark by @decofe in #3525
- refactor(precompile): take large array args by reference by @decofe in #3524
- perf(inspector): remove redundant log clone in precompile path by @saylor-mik87786 in #3520
- refactor: remove redundant
Optionby @klkvr in #3532 - feat: Add local context accessors to CallInput by @rakita in #3537
- fix: Remove unused gas-related functions by @popzxc in #3534
- ci: add PR audit workflow by @legion2002 in #3551
- refactor: deprecate set_spec and clean up deprecation attrs by @rakita in #3550
- feat: add EIP-8037 / TIP-1016 state gas support by @rakita in #3406
- refactor: state gas cleanup and EIP-8037 validation consolidation by @rakita in #3552
- chore: release by @github-actions[bot] in #3472
- fix: reject transactions with nonce at u64::MAX by @rakita in #3553
- chore: v106 release prep by @rakita in #3554
New Contributors
- @bobtajson made their first contribution in #3473
- @ndavd made their first contribution in #3502
- @tanghaosuan11 made their first contribution in #3514
- @popzxc made their first contribution in #3534
- @legion2002 made their first contribution in #3551
Full Changelog: v105...v106
tag v105 revm v36.0.0
v105 (2026-03-04)
Maintenance release to do major version bump for revm-database-interface and its dependencies.
Features
- Add extend method to BlockHashCache (#3471)
Chores
tag v104, revm v35.0.0
REVM v104 — Release Notes
Date: March 3, 2026
Tag: v104
Amsterdam hardfork support (EIP-7708, EIP-7843, EIP-8024), ResultGas struct refactor, flatten Bytecode, logs added to Revert/Halt variants, BAL (Block Access List) support, O(1) block hash cache, various performance improvements and bug fixes.
Migration Guide: MIGRATION_GUIDE.md
Changelog: CHANGELOG.md
Breaking Changes
- Flatten Bytecode —
Bytecodeis now a struct wrappingArc<BytecodeInner>instead of an enum. Use accessor methods (kind(),is_legacy(),eip7702_address()) instead of pattern matching. (#3375) ResultGasstruct inExecutionResult— Separategas_used/gas_refundedfields replaced by aResultGasstruct with methodsused(),remaining(),inner_refunded(),final_refunded(),spent_sub_refunded(). (#3413)- Logs in Revert/Halt variants —
ExecutionResult::RevertandHaltnow carrylogs: Vec<Log>for logs emitted before failure. (#3424) - EIP-161 state clear moved into journal finalize — Removed
has_state_clearfield and related methods fromCacheState/State. (#3444) - Remove Default for EthPrecompiles and EthInstructions — Use
new(spec)constructors instead. (#3434) - Fixed-bytes hashmaps from alloy-core —
HashMap<Address, _>→AddressMap<_>,HashMap<B256, _>→B256Map<_>. (#3358)
Amsterdam Hardfork (New EIPs)
- EIP-7708: ETH transfers emit a log — When Amsterdam is active and value is non-zero, ETH transfers emit logs. Includes configuration options in Cfg. (#3334, #3395)
- EIP-7843: SLOTNUM opcode — New opcode
0x4B.BlockEnvgainsslot_num: u64field,Hosttrait gainsslot_num()method. (#3340) - EIP-8024: DUPN, SWAPN, EXCHANGE opcodes — New opcodes at
0xE6–0xE8with a newInvalidImmediateEncodinginstruction result variant. (#3223)
Features
- BAL (Block Access List) support — New example and
StateBuilder::with_bal_builder_ifhelper. (#3339, #3351) - aws-lc-rs backend for secp256r1 — Alternative precompile backend via feature flag. (#3451)
- Configurable EIP-7702 auth refund — New
GasParamsentry. (#3366) tx_access_list_costhelper — Added toGasParams. (#3349)clear()for CacheState and TransitionState — Convenience method. (#3390)BlockHashCachehelpers —iter()andlowest()methods. (#3352)- Storage getter on
BundleState— (#3321) - revme:
--jsonoutput flag for evmrunner. (#3428) - revme:
--omit-progressflag for statetest. (#3419) - revme: validate block gas in blockchain tests. (#3416)
Performance
- O(1) ring buffer block hash cache — Replaces
BTreeMap<u64, B256>. (#3299) - Zero-copy scalar conversion in BLS12-381 MSM precompile. (#3359)
- Cache trusted setup G2 for KZG precompile. (#3322)
- Elide jumps in JUMP opcode execution. (#3347)
- Reserve capacity in
merge_transitions,extend_state, andadd_transitions. (#3430, #3373) - Avoid unnecessary clone/prealloc in state operations. (#3387)
- Remove unnecessary
enveloped_txclone in op-revm. (#3455)
Bug Fixes
- Forward
storage_by_account_idinWrapDatabaseRef. (#3441) - Allow EIP-161 state clear for empty Loaded and Changed accounts. (#3421)
- Big-endian resize for modexp output padding. (#3432)
- Respect
is_fee_charge_disabledincalculate_caller_fee. (#3401) - Fix
storage_by_account_idcache bypass in CacheDB. (#3385) - Fix populated account if BAL pre-state was none. (#3357)
- Set
transition_idto account correctly. (#3353) - Use provided code hash when setting account code. (#3324)
- LOG/CREATE opcodes memory modification tracking. (#3328)
Dependencies
- Updated vulnerable dependencies: keccak, time, bytes (#3467)
- Bumped c-kzg 2.1.4 → 2.1.6 (#3448)
- Default hardfork updated to Osaka (Ethereum) / Jovian (Optimism) (#3326)
Full diff: v103...v104 (181 files changed, 4494 insertions, 1791 deletions)
All commits
- chore: remove outdated stack pop TODO by @joeybright53 in #3315
- perf: Use O(1) ring buffer cache for block hashes instead of BTreeMap by @malik672 in #3299
- refactor(bytecode): remove redundant clones in legacy analysis tests by @letmehateu in #3317
- Rename misleading calc_linear_cost_u32 function by @saylor-mik87786 in #3318
- fix(database): BlockHashCache incorrectly returns zero for block 0 by @bshastry in #3319
- chore: update default hardfork to Osaka (Ethereum) and Jovian (Optimism) by @zerosnacks in #3326
- feat: Implement EIP-8024 for Amsterdam by @frangio in #3223
- fix(bytecode): improve analyze_legacy padding for SWAPN/DUPN/EXCHANGE by @rakita in #3332
- fix: the LOG[0-4] CREATE CREATE2 opcode can modify memory by @mark0-cn in #3328
- feat(database): add storage getter to BundleState by @mattsse in #3321
- perf: cache trusted setup G2 by @lisenokdonbassenok in #3322
- fix: use provided code hash when setting account code by @Bashmunta in #3324
- fix(bytecode): improve analyze_legacy and stack tests by @rakita in #3335
- feat: Implement EIP-7708 ETH transfers emit a log by @rakita in #3334
- revm-handler: add ItemOrResult::map_item (alias map_frame) by @maximevtush in #3320
- fix(bytecode): add padding for final opcode missing immediates by @frangio in #3338
- feat: Implement EIP-7843 SLOTNUM opcode for Amsterdam by @rakita in #3340
- feat: add BAL (Block Access List) example by @mattsse in #3339
- perf: elide some jumps in jump by @DaniPopes in #3347
- feat(gas): add tx_access_list_cost helper to GasParams by @saylor-mik87786 in #3349
- feat(database): add StateBuilder::with_bal_builder_if by @mattsse in #3351
- feat(database): add iter and lowest helpers to BlockHashCache by @mattsse in #3352
- fix: set transition_id to account by @rakita in #3353
- refactor(handler): extract duplicate ContextError handling by @andrewshab3 in #3312
- perf: use fixed bytes hashmaps from alloy-core by @gakonst in #3358
- fix(bal): fix populated account if pre-state was none by @jsign in #3357
- perf(precompile): zero-copy scalar conversion in BLS12-381 MSM by @dizer-ti in #3359
- Deprecate
nonce_bump_journal_entryandcaller_accounting_journal_entryfunctions by @rakita in #3367 - docs: clarify gmp uses dynamic linking (no GPL implications) by @gakonst in #3383
- feat(database): add clear() to CacheState and TransitionState by @mattsse in #3390
- perf(state): avoid unnecessary clone, prealloc, and fix typo by @nkysg in #3387
- fix(db): use self.storage() in storage_by_account_id to a...
tag v103, revm v34.0.0
What's Changed
- chore(test): rn unused folders to free space by @rakita in #3180
- feat: sort accounts by address in blockchaintest output by @RyanBGG in #3182
- chore(fmt): merge all imports by @rakita in #3184
- chore(op-test): regenerate missing test fixture by @rakita in #3185
- ci: bump actions/checkout to v6 by @rejected-l in #3189
- chore: apply_auth_list helper fn by @rakita in #3187
- refactor: optimize vector initialization with size hints by @jackwener in #3191
- state: deduplicate local/global flags setup by @maradini77 in #3190
- opt: optimize precompile
extend()by @jackwener in #3192 - Remove duplicate traces directory creation in block_traces example` by @maradini77 in #3193
- refactor: optimize vector initialization using size hints by @Keemosty12 in #3200
- feat: Restrict Database::Error. JournaledAccountTr by @rakita in #3199
- opt: replace HashMap with fixed-size array for opcode counts in CountInspector by @jackwener in #3203
- feat: DatabaseCommit::commit_iter by @0xForerunner in #3197
- fix: set transaction_id on new account by @rakita in #3204
- feat: DatabaseCommitExt + increment_balances by @0xForerunner in #3195
- feat: DatabaseCommitExt::drain_balances by @0xForerunner in #3205
- feat: early return if the l1 fee scalar is zero by @datnguyencse in #3213
- fix(statetest): use spec-aware blob base fee update fraction by @bshastry in #3210
- feat: JournaledAccount sload/sstore by @rakita in #3201
- feat(create): Implement Cache for CreateInputs::created_address by @developeruche in #3218
- feat: Gas params by @rakita in #3132
- fix(create): Fix CreateInputs::created_address Cache invalidation by @developeruche in #3222
- fix: remove unused duplicate ContextSetters trait in context crate by @anim001k in #3225
- chore(clippy): remove unused imports by @rakita in #3227
- Remove redundant tx fetch in Optimism handler gas accounting by @anim001k in #3220
- perf(database): avoid triple cache lookup by @shekhirin in #3232
- perf(database): use fixed hashmaps in cache db by @shekhirin in #3231
- fix(database): verify handle belongs to current runtime before block_in_place by @forkfury in #3212
- Fix incorrect debug log message in blockchain test runner by @anim001k in #3233
- refactor(handler): validate_initial_tx_gas takes &mut Evm by @rakita in #3235
- feat: BAL EIP-7928 by @rakita in #3070
- fix: deduplicate post-state validation error handling by @anim001k in #3228
- fix: remove redundant trace file creation in block_traces example by @leopardracer in #3245
- fix: use expected_exception instead of error field for unexpected_success status by @leopardracer in #3244
- refactor(handler): eliminate code duplication in transaction validation by @letmehateu in #3243
- refactor: re-export statetest-types from revm crate behind test-types feature by @rakita in #3247
- perf: avoid collect by @klkvr in #3242
- feat: dynamically link gmp by @gakonst in #3250
- fix(database): use conservative
block_in_placestrategy to prevent deadlock by @woojinnn in #3251 - feat: rm gmp use-system-libs by @rakita in #3253
- feat: Propagate
map-foldhashFeature Through Dependency Chain by @woojinnn in #3252 - refactor: remove redundant clone calls by @doocho in #3258
- refactor(revme): extract JSON printing helper in blockchaintest by @letmehateu in #3257
- docs: description of
Handler::validate_against_state_and_deduct_callershould match responsibilities by @preston-evans98 in #3256 - chore: sort storage keys and test files in blockchaintest output by @RyanBGG in #3186
- refactor(revme): use unwrap_or_default for non-UTF8 path safety by @letmehateu in #3259
- perf: avoid loading bytecode in extcodehash by @MoNyAvA in #3261
- fix: the MLOAD opcode can modify memory by @Wodann in #3266
- perf: add Display for HaltReason and OutOfGasError by @RyanBGG in #3265
- chore: add Display trait for ExecutionResult and related types by @RyanBGG in #3267
- chore: the KECCAK256 opcode can resize memory by @joeybright53 in #3269
- chore: happy new year, 2026 licence by @rakita in #3272
- perf: add optimization for push and pop by @malik672 in #3263
- fix(bytecode): remove duplicate implementation in bytes_ref method by @Fallengirl in #3276
- fix: incorrect bytecode value in blockchain test error output by @maximevtush in #3288
- feat: move GasParams to Cfg by @rakita in #3229
- feat: new gas params, tx initial gas and codedeposit by @rakita in #3260
- fix(database): make DatabaseCommit dyn-compatible by @haythemsellami in #3264
- fix(test): one gasid name is missing by @rakita in #3290
- fix(database): return error instead of panic when block not found in AlloyDB by @doocho in #3284
- feat(inspector): make TestInspector public for testing EVM variants by @RyanBGG in #3282
- docs: fix typos and grammar in database crate by @doocho in #3279
- Feat(cache-db): Added pritty_print for CacheDB by @developeruche in #3296
- chore: fix outdated doc comment by @RyanBGG in #3293
- refactor(revme): consolidate find_all_json_tests in dir_utils by @letmehateu in #3262
- fix typos, grammar errors, and improve documentation consistency by @leopardracer in #3294
- chore: apply improvements from ai-bot labeled PRs by @rakita in #3297
- perf: remove redundant clones in gas params defaults by @zeroprooff in #3300
- feat: add
new_ooghelpers to InterpreterResult, CallOutcome, CreateOutcome, and FrameResult by @rakita in #3309 - refactor(precompile): extract common pairing_check_bytes logic in bls12_381 by @letmehateu in #3301
- refactor(gas_params): add dedicated GasIds for sstore_refund by @rakita in #3310
- chore: bump cargo.toml by @rakita in #3311
- chore: release by @github-actions[bot] in #3175
- bump: revm v34.0.0 by @rakita in #3313
- chore(script): move statetest before revm publish by @rakita in #3314
New Contributors
- @0xForerunner made their first contribution in #3197
- @datnguyencse made their first contribution in #3213
- @bshastry made their first contribution in #3210
- @forkfury made their first contribution in #3212
- @letmehateu made their first contribution in #3243
- @woojinnn made their first contribution in #3251
- @doocho made their first contribution in #3258
- @preston-evans98 made their first contribution in #3256
- @MoNyAvA made their first contribution in #3261
- @joeybright53 made their first contribution in #3269
- @malik672 made their first contribution in #3263
- @Fallengirl made their first contribution in #3276
- @haythemsellami made their first contribution in #3264
- @zeroprooff made th...
tag v102 revm v33.1.0
Fix for pre berlin selfdestruct oog, introduced in v99 tag (revm v32.0.0)
What's Changed
- fix: expose optional_priority_fee_check feature from context crate by @jonathanykh in #3159
- feat(context): add mark_cold method to JournaledAccount by @karlb in #3160
- feat: Add set nonce journal entry and fn by @rakita in #3163
- fix(op-revm): return error when enveloped_tx is missing by @Keemosty12 in #3143
- fix(database): return correct bytecode in BenchmarkDB::code_by_hash by @viktorking7 in #3170
- fix: correctly handle selfdestruct cold load by @klkvr in #3174
- chore: release by @github-actions[bot] in #3162
- bump: tag v102 revm v33.1.0 by @rakita in #3177
Backported from previous release:
New Contributors
- @jonathanykh made their first contribution in #3159
- @karlb made their first contribution in #3160
- @Keemosty12 made their first contribution in #3143
Full Changelog: v100...v102