From 1a7e9da827b147de663f078686e6e7e63af6b6c6 Mon Sep 17 00:00:00 2001 From: Linda Guiga Date: Mon, 29 Jul 2024 20:25:39 +0100 Subject: [PATCH 1/2] Fix jump_to --- evm_arithmetization/src/generation/state.rs | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/evm_arithmetization/src/generation/state.rs b/evm_arithmetization/src/generation/state.rs index bc1a02203..d8734a4c6 100644 --- a/evm_arithmetization/src/generation/state.rs +++ b/evm_arithmetization/src/generation/state.rs @@ -350,13 +350,16 @@ impl GenerationState { /// we're jumping to a special location. pub(crate) fn jump_to(&mut self, dst: usize) -> Result<(), ProgramError> { self.registers.program_counter = dst; - if dst == KERNEL.global_labels["observe_new_address"] { - let tip_u256 = stack_peek(self, 0)?; + if dst == KERNEL.global_labels["observe_new_address"] && self.get_registers().stack_len > 0 + { + let tip_u256 = stack_peek(self, 0).expect("There cannot be a stack underflow"); let tip_h256 = H256::from_uint(&tip_u256); let tip_h160 = H160::from(tip_h256); self.observe_address(tip_h160); - } else if dst == KERNEL.global_labels["observe_new_contract"] { - let tip_u256 = stack_peek(self, 0)?; + } else if dst == KERNEL.global_labels["observe_new_contract"] + && self.get_registers().stack_len > 0 + { + let tip_u256 = stack_peek(self, 0).expect("There cannot be a stack underflow"); let tip_h256 = H256::from_uint(&tip_u256); self.observe_contract(tip_h256)?; } From c9c12a821a6cb2ea453f28fb59464a28f0a9b62e Mon Sep 17 00:00:00 2001 From: Linda Guiga Date: Mon, 29 Jul 2024 20:42:01 +0100 Subject: [PATCH 2/2] Apply comments --- evm_arithmetization/src/generation/state.rs | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/evm_arithmetization/src/generation/state.rs b/evm_arithmetization/src/generation/state.rs index d8734a4c6..2f1258a81 100644 --- a/evm_arithmetization/src/generation/state.rs +++ b/evm_arithmetization/src/generation/state.rs @@ -350,16 +350,17 @@ impl GenerationState { /// we're jumping to a special location. pub(crate) fn jump_to(&mut self, dst: usize) -> Result<(), ProgramError> { self.registers.program_counter = dst; - if dst == KERNEL.global_labels["observe_new_address"] && self.get_registers().stack_len > 0 - { - let tip_u256 = stack_peek(self, 0).expect("There cannot be a stack underflow"); + if self.stack().is_empty() { + // We cannot observe anything as the stack is empty. + return Ok(()); + } + if dst == KERNEL.global_labels["observe_new_address"] { + let tip_u256 = stack_peek(self, 0)?; let tip_h256 = H256::from_uint(&tip_u256); let tip_h160 = H160::from(tip_h256); self.observe_address(tip_h160); - } else if dst == KERNEL.global_labels["observe_new_contract"] - && self.get_registers().stack_len > 0 - { - let tip_u256 = stack_peek(self, 0).expect("There cannot be a stack underflow"); + } else if dst == KERNEL.global_labels["observe_new_contract"] { + let tip_u256 = stack_peek(self, 0)?; let tip_h256 = H256::from_uint(&tip_u256); self.observe_contract(tip_h256)?; }