Skip to content

revm v3.4.0

Compare
Choose a tag to compare
@rakita rakita released this 28 Sep 16:40
· 765 commits to main since this release
80c909d

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 to KECCAK256, this can potentially break some tracers.
  • Refactor opcodes and Interpreter dispatch loop. Better performance.
  • optimize stack usage for recursive call and create 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 generic WrapDatabaseRef.
  • 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 contains prevrandao and blob 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 and create 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 be u64 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 to fbef59a 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

Full Changelog: v24...v25