From 2507fcb631e0e788cc03c3a90c478241ee0f7dfe Mon Sep 17 00:00:00 2001 From: YairVaknin-starkware Date: Sun, 16 Feb 2025 17:55:40 +0200 Subject: [PATCH] Add_option_to_simulate_builtins --- CHANGELOG.md | 2 ++ vm/src/vm/runners/builtin_runner/ec_op.rs | 2 +- vm/src/vm/runners/builtin_runner/keccak.rs | 2 +- vm/src/vm/runners/builtin_runner/signature.rs | 2 +- vm/src/vm/vm_core.rs | 20 +++++++++++++------ 5 files changed, 19 insertions(+), 9 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 52659558fa..11b74cd7af 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,8 @@ ## Cairo-VM Changelog #### Upcoming Changes +* feat: adding option to simulate builtins [#1956](https://github.com/lambdaclass/cairo-vm/pull/1956) + * feat: adding `all_cairo_stwo` layout to vm [#1957](https://github.com/lambdaclass/cairo-vm/pull/1957) * feat: implement `Blake2s` opcode in VM [#1927](https://github.com/lambdaclass/cairo-vm/pull/1927) diff --git a/vm/src/vm/runners/builtin_runner/ec_op.rs b/vm/src/vm/runners/builtin_runner/ec_op.rs index 84b07fe2d6..f021c4615e 100644 --- a/vm/src/vm/runners/builtin_runner/ec_op.rs +++ b/vm/src/vm/runners/builtin_runner/ec_op.rs @@ -23,7 +23,7 @@ pub struct EcOpBuiltinRunner { } impl EcOpBuiltinRunner { - pub(crate) fn new(ratio: Option, included: bool) -> Self { + pub fn new(ratio: Option, included: bool) -> Self { EcOpBuiltinRunner { base: 0, ratio, diff --git a/vm/src/vm/runners/builtin_runner/keccak.rs b/vm/src/vm/runners/builtin_runner/keccak.rs index f6131935cc..7424abba2a 100644 --- a/vm/src/vm/runners/builtin_runner/keccak.rs +++ b/vm/src/vm/runners/builtin_runner/keccak.rs @@ -31,7 +31,7 @@ pub struct KeccakBuiltinRunner { } impl KeccakBuiltinRunner { - pub(crate) fn new(ratio: Option, included: bool) -> Self { + pub fn new(ratio: Option, included: bool) -> Self { KeccakBuiltinRunner { base: 0, ratio, diff --git a/vm/src/vm/runners/builtin_runner/signature.rs b/vm/src/vm/runners/builtin_runner/signature.rs index 481d867b95..c72cb7e5b8 100644 --- a/vm/src/vm/runners/builtin_runner/signature.rs +++ b/vm/src/vm/runners/builtin_runner/signature.rs @@ -41,7 +41,7 @@ pub struct SignatureBuiltinRunner { } impl SignatureBuiltinRunner { - pub(crate) fn new(ratio: Option, included: bool) -> Self { + pub fn new(ratio: Option, included: bool) -> Self { SignatureBuiltinRunner { base: 0, included, diff --git a/vm/src/vm/vm_core.rs b/vm/src/vm/vm_core.rs index d573f65088..12b8fd13dc 100644 --- a/vm/src/vm/vm_core.rs +++ b/vm/src/vm/vm_core.rs @@ -87,6 +87,7 @@ impl DeducedOperands { pub struct VirtualMachine { pub(crate) run_context: RunContext, pub builtin_runners: Vec, + pub simulated_builtin_runners: Vec, pub segments: MemorySegmentManager, pub(crate) trace: Option>, pub(crate) current_step: usize, @@ -118,6 +119,7 @@ impl VirtualMachine { VirtualMachine { run_context, builtin_runners: Vec::new(), + simulated_builtin_runners: Vec::new(), trace, current_step: 0, skip_instruction_execution: false, @@ -298,12 +300,17 @@ impl VirtualMachine { &self, address: Relocatable, ) -> Result, VirtualMachineError> { - for builtin in self.builtin_runners.iter() { - if builtin.base() as isize == address.segment_index { - match builtin.deduce_memory_cell(address, &self.segments.memory) { - Ok(maybe_reloc) => return Ok(maybe_reloc), - Err(error) => return Err(VirtualMachineError::RunnerError(error)), - }; + let memory = &self.segments.memory; + + for runner in self + .builtin_runners + .iter() + .chain(self.simulated_builtin_runners.iter()) + { + if runner.base() as isize == address.segment_index { + return runner + .deduce_memory_cell(address, memory) + .map_err(VirtualMachineError::RunnerError); } } Ok(None) @@ -1312,6 +1319,7 @@ impl VirtualMachineBuilder { VirtualMachine { run_context: self.run_context, builtin_runners: self.builtin_runners, + simulated_builtin_runners: Vec::new(), trace: self.trace, current_step: self.current_step, skip_instruction_execution: self.skip_instruction_execution,