-
Notifications
You must be signed in to change notification settings - Fork 771
feat(database): Implement DatabaseRef for State #2570
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
Merged
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
CodSpeed Performance ReportMerging #2570 will degrade performances by 3.4%Comparing Summary
Benchmarks breakdown
|
rakita
reviewed
Jun 3, 2025
rakita
reviewed
Jun 3, 2025
rakita
reviewed
Jun 3, 2025
rakita
approved these changes
Jun 3, 2025
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
lgtm
Closed
Merged
dmitry123
added a commit
to fluentlabs-xyz/revm-rwasm
that referenced
this pull request
Aug 9, 2025
* chore(test): preserve order of fields in json fixtures (bluealloy#2541) * feat: transact multi tx (bluealloy#2517) * chore: remove default capacity on journal reverts * wip multi tx exec support * wip * API changes * wip * fix compilation * some cleanup,introduce additional bench * cleanup and docs * fix op-revm, add transact-multi bench * bump criterion * add balance incr/decr and simplify calls to journal * add transact_multi bench * add journal entry for deduct_caller fn * cleanup * rm ResultAndState and fix tests * clippy * cheatcode example fix * rm cleanup after transact * cleaup on inner journal * cleanup on storage slot warm marking * cleanup unneded structs * fix discard bug * typo * fix benches * remove cloning of tx * rm with_capacity * clone journal * use mem::take * skip cloning * remove history entries * rm println * drain journal * bump testdata suite * use replay in bench * fix tests * cleanup and refactor, call discard_tx always * ci: remove concurrency from bench (bluealloy#2542) * feat: expand timestamp/block_number to u256 (bluealloy#2546) * chore: use sha3 by default (bluealloy#2545) * refactore: Add InstructionContext instead of Host and Interpreter (bluealloy#2548) * refac: extract `InstructionContext` for `Interpreter` and `Host` * refac: move `InstructionContext` out of main loop * refac: extract `instructions::context` mod * chore: drop redundant `Host` bound * remove additional ref to context * cleanup, remove some Host restraints * small cleanup --------- Co-authored-by: sergey-melnychuk <sergey-melnychuk@users.noreply.github.com> * feat: Config blob basefee fraction (bluealloy#2551) * feat: Config blob basefee fraction * fix test * chore: add dot to trigger ci (bluealloy#2552) * chore: simplify Interpreter loop (bluealloy#2544) * chore: check end of interpreter loop with ptr * Use Optional action * cleanup * feat: added TxEnv::new_bench() add util function (bluealloy#2556) * bench: add gas-cost-estimator selected bytecodes (bluealloy#2555) * bench: add gas-cost-estimator selected bytecodes * add gas cost estimation to codspeed bench * chore(cfg): add tx_chain_id_check fields. Optimize effective gas cost calc (bluealloy#2557) * cfg: add tx_chain_id_check fields. Optimize effective gas cost calc * cleanup logic * chore: ContextTr rm *_ref, and add *_mut fn (bluealloy#2560) * refactor: unify calling of journal account loading (bluealloy#2561) * docs: fix for eth tests in revme.md (bluealloy#2559) * docs: temporary fix for eth tests in revme.md * Update book/src/revme.md --------- Co-authored-by: rakita <rakita@users.noreply.github.com> * chore(docs): context crate lints (bluealloy#2565) * chore(docs): context crate lints * fix doc check * chore(docs): add lints to database-interface and op-revm crates (bluealloy#2568) * feat(database): Implement DatabaseRef for State (bluealloy#2570) * feat(database): Implement DatabaseRef for State * Fix clippy * Adjust to review * feat(Osaka): EIP-7825 tx limit cap (bluealloy#2575) * feat(Osaka): EIP-7825 tx limit cap * use const value * chore: Avoid clone before converting ref BundleAccount to CacheAccount (bluealloy#2574) * chore: Avoid clone before converting ref BundleAccount to CacheAccount * Bring back the none ref conversion * chore(op-revm): impl type alias for Default OpEvm (bluealloy#2576) * chore: support functions for eip7918 (bluealloy#2579) * wip blob * chore: support functions for eip7918 * deps: explicitly bump `auto_impl` (bluealloy#2583) * chore: use iter_batched for revme benches (bluealloy#2584) * fix(multitx): Add local flags for create and selfdestruct (bluealloy#2581) * fix(multitx): Add local flags for create and selfdestruct * fix tests * add test for selfdestruct * add selfdestruct crate test * fix zepter * feat: add with_caller for system_transact (bluealloy#2587) * bump: tag v75 revm v24.0.1 (bluealloy#2563) (bluealloy#2589) * refactor: unify calling of journal account loading * bump: tag v75 revm v24.0.1 * chore: release (bluealloy#2577) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> * bump: tag v76 revm v25.0.0 (bluealloy#2590) * feat(InspectEvm): add inspect_finalize method for tx+inspector with state (bluealloy#2593) * add of inspect_finalize * add comment --------- Co-authored-by: Toki <toki@MacBook-Pro-de-Toki.local> * feat: add optional priority fee check configuration (bluealloy#2588) * feat: add optional priority fee check configuration * fmt * fmt and cleanup * chore: onlyy skip priority fee check * refactor: use local variable for priority fee check disable flag * clippy * nits * feat: added instruction_result fn in LoopControl trait (bluealloy#2595) * added instruction_result fn * smol fmt * and then * default impl * feat: enable P256 in Osaka (bluealloy#2601) * feat: add basic tests for modexp (bluealloy#2603) * feat: change blob_max_count to max_blobs_per_tx (bluealloy#2608) * feat: add Inspector implementation for either::Either (bluealloy#2614) * feat: add Inspector implementation for either::Either Implements Inspector trait for either::Either<L, R> where both L and R implement Inspector. This enables conditional inspector usage where the specific inspector type can be chosen at runtime while maintaining the same interface. Changes: - Add either dependency to inspector Cargo.toml - Create either.rs with Inspector implementation that forwards all method calls to the appropriate variant (Left or Right) - Add either module to lib.rs - Include comprehensive tests verifying the Either type works correctly with the Inspector trait Closes bluealloy#2607 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com> * fix: resolve clippy warning for default_constructed_unit_structs Remove unnecessary .default() call on unit struct DummyInsp in test. 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com> * chore: run zepter --------- Co-authored-by: Claude <noreply@anthropic.com> * chore: rename `transact` methods (bluealloy#2616) * refactor: rename transact -> transact_one, transact_finalize -> transact * renames * default generic * inspect_tx * ResultAndState * fix * chore: build less stuff in codspeed ci (bluealloy#2620) * chore: make CallInput default 0..0 (bluealloy#2621) * perf: faster JumpTable bits lookup (bluealloy#2618) * perf: improve JumpTable access * use doc comment formatter * fix serialization via manual impl * fix clippy * nits - rename cached->table_ptr * chore(grammar): comments for workflows (bluealloy#2602) * Update zepter.yaml * Update release-plz.yml * feat: add clz opcode (bluealloy#2598) * feat: add clz opcode * chore: add tests for clz * fix: gate clz behind osaka Co-authored-by: rakita <rakita@users.noreply.github.com> * chore: fix count_opcodes test * fix: add special case for zero clz * fix: another special case because of default ruint leading_zeros behavior * fix: use proper specid in test * remove redundant stuff --------- Co-authored-by: rakita <rakita@users.noreply.github.com> * chore(tests): extend test for is_valid jumptable (bluealloy#2622) * ci: rm op-revm from bench (bluealloy#2624) * perf: optimize warm_preloaded_addresses reset (bluealloy#2625) * perf: optimize warm_preloaded_addresses reset * opt warm_precompiles * back to clone_from * check len == len * dbg assert eq * feat(precompile): rug/gmp-based modexp (bluealloy#2596) * feat: rug/gmp-based powmod * chore: use correct imports in gmp modexp * chore: add feature for gmp * Update README.md Co-authored-by: Dan Cline <6798349+Rjected@users.noreply.github.com> * fix: set ABI explicitly for gmp install * fix feature propagation * fix: use gmp not on i686 runners --------- Co-authored-by: rakita <dragan0rakita@gmail.com> Co-authored-by: rakita <rakita@users.noreply.github.com> * fix: change account state to None if NotExisting on insert_account_info (bluealloy#2630) * fix: change account state if NotExisting on insert_account_info * add update_info and update_account_state to DbAccount * chore: build less benchmark binaries (bluealloy#2629) * perf: store coinbase address separately to avoid cloning warm addresses in the common case (bluealloy#2634) * special case coinbase address warming * nits * fix: compare_or_save_testdata sig (bluealloy#2637) * perf: re-use frame allocation (bluealloy#2636) * wip * fix * fix: use Default instead of uninit * fix * chore: clippy * perf: try removing allocs from Default * chore: clippy * new: OutFrame abstraction over a maybe-uninit slot * perf: make SharedMemory::empty not allocate * inline * perf: do the stack thing * rename * perf: share the stack in the evm context * perf: initialize first frame the same way * rm inlines * jump_inner inline always * simplify frame init * cleanup move frame stack outside of run_exec_loop fun * cleanup inspector trait * add box around frame_stack items so we dont allocate a lot more of it * box included for no_std * unbox the init closure * WIP * move frame to evmtr * wip * clippy * fix inspection * some cleanup * cleanup * fix inspector test * cleaup, renames and moving of structs * renames --------- Co-authored-by: DaniPopes <57450786+DaniPopes@users.noreply.github.com> * chore: claud.md (bluealloy#2638) * test: bump alloydb test (bluealloy#2640) * chore: claud.md * test: bump alloydb test * chore: lints for revm-database (bluealloy#2639) * feat(osaka): modexp assume minimal base/mod length of 32 (bluealloy#2613) (bluealloy#2643) * feat: configurable contract size limit (bluealloy#2611) (bluealloy#2642) * feat: configurable contract size limit (bluealloy#2611) * feat(devnet2): double contract size limit * set double value * tests * add initcode limit of 73kb * cleanup * clippy * chore: include local context as generic (bluealloy#2645) * chore: include local context as generic * fmt * feat: remove EOF (bluealloy#2644) * feat: remove EOF * remove more of eof code * fix test * remove tracer section and fn depth * docs * inline functions * clippy doc * chore: bump all deps (bluealloy#2647) * chore: bump all deps * propagate serde * docs: lints handler inspector interpreter (bluealloy#2646) * docs: lints for revm-handler * docs: lints for interpreter and inspector * docs for instructions * fmt * Add missing documentation to interpreter crate Added comprehensive documentation to resolve all clippy missing-docs warnings: - Module documentation for instructions modules - Function documentation for all instruction implementations - Struct field documentation for Interpreter - Trait and method documentation for interpreter types - Associated type documentation - Debug implementation for EthInterpreter All 154+ clippy warnings have been resolved to achieve 0 warnings. 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com> * Fix compilation error in TracerEip3155 Debug implementation Remove references to deleted fields 'section' and 'function_depth' from the Debug implementation, matching the changes from commit 1c0d770 that removed EOF support. 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com> --------- Co-authored-by: Claude <noreply@anthropic.com> * feat: add fallible conversion from OpHaltReason to HaltReason (bluealloy#2649) * chore: lints for examples (bluealloy#2650) * chore: release (bluealloy#2641) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> * chore: bump v77 (bluealloy#2651) * fix: call stack_frame.clear() at end (bluealloy#2656) * chore: release (bluealloy#2657) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> * bump: tag v78 revm v26.0.1 (bluealloy#2658) * fix: implement `PartialEq` for `JumpTable` correctly (bluealloy#2654) * fix: implement PartialEq for JumpTable correctly * fix: implement PartialEq for JumpTable correctly * fmt * chore: fix typo (bluealloy#2660) * feat: optional_eip3541 (bluealloy#2661) * feat: optional_eip3541 * fmt * feat: implement `Transaction` for `Either` (bluealloy#2662) * feat: impl tx for either * fix bounds --------- Co-authored-by: Matthias Seitz <matthias.seitz@outlook.de> * docs: fix copy-pasted inner doc comments (bluealloy#2663) * refactor: use TxEnv::builder (bluealloy#2652) * chore: lints for examples * feat: Use TxEnv builder * wip optx builder * builder for OpTx * compile * fix parts of it * revert runner changes * fix clippy * refactor: statetest runner cleanup (bluealloy#2665) * refactor: statetest runner cleanup * move function to statetest-types * clippy * docs: inline documentation of revm top modules (bluealloy#2666) This unifies the documentation of all revm crates into the `revm` documentation. Main benefit is the searchbox of the `revm` crate actually search into all crates. * test(op/handler): verify caller account is touched by zero value transfer (bluealloy#2669) * chore: cargo clippy --fix --all (bluealloy#2671) * chore: cargo +nightly clippy --fix --all * clippy second try * clippy in tests * feat: implement Database traits for either::Either (bluealloy#2673) * feat: implement Database traits for either::Either Adds Database, DatabaseCommit, and DatabaseRef trait implementations for the either::Either type, allowing it to be used as a database abstraction that can hold one of two different database types. * zepter * feat: blake2 avx2 (bluealloy#2670) * feat: blake2 avx2 * cleanup * clippy * cleanup * clippy * runtime check * test * test * test * fix compilation * cleanup * chore: release (bluealloy#2659) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> * bump: tag v79 revm v27.0.0 (bluealloy#2680) * fix: OpTransactionBuilder dont override envelope (bluealloy#2681) * fix: OpTransactionBuilder dont override envelope * relax builder for known tx type * bump: v80 revm v27.0.1 (bluealloy#2683) * bump: v80 revm v27.0.1 * main changelog * docs: fix in pre_execution.rs about nonce bump for CREATE (bluealloy#2684) * feat: add custom precompile with journal access example (bluealloy#2677) * feat: add custom precompile with journal access example This example demonstrates how to create a custom precompile that can access and modify the journal (state). Key features: - CustomPrecompileProvider that extends EthPrecompiles - Precompile at address 0x0100 with journal access - Storage read/write operations using journal.sload/sstore - Balance transfers using journal.transfer - Proper gas accounting and error handling The example shows how to integrate custom precompiles with existing Ethereum precompiles and provides clear documentation on usage patterns. 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com> * follow up * fix: resolve compilation errors and apply clippy suggestions in custom precompile journal example - Fix Handler::mainnet() API usage by using MainnetHandler::default() - Add missing imports for ContextSetters, EVMError, and InvalidTransaction - Fix output.data() pattern matching from optional to direct access - Add proper type annotations with error type alias - Correct mutable borrowing patterns for database access - Apply clippy suggestions for inline format args - Ensure clean compilation with no warnings 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com> * style: apply cargo fmt to custom precompile journal example - Format multi-line println\! statements to single lines where appropriate - Ensure consistent code formatting across the codebase 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com> --------- Co-authored-by: Claude <noreply@anthropic.com> * docs: minor fixes (bluealloy#2686) * docs: document external state transitions for EIP-4788 and EIP-2935 (bluealloy#2678) * docs(book): document external state transitions for EIP-4788 and EIP-2935 * Update SUMMARY.md * docs: add rustdoc about external state transitions for EIP-2935 and EIP-4788 * Update system_call.rs * Update system_call.rs * Update external_state_transitions.md * chore: add PartialEq u8 (bluealloy#2688) * fix(inspector): revert pointer before calling step_end (bluealloy#2687) * fix(inspector): revert pointer before calling step_end * test that opcode will not panic * bump: tag v81 revm v27.0.1 (bluealloy#2689) * docs: fix minor typo (bluealloy#2672) * docs: bump changelog for v81 (bluealloy#2691) * fix typo: Rename is_created_globaly to is_created_globally (bluealloy#2692) * Update inner.rs * Update entry.rs * test: add comprehensive tests for TxEnvBuilder (bluealloy#2690) * test: add comprehensive tests for TxEnvBuilder Add comprehensive test coverage for TxEnvBuilder including: - Valid configurations for all transaction types (Legacy, EIP-2930, EIP-1559, EIP-4844, EIP-7702) - Error cases for missing required fields - build_fill() method auto-filling behavior - Transaction type derivation logic - Contract creation transactions - Custom transaction types - Method chaining verification Total: 24 new tests covering all build() and build_fill() scenarios 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com> * cargo fmt --------- Co-authored-by: Claude <noreply@anthropic.com> * chore: use c-kzg precompute value 8 (bluealloy#2698) * fix(Inspector): call_end not calle on first call fast return (bluealloy#2697) * chore: incorrect StorageKey and StorageValue parameter order in burntpix benchmark (bluealloy#2704) * refactor: simplify gas calculations by introducing a used() method (bluealloy#2703) * refactor: simplify gas calculations by introducing a used() method * fix(gas): update used() method to prevent underflow by using saturating_sub --------- Co-authored-by: megakabi <jakevin@megatechnology.com> * chore: release (bluealloy#2682) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> * bump: tag v82 revm v27.0.3 (bluealloy#2710) * feat(migrate-to-v82): fix fairblock address, disable cancun fork support in e2e tests --------- Co-authored-by: rakita <rakita@users.noreply.github.com> Co-authored-by: DaniPopes <57450786+DaniPopes@users.noreply.github.com> Co-authored-by: sergey-melnychuk <sergey-melnychuk@users.noreply.github.com> Co-authored-by: Ishika Choudhury <117741714+Rimeeeeee@users.noreply.github.com> Co-authored-by: Johns Gresham <johnsgresham@gmail.com> Co-authored-by: cakevm <cakevm@proton.me> Co-authored-by: 0xDmtri <0xDmtri@protonmail.com> Co-authored-by: Roman Krasiuk <rokrassyuk@gmail.com> Co-authored-by: Dan Cline <6798349+Rjected@users.noreply.github.com> Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: Toki <105550481+gitToki@users.noreply.github.com> Co-authored-by: Toki <toki@MacBook-Pro-de-Toki.local> Co-authored-by: Udoagwa Franklin <54338168+frankudoags@users.noreply.github.com> Co-authored-by: Soubhik Singha Mahapatra <160333583+Soubhik-10@users.noreply.github.com> Co-authored-by: Arsenii Kulikov <klkvrr@gmail.com> Co-authored-by: Matthias Seitz <matthias.seitz@outlook.de> Co-authored-by: Claude <noreply@anthropic.com> Co-authored-by: Samuel Onoja <samiodev@icloud.com> Co-authored-by: Coder <161350311+MamunC0der@users.noreply.github.com> Co-authored-by: rakita <dragan0rakita@gmail.com> Co-authored-by: Beta <105949605+LevBeta@users.noreply.github.com> Co-authored-by: bernard-wagner <bernard-wagner@users.noreply.github.com> Co-authored-by: Wodann <Wodann@users.noreply.github.com> Co-authored-by: Afounso Souza <drewsmpk@gmail.com> Co-authored-by: Quentin Sabah <quentin.sabah@gmail.com> Co-authored-by: Emilia Hane <elsaemiliaevahane@gmail.com> Co-authored-by: simonchen-supra <s.chen@supraoracles.com> Co-authored-by: VolodymyrBg <aqdrgg19@gmail.com> Co-authored-by: Kendra Karol Sevilla <smpkdrew@gmail.com> Co-authored-by: leopardracer <136604165+leopardracer@users.noreply.github.com> Co-authored-by: Micke <155267459+reallesee@users.noreply.github.com> Co-authored-by: jakevin <jakevingoo@gmail.com> Co-authored-by: megakabi <jakevin@megatechnology.com>
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Fixes #2566, implementing
DatabaseRef
forState
.The ref db implementation does not write to the cache, it tries to read from the cache, then optional from bundle state, and if both fails from the database. For the
storage_ref
I am not 100% sure if I got the account status check right and if bundle state is correctly used here.