revm
Revm - Rust Ethereum Virtual Machine
42.0.1
8.8M downloads/mo
#3356 most downloaded on crates.io
bluealloy/revm
What this package is like to depend on
Last release 1 months ago
23 Jul 2026
Ships fairly regularly
a new release about every 4 weeks
Most releases are documented
notes for 61 of 98 stable releases
12 versions withdrawn
withdrawn after publishing
5 years old
116 releases · first in 2021
27 releases in the last 12 months
see the full history below
Release timeline
116 releases · Sep 2021 to Jul 2026Releases
latest 60 of 116-
42.0.123 Jul 2026Release notes
Open source →Small release that adds spilled state gas to PrecompileOutput.
What's Changed
- feat(precompile): track spilled state gas in PrecompileOutput by @rakita in #3820
- bump: prep v115 tag, revm v42.0.1 by @rakita in #3821
- refactor(handler): build precompile frame gas without touching the interpreter crate by @rakita in #3822
Full Changelog: v114...v115
Release notes
Open source →Other
- updated the following local packages: revm-precompile, revm-handler, revm-inspector
-
42.0.023 Jul 2026 withdrawnRelease notes
Open source →REVM v42.0.0 Release Notes
Date: 2026-07-23
v114 aligns REVM with Glamsterdam devnet-7 and the
[email protected]fixtures — allstate_testsand
blockchain_testspass. All crates are released as 42.0.0.EIP-2780 runtime gas phase (#3795, ethereum/EIPs#11844)
State-dependent transaction charges move out of intrinsic gas into a runtime
phase applied as the first frame is entered. Gated on
CfgEnv::enable_amsterdam_eip2780; older forks are unchanged.- Create transactions: new-account state gas is charged at runtime, only
when the deployment target does not exist; an initcode revert/halt unwinds it. - EIP-7702: the pessimistic per-auth intrinsic charge becomes an intrinsic
REGULAR_PER_AUTH_BASE_COST(7,816) plus per-authority runtime charges, with
no refunds. The delegation target now follows the normal EIP-2929 warm/cold
model. - Runtime out-of-gas no longer invalidates the transaction: it is included
as an OOG halt consuming all gas, with all runtime state changes (including
applied delegations) reverted, and returns the EIP-8037 reservoir. - Charging is incremental and stops at the first unaffordable charge, so later
authorities and a cold delegation target are never loaded and stay out of the
EIP-7928 BAL.
Other devnet-7 alignment (#3795)
- #11836: calldata floor anchored
on the decomposed intrinsic base instead of flatTX_BASE. - #11891: 7702
ACCOUNT_WRITE
charged on first write per authority, skipped only when already paid. - #11858:
CREATE/CREATE2
account-creation state gas charged conditionally at access in the creating
frame, refilled LIFO when the create fails. - #11854:
SSTOREmust cover the
slot access cost before the implicit read; an unaffordable cold access keeps
the slot out of the block access list. - EIP-8246 replaces the EIP-7708 delayed burn; system-contract addresses
updated per EIP-8282. JournalEntry::CodeChangenow records and restores the previous code hash and
bytecode, fixing a phantom BAL code write on reverted 7702 delegation changes.
Other changes
feat(database): database fallback mode for BAL misses (#3754).feat: configurable max refund quotient (#3757); BAL account change slices (#3762).fix(inspector): EIP-7708 transfer logs reach the inspector (#3816); stale
SELFDESTRUCT journal entries ignored (#3805); journal finalized on error so the
EIP-2929 warm set does not leak (#3780).fix:GasTrackerused-gas underflow (#3813);is_emptypreserved on 7702
accounts inload_account_delegated(#3802); storageoriginal_value
re-baselined only across tx boundaries (#3746); bytecode iterator fixes
(#3800, #3792).perf: fewer bounds checks in precompile parsing (#3784); no intermediate BAL
account allocation (#3775); no double cloning intake_n_reverts(#3539).chore(deps):crossbeam-epoch0.9.20 for RUSTSEC-2026-0204 (#3804).
See MIGRATION_GUIDE.md
for the full list.What's Changed
- feat(database): add database fallback mode for BAL misses by @mattsse in #3754
- chore(deps): bump crate-ci/typos from 1.46.1 to 1.47.2 by @dependabot[bot] in #3749
- chore(deps): bump taiki-e/install-action from 2.77.7 to 2.81.3 by @dependabot[bot] in #3748
- chore(deps): bump actions/checkout from 6.0.2 to 6.0.3 by @dependabot[bot] in #3747
- feat: make max refund quotient configurable by @decofe in #3757
- chore: make
refundfallible by @klkvr in #3758 - feat(state): accept BAL account change slices by @mattsse in #3762
- chore(deny): allow proc-macro-error2 advisory by @mattsse in #3763
- fix(state): re-baseline storage original_value only across tx boundaries by @asdv23 in #3746
- perf: avoid intermediate BAL account allocation by @mattsse in #3775
- fix(inspect): finalize journal on error to prevent EIP-2929 warm set leak by @KyrinCode in #3780
- chore(deps): bump actions/checkout from 6.0.3 to 7.0.0 by @dependabot[bot] in #3772
- chore(deps): bump taiki-e/install-action from 2.81.3 to 2.82.0 by @dependabot[bot] in #3774
- chore(deps): bump MarcoIeni/release-plz-action from 0.5.129 to 0.5.130 by @dependabot[bot] in #3759
- chore(deps): bump EmbarkStudios/cargo-deny-action from 2.0.18 to 2.0.20 by @dependabot[bot] in #3738
- chore(database): use Option::filter in BundleAccount::take_info_revert by @mrheyday in #3730
- refactor: clarify EIP-7702 regular-gas GasId names by @rakita in #3725
- perf(database): avoid double cloning in take_n_reverts by @saylor-mik87786 in #3539
- chore(deps): bump CodSpeedHQ/action from 4.15.1 to 4.17.5 by @dependabot[bot] in #3773
- test(bytecode): cover all truncated pushes by @decofe in #3783
- chore(deps): bump taiki-e/install-action from 2.82.0 to 2.82.3 by @dependabot[bot] in #3786
- chore(deps): bump CodSpeedHQ/action from 4.17.5 to 4.18.1 by @dependabot[bot] in #3785
- perf(precompile): reduce bounds checks in precompile parsing by @0xalpharush in #3784
- feat(amsterdam): glam devnet-6 gas accounting & EIP alignment by @rakita in #3782
- chore(deps): bump dependencies by @rakita in #3794
- fix(bytecode): avoid iterating legacy padding opcodes by @weifanglab in #3792
- refactor(revme): separate bytecode from account in test state by @rakita in #3803
- chore(deps): bump crossbeam-epoch to 0.9.20 (RUSTSEC-2026-0204) by @rakita in #3804
- chore(deps): bump taiki-e/install-action from 2.82.3 to 2.83.2 by @dependabot[bot] in #3809
- chore(deps): bump MarcoIeni/release-plz-action from 0.5.130 to 0.5.131 by @dependabot[bot] in #3810
- chore(deps): bump CodSpeedHQ/action from 4.18.1 to 4.18.5 by @dependabot[bot] in #3808
- chore(deps): bump EmbarkStudios/cargo-deny-action from 2.0.20 to 2.1.1 by @dependabot[bot] in #3811
- fix: prevent GasTracker used gas underflow by @1sgtpepper in #3813
- fix(inspector): ignore stale SELFDESTRUCT journal entries by @0xalpharush in #3805
- test(bytecode): cover InvalidMagic and verify EIP-7702 magic constants by @4waan in #3806
- fix(bytecode): preserve iterator position after truncated push by @pengqima in #3800
- fix(context): keep is_empty on EIP-7702 account in load_account_delegated by @cuiweixie in #3802
- chore(deps): bump crate-ci/typos from 1.47.2 to 1.48.0 by @dependabot[bot] in #3791
- feat(amsterdam): glamsterdam devnet-7 alignment (EIP-2780 runtime gas phase, fixtures v7.0.0) by @rakita in #3795
- refactor(handler): validate state before tracking gas by @klkvr in #3815
- fix(inspector): forward EIP-7708 transfer logs to the inspector by @rakita in #3816
- chore: release by @github-actions[bot] in #3814
- bump: prep v114 release by @rakita in #3819
New Contributors
- @asdv23 made their first contribution in #3746
- @KyrinCode made their first contribution in #3780
- @mrheyday made their first contribution in #3730
- @0xalpharush made their first contribution in #3784
- @weifanglab made their first contribution in #3792
- @1sgtpepper made their first contribution in #3813
- @4waan made their first contribution in #3806
- @pengqima made their first contribution in #3800
Full Changelog: v113...v114
- Create transactions: new-account state gas is charged at runtime, only
-
41.0.011 Jun 2026Release notes
Open source →date: 11.06.2026
All crates are now versioned in lockstep, starting at 41.0.0 — hence the version jump (e.g.
revm-bytecode11.0.1 → 41.0.0). Released by #3711 and #3753; full diffv112...v113.Breaking:
TransientStorageis now a newtype overAddressMap<StorageKeyMap<StorageValue>>(#3736)OnStateHook::on_statetakesEvmStateby value;TransitionAccountgained a storage generic (#3732)GasStateTrremoved, superseded by the SSTORE gas hook (#3750)
Other highlights:
- SSTORE gas accounting hook (#3734, #3750),
StateBuilder::with_bundle_update_if(#3729),Account::is_changed(#3727) - Commit perf improvements (#3732)
- Fix out-of-bounds pointer in
analyze_legacy(#3752) and a const-eval panic inpop_address(#3735)
See MIGRATION_GUIDE.md for migration notes.
What's Changed
- docs: add v112 changelog entry by @rakita in #3724
- feat:
Account::is_changedby @klkvr in #3727 - feat(database): add conditional bundle update builder by @mattsse in #3729
- perf: avoid reallocations and cloning during commit by @klkvr in #3732
- feat: add SSTORE gas-state policy hook by @rakita in #3734
- feat: wrap TransientStorage as AddressMap<StorageKeyMap> by @rakita in #3736
- fix(interpreter): use IntoAddress in pop_address to avoid const-eval panic by @pjdurden in #3735
- chore: make
GasStateTrexposeStateLoadby @0xrusowsky in #3737 - Add MODEXP precompile benchmarks by @decofe in #3744
- refactor: remove
GasStateTrby @klkvr in #3750 - Run cargo fmt by @decofe in #3751
- fix(bytecode): avoid out-of-bounds pointer in analyze_legacy by @anders94 in #3752
- chore: release by @github-actions[bot] in #3711
- chore: bump all crates to v41.0.0 by @rakita in #3753
New Contributors
Full Changelog: v112...v113
Release notes
Open source →Other
- updated the following local packages: revm-bytecode, revm-state, revm-database-interface, revm-context-interface, revm-context, revm-database, revm-interpreter, revm-precompile, revm-handler, revm-inspector, revm-statetest-types
-
40.0.326 May 2026Release notes
Open source →Small maintenance release
What's Changed
- feat: add
OnStateHookforState<DB>by @decofe in #3710 - docs: explain CPSB acronym by @mattsse in #3716
- chore(bytecode): mark RETURN and REVERT as memory-modifying by @NithinPJ998 in #3703
- feat: Bake EIP-8037 CPSB into gas params by @decofe in #3714
- chore: release prep — bump all crates with unpublished changes by @rakita in #3721
Full Changelog: v111...v112
Release notes
Open source →Other
- updated the following local packages: revm-database, revm-context, revm-handler, revm-inspector, revm-statetest-types
- feat: add
-
40.0.222 May 2026Release notes
Open source →v111
Date: 2026-05-22
v111 is a maintenance release that extends
DBErrorMarkerso callers can distinguish fatal database errors from recoverable BAL validation failures (#3704). The change addsis_fatal(&self) -> boolto theDBErrorMarkertrait with a default oftrue, preserving existing fail-stop behavior for every current implementor.EvmDatabaseErroroverrides the default so theDatabase(_)variant is fatal and theBal(_)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
Release notes
Open source →Other
- updated the following local packages: revm-database-interface, revm-context-interface, revm-context, revm-database, revm-interpreter, revm-precompile, revm-handler, revm-inspector, revm-statetest-types
-
40.0.121 May 2026Release notes
Open source →v110
Date: 2026-05-21
v110 is a maintenance release that removes the dead
refill_amounttracking from the EIP-8037 reservoir model (#3699). The change dropsGasTracker.refill_amountand the parallel field onPrecompileOutput. The field tracked cumulative reservoir refills —refill_reservoircalls 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 invariantchild.reservoir + child.state_gas_spent:refill_reservoir(r)doesreservoir += r; state_gas_spent -= r, so their sum is conserved across refills and recovers the pre-call value. Every read site —last_frame_resultsave/restore, thehandle_reservoir_remaining_gassuccess branch, andprecompile_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.
GasTrackerderivesserde::Serialize/Deserializeunder theserdefeature, so removingrefill_amountis a serialization-format break for any external consumer that persistsGasTracker.PrecompileOutputhas 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
Release notes
Open source →Other
- updated the following local packages: revm-context-interface, revm-interpreter, revm-precompile, revm-handler, revm-context, revm-inspector, revm-statetest-types
-
40.0.020 May 2026Release notes
Open source →
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-interfaceis 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-interfaceat11.1.0(minor), but the changes that landed in that window — most notably thenon-maxindex-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
-
39.0.019 May 2026Release notes
Open source →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-primitives23.0.0 24.0.0 ⚠ breaking revm-bytecode10.0.0 11.0.0 ⚠ breaking revm-state11.0.1 12.0.0 ⚠ breaking revm-database-interface11.0.1 11.1.0 ✓ compatible revm-context-interface17.0.1 18.0.0 ⚠ breaking revm-context16.0.1 17.0.0 ⚠ breaking revm-database13.0.1 14.0.0 ✓ compatible revm-interpreter35.0.1 36.0.0 ⚠ breaking revm-precompile34.0.0 35.0.0 ⚠ breaking revm-handler18.1.0 19.0.0 ⚠ breaking revm-inspector19.0.0 20.0.0 ⚠ breaking revm-statetest-types17.0.1 18.0.0 ✓ compatible revm38.0.0 39.0.0 ✓ compatible revme15.0.0 16.0.0 ✓ compatible op-revmis 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.mdfor 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 #3604
- refactor: remove pointer field from GasParams by @DaniPopes in #3608
- refactor(primitives): add SpecId::NEXT, drop num_enum dependency by @DaniPopes in #3593
- refactor(precompile): use static OnceLock array for Precompiles init by @DaniPopes in #3602
- perf: move memory_limit check into cold resize path by @DaniPopes in #3599
- perf(precompile): vendor blake2b_simd for BLAKE2 compression by @DaniPopes in #3609
- fix(precompile): use SIGMA period 10 in blake2 portable path by @rakita in #3616
- chore: backport v107 release notes from branch by @rakita in #3617
- fix(state): canonicalize BAL alloy ordering by @mattsse in #3618
- chore: audit #[allow] attributes by @yottaes in #3611
- feat(account): Optimized index type for account ID using
non-maxby @developeruche in #3605 - fix(precompile): tighten cfg on blake2 avx2 module by @yottaes in #3613
- feat(state): Optimized index type for transaction ID using non-max by @yottaes in #3610
- fix(context): use storage_by_account_id fast path in sload by @bluebluesaku in #3535
- ci: update test workflows by @DaniPopes in #3620
- feat: show address or slot in BAL error by @pepyakin in #3619
- handler: reject nonce-max senders before execution by @joohhnnn in #3531
- chore: update alloy-eip7928 to newer version by @pepyakin in #3627
- refactor(gas): simplify log2floor by @DaniPopes in #3629
- refactor: remove unused spec ids by @DaniPopes in #3649
- docs(ee-tests): reference
eip8037.mdinstead of staletip1016.mdin README by @fgimenez in #3648 - chore: rm unused MemoryExtensionResult by @DaniPopes in #3646
- refactor(interpreter): unify call handlers by @DaniPopes in #3626
- chore(deps): bump taiki-e/install-action from 2.75.14 to 2.75.19 by @dependabot[bot] in #3630
- chore(deps): bump rui314/setup-mold from 725a8794d15fc7563f59595bd9556495c0564878 to 9c9c13bf4c3f1adef0cc596abc155580bcb04444 by @dependabot[bot] in #3631
- chore(deps): bump CodSpeedHQ/action from 4.13.1 to 4.14.0 by @dependabot[bot] in #3632
- refactor: use get instead of get_mut by @cuiweixie in #3643
- fix(precompile): halt with PrecompileOOG when precompile over-spends gas by @cuiweixie in #3639
- refactor: use
Cowfor warm precompile addresses by @klkvr in #3652 - Revert "refactor: use
Cowfor warm precompile addresses" by @klkvr in #3653 - ci: run develop EEST fixtures by default by @DaniPopes in #3645
- test(ee-tests): switch to insta for snapshot assertions by @rakita in #3654
- fix(ee-tests): sort snapshot map keys for hasher independence by @rakita in #3655
- chore(deps): bump taiki-e/install-action from 2.75.19 to 2.75.26 by @dependabot[bot] in #3660
- chore(deps): bump CodSpeedHQ/action from 4.14.0 to 4.15.0 by @dependabot[bot] in #3659
- chore(deps): bump crate-ci/typos from 1.45.1 to 1.45.2 by @dependabot[bot] in #3658
- fix: gracefully handle commits with non-cached accounts by @klkvr in #3657
- refactor: restructure
Journaltraits by @klkvr in #3663 - feat(state): add Bal::try_from_alloy by @mattsse in #3665
- feat: add borrowed alloy BAL conversion by @mattsse in #3670
- perf(interpreter): cache init_code_hash in CreateInputs for inspector reuse by @cotter-circle in #3664
- chore(deps): bump mozilla-actions/sccache-action from 0.0.9 to 0.0.10 by @dependabot[bot] in #3661
- fix(inspector): use build_result_gas in inspect_run_system_call by @cuiweixie in #3637
- chore(deps): bump taiki-e/install-action from 2.75.26 to 2.77.1 by @dependabot[bot] in #3674
- chore(deps): bump taiki-e/cache-cargo-install-action from 3.0.6 to 3.0.7 by @dependabot[bot] in #3677
- chore(deps): bump CodSpeedHQ/action from 4.15.0 to 4.15.1 by @dependabot[bot] in #3675
- chore(deps): bump crate-ci/typos from 1.45.2 to 1.46.0 by @dependabot[bot] in #3676
- refactor: change &mut self to &self for read-only methods by @box4wangjing in #3669
- docs: expand
BalErrordocumentation by @rakita in #3666 - perf(database): preserve commit_iter semantics by @NithinPJ998 in
Note truncated.
- EIP-8037 — Amsterdam bal-devnet-7 (#3667). Final wiring for the
-
38.0.017 Apr 2026Release notes
Open source →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
Release notes
Open source →Other
- updated the following local packages: revm-state, revm-context-interface, revm-interpreter, revm-precompile, revm-handler, revm-inspector, revm-database-interface, revm-context, revm-database, revm-statetest-types
-
37.0.010 Apr 2026Release notes
Open source →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
Release notes
Open source →Other
- updated the following local packages: revm-primitives, revm-bytecode, revm-database-interface, revm-context-interface, revm-context, revm-database, revm-interpreter, revm-precompile, revm-handler, revm-inspector, revm-statetest-types, revm-state
-
36.0.004 Mar 2026 -
35.0.003 Mar 2026 withdrawnRelease notes
Open source →Added
- (precompile) add aws-lc-rs as alternative backend for secp256r1 (#3451)
Other
- remove GPL mention and update gmp feature comments (#3383)
-
34.0.015 Jan 2026 -
33.1.014 Nov 2025Release notes
Open source →Fixed
- expose optional_priority_fee_check feature from context crate (#3159)
-
33.0.113 Nov 2025Nothing published for this version
-
33.0.012 Nov 2025Release notes
Open source →Other
- updated the following local packages: revm-context-interface, revm-context, revm-interpreter, revm-precompile, revm-handler, revm-inspector
-
32.0.010 Nov 2025 withdrawnNothing published for this version
-
31.0.210 Nov 2025Release notes
Open source →Other
- updated the following local packages: revm-database, revm-context, revm-handler, revm-inspector
-
31.0.107 Nov 2025Release notes
Open source →Other
- updated the following local packages: revm-primitives, revm-context, revm-bytecode, revm-state, revm-database-interface, revm-context-interface, revm-database, revm-interpreter, revm-precompile, revm-handler, revm-inspector
-
31.0.030 Oct 2025 withdrawn -
30.2.017 Oct 2025Release notes
Open source →Other
- updated the following local packages: revm-interpreter, revm-handler, revm-inspector
-
30.1.215 Oct 2025Release notes
Open source →Other
- updated the following local packages: revm-bytecode, revm-state, revm-database-interface, revm-context-interface, revm-context, revm-database, revm-interpreter, revm-handler, revm-inspector
-
30.1.115 Oct 2025Release notes
Open source →Other
- updated the following local packages: revm-primitives, revm-bytecode, revm-context, revm-interpreter, revm-precompile, revm-handler, revm-state, revm-database-interface, revm-context-interface, revm-database, revm-inspector
-
30.1.010 Oct 2025Release notes
Open source →Other
- updated the following local packages: revm-database-interface, revm-database, revm-interpreter, revm-precompile, revm-handler, revm-inspector, revm-context-interface, revm-context
-
30.0.109 Oct 2025 withdrawnNothing published for this version
-
30.0.007 Oct 2025Release notes
Open source → -
29.0.123 Sep 2025Release notes
Open source →Other
- updated the following local packages: revm-context-interface, revm-context, revm-interpreter, revm-handler, revm-inspector
-
29.0.024 Aug 2025Release notes
Open source →Other
- updated the following local packages: revm-bytecode, revm-database-interface, revm-context-interface, revm-context, revm-database, revm-interpreter, revm-precompile, revm-handler, revm-state, revm-inspector
-
28.0.112 Aug 2025Release notes
Open source →Other
- updated the following local packages: revm-primitives, revm-bytecode, revm-state, revm-context-interface, revm-database, revm-precompile, revm-inspector, revm-database-interface, revm-context, revm-interpreter, revm-handler
-
28.0.007 Aug 2025Release notes
Open source →Added
- Reuse bls12-381 codepaths to implement kzg point evaluation precompile (#2809)
- refactor test utils (#2813)
- add system transaction inspection support (#2808)
Other
- update README.md (#2842)
- reuse global crypto provide idea (#2786)
- add rust-version and note about MSRV (#2789)
Changelog
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.
-
27.1.023 Jul 2025Release notes
Open source →Added
- expose sha3-keccak in revm and revm-primitives (#2713)
Fixed
Other
- add asm-sha2 feature for sha2 precompile (#2712)
-
27.0.314 Jul 2025Release notes
Open source →Other
- updated the following local packages: revm-context, revm-interpreter, revm-precompile, revm-handler, revm-inspector
-
27.0.203 Jul 2025Release notes
Open source →Other
- updated the following local packages: revm-bytecode, revm-handler, revm-inspector, revm-state, revm-database-interface, revm-context-interface, revm-context, revm-database, revm-interpreter
-
27.0.101 Jul 2025 -
27.0.030 Jun 2025Nothing published for this version
-
26.0.120 Jun 2025 -
26.0.019 Jun 2025 withdrawn -
25.0.006 Jun 2025Release notes
Open source →Added
- transact multi tx (#2517)
Fixed
- (multitx) Add local flags for create and selfdestruct (#2581)
Other
-
24.0.131 May 2025Release notes
Open source →Other
- updated the following local packages: revm-context, revm-handler, revm-inspector
-
24.0.023 May 2025 -
23.1.007 May 2025 -
23.0.007 May 2025 withdrawn -
22.0.115 Apr 2025 -
22.0.009 Apr 2025Release notes
Open source → -
21.0.028 Mar 2025Release notes
Open source → -
20.0.024 Mar 2025Release notes
Open source →Other
- updated the following local packages: revm-database, revm-precompile
-
20.0.0-alpha.721 Mar 2025 pre-releaseRelease notes
Open source →Other
- updated the following local packages: revm-primitives, revm-context-interface, revm-context, revm-database, revm-interpreter, revm-precompile, revm-handler, revm-inspector
-
20.0.0-alpha.616 Mar 2025 pre-releaseRelease notes
Open source →Other
- updated the following local packages: revm-primitives, revm-bytecode, revm-context-interface, revm-context, revm-precompile, revm-handler, revm-inspector
-
20.0.0-alpha.512 Mar 2025 pre-releaseRelease notes
Open source →Other
- updated the following local packages: revm-context-interface, revm-context, revm-interpreter, revm-handler, revm-inspector
-
20.0.0-alpha.411 Mar 2025 pre-release -
20.0.0-alpha.310 Mar 2025 pre-release -
20.0.0-alpha.210 Mar 2025 pre-release withdrawnRelease notes
Open source →Added
- remove specification crate (#2165)
Other
- JournalTr, JournalOutput, op only using revm crate (#2155)
- examples to use main revm crate (#2152)
- move mainnet builder to handler crate (#2138)
- remove
optional_gas_refundas unused (#2132) - export eip2930 eip7702 types from one place (#2097)
- move all dependencies to workspace (#2092)
- re-export all crates from
revm(#2088)
-
20.0.0-alpha.117 Feb 2025 pre-releaseRelease notes
Open source →Added
- Split Inspector trait from EthHandler into standalone crate (#2075)
- integrate alloy-eips (#2078)
- Evm structure (Cached Instructions and Precompiles) (#2049)
- Context execution (#2013)
- EthHandler trait (#2001)
- (EIP-7623) adjuct floor gas check order (main) (#1991)
- (EIP-7623) Increase calldata cost. backport from rel/v51 (#1965)
- simplify Transaction trait (#1959)
- expose precompile address in Journal, DB::Error: StdError (#1956)
- integrate codspeed (#1935)
- Make Ctx journal generic (#1933)
- Restucturing Part7 Handler and Context rework (#1865)
- restructuring Part6 transaction crate (#1814)
- push NonceChange to Journal in deduct_caller (#1804)
- Merge validation/analyzis with Bytecode (#1793)
- Restructuring Part3 inspector crate (#1788)
- restructure Part2 database crate (#1784)
- project restructuring Part1 (#1776)
- to_plain_state (#1778)
- (example) deploy bytecode from scratch (#1767)
- introducing EvmWiring, a chain-specific configuration (#1672)
Fixed
- make macro crate-agnostic (#1802)
Other
- backport op l1 fetch perf (#2076)
- API cleanup (#2067)
- Add helpers with_inspector with_precompile (#2063)
- Bump licence year to 2025 (#2058)
- bump alloy versions to match latest (#2007)
- align crates versions (#1983)
- Make inspector use generics, rm associated types (#1934)
- fix comments and docs into more sensible (#1920)
- EVM transact, make output generic for POSTEXEC (#1931)
- Move CfgEnv from context-interface to context crate (#1910)
- bumps select alloy crates to 0.6 (#1854)
- some no_std cleanup (#1834)
- bump alloy to 0.4.2 (#1817)
- (primitives) replace HashMap re-exports with alloy_primitives::map (#1805)
- (deps) bump anyhow from 1.0.88 to 1.0.89 (#1772)
- simplify SuccessOrHalt trait bound (#1768)
-
19.7.021 Mar 2025Nothing published for this version
-
19.6.010 Mar 2025Nothing published for this version
-
19.5.011 Feb 2025Release notes
Open source →Fixed
- (op-isthmus) missing granite precompiles and disable eof (#2065)
- (op) add operator fee scalar scaling factor on refund (#2050)
- fix ethersdb.rs forking (#2047)
-
19.4.028 Jan 2025 -
19.3.013 Jan 2025 -
19.2.006 Jan 2025 -
19.1.006 Jan 2025 withdrawnRelease notes
Open source →