Skip to content

feat(anvil): op support revm 21 #10407

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 12 commits into from
Apr 29, 2025

Conversation

yash-atreya
Copy link
Member

@yash-atreya yash-atreya commented Apr 29, 2025

Motivation

Adds OP Support to anvil using revm 21

To be merged into #10361

Solution

  • Introduce EitherEvm which is an enum with EthEvm and OpEvm as its variants
  • Impl alloy_evm::Evm for EitherEvm which delegates the transact request to the correct EVM depending on whether --optimism has been enabled
  • impl Evm works over vanilla eth TxEnv but the transact results are mapped to OpHaltReason and EVMError<DBError, OpTransactionError>. Opted for OP result and error types as they are supersets of the eth types.

PR Checklist

  • Added Tests
  • Added Documentation
  • Breaking changes

@yash-atreya yash-atreya changed the title Yash/op support anvil revm feat(anvil): op support revm 21 Apr 29, 2025
@yash-atreya yash-atreya mentioned this pull request Apr 29, 2025
11 tasks
@yash-atreya yash-atreya marked this pull request as ready for review April 29, 2025 08:02
@yash-atreya yash-atreya merged commit 1afa5a2 into yash/anvil-revm-21 Apr 29, 2025
7 of 22 checks passed
@yash-atreya yash-atreya deleted the yash/op-support-anvil-revm branch April 29, 2025 08:05
@github-project-automation github-project-automation bot moved this to Done in Foundry Apr 29, 2025
yash-atreya added a commit that referenced this pull request Apr 29, 2025
* downgrade op-revm to 2.0.0 to resolve dep conflict

* op-revm 3.0 uses revm 22

* add `as_mut_dyn` to trait `MaybeFullDatabase` as we now require mut db_ref access (

* Revert "add `as_mut_dyn` to trait `MaybeFullDatabase` as we now require mut db_ref access ("

This reverts commit 84d11f1.

* fix: Inspector should be generic over CTX not DB

* fixes helpers: new_evm_with_inspector_* to use CTX generic

* fix: pass TxEnv to evm.transact

* fix: inspector inference in TransactionExecutor and build_access_list_with_state

* workaround: dup LogCollector to use with AnvilEvmContext

* coz FoundryEvmContext is not generic over DB, instead hardoded to dyn DatabaseExt

* fix tests

* fix traces test

* fix: use default kzg settings in blob validation

* reintroduce OptimismHardfork

* fix: disable nonce check if nonce is None

* fix!: load state tests by addressing breaking changes in state files

* BlockEnv Breaking change:
- most fields now use `u64` instead of `U64` / `U256`
- coinbase renamed to beneficiary
- best_block_number is `u64`, prev `U64`

* fix: access_list test by using evm.inspect_with_tx

* fix: replace evm.transact with evm.inspect_with_tx

* fix: make impl Inspector for AnvilInspector generic over CTX

* fix: clone inspector in TransactionExecutor to enable evm.inspect_commit

* fix: remove cloned inspector from TransactionExecutor

* feat(`anvil`): op support revm 21 (#10407)

* enable OpHardforks in NodeConfig

* feat: add is_optimism flag to foundry_evm::Env

* feat(`anvil`): set is_optimism in Backend

* feat(`anvil`): introducing EvmContext enum holding Eth and Op variants.

* adds OpEnv to foundry_evm_core

* feat: EitherEvm

* impl Evm for EitherEvm

* integrate EitherEvm into RPC and executor

*Map OpHaltReason and OpTransactionError

* rm old evm helpers

* feat(`foundry_evm`): add deposit tx parts field to Env

* fix(`anvil`): set deposit tx parts in tx executor and backend.inspect_tx

* nit

* docs EitherEvm

* nit

* refac: return TxEnv and Deposit parts separately

* nits

* nit

* make anvil result aliases more generic

* nit
@yash-atreya yash-atreya self-assigned this Apr 29, 2025
@grandizzy grandizzy moved this from Done to Completed in Foundry Apr 29, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
Status: Completed
Development

Successfully merging this pull request may close these issues.

1 participant