pub trait Handler {
type Evm: EvmTr<Context: ContextTr<Journal: Journal<FinalOutput = (EvmState, Vec<Log>)>>>;
type Error: EvmTrError<Self::Evm>;
type Frame: Frame<Evm = Self::Evm, Error = Self::Error, FrameResult = FrameResult, FrameInit = FrameInput>;
type HaltReason: HaltReasonTr;
Show 25 methods
// Provided methods
fn run(
&mut self,
evm: &mut Self::Evm,
) -> Result<ResultAndState<Self::HaltReason>, Self::Error> { ... }
fn validate(
&self,
evm: &mut Self::Evm,
) -> Result<InitialAndFloorGas, Self::Error> { ... }
fn pre_execution(&self, evm: &mut Self::Evm) -> Result<u64, Self::Error> { ... }
fn execution(
&mut self,
evm: &mut Self::Evm,
init_and_floor_gas: &InitialAndFloorGas,
) -> Result<FrameResult, Self::Error> { ... }
fn post_execution(
&self,
evm: &mut Self::Evm,
exec_result: FrameResult,
init_and_floor_gas: InitialAndFloorGas,
eip7702_gas_refund: i64,
) -> Result<ResultAndState<Self::HaltReason>, Self::Error> { ... }
fn validate_env(&self, evm: &mut Self::Evm) -> Result<(), Self::Error> { ... }
fn validate_tx_against_state(
&self,
evm: &mut Self::Evm,
) -> Result<(), Self::Error> { ... }
fn validate_initial_tx_gas(
&self,
evm: &Self::Evm,
) -> Result<InitialAndFloorGas, Self::Error> { ... }
fn load_accounts(&self, evm: &mut Self::Evm) -> Result<(), Self::Error> { ... }
fn apply_eip7702_auth_list(
&self,
evm: &mut Self::Evm,
) -> Result<u64, Self::Error> { ... }
fn deduct_caller(&self, evm: &mut Self::Evm) -> Result<(), Self::Error> { ... }
fn create_first_frame(
&mut self,
evm: &mut Self::Evm,
gas_limit: u64,
) -> Result<FrameOrResult<Self::Frame>, Self::Error> { ... }
fn last_frame_result(
&self,
evm: &mut Self::Evm,
frame_result: &mut <Self::Frame as Frame>::FrameResult,
) -> Result<(), Self::Error> { ... }
fn frame_init_first(
&mut self,
evm: &mut Self::Evm,
frame_input: <Self::Frame as Frame>::FrameInit,
) -> Result<FrameOrResult<Self::Frame>, Self::Error> { ... }
fn frame_init(
&mut self,
frame: &Self::Frame,
evm: &mut Self::Evm,
frame_input: <Self::Frame as Frame>::FrameInit,
) -> Result<FrameOrResult<Self::Frame>, Self::Error> { ... }
fn frame_call(
&mut self,
frame: &mut Self::Frame,
evm: &mut Self::Evm,
) -> Result<FrameInitOrResult<Self::Frame>, Self::Error> { ... }
fn frame_return_result(
&mut self,
frame: &mut Self::Frame,
evm: &mut Self::Evm,
result: <Self::Frame as Frame>::FrameResult,
) -> Result<(), Self::Error> { ... }
fn run_exec_loop(
&mut self,
evm: &mut Self::Evm,
frame: Self::Frame,
) -> Result<FrameResult, Self::Error> { ... }
fn eip7623_check_gas_floor(
&self,
_evm: &mut Self::Evm,
exec_result: &mut <Self::Frame as Frame>::FrameResult,
init_and_floor_gas: InitialAndFloorGas,
) { ... }
fn refund(
&self,
evm: &mut Self::Evm,
exec_result: &mut <Self::Frame as Frame>::FrameResult,
eip7702_refund: i64,
) { ... }
fn reimburse_caller(
&self,
evm: &mut Self::Evm,
exec_result: &mut <Self::Frame as Frame>::FrameResult,
) -> Result<(), Self::Error> { ... }
fn reward_beneficiary(
&self,
evm: &mut Self::Evm,
exec_result: &mut <Self::Frame as Frame>::FrameResult,
) -> Result<(), Self::Error> { ... }
fn output(
&self,
evm: &mut Self::Evm,
result: <Self::Frame as Frame>::FrameResult,
) -> Result<ResultAndState<Self::HaltReason>, Self::Error> { ... }
fn end(
&self,
_evm: &mut Self::Evm,
end_output: Result<ResultAndState<Self::HaltReason>, Self::Error>,
) -> Result<ResultAndState<Self::HaltReason>, Self::Error> { ... }
fn clear(&self, evm: &mut Self::Evm) { ... }
}
Required Associated Types§
type Evm: EvmTr<Context: ContextTr<Journal: Journal<FinalOutput = (EvmState, Vec<Log>)>>>
type Error: EvmTrError<Self::Evm>
type Frame: Frame<Evm = Self::Evm, Error = Self::Error, FrameResult = FrameResult, FrameInit = FrameInput>
type HaltReason: HaltReasonTr
Provided Methods§
fn run( &mut self, evm: &mut Self::Evm, ) -> Result<ResultAndState<Self::HaltReason>, Self::Error>
Sourcefn validate(
&self,
evm: &mut Self::Evm,
) -> Result<InitialAndFloorGas, Self::Error>
fn validate( &self, evm: &mut Self::Evm, ) -> Result<InitialAndFloorGas, Self::Error>
Call all validation functions
Sourcefn pre_execution(&self, evm: &mut Self::Evm) -> Result<u64, Self::Error>
fn pre_execution(&self, evm: &mut Self::Evm) -> Result<u64, Self::Error>
Call all Pre execution functions.
fn execution( &mut self, evm: &mut Self::Evm, init_and_floor_gas: &InitialAndFloorGas, ) -> Result<FrameResult, Self::Error>
fn post_execution( &self, evm: &mut Self::Evm, exec_result: FrameResult, init_and_floor_gas: InitialAndFloorGas, eip7702_gas_refund: i64, ) -> Result<ResultAndState<Self::HaltReason>, Self::Error>
Sourcefn validate_tx_against_state(
&self,
evm: &mut Self::Evm,
) -> Result<(), Self::Error>
fn validate_tx_against_state( &self, evm: &mut Self::Evm, ) -> Result<(), Self::Error>
Validate transactions against state.
Sourcefn validate_initial_tx_gas(
&self,
evm: &Self::Evm,
) -> Result<InitialAndFloorGas, Self::Error>
fn validate_initial_tx_gas( &self, evm: &Self::Evm, ) -> Result<InitialAndFloorGas, Self::Error>
Validate initial gas.
fn load_accounts(&self, evm: &mut Self::Evm) -> Result<(), Self::Error>
fn apply_eip7702_auth_list( &self, evm: &mut Self::Evm, ) -> Result<u64, Self::Error>
fn deduct_caller(&self, evm: &mut Self::Evm) -> Result<(), Self::Error>
fn create_first_frame( &mut self, evm: &mut Self::Evm, gas_limit: u64, ) -> Result<FrameOrResult<Self::Frame>, Self::Error>
fn last_frame_result( &self, evm: &mut Self::Evm, frame_result: &mut <Self::Frame as Frame>::FrameResult, ) -> Result<(), Self::Error>
fn frame_init_first( &mut self, evm: &mut Self::Evm, frame_input: <Self::Frame as Frame>::FrameInit, ) -> Result<FrameOrResult<Self::Frame>, Self::Error>
fn frame_init( &mut self, frame: &Self::Frame, evm: &mut Self::Evm, frame_input: <Self::Frame as Frame>::FrameInit, ) -> Result<FrameOrResult<Self::Frame>, Self::Error>
fn frame_call( &mut self, frame: &mut Self::Frame, evm: &mut Self::Evm, ) -> Result<FrameInitOrResult<Self::Frame>, Self::Error>
fn frame_return_result( &mut self, frame: &mut Self::Frame, evm: &mut Self::Evm, result: <Self::Frame as Frame>::FrameResult, ) -> Result<(), Self::Error>
fn run_exec_loop( &mut self, evm: &mut Self::Evm, frame: Self::Frame, ) -> Result<FrameResult, Self::Error>
Sourcefn eip7623_check_gas_floor(
&self,
_evm: &mut Self::Evm,
exec_result: &mut <Self::Frame as Frame>::FrameResult,
init_and_floor_gas: InitialAndFloorGas,
)
fn eip7623_check_gas_floor( &self, _evm: &mut Self::Evm, exec_result: &mut <Self::Frame as Frame>::FrameResult, init_and_floor_gas: InitialAndFloorGas, )
Calculate final refund.
Sourcefn refund(
&self,
evm: &mut Self::Evm,
exec_result: &mut <Self::Frame as Frame>::FrameResult,
eip7702_refund: i64,
)
fn refund( &self, evm: &mut Self::Evm, exec_result: &mut <Self::Frame as Frame>::FrameResult, eip7702_refund: i64, )
Calculate final refund.
Sourcefn reimburse_caller(
&self,
evm: &mut Self::Evm,
exec_result: &mut <Self::Frame as Frame>::FrameResult,
) -> Result<(), Self::Error>
fn reimburse_caller( &self, evm: &mut Self::Evm, exec_result: &mut <Self::Frame as Frame>::FrameResult, ) -> Result<(), Self::Error>
Reimburse the caller with balance it didn’t spent.
Sourcefn reward_beneficiary(
&self,
evm: &mut Self::Evm,
exec_result: &mut <Self::Frame as Frame>::FrameResult,
) -> Result<(), Self::Error>
fn reward_beneficiary( &self, evm: &mut Self::Evm, exec_result: &mut <Self::Frame as Frame>::FrameResult, ) -> Result<(), Self::Error>
Reward beneficiary with transaction rewards.
Sourcefn output(
&self,
evm: &mut Self::Evm,
result: <Self::Frame as Frame>::FrameResult,
) -> Result<ResultAndState<Self::HaltReason>, Self::Error>
fn output( &self, evm: &mut Self::Evm, result: <Self::Frame as Frame>::FrameResult, ) -> Result<ResultAndState<Self::HaltReason>, Self::Error>
Main return handle, takes state from journal and transforms internal result to output.
Sourcefn end(
&self,
_evm: &mut Self::Evm,
end_output: Result<ResultAndState<Self::HaltReason>, Self::Error>,
) -> Result<ResultAndState<Self::HaltReason>, Self::Error>
fn end( &self, _evm: &mut Self::Evm, end_output: Result<ResultAndState<Self::HaltReason>, Self::Error>, ) -> Result<ResultAndState<Self::HaltReason>, Self::Error>
Called when execution ends.
End handle in comparison to output handle will be called every time after execution.
While output will be omitted in case of the error.