diff --git a/evm/src/cpu/kernel/interpreter.rs b/evm/src/cpu/kernel/interpreter.rs index 2f1974b5..843f0a0d 100644 --- a/evm/src/cpu/kernel/interpreter.rs +++ b/evm/src/cpu/kernel/interpreter.rs @@ -65,30 +65,30 @@ pub fn run_interpreter( ) } -pub struct InterpreterSetup { +pub struct InterpreterMemoryInitialization { pub label: String, pub stack: Vec, pub segment: Segment, pub memory: Vec<(usize, Vec)>, } -impl InterpreterSetup { - pub fn run(self) -> anyhow::Result> { - let label = KERNEL.global_labels[&self.label]; - let mut stack = self.stack; - stack.reverse(); - let mut interpreter = Interpreter::new_with_kernel(label, stack); - for (pointer, data) in self.memory { - for (i, term) in data.iter().enumerate() { - interpreter - .generation_state - .memory - .set(MemoryAddress::new(0, self.segment, pointer + i), *term) - } +pub fn run_interpreter_with_memory( + memory_init: InterpreterMemoryInitialization, +) -> anyhow::Result> { + let label = KERNEL.global_labels[&memory_init.label]; + let mut stack = memory_init.stack; + stack.reverse(); + let mut interpreter = Interpreter::new_with_kernel(label, stack); + for (pointer, data) in memory_init.memory { + for (i, term) in data.iter().enumerate() { + interpreter.generation_state.memory.set( + MemoryAddress::new(0, memory_init.segment, pointer + i), + *term, + ) } - interpreter.run()?; - Ok(interpreter) } + interpreter.run()?; + Ok(interpreter) } pub fn run<'a>( diff --git a/evm/src/cpu/kernel/tests/hash.rs b/evm/src/cpu/kernel/tests/hash.rs index 38fd7659..e6a3d2a0 100644 --- a/evm/src/cpu/kernel/tests/hash.rs +++ b/evm/src/cpu/kernel/tests/hash.rs @@ -5,7 +5,9 @@ use rand::{thread_rng, Rng}; use ripemd::{Digest, Ripemd160}; use sha2::Sha256; -use crate::cpu::kernel::interpreter::InterpreterSetup; +use crate::cpu::kernel::interpreter::{ + run_interpreter_with_memory, InterpreterMemoryInitialization, +}; use crate::memory::segments::Segment::KernelGeneral; /// Standard Blake2b implementation. @@ -40,8 +42,8 @@ fn make_interpreter_setup( message: Vec, hash_fn_label: &str, hash_input_virt: usize, -) -> InterpreterSetup { - InterpreterSetup { +) -> InterpreterMemoryInitialization { + InterpreterMemoryInitialization { label: hash_fn_label.to_string(), stack: vec![ U256::from(hash_input_virt), @@ -75,7 +77,7 @@ fn prepare_test( let interpreter_setup = make_interpreter_setup(message, hash_fn_label, hash_input_virt); // Run the interpeter - let result = interpreter_setup.run().unwrap(); + let result = run_interpreter_with_memory(interpreter_setup).unwrap(); Ok((expected, result.stack().to_vec())) } diff --git a/evm/src/cpu/kernel/tests/test_utils.rs b/evm/src/cpu/kernel/tests/test_utils.rs deleted file mode 100644 index 0421ef4d..00000000 --- a/evm/src/cpu/kernel/tests/test_utils.rs +++ /dev/null @@ -1,35 +0,0 @@ -use std::ops::Range; - -use anyhow::Result; -use ethereum_types::U256; - -use crate::cpu::kernel::aggregator::KERNEL; -use crate::cpu::kernel::interpreter::Interpreter; -use crate::memory::segments::Segment; -use crate::witness::memory::MemoryAddress; - -pub struct InterpreterSetup { - pub label: String, - pub stack: Vec, - pub segment: Segment, - pub memory: Vec<(usize, Vec)>, -} - -impl InterpreterSetup { - pub fn run(self) -> Result> { - let label = KERNEL.global_labels[&self.label]; - let mut stack = self.stack; - stack.reverse(); - let mut interpreter = Interpreter::new_with_kernel(label, stack); - for (pointer, data) in self.memory { - for (i, term) in data.iter().enumerate() { - interpreter - .generation_state - .memory - .set(MemoryAddress::new(0, self.segment, pointer + i), *term) - } - } - interpreter.run()?; - Ok(interpreter) - } -}