@@ -85,99 +85,50 @@ pub trait CheatcodesExecutor {
8585 /// [revm::Inspector].
8686 fn get_inspector < ' a > ( & ' a mut self , cheats : & ' a mut Cheatcodes ) -> Box < dyn InspectorExt + ' a > ;
8787
88+ /// Obtains [revm::Evm] instance and executes the given CREATE frame.
8889 /// Obtains [revm::Evm] instance and executes the given CREATE frame.
8990 fn exec_create (
9091 & mut self ,
9192 inputs : CreateInputs ,
9293 ccx : & mut CheatsCtxt ,
9394 ) -> Result < CreateOutcome , EVMError < DatabaseError > > {
94- // /// Constructs [revm::Evm] and runs a given closure with it.
95- // fn with_evm<E, F, O>(
96- // executor: &mut E,
97- // ccx: &mut CheatsCtxt,
98- // f: F,
99- // ) -> Result<O, EVMError<DatabaseError>>
100- // where
101- // E: CheatcodesExecutor + ?Sized,
102- // F: for<'a, 'b> FnOnce(
103- // &mut revm::Evm<'_, &'b mut dyn InspectorExt, &'a mut dyn DatabaseExt>,
104- // ) -> Result<O, EVMError<DatabaseError>>,
105- // {
106- // let mut inspector = executor.get_inspector(ccx.state);
107- // let error = std::mem::replace(&mut ccx.ecx.error, Ok(()));
108- // let l1_block_info = std::mem::take(&mut ccx.ecx.l1_block_info);
109-
110- // let inner = revm::InnerEvmContext {
111- // env: ccx.ecx.env.clone(),
112- // journaled_state: std::mem::replace(
113- // &mut ccx.ecx.journaled_state,
114- // revm::JournaledState::new(Default::default(), Default::default()),
115- // ),
116- // db: &mut ccx.ecx.db as &mut dyn DatabaseExt,
117- // error,
118- // l1_block_info,
119- // };
120-
121- // let mut evm = new_evm_with_context(inner, &mut *inspector);
122-
123- // let res = f(&mut evm)?;
124-
125- // ccx.ecx.journaled_state = evm.context.evm.inner.journaled_state;
126- // ccx.ecx.env = evm.context.evm.inner.env;
127- // ccx.ecx.l1_block_info = evm.context.evm.inner.l1_block_info;
128- // ccx.ecx.error = evm.context.evm.inner.error;
129-
130- // Ok(res)
131- // }
132-
133- let mut inspector = self . get_inspector ( ccx. state ) ;
134- let error = std:: mem:: replace ( & mut ccx. ecx . error , Ok ( ( ) ) ) ;
135- // let l1_block_info = std::mem::take(&mut ccx.ecx.l1_block_info);
136-
137- // let journaled_state = std::mem::replace(
138- // &mut ccx.ecx.journaled_state,
139- // // revm::JournaledState::new(Default::default(), Default::default()),
140- // );
141-
142- let mut evm = new_evm_with_context ( ccx. ecx , & mut * inspector) ;
143-
144- // with_evm(self, ccx, |evm| {
145- evm. journaled_state . depth += 1 ;
146-
147- // Handle EOF bytecode
148- let first_frame_or_result = if evm. cfg . spec . is_enabled_in ( SpecId :: OSAKA ) &&
149- inputs. scheme == CreateScheme :: Create &&
150- inputs. init_code . starts_with ( & EOF_MAGIC_BYTES )
151- {
152- evm. execution ( ) . eofcreate (
153- & mut evm. context ,
154- Box :: new ( EOFCreateInputs :: new (
155- inputs. caller ,
156- inputs. value ,
157- inputs. gas_limit ,
158- EOFCreateKind :: Tx { initdata : inputs. init_code } ,
159- ) ) ,
160- ) ?
161- } else {
162- evm. handler . execution ( ) . create ( & mut evm. context , Box :: new ( inputs) ) ?
163- } ;
95+ with_evm ( self , ccx, |evm| {
96+ evm. context . evm . inner . journaled_state . depth += 1 ;
16497
165- let mut result = match first_frame_or_result {
166- FrameOrResult :: Item ( first_frame) => evm. run_the_loop ( first_frame) ?,
167- FrameOrResult :: Result ( result) => result,
168- } ;
98+ // Handle EOF bytecode
99+ let first_frame_or_result = if evm. handler . cfg . spec_id . is_enabled_in ( SpecId :: OSAKA ) &&
100+ inputs. scheme == CreateScheme :: Create &&
101+ inputs. init_code . starts_with ( & EOF_MAGIC_BYTES )
102+ {
103+ evm. handler . execution ( ) . eofcreate (
104+ & mut evm. context ,
105+ Box :: new ( EOFCreateInputs :: new (
106+ inputs. caller ,
107+ inputs. value ,
108+ inputs. gas_limit ,
109+ EOFCreateKind :: Tx { initdata : inputs. init_code } ,
110+ ) ) ,
111+ ) ?
112+ } else {
113+ evm. handler . execution ( ) . create ( & mut evm. context , Box :: new ( inputs) ) ?
114+ } ;
169115
170- evm. handler . execution ( ) . last_frame_return ( & mut evm. context , & mut result) ?;
116+ let mut result = match first_frame_or_result {
117+ revm:: FrameOrResult :: Frame ( first_frame) => evm. run_the_loop ( first_frame) ?,
118+ revm:: FrameOrResult :: Result ( result) => result,
119+ } ;
171120
172- let outcome = match result {
173- FrameResult :: Call ( _) => unreachable ! ( ) ,
174- FrameResult :: Create ( create) | FrameResult :: EOFCreate ( create) => create,
175- } ;
121+ evm. handler . execution ( ) . last_frame_return ( & mut evm. context , & mut result) ?;
176122
177- evm. journaled_state . depth -= 1 ;
123+ let outcome = match result {
124+ revm:: FrameResult :: Call ( _) => unreachable ! ( ) ,
125+ revm:: FrameResult :: Create ( create) | revm:: FrameResult :: EOFCreate ( create) => create,
126+ } ;
127+
128+ evm. context . evm . inner . journaled_state . depth -= 1 ;
178129
179- Ok ( outcome)
180- // })
130+ Ok ( outcome)
131+ } )
181132 }
182133
183134 fn console_log ( & mut self , ccx : & mut CheatsCtxt , msg : & str ) {
0 commit comments