revm-precompile
Revm Precompiles - Ethereum compatible precompiled contracts
42.0.1
8.4M downloads/mo
#3419 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 5 weeks
Most releases are documented
notes for 49 of 61 stable releases
3 versions withdrawn
withdrawn after publishing
4 years old
71 releases · first in 2023
20 releases in the last 12 months
see the full history below
Release timeline
71 releases · Jan 2023 to Jul 2026Releases
latest 60 of 71-
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
-
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
-
36.0.326 May 2026Release notes
Open source →Other
- updated the following local packages: revm-primitives, revm-context-interface
-
36.0.222 May 2026 -
36.0.121 May 2026 -
36.0.020 May 2026Release notes
Open source →Added
- (eip8037) Amsterdam bal-devnet-7 (#3667)
Fixed
- (precompile) tighten cfg on blake2 avx2 module (#3613)
- (precompile) use SIGMA period 10 in blake2 portable path (#3616)
- re-add PrecompileOutput::gas_refunded (#3574)
Other
- remove unused spec ids (#3649)
- audit #[allow] attributes (#3611)
- backport v107 release notes from branch (#3617)
- (precompile) vendor blake2b_simd for BLAKE2 compression (#3609)
- (precompile) use static OnceLock array for Precompiles init (#3602)
- enable and fix clippy::missing_const_for_fn (#3592)
- rm op-revm (migrated to ethereum-optimism/optimism) (#3568)
-
35.0.019 May 2026Nothing published for this version
-
34.0.017 Apr 2026 -
33.0.010 Apr 2026Release notes
Open source →Added
- add EIP-8037 / TIP-1016 state gas support (#3406)
- add crate-level re-exports for all revm-* dependencies (#3507)
Other
- move EIP-8037 gas cap validation into validate_initial_tx_gas (#3552)
- (precompile) take large array args by reference (#3524)
- add secp256r1 (P256) precompile benchmark (#3525)
- use AnyError for PrecompileError::Fatal and EVMError::Custom (#3502)
- clarify PrecompileError::Fatal vs Other and EVMError::Custom (#3496)
-
32.1.003 Mar 2026Release notes
Open source →Added
- (precompile) add aws-lc-rs as alternative backend for secp256r1 (#3451)
Fixed
- (precompile) use big-endian resize for modexp output padding (#3432)
Other
-
32.0.015 Jan 2026Release notes
Open source →Added
Other
- (precompile) extract common pairing_check_bytes logic in bls12_381 (#3301)
- apply improvements from ai-bot labeled PRs (#3297)
- fix typos, grammar errors, and improve documentation consistency (#3294)
- happy new year, 2026 licence (#3272)
- optimize vector initialization using size hints (#3200)
- optimize precompile
extend()(#3192) - optimize vector initialization with size hints in state and precompile modules (#3191)
- (fmt) merge all imports (#3184)
-
31.0.012 Nov 2025Release notes
Open source →Added
- (precompiles) add performant PrecompileError::OtherCowStr variant (#3144)
- add gas refund to PrecompileOutput (#3152)
Other
- merge v98 versions bumps (#3155)
-
30.0.010 Nov 2025 withdrawnNothing published for this version
-
29.0.107 Nov 2025 -
29.0.030 Oct 2025 -
28.1.115 Oct 2025 -
28.1.010 Oct 2025Nothing published for this version
-
28.0.109 Oct 2025 -
28.0.007 Oct 2025Release notes
Open source →Added
- [breaking] Remove kzg-rs (#2909)
Fixed
- racecondition return on install_crypto fn (#2997)
- Apply spelling corrections from PRs #2926, #2915, #2908 (#2978)
Other
-
27.0.024 Aug 2025 -
26.0.112 Aug 2025Release notes
Open source →Fixed
- (osaka) do base/mod zero check after gas calc (#2872)
Other
- Aggregate changes from PRs #2866, #2867, and #2874 (#2876)
-
26.0.007 Aug 2025Release notes
Open source →Added
- short address for journal cold/warm check (#2849)
- optimize access to precompile short addresses (#2846)
- Reuse bls12-381 codepaths to implement kzg point evaluation precompile (#2809)
- rename bn128 to bn254 for Ethereum standard consistency (#2810)
Fixed
- map new once and for all (+ci) (#2852)
Other
- update README.md (#2842)
- simplify the ecrecover test (#2836)
- reuse global crypto provide idea (#2786)
- add rust-version and note about MSRV (#2789)
- add OnceLock re-export with no_std support (#2787)
- fix clippy (#2785)
- Add dyn Crypto trait to PrecompileFn (#2772)
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.
-
25.0.023 Jul 2025Release notes
Open source →Added
- (precompiles) Use bytes API for underlying precompile library APIs (#2705)
- (precompile) update osaka modexp gas divisor (#2740)
- (precompile) update p256 verify osaka gas cost (#2741)
- add a way for precompiles to revert (#2711)
Fixed
- features and check in ci (#2766)
Other
-
24.0.114 Jul 2025 -
24.0.030 Jun 2025 -
23.0.019 Jun 2025 -
22.0.006 Jun 2025 -
21.0.023 May 2025Release notes
Open source → -
20.1.007 May 2025 -
20.0.007 May 2025 withdrawnRelease notes
Open source →Added
- skip cloning of call input from shared memory (#2462)
Fixed
- (isthmus) Add input size limitations to bls12-381 {G1/G2} MSM + pairing (#2406)
Other
-
19.0.009 Apr 2025 -
18.0.028 Mar 2025Release notes
Open source →Added
Other
- [breaking] Move modulus constant into blst wrapper (#2336)
- Remove TODO for NBITS and remove NBITS from blst MSM API (#2337)
- remove no-std method for bls (#2338)
- Move all benchmarks into their own module like eip2537 (#2335)
- add bls12-381 benchmarks (#2327)
- add encode_fp function (#2328)
- clean up blst wrapper doc comment and types (#2314)
- Move all blst related methods into blst wrapper (#2313)
- Remove LATEST variant from SpecId enum (#2299)
-
17.0.024 Mar 2025Release notes
Open source → -
17.0.0-alpha.721 Mar 2025 pre-releaseRelease notes
Open source →Added
- Return Fatal error on bls precompiles if in no_std (#2249)
- bls special case G1/G2_MUL (#2248)
- Remove PrecompileError from PrecompileProvider (#2233)
Other
- add early exit for no-ops in EIP1962 and EIP2537 (#2271)
- (op-precompiles) Check subset of l1 precompiles in op (#2204)
- Add
g1_mul,g1_addandread_scalarmethods into substrate wrapper for bn128 (#2264) - (op-precompiles) clean up op tx tests (#2242)
- Adds a wrapper around substrate-bn for EIP196 (#2258)
- add invariant test for G1/G2 Mul (#2247)
- add documentation for the gas related constants for EIP2537 (#2246)
- add a safe blst wrapper (#2223)
- Remove redundant bls12-381 constants and cleanup naming (#2235)
- Add some documentation for the bls12-381 precompile constants (#2222)
-
17.0.0-alpha.616 Mar 2025 pre-release -
17.0.0-alpha.512 Mar 2025 pre-release -
17.0.0-alpha.411 Mar 2025 pre-releaseRelease notes
Open source → -
17.0.0-alpha.310 Mar 2025 pre-releaseRelease notes
Open source → -
17.0.0-alpha.210 Mar 2025 pre-releaseRelease notes
Open source →Added
- remove specification crate (#2165)
Fixed
- (blst) Fix blst wrong constants values and usage (#2102)
Other
- simplify bn128::run_pair (#2137)
- export eip2930 eip7702 types from one place (#2097)
- PrecompileErrors to PrecompileError (#2103)
- Update broken link secp256r1.rs (#2099)
- G1_msm base gas fee const correction (#2100)
- Split blst constants out to individual file #2085
- (deps) bump breaking deps (#2093)
- move all dependencies to workspace (#2092)
-
17.0.0-alpha.116 Feb 2025 pre-releaseRelease notes
Open source →Added
- (eip7702) apply latest EIP-7702 changes, backport from v52 (#1969)
- integrate codspeed (#1935)
- Restucturing Part7 Handler and Context rework (#1865)
- restructuring Part6 transaction crate (#1814)
- restructure Part2 database crate (#1784)
- project restructuring Part1 (#1776)
- introducing EvmWiring, a chain-specific configuration (#1672)
Fixed
- (Inspector) frame_end called multiple times (#2037)
Other
- backport op l1 fetch perf (#2076)
- Bump licence year to 2025 (#2058)
- bump kzg.rs (#2002)
- align crates versions (#1983)
- blst reprice, remove g1/g2 mul (#1981)
- integrate rust-secp256k1 (#1915)
- fix comments and docs into more sensible (#1920)
- Rename PRAGUE_EOF to OSAKA (#1903)
- (precompile) use secp256k1 global context for ecrecover (#1843)
- fix some typos (#1800)
- Replace
PrecompileErrorvariant (#1797) - (deps) bump once_cell from 1.19.0 to 1.20.0 (#1773)
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.
-
16.2.021 Mar 2025Nothing published for this version
-
16.1.011 Feb 2025 -
16.0.026 Dec 2024Release notes
Open source → -
15.0.006 Nov 2024 -
14.0.023 Oct 2024 -
13.0.017 Oct 2024 -
12.0.017 Oct 2024 -
11.0.326 Sep 2024 -
11.0.218 Sep 2024 -
11.0.130 Aug 2024 -
11.0.029 Aug 2024Nothing published for this version
-
10.0.008 Aug 2024Nothing published for this version
-
9.2.016 Jul 2024Nothing published for this version
-
9.1.016 Jul 2024Release notes
Open source → -
9.0.008 Jul 2024 -
8.0.020 Jun 2024Release notes
Open source →Added
- (precompiles) fatal error for precompiles (#1499)
- add ecAdd to precompile bench (#1496)
- (optimism) Add secp256r1 precompile for Fjord (#1436)
Fixed
- (eof) fixture 2 tests (#1550)
- check canonical Fp elements (#1434)
- (precompile) ignore infinity points in G1 MSM (#1432)
- (precompile) BLS G2 MSM (#1428)
Other
- avoid cloning precompiles (#1486)
- (precompiles) Fix some nits in bls12_381 (#1495)
- (deps) allow multiple versions of secp256k1 (#1490)
- (deps) bump rstest from 0.19.0 to 0.21.0 (#1482)
- (deps) bump blst from 0.3.11 to 0.3.12 (#1481)
- add test for map_fp_to_g1 precompile (#1465)
- add docs for BLS scalar input decoding (#1446)
-
7.0.012 May 2024Release notes
Open source →Added
- (precompile) Prague - EIP-2537 - BLS12-381 curve operations (#1389)
- (precompile) add Prague hardfork specification (#1387)
- add flag to force hashbrown usage (#1284)
- EOF (Ethereum Object Format) (#1143)
Fixed
- (precompile) blst dangling pointers, cleanup (#1391)
- (precompile) inherit Prague precompiles from Cancun (#1392)
Other
-
6.0.002 Apr 2024Release notes
Open source →Fixed
- update/enable bn128 tests (#1242)
- use correct bn128 mul input length (#1238)
- use correct rand package for thread_rng (#1233)
Other
- remove unnecessary call to into_u256() for bn128 add (#1239)
-
5.1.019 Mar 2024