diff --git a/core/lib/multivm/src/versions/era_vm/hook.rs b/core/lib/multivm/src/versions/era_vm/hook.rs index cf7e78deb21..39cf3267df6 100644 --- a/core/lib/multivm/src/versions/era_vm/hook.rs +++ b/core/lib/multivm/src/versions/era_vm/hook.rs @@ -1,6 +1,6 @@ #[derive(Debug)] -pub(crate) enum Hook { +pub enum Hook { AccountValidationEntered, PaymasterValidationEntered, AccountValidationExited, diff --git a/core/lib/multivm/src/versions/era_vm/tracers/traits.rs b/core/lib/multivm/src/versions/era_vm/tracers/traits.rs index cca5b5af618..2d8650f81c3 100644 --- a/core/lib/multivm/src/versions/era_vm/tracers/traits.rs +++ b/core/lib/multivm/src/versions/era_vm/tracers/traits.rs @@ -1,10 +1,14 @@ pub use era_vm::tracers::tracer::Tracer; use zksync_state::ReadStorage; +use zksync_types::U256; +use crate::era_vm::hook::Hook; pub use crate::{era_vm::vm::Vm, vm_latest::ExecutionResult}; pub trait VmTracer: Tracer { fn before_bootloader_execution(&mut self, _state: &mut Vm) {} fn after_bootloader_execution(&mut self, _state: &mut Vm, _stop_reason: ExecutionResult) {} + + fn bootloader_hook_call(&mut self, _state: &mut Vm, _hook: Hook, _hook_params: &[U256; 3]) {} } diff --git a/core/lib/multivm/src/versions/era_vm/vm.rs b/core/lib/multivm/src/versions/era_vm/vm.rs index 2c590797720..101f778f882 100644 --- a/core/lib/multivm/src/versions/era_vm/vm.rs +++ b/core/lib/multivm/src/versions/era_vm/vm.rs @@ -219,6 +219,8 @@ impl Vm { } }; + tracer.bootloader_hook_call(self, Hook::from_u32(result), &self.get_hook_params()); + match Hook::from_u32(result) { Hook::PaymasterValidationEntered => { // unused @@ -372,15 +374,6 @@ impl Vm { (stop_reason, refunds) } - fn get_vm_hook_params(&self, heap: &era_vm::execution::Heap) -> Vec { - (get_vm_hook_start_position_latest()..get_vm_hook_start_position_latest() + 2) - .map(|word| { - let res = heap.read((word * 32) as u32); - res - }) - .collect() - } - pub(crate) fn insert_bytecodes<'a>(&mut self, bytecodes: impl IntoIterator) { for code in bytecodes { let mut program_code = vec![];