Summary
revm
:
- Cancun ready. all EIP implemented.
Check interpreter CHANGELOG - revm State. a
Database
that handles Reverts and state transitions. - Optimism support
- no_std build
revm-interpreter
:
- Cancun support:
- EIP-7516: BLOBBASEFEE opcode
- EIP-4844: Shard Blob Transactions
- EIP-1153: Transient storage opcodes
- EIP-5656: MCOPY - Memory copying instruction
- Rename
SHA3
toKECCAK256
, this can potentially break some tracers. - Refactor opcodes and Interpreter dispatch loop. Better performance.
- optimize stack usage for recursive
call
andcreate
programs.
This brings down the native stack usage as calls are in recursion.
revm-precompile
:
- Cancun EIP-4844 precompile. It is behind
c-kzg
that is enabled by default
the reason is that c-kzg fails to build on wasm and some docker images. - no_std support
- small fixes to return out of gas for modepx and pairing precompiles.
revm-primitives
:
- Some check for Env validity moved from revm to primitives crate.
- Cancun spec introduced.
- no_std added to primitives.
- introduce initcode size limit check taking config into account.
- deprecate
RefDBWrapper
for more genericWrapDatabaseRef
. - Implement
Error
for EVMError. - Removal of hash from Bytecode.
- ChainId converted from U256 to u64.
- CfgEnv marked as
non_exhaustive
to accommodate future changes. - Introduce
InvalidHeader
error that containsprevrandao
andblob gas
not set errors. - c-kzg added as dependency as it is needed for
KzgSetting
that is sed inside EnvCfg.
What's Changed
- feat: Introduce account status as bitflag inside JournalState by @rakita in #477
- chore: Bundle inspector crate/call calls by @rakita in #480
- chore: refactor interpreter run and remove inspector static flag by @rakita in #481
- perf: Create account checkpoint by @rakita in #483
- docs: add some CacheDB docs by @mattsse in #484
- feat: separate initial checks by @rakita in #486
- chore: fix typo by @adria0 in #488
- fix: typo in eip-3155 output by @perama-v in #497
- feat: Run CI on release branches by @rakita in #505
- fix previous commit by @rakita in #508
- chore: add util functions for getting output data by @mattsse in #509
- fix: replace SHA3 with KECCAK256 opcode name by @mattsse in #511
- feat: simplify BYTE opcode by @teddav in #512
- docs:
in_memory_db.rs
comment typo by @Sabnock01 in #517 - feat: add Memory::into_data by @mattsse in #516
- chore(deps): bump serde from 1.0.160 to 1.0.164 by @dependabot in #515
- chore(deps): bump auto_impl from 1.0.1 to 1.1.0 by @dependabot in #478
- book 📝 by @0xJepsen in #494
- consume all gas on invalid opcode by @teddav in #500
- chore: split comment by @Ethan-000 in #529
- chore(deps): bump hashbrown from 0.13.2 to 0.14.0 by @dependabot in #519
- feat(cancun): EIP-5656: MCOPY - Memory copying instruction by @0xJepsen in #528
- optimize stack usage for recursive
call
andcreate
programs by @valo in #522 - feat: Rename all SHA3 opcodes to KECCAK256 by @tungbq in #514
- fix(doc): Inline documentation of re-exports by @oblique in #560
- chore: clippy and fmt by @rakita in #568
- fix(revm): include CREATE/CREATE2 in EIP3155 inspector by @perama-v in #562
- fix(revm): extra return in EIP3155 inspector by @perama-v in #563
- feat: Implement
Error
for EVMError by @oblique in #559 - fix(revm): EIP-3155 tracer tx output without debug artefact by @perama-v in #552
- chore: cargo update by @rakita in #569
- fix(interpreter): mcopy call order by @DaniPopes in #570
- make calc public by @BrazilRaw in #575
- feat: EIP-1153 Transient storage opcodes by @tynes in #546
- fix: AccessList with two same addresses by @rakita in #578
- ci: update jobs to latest versions by @DaniPopes in #580
- refactor: rewrite revm-test as a criterion bench by @DaniPopes in #579
- fix(transient_storage): set previous value in journal by @rakita in #585
- fix(mcopy): memory expansion and add eth tests to ci by @rakita in #586
- feat: introduce initcode size limit check taking config into account by @Evalir in #587
- chore: move precompiles to EVMData for inspector access by @Evalir in #588
- feat: State with account status by @rakita in #499
- remove unneccesary var and if branch by @bemevolent in #592
- chore(deps): bump serde from 1.0.177 to 1.0.182 by @dependabot in #584
- chore(deps): bump tokio from 1.29.1 to 1.31.0 by @dependabot in #595
- chore(deps): bump bitflags from 2.3.3 to 2.4.0 by @dependabot in #596
- chore: avoid unnecessary allocations by @DaniPopes in #581
- perf: pre-allocate inner bundle state by @rkrasiuk in #599
- chore:
TransitionState::with_capacity
->TransitionState::single
by @rkrasiuk in #600 - feat: alloy migration by @DaniPopes in #535
- chore: Revert test, not change storage check , renaming of original slot value by @rakita in #601
- chore: fix test build, use new types by @rakita in #605
- chore: Load caller in finalization fn by @rakita in #604
- chore(deps): bump anyhow from 1.0.72 to 1.0.74 by @dependabot in #602
- chore(deps): bump thiserror from 1.0.44 to 1.0.46 by @dependabot in #603
- chore: export some
unreachable_pub
items by @DaniPopes in #598 - chore(deps): bump serde_json from 1.0.104 to 1.0.105 by @dependabot in #608
- chore(deps): bump tokio from 1.31.0 to 1.32.0 by @dependabot in #607
- chore(deps): bump anyhow from 1.0.74 to 1.0.75 by @dependabot in #606
- fix(inspector): call call_end/create_end when inspector shortcircuits calls by @Evalir in #609
- chore: get or insert bundle state by @rkrasiuk in #613
- chore: spell check by @rkrasiuk in #615
- test(state): account & storage revert value preservation by @rkrasiuk in #614
- Revert "feat: alloy migration (#535)" by @rakita in #616
- ci: add timeout to all jobs by @DaniPopes in #618
- fix typos by @omahs in #620
- feat(state): Block hash cache and overrides by @rakita in #621
- feat(state): Use preloaded bundle inside state by @rakita in #622
- chore: mark CfgEnv as non_exhaustive by @rakita in #623
- chore(deps): bump thiserror from 1.0.46 to 1.0.47 by @dependabot in #612
- chore(deps): bump serde from 1.0.183 to 1.0.185 by @dependabot in #624
- test(state): bundle reverts collapse by @rkrasiuk in #626
- feat: Optional coinbase tip by @clabby in #625
- book workflow by @0xJepsen in #537
- bug(state): remove redundant info revert on destruct by @rakita in #635
- fix(state): return RevertToSlot struct with more info by @rakita in #636
- style: bundle state by @rkrasiuk in #637
- chore: misc improvements by @DaniPopes in #633
- chore(interpreter): improve dummy host by @DaniPopes in #631
- chore(interpreter): use
let else
by @DaniPopes in #629 - feat(
interpreter
): add hash to bytecode by @Evalir in #628 - chore(interpreter): improve gas calculations by @DaniPopes in #632
- test(state): bundle selfdestructs by @rkrasiuk in #627
- fix(state): check if storage revert is empty by @rkrasiuk in #643
- Refactor: Split transaction pre verification to separate function by @lorenzofero in #573
- refactor(inspector): add value parameter to Inspector::selfdestruct by @tonyke-bot in #645
- chore(state): bundle state split by @rkrasiuk in #646
- fix(state): Revert from DestroyedChanged to DestroyedAgain by @rakita in #648
- perf(interpreter): improve i256 instructions by @DaniPopes in #630
- fix(state): drop storage only for DestroyedChanged by @rakita in #651
- feat(state): ability to disable reverts collection in bundle state by @rkrasiuk in #654
- feat(state): Make Bundle extend wipe aware by @rakita in #655
- chore: filter out empty bytecode from bundle by @rakita in #656
- chore(deps): bump ethers-core from 2.0.8 to 2.0.9 by @dependabot in #639
- chore(deps): bump ethers-contract from 2.0.8 to 2.0.9 by @dependabot in #640
- chore(deps): bump proptest-derive from 0.3.0 to 0.4.0 by @dependabot in #652
- chore(deps): bump serde from 1.0.185 to 1.0.188 by @dependabot in #653
- chore(deps): bump ethers-providers from 2.0.8 to 2.0.9 by @dependabot in #641
- feat(state): add a flag allowing transition merge without reverts by @rkrasiuk in #657
- fix: pairing cost formula by @kunxian-xia in #659
- fix(state): state transition regression by @rkrasiuk in #662
- feat: add BundleState::revert_latest by @mattsse in #661
- fix(state): Regresion, remove present info on selfdestruct by @rakita in #664
- chore(state): bundle retention by @rkrasiuk in #666
- fix(state): retain destroyed account status on bundle extend by @rakita in #667
- Removed the last dependencies breaking no-std build. by @lvella in #669
- chore: remove unused new_raw_with_hash by @Rjected in #676
- chore: impl Eq, PartialEq for TransitionState by @Rjected in #677
- fix: build documentation book by @rakita in #678
- fix(state): Extend now properly transfers wiped storage by @rakita in #675
- BundleBuilder for BundleState initialization by @darknight in #649
- feat(state): take N reverts from BundleState, struct refactor by @rakita in #681
- chore: nits and renamings by @rakita in #684
- chore(deps): bump enumn from 0.1.11 to 0.1.12 by @dependabot in #679
- chore(deps): bump thiserror from 1.0.47 to 1.0.48 by @dependabot in #680
- chore(state): Make Database more generic. by @rakita in #687
- feat: derive PartialEq, Eq for Env by @Rjected in #689
- feat(StateBuilder): switch builder option from without_bundle to with_bundle by @rakita in #688
- chore: expose StateDBBox by @rakita in #694
- chore: deprecate
RefDBWrapper
by @DaniPopes in #696 - fix example compile error by @wuliuqii in #695
- feat(state): bundle size hint by @rkrasiuk in #670
- feat(state): Nits, builder option and OriginalValueKnown flags by @rakita in #699
- chore: accept byte slice as input by @mattsse in #700
- chore: Small doc comment fix by @refcell in #698
CfgEnv.chain_id
should beu64
by @lorenzofero in #693- chore(deps): bump walkdir from 2.3.3 to 2.4.0 by @dependabot in #692
- chore: make
impl Default for StateBuilder
generic by @DaniPopes in #690 - chore: implement
Default
for other databases by @DaniPopes in #691 - Do not insert empty reverts in state by @lorenzofero in #702
- chore(deps): bump ethers-providers from 2.0.9 to 2.0.10 by @dependabot in #704
- chore(deps): bump ethers-contract from 2.0.9 to 2.0.10 by @dependabot in #705
- chore(deps): bump ethers-core from 2.0.9 to 2.0.10 by @dependabot in #706
- chore(deps): bump bytes from 1.4.0 to 1.5.0 by @dependabot in #707
- Run the Ethereum tests both in debug and release mode by @valo in #708
- chore: remove empty rustfmt config by @DaniPopes in #709
- feat: return wiped inside storage changeset by @rakita in #711
- Never inline the prepare functions by @valo in #712
- chore(docs): minor improvements, create separate page for
Host
trait by @Evalir in #714 - docs: add warning on panic conditions in take_bundle by @Rjected in #715
- chore(deps): bump serde_json from 1.0.105 to 1.0.106 by @dependabot in #710
- chore(
perf
): only recalc code hash if its the default by @Evalir in #716 - feat: Remove state sorting, no_std ci,remove rayon by @rakita in #717
- chore: clippy incorrect_clone_impl_on_copy_type by @rakita in #720
- feat: implement EIP-4844 by @DaniPopes in #668
- make
BundleBuilder
publicly available by @tcoratger in #729 - chore: rm nonexhaustive for error by @mattsse in #726
- chore(deps): bump c-kzg from
f5f6f86
tofbef59a
by @dependabot in #727 - fix(test): Check expect exception and revm error by @rakita in #734
- perf: refactor interpreter internals (take 2) by @DaniPopes in #582
- fix: use CANCUN precompile id for CANCUN SpecId by @Rjected in #733
- fix: dont override instruction result by @rakita in #736
- fix(eip4844): Pass eth tests, additional conditions added. by @rakita in #735
- Document when InvalidTransaction errors are thrown by @alessandromazza98 in #722
- chore(deps): bump serde_json from 1.0.106 to 1.0.107 by @dependabot in #718
- chore: error type for block header by @hack3r-0m in #731
- EIP-7516: BLOBBASEFEE opcode by @rakita in #721
- EIP-6780: SELFDESTRUCT only in same transaction by @lorenzofero in #719
- perf(interpreter): remove dynamic dispatch from all instructions by @DaniPopes in #739
- modexp gas check by @alessandromazza98 in #737
- chore(deps): bump indicatif from 0.17.6 to 0.17.7 by @dependabot in #744
- feat: add "kzg" as a separate feature by @DaniPopes in #746
- chore(deps): bump thiserror from 1.0.48 to 1.0.49 by @dependabot in #753
- chore(deps): bump sha2 from 0.10.7 to 0.10.8 by @dependabot in #752
- fix: balance check disabled by @Wodann in #751
- refactor: say "warm" instead of "hot" by @PaulRBerg in #754
- Improve wording and fix typos by @PaulRBerg in #749
- ci: concurrency for github actions by @PaulRBerg in #750
- feat: Optimism execution changes by @clabby in #682
- docs: Readme Updates by @refcell in #756
- chore: bump c-kzg to create lib by @rakita in #758
- fix: use u128 for calc data fee result by @Rjected in #757
- release: tag v25, revm v3.4.0 by @rakita in #755
New Contributors
- @adria0 made their first contribution in #488
- @perama-v made their first contribution in #497
- @teddav made their first contribution in #512
- @Sabnock01 made their first contribution in #517
- @Ethan-000 made their first contribution in #529
- @valo made their first contribution in #522
- @tungbq made their first contribution in #514
- @oblique made their first contribution in #560
- @DaniPopes made their first contribution in #570
- @BrazilRaw made their first contribution in #575
- @tynes made their first contribution in #546
- @bemevolent made their first contribution in #592
- @clabby made their first contribution in #625
- @lorenzofero made their first contribution in #573
- @tonyke-bot made their first contribution in #645
- @kunxian-xia made their first contribution in #659
- @lvella made their first contribution in #669
- @darknight made their first contribution in #649
- @wuliuqii made their first contribution in #695
- @refcell made their first contribution in #698
- @tcoratger made their first contribution in #729
- @alessandromazza98 made their first contribution in #722
- @hack3r-0m made their first contribution in #731
- @PaulRBerg made their first contribution in #754
Full Changelog: v24...v25