Skip to content

Commit ab7a739

Browse files
committed
feat: get_evm method added to network spec to make EVM implementation more generic
1 parent 14759c4 commit ab7a739

File tree

2 files changed

+9
-8
lines changed

2 files changed

+9
-8
lines changed

core/src/execution/evm.rs

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ use alloy::{
77
use eyre::{Report, Result};
88
use futures::future::join_all;
99
use revm::{
10+
db,
1011
primitives::{
1112
address, AccessListItem, AccountInfo, Address, Bytecode, Bytes, Env, ExecutionResult,
1213
ResultAndState, B256, U256,
@@ -66,20 +67,16 @@ impl<N: NetworkSpec, R: ExecutionRpc<N>> Evm<N, R> {
6667
_ = db.state.prefetch_state(tx).await;
6768

6869
let env = Box::new(self.get_env(tx, self.tag).await);
69-
let evm = Revm::builder().with_db(db).with_env(env).build();
70-
let mut ctx = evm.into_context_with_handler_cfg();
70+
let mut evm = N::get_evm(db, env);
7171

7272
let tx_res = loop {
73-
let db = ctx.context.evm.db.borrow_mut();
73+
let db = evm.db_mut();
7474
if db.state.needs_update() {
7575
db.state.update_state().await.unwrap();
7676
}
7777

78-
let mut evm = Revm::builder().with_context_with_handler_cfg(ctx).build();
7978
let res = evm.transact();
80-
ctx = evm.into_context_with_handler_cfg();
81-
82-
let db = ctx.context.evm.db.borrow_mut();
79+
let db = evm.db_mut();
8380
let needs_update = db.state.needs_update();
8481

8582
if res.is_ok() || !needs_update {

core/src/network_spec.rs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,11 @@
11
use alloy::{network::Network, rpc::types::Log};
2-
use revm::primitives::{BlockEnv, TxEnv};
2+
use revm::{
3+
primitives::{BlockEnv, Env, TxEnv},
4+
Database, Evm,
5+
};
36

47
pub trait NetworkSpec: Network {
8+
fn get_evm<DB: Database>(db: DB, env: Box<Env>) -> Evm<'static, (), DB>;
59
fn encode_receipt(receipt: &Self::ReceiptResponse) -> Vec<u8>;
610
fn is_hash_valid(block: &Self::BlockResponse) -> bool;
711
fn receipt_contains(list: &[Self::ReceiptResponse], elem: &Self::ReceiptResponse) -> bool;

0 commit comments

Comments
 (0)