@@ -857,16 +857,19 @@ impl Backend {
857857 }
858858
859859 /// Creates an EVM instance with optionally injected precompiles.
860- fn new_evm_with_inspector_ref < DB , I > (
860+ #[ allow( clippy:: type_complexity) ]
861+ fn new_evm_with_inspector_ref < ' i , ' db > (
861862 & self ,
862- db : DB ,
863+ db : & ' db dyn DatabaseRef < Error = DatabaseError > ,
863864 env : EnvWithHandlerCfg ,
864- inspector : I ,
865- ) -> revm:: Evm < ' _ , I , WrapDatabaseRef < DB > >
866- where
867- DB : revm:: DatabaseRef ,
868- I : InspectorExt < WrapDatabaseRef < DB > > ,
869- {
865+ inspector : & ' i mut dyn InspectorExt <
866+ WrapDatabaseRef < & ' db dyn DatabaseRef < Error = DatabaseError > > ,
867+ > ,
868+ ) -> revm:: Evm <
869+ ' _ ,
870+ & ' i mut dyn InspectorExt < WrapDatabaseRef < & ' db dyn DatabaseRef < Error = DatabaseError > > > ,
871+ WrapDatabaseRef < & ' db dyn DatabaseRef < Error = DatabaseError > > ,
872+ > {
870873 let mut evm = new_evm_with_inspector_ref ( db, env, inspector) ;
871874 if let Some ( factory) = & self . precompile_factory {
872875 inject_precompiles ( & mut evm, factory. precompiles ( ) ) ;
@@ -892,7 +895,7 @@ impl Backend {
892895
893896 let db = self . db . read ( ) . await ;
894897 let mut inspector = self . build_inspector ( ) ;
895- let mut evm = self . new_evm_with_inspector_ref ( & * * db , env, & mut inspector) ;
898+ let mut evm = self . new_evm_with_inspector_ref ( db . as_dyn ( ) , env, & mut inspector) ;
896899 let ResultAndState { result, state } = evm. transact ( ) ?;
897900 let ( exit_reason, gas_used, out, logs) = match result {
898901 ExecutionResult :: Success { reason, gas_used, logs, output, .. } => {
@@ -1011,7 +1014,7 @@ impl Backend {
10111014 env. block . timestamp = U256 :: from ( self . time . next_timestamp ( ) ) ;
10121015
10131016 let executor = TransactionExecutor {
1014- db : & mut * db,
1017+ db : & mut * * db,
10151018 validator : self ,
10161019 pending : pool_transactions. into_iter ( ) ,
10171020 block_env : env. block . clone ( ) ,
@@ -1151,10 +1154,10 @@ impl Backend {
11511154 self . with_database_at ( block_request, |state, block| {
11521155 let block_number = block. number . to :: < u64 > ( ) ;
11531156 let ( exit, out, gas, state) = match overrides {
1154- None => self . call_with_state ( state, request, fee_details, block) ,
1157+ None => self . call_with_state ( state. as_dyn ( ) , request, fee_details, block) ,
11551158 Some ( overrides) => {
11561159 let state = state:: apply_state_override ( overrides. into_iter ( ) . collect ( ) , state) ?;
1157- self . call_with_state ( state, request, fee_details, block)
1160+ self . call_with_state ( state. as_dyn ( ) , request, fee_details, block)
11581161 } ,
11591162 } ?;
11601163 trace ! ( target: "backend" , "call return {:?} out: {:?} gas {} on block {}" , exit, out, gas, block_number) ;
@@ -1263,16 +1266,13 @@ impl Backend {
12631266 inspector
12641267 }
12651268
1266- pub fn call_with_state < D > (
1269+ pub fn call_with_state (
12671270 & self ,
1268- state : D ,
1271+ state : & dyn DatabaseRef < Error = DatabaseError > ,
12691272 request : WithOtherFields < TransactionRequest > ,
12701273 fee_details : FeeDetails ,
12711274 block_env : BlockEnv ,
1272- ) -> Result < ( InstructionResult , Option < Output > , u128 , State ) , BlockchainError >
1273- where
1274- D : DatabaseRef < Error = DatabaseError > ,
1275- {
1275+ ) -> Result < ( InstructionResult , Option < Output > , u128 , State ) , BlockchainError > {
12761276 let mut inspector = self . build_inspector ( ) ;
12771277
12781278 let env = self . build_call_env ( request, fee_details, block_env) ;
@@ -1319,8 +1319,11 @@ impl Backend {
13191319 ) ;
13201320
13211321 let env = self . build_call_env ( request, fee_details, block) ;
1322- let mut evm =
1323- self . new_evm_with_inspector_ref ( state, env, & mut inspector) ;
1322+ let mut evm = self . new_evm_with_inspector_ref (
1323+ state. as_dyn ( ) ,
1324+ env,
1325+ & mut inspector,
1326+ ) ;
13241327 let ResultAndState { result, state : _ } = evm. transact ( ) ?;
13251328
13261329 drop ( evm) ;
@@ -1352,7 +1355,7 @@ impl Backend {
13521355 . with_tracing_config ( TracingInspectorConfig :: from_geth_config ( & config) ) ;
13531356
13541357 let env = self . build_call_env ( request, fee_details, block) ;
1355- let mut evm = self . new_evm_with_inspector_ref ( state, env, & mut inspector) ;
1358+ let mut evm = self . new_evm_with_inspector_ref ( state. as_dyn ( ) , env, & mut inspector) ;
13561359 let ResultAndState { result, state : _ } = evm. transact ( ) ?;
13571360
13581361 let ( exit_reason, gas_used, out) = match result {
@@ -1381,16 +1384,13 @@ impl Backend {
13811384 . await ?
13821385 }
13831386
1384- pub fn build_access_list_with_state < D > (
1387+ pub fn build_access_list_with_state (
13851388 & self ,
1386- state : D ,
1389+ state : & dyn DatabaseRef < Error = DatabaseError > ,
13871390 request : WithOtherFields < TransactionRequest > ,
13881391 fee_details : FeeDetails ,
13891392 block_env : BlockEnv ,
1390- ) -> Result < ( InstructionResult , Option < Output > , u64 , AccessList ) , BlockchainError >
1391- where
1392- D : DatabaseRef < Error = DatabaseError > ,
1393- {
1393+ ) -> Result < ( InstructionResult , Option < Output > , u64 , AccessList ) , BlockchainError > {
13941394 let from = request. from . unwrap_or_default ( ) ;
13951395 let to = if let Some ( TxKind :: Call ( to) ) = request. to {
13961396 to
@@ -1911,7 +1911,7 @@ impl Backend {
19111911
19121912 let db = self . db . read ( ) . await ;
19131913 let block = self . env . read ( ) . block . clone ( ) ;
1914- Ok ( f ( Box :: new ( & * db) , block) )
1914+ Ok ( f ( Box :: new ( & * * db) , block) )
19151915 }
19161916
19171917 pub async fn storage_at (
@@ -1937,17 +1937,14 @@ impl Backend {
19371937 address : Address ,
19381938 block_request : Option < BlockRequest > ,
19391939 ) -> Result < Bytes , BlockchainError > {
1940- self . with_database_at ( block_request, |db, _| self . get_code_with_state ( db, address) ) . await ?
1940+ self . with_database_at ( block_request, |db, _| self . get_code_with_state ( & db, address) ) . await ?
19411941 }
19421942
1943- pub fn get_code_with_state < D > (
1943+ pub fn get_code_with_state (
19441944 & self ,
1945- state : D ,
1945+ state : & dyn DatabaseRef < Error = DatabaseError > ,
19461946 address : Address ,
1947- ) -> Result < Bytes , BlockchainError >
1948- where
1949- D : DatabaseRef < Error = DatabaseError > ,
1950- {
1947+ ) -> Result < Bytes , BlockchainError > {
19511948 trace ! ( target: "backend" , "get code for {:?}" , address) ;
19521949 let account = state. basic_ref ( address) ?. unwrap_or_default ( ) ;
19531950 if account. code_hash == KECCAK_EMPTY {
0 commit comments