From 4526712500b677820344a8f74b240247cc872d71 Mon Sep 17 00:00:00 2001 From: Federica Date: Wed, 10 Apr 2024 17:43:06 -0300 Subject: [PATCH 01/22] Reduce BitwiseInstanceDef --- .../bitwise_instance_def.rs | 20 +---- vm/src/vm/runners/builtin_runner/bitwise.rs | 75 ++++++------------- vm/src/vm/runners/cairo_runner.rs | 12 +-- 3 files changed, 33 insertions(+), 74 deletions(-) diff --git a/vm/src/types/instance_definitions/bitwise_instance_def.rs b/vm/src/types/instance_definitions/bitwise_instance_def.rs index e59c219fd3..826f848e48 100644 --- a/vm/src/types/instance_definitions/bitwise_instance_def.rs +++ b/vm/src/types/instance_definitions/bitwise_instance_def.rs @@ -2,34 +2,20 @@ use serde::Serialize; pub(crate) const CELLS_PER_BITWISE: u32 = 5; pub(crate) const INPUT_CELLS_PER_BITWISE: u32 = 2; +pub(crate) const TOTAL_N_BITS: u32 = 251; #[derive(Serialize, Clone, Debug, PartialEq)] pub(crate) struct BitwiseInstanceDef { pub(crate) ratio: Option, - pub(crate) total_n_bits: u32, } impl BitwiseInstanceDef { pub(crate) fn default() -> Self { - BitwiseInstanceDef { - ratio: Some(256), - total_n_bits: 251, - } + BitwiseInstanceDef { ratio: Some(256) } } pub(crate) fn new(ratio: Option) -> Self { - BitwiseInstanceDef { - ratio, - total_n_bits: 251, - } - } - - pub(crate) fn _cells_per_builtin(&self) -> u32 { - CELLS_PER_BITWISE - } - - pub(crate) fn _range_check_units_per_builtin(&self) -> u32 { - 0 + BitwiseInstanceDef { ratio } } } diff --git a/vm/src/vm/runners/builtin_runner/bitwise.rs b/vm/src/vm/runners/builtin_runner/bitwise.rs index 2a049690a2..aca617f58a 100644 --- a/vm/src/vm/runners/builtin_runner/bitwise.rs +++ b/vm/src/vm/runners/builtin_runner/bitwise.rs @@ -4,7 +4,7 @@ use crate::Felt252; use crate::{ types::{ instance_definitions::bitwise_instance_def::{ - BitwiseInstanceDef, CELLS_PER_BITWISE, INPUT_CELLS_PER_BITWISE, + CELLS_PER_BITWISE, INPUT_CELLS_PER_BITWISE, TOTAL_N_BITS, }, relocatable::{MaybeRelocatable, Relocatable}, }, @@ -21,20 +21,18 @@ pub struct BitwiseBuiltinRunner { pub base: usize, pub(crate) cells_per_instance: u32, pub(crate) n_input_cells: u32, - bitwise_builtin: BitwiseInstanceDef, pub(crate) stop_ptr: Option, pub(crate) included: bool, pub(crate) instances_per_component: u32, } impl BitwiseBuiltinRunner { - pub(crate) fn new(instance_def: &BitwiseInstanceDef, included: bool) -> Self { + pub(crate) fn new(ratio: Option, included: bool) -> Self { BitwiseBuiltinRunner { base: 0, - ratio: instance_def.ratio, + ratio: ratio, cells_per_instance: CELLS_PER_BITWISE, n_input_cells: INPUT_CELLS_PER_BITWISE, - bitwise_builtin: instance_def.clone(), stop_ptr: None, included, instances_per_component: 1, @@ -86,7 +84,7 @@ impl BitwiseBuiltinRunner { if limbs[3] & LEADING_BITS != 0 { return Err(RunnerError::IntegerBiggerThanPowerOfTwo(Box::new(( x_addr, - self.bitwise_builtin.total_n_bits, + TOTAL_N_BITS, *x, )))); } @@ -124,7 +122,7 @@ impl BitwiseBuiltinRunner { } pub fn get_used_diluted_check_units(&self, diluted_spacing: u32, diluted_n_bits: u32) -> usize { - let total_n_bits = self.bitwise_builtin.total_n_bits; + let total_n_bits = TOTAL_N_BITS; let mut partition = Vec::with_capacity(total_n_bits as usize); for i in (0..total_n_bits).step_by((diluted_spacing * diluted_n_bits) as usize) { for j in 0..diluted_spacing { @@ -194,7 +192,7 @@ mod tests { #[test] #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] fn get_used_instances() { - let builtin = BitwiseBuiltinRunner::new(&BitwiseInstanceDef::new(Some(10)), true); + let builtin = BitwiseBuiltinRunner::new(Some(10), true); let mut vm = vm!(); @@ -213,8 +211,7 @@ mod tests { #[test] #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] fn final_stack() { - let mut builtin: BuiltinRunner = - BitwiseBuiltinRunner::new(&BitwiseInstanceDef::new(Some(10)), true).into(); + let mut builtin: BuiltinRunner = BitwiseBuiltinRunner::new(Some(10), true).into(); let mut vm = vm!(); @@ -238,8 +235,7 @@ mod tests { #[test] #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] fn final_stack_error_stop_pointer() { - let mut builtin: BuiltinRunner = - BitwiseBuiltinRunner::new(&BitwiseInstanceDef::new(Some(10)), true).into(); + let mut builtin: BuiltinRunner = BitwiseBuiltinRunner::new(Some(10), true).into(); let mut vm = vm!(); @@ -267,8 +263,7 @@ mod tests { #[test] #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] fn final_stack_error_when_notincluded() { - let mut builtin: BuiltinRunner = - BitwiseBuiltinRunner::new(&BitwiseInstanceDef::new(Some(10)), false).into(); + let mut builtin: BuiltinRunner = BitwiseBuiltinRunner::new(Some(10), false).into(); let mut vm = vm!(); @@ -292,8 +287,7 @@ mod tests { #[test] #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] fn final_stack_error_non_relocatable() { - let mut builtin: BuiltinRunner = - BitwiseBuiltinRunner::new(&BitwiseInstanceDef::new(Some(10)), true).into(); + let mut builtin: BuiltinRunner = BitwiseBuiltinRunner::new(Some(10), true).into(); let mut vm = vm!(); @@ -317,8 +311,7 @@ mod tests { #[test] #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] fn get_used_cells_and_allocated_size_test() { - let builtin: BuiltinRunner = - BitwiseBuiltinRunner::new(&BitwiseInstanceDef::new(Some(10)), true).into(); + let builtin: BuiltinRunner = BitwiseBuiltinRunner::new(Some(10), true).into(); let mut vm = vm!(); @@ -364,8 +357,7 @@ mod tests { #[test] #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] fn get_allocated_memory_units() { - let builtin: BuiltinRunner = - BitwiseBuiltinRunner::new(&BitwiseInstanceDef::new(Some(10)), true).into(); + let builtin: BuiltinRunner = BitwiseBuiltinRunner::new(Some(10), true).into(); let mut vm = vm!(); @@ -410,7 +402,7 @@ mod tests { #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] fn deduce_memory_cell_bitwise_for_preset_memory_valid_and() { let memory = memory![((0, 5), 10), ((0, 6), 12), ((0, 7), 0)]; - let builtin = BitwiseBuiltinRunner::new(&BitwiseInstanceDef::default(), true); + let builtin = BitwiseBuiltinRunner::new(Some(256), true); let result = builtin.deduce_memory_cell(Relocatable::from((0, 7)), &memory); assert_eq!(result, Ok(Some(MaybeRelocatable::from(Felt252::from(8))))); } @@ -419,7 +411,7 @@ mod tests { #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] fn deduce_memory_cell_bitwise_for_preset_memory_valid_xor() { let memory = memory![((0, 5), 10), ((0, 6), 12), ((0, 8), 0)]; - let builtin = BitwiseBuiltinRunner::new(&BitwiseInstanceDef::default(), true); + let builtin = BitwiseBuiltinRunner::new(Some(256), true); let result = builtin.deduce_memory_cell(Relocatable::from((0, 8)), &memory); assert_eq!(result, Ok(Some(MaybeRelocatable::from(Felt252::from(6))))); } @@ -428,7 +420,7 @@ mod tests { #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] fn deduce_memory_cell_bitwise_for_preset_memory_valid_or() { let memory = memory![((0, 5), 10), ((0, 6), 12), ((0, 9), 0)]; - let builtin = BitwiseBuiltinRunner::new(&BitwiseInstanceDef::default(), true); + let builtin = BitwiseBuiltinRunner::new(Some(256), true); let result = builtin.deduce_memory_cell(Relocatable::from((0, 9)), &memory); assert_eq!(result, Ok(Some(MaybeRelocatable::from(Felt252::from(14))))); } @@ -437,7 +429,7 @@ mod tests { #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] fn deduce_memory_cell_bitwise_for_preset_memory_incorrect_offset() { let memory = memory![((0, 3), 10), ((0, 4), 12), ((0, 5), 0)]; - let builtin = BitwiseBuiltinRunner::new(&BitwiseInstanceDef::default(), true); + let builtin = BitwiseBuiltinRunner::new(Some(256), true); let result = builtin.deduce_memory_cell(Relocatable::from((0, 5)), &memory); assert_eq!(result, Ok(None)); } @@ -446,7 +438,7 @@ mod tests { #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] fn deduce_memory_cell_bitwise_for_preset_memory_no_values_to_operate() { let memory = memory![((0, 5), 12), ((0, 7), 0)]; - let builtin = BitwiseBuiltinRunner::new(&BitwiseInstanceDef::default(), true); + let builtin = BitwiseBuiltinRunner::new(Some(256), true); let result = builtin.deduce_memory_cell(Relocatable::from((0, 5)), &memory); assert_eq!(result, Ok(None)); } @@ -454,10 +446,7 @@ mod tests { #[test] #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] fn get_used_cells_missing_segment_used_sizes() { - let builtin = BuiltinRunner::Bitwise(BitwiseBuiltinRunner::new( - &BitwiseInstanceDef::default(), - true, - )); + let builtin = BuiltinRunner::Bitwise(BitwiseBuiltinRunner::new(Some(256), true)); let vm = vm!(); assert_eq!( @@ -469,10 +458,7 @@ mod tests { #[test] #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] fn get_used_cells_empty() { - let builtin = BuiltinRunner::Bitwise(BitwiseBuiltinRunner::new( - &BitwiseInstanceDef::default(), - true, - )); + let builtin = BuiltinRunner::Bitwise(BitwiseBuiltinRunner::new(Some(256), true)); let mut vm = vm!(); vm.segments.segment_used_sizes = Some(vec![0]); @@ -482,10 +468,7 @@ mod tests { #[test] #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] fn get_used_cells() { - let builtin = BuiltinRunner::Bitwise(BitwiseBuiltinRunner::new( - &BitwiseInstanceDef::default(), - true, - )); + let builtin = BuiltinRunner::Bitwise(BitwiseBuiltinRunner::new(Some(256), true)); let mut vm = vm!(); vm.segments.segment_used_sizes = Some(vec![4]); @@ -495,38 +478,28 @@ mod tests { #[test] #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] fn get_used_diluted_check_units_a() { - let builtin = BuiltinRunner::Bitwise(BitwiseBuiltinRunner::new( - &BitwiseInstanceDef::default(), - true, - )); + let builtin = BuiltinRunner::Bitwise(BitwiseBuiltinRunner::new(Some(256), true)); assert_eq!(builtin.get_used_diluted_check_units(12, 2), 535); } #[test] #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] fn get_used_diluted_check_units_b() { - let builtin = BuiltinRunner::Bitwise(BitwiseBuiltinRunner::new( - &BitwiseInstanceDef::default(), - true, - )); + let builtin = BuiltinRunner::Bitwise(BitwiseBuiltinRunner::new(Some(256), true)); assert_eq!(builtin.get_used_diluted_check_units(30, 56), 150); } #[test] #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] fn get_used_diluted_check_units_c() { - let builtin = BuiltinRunner::Bitwise(BitwiseBuiltinRunner::new( - &BitwiseInstanceDef::default(), - true, - )); + let builtin = BuiltinRunner::Bitwise(BitwiseBuiltinRunner::new(Some(256), true)); assert_eq!(builtin.get_used_diluted_check_units(50, 25), 250); } #[test] #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] fn get_air_private_input() { - let builtin: BuiltinRunner = - BitwiseBuiltinRunner::new(&BitwiseInstanceDef::default(), true).into(); + let builtin: BuiltinRunner = BitwiseBuiltinRunner::new(Some(256), true).into(); let segments = segments![ ((0, 0), 0), diff --git a/vm/src/vm/runners/cairo_runner.rs b/vm/src/vm/runners/cairo_runner.rs index 914f0e32c5..97400ed46d 100644 --- a/vm/src/vm/runners/cairo_runner.rs +++ b/vm/src/vm/runners/cairo_runner.rs @@ -23,8 +23,7 @@ use crate::{ errors::{math_errors::MathError, program_errors::ProgramError}, exec_scope::ExecutionScopes, instance_definitions::{ - bitwise_instance_def::BitwiseInstanceDef, ec_op_instance_def::EcOpInstanceDef, - ecdsa_instance_def::EcdsaInstanceDef, + ec_op_instance_def::EcOpInstanceDef, ecdsa_instance_def::EcdsaInstanceDef, }, layout::CairoLayout, program::Program, @@ -310,7 +309,8 @@ impl CairoRunner { if let Some(instance_def) = self.layout.builtins.bitwise.as_ref() { let included = program_builtins.remove(&BuiltinName::bitwise); if included || self.is_proof_mode() { - builtin_runners.push(BitwiseBuiltinRunner::new(instance_def, included).into()); + builtin_runners + .push(BitwiseBuiltinRunner::new(instance_def.ratio, included).into()); } } @@ -409,9 +409,9 @@ impl CairoRunner { BuiltinName::ecdsa => vm.builtin_runners.push( SignatureBuiltinRunner::new(&EcdsaInstanceDef::new(Some(1)), true).into(), ), - BuiltinName::bitwise => vm.builtin_runners.push( - BitwiseBuiltinRunner::new(&BitwiseInstanceDef::new(Some(1)), true).into(), - ), + BuiltinName::bitwise => vm + .builtin_runners + .push(BitwiseBuiltinRunner::new(Some(1), true).into()), BuiltinName::ec_op => vm .builtin_runners .push(EcOpBuiltinRunner::new(&EcOpInstanceDef::new(Some(1)), true).into()), From f57b1b731d6ff4a004c014e6ea02a1c5103daadf Mon Sep 17 00:00:00 2001 From: Federica Date: Wed, 10 Apr 2024 17:46:07 -0300 Subject: [PATCH 02/22] Cleanup module --- .../bitwise_instance_def.rs | 30 ++++--------------- vm/src/vm/runners/cairo_runner.rs | 6 ++-- 2 files changed, 8 insertions(+), 28 deletions(-) diff --git a/vm/src/types/instance_definitions/bitwise_instance_def.rs b/vm/src/types/instance_definitions/bitwise_instance_def.rs index 826f848e48..f5e3ce4354 100644 --- a/vm/src/types/instance_definitions/bitwise_instance_def.rs +++ b/vm/src/types/instance_definitions/bitwise_instance_def.rs @@ -9,11 +9,13 @@ pub(crate) struct BitwiseInstanceDef { pub(crate) ratio: Option, } -impl BitwiseInstanceDef { - pub(crate) fn default() -> Self { +impl Default for BitwiseInstanceDef { + fn default() -> Self { BitwiseInstanceDef { ratio: Some(256) } } +} +impl BitwiseInstanceDef { pub(crate) fn new(ratio: Option) -> Self { BitwiseInstanceDef { ratio } } @@ -26,37 +28,17 @@ mod tests { #[cfg(target_arch = "wasm32")] use wasm_bindgen_test::*; - #[test] - #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] - fn get_range_check_units_per_builtin() { - let builtin_instance = BitwiseInstanceDef::default(); - assert_eq!(builtin_instance._range_check_units_per_builtin(), 0); - } - - #[test] - #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] - fn get_cells_per_builtin() { - let builtin_instance = BitwiseInstanceDef::default(); - assert_eq!(builtin_instance._cells_per_builtin(), 5); - } - #[test] #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] fn test_new() { - let builtin_instance = BitwiseInstanceDef { - ratio: Some(8), - total_n_bits: 251, - }; + let builtin_instance = BitwiseInstanceDef { ratio: Some(8) }; assert_eq!(BitwiseInstanceDef::new(Some(8)), builtin_instance); } #[test] #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] fn test_default() { - let builtin_instance = BitwiseInstanceDef { - ratio: Some(256), - total_n_bits: 251, - }; + let builtin_instance = BitwiseInstanceDef { ratio: Some(256) }; assert_eq!(BitwiseInstanceDef::default(), builtin_instance); } } diff --git a/vm/src/vm/runners/cairo_runner.rs b/vm/src/vm/runners/cairo_runner.rs index 97400ed46d..cea4564672 100644 --- a/vm/src/vm/runners/cairo_runner.rs +++ b/vm/src/vm/runners/cairo_runner.rs @@ -1574,7 +1574,6 @@ mod tests { hint_processor::builtin_hint_processor::builtin_hint_processor_definition::BuiltinHintProcessor, relocatable, serde::deserialize_program::{Identifier, ReferenceManager}, - types::instance_definitions::bitwise_instance_def::BitwiseInstanceDef, utils::test_utils::*, vm::trace::trace_entry::TraceEntry, }; @@ -3724,8 +3723,7 @@ mod tests { let mut vm = vm!(); vm.current_step = 8192; - vm.builtin_runners = - vec![BitwiseBuiltinRunner::new(&BitwiseInstanceDef::default(), true).into()]; + vm.builtin_runners = vec![BitwiseBuiltinRunner::new(Some(256), true).into()]; assert_matches!(cairo_runner.check_diluted_check_usage(&vm), Ok(())); } @@ -4793,7 +4791,7 @@ mod tests { cairo_runner.segments_finalized = false; let mut vm = vm!(); let output_builtin = OutputBuiltinRunner::new(true); - let bitwise_builtin = BitwiseBuiltinRunner::new(&BitwiseInstanceDef::default(), true); + let bitwise_builtin = BitwiseBuiltinRunner::new(Some(256), true); vm.builtin_runners.push(output_builtin.into()); vm.builtin_runners.push(bitwise_builtin.into()); cairo_runner.initialize_segments(&mut vm, None); From e15779bb145a64387371dafc4d8a4ca308ab14e6 Mon Sep 17 00:00:00 2001 From: Federica Date: Wed, 10 Apr 2024 17:48:23 -0300 Subject: [PATCH 03/22] Fixes --- .../range_check_instance_def.rs | 6 +- vm/src/vm/runners/builtin_runner/mod.rs | 73 +++++-------------- 2 files changed, 23 insertions(+), 56 deletions(-) diff --git a/vm/src/types/instance_definitions/range_check_instance_def.rs b/vm/src/types/instance_definitions/range_check_instance_def.rs index de9fa51da3..4524fca9bb 100644 --- a/vm/src/types/instance_definitions/range_check_instance_def.rs +++ b/vm/src/types/instance_definitions/range_check_instance_def.rs @@ -6,11 +6,13 @@ pub(crate) struct RangeCheckInstanceDef { pub(crate) ratio: Option, } -impl RangeCheckInstanceDef { - pub(crate) fn default() -> Self { +impl Default for RangeCheckInstanceDef { + fn default() -> Self { RangeCheckInstanceDef { ratio: Some(8) } } +} +impl RangeCheckInstanceDef { pub(crate) fn new(ratio: Option) -> Self { RangeCheckInstanceDef { ratio } } diff --git a/vm/src/vm/runners/builtin_runner/mod.rs b/vm/src/vm/runners/builtin_runner/mod.rs index e8f2e9502e..0058de1821 100644 --- a/vm/src/vm/runners/builtin_runner/mod.rs +++ b/vm/src/vm/runners/builtin_runner/mod.rs @@ -642,10 +642,7 @@ mod tests { use crate::vm::errors::memory_errors::InsufficientAllocatedCellsError; use crate::vm::runners::cairo_runner::CairoRunner; use crate::{ - types::instance_definitions::{ - bitwise_instance_def::BitwiseInstanceDef, ec_op_instance_def::EcOpInstanceDef, - }, - utils::test_utils::*, + types::instance_definitions::ec_op_instance_def::EcOpInstanceDef, utils::test_utils::*, vm::vm_core::VirtualMachine, }; use assert_matches::assert_matches; @@ -656,7 +653,7 @@ mod tests { #[test] #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] fn get_n_input_cells_bitwise() { - let bitwise = BitwiseBuiltinRunner::new(&BitwiseInstanceDef::new(Some(10)), true); + let bitwise = BitwiseBuiltinRunner::new(Some(10), true); let builtin: BuiltinRunner = bitwise.clone().into(); assert_eq!(bitwise.n_input_cells, builtin.n_input_cells()) } @@ -704,7 +701,7 @@ mod tests { #[test] #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] fn get_cells_per_instance_bitwise() { - let bitwise = BitwiseBuiltinRunner::new(&BitwiseInstanceDef::new(Some(10)), true); + let bitwise = BitwiseBuiltinRunner::new(Some(10), true); let builtin: BuiltinRunner = bitwise.clone().into(); assert_eq!(bitwise.cells_per_instance, builtin.cells_per_instance()) } @@ -760,7 +757,7 @@ mod tests { #[test] #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] fn get_name_bitwise() { - let bitwise = BitwiseBuiltinRunner::new(&BitwiseInstanceDef::new(Some(10)), true); + let bitwise = BitwiseBuiltinRunner::new(Some(10), true); let builtin: BuiltinRunner = bitwise.into(); assert_eq!(BITWISE_BUILTIN_NAME, builtin.name()) } @@ -808,10 +805,7 @@ mod tests { #[test] #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] fn get_allocated_memory_units_bitwise_with_items() { - let builtin = BuiltinRunner::Bitwise(BitwiseBuiltinRunner::new( - &BitwiseInstanceDef::new(Some(10)), - true, - )); + let builtin = BuiltinRunner::Bitwise(BitwiseBuiltinRunner::new(Some(10), true)); let mut vm = vm!(); @@ -1055,10 +1049,7 @@ mod tests { #[test] #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] fn get_allocated_memory_units_bitwise() { - let builtin = BuiltinRunner::Bitwise(BitwiseBuiltinRunner::new( - &BitwiseInstanceDef::default(), - true, - )); + let builtin = BuiltinRunner::Bitwise(BitwiseBuiltinRunner::new(Some(256), true)); let mut vm = vm!(); vm.current_step = 256; assert_eq!(builtin.get_allocated_memory_units(&vm), Ok(5)); @@ -1124,10 +1115,7 @@ mod tests { #[test] #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] fn get_range_check_usage_bitwise() { - let builtin = BuiltinRunner::Bitwise(BitwiseBuiltinRunner::new( - &BitwiseInstanceDef::default(), - true, - )); + let builtin = BuiltinRunner::Bitwise(BitwiseBuiltinRunner::new(Some(256), true)); let memory = memory![((0, 0), 1), ((0, 1), 2), ((0, 2), 3), ((0, 3), 4)]; assert_eq!(builtin.get_range_check_usage(&memory), None); } @@ -1135,10 +1123,7 @@ mod tests { #[test] #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] fn get_used_diluted_check_units_bitwise() { - let builtin = BuiltinRunner::Bitwise(BitwiseBuiltinRunner::new( - &BitwiseInstanceDef::default(), - true, - )); + let builtin = BuiltinRunner::Bitwise(BitwiseBuiltinRunner::new(Some(256), true)); assert_eq!(builtin.get_used_diluted_check_units(270, 7), 1255); } @@ -1198,8 +1183,7 @@ mod tests { #[test] #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] fn get_memory_segment_addresses_test() { - let bitwise_builtin: BuiltinRunner = - BitwiseBuiltinRunner::new(&BitwiseInstanceDef::default(), true).into(); + let bitwise_builtin: BuiltinRunner = BitwiseBuiltinRunner::new(Some(256), true).into(); assert_eq!(bitwise_builtin.get_memory_segment_addresses(), (0, None),); let ec_op_builtin: BuiltinRunner = EcOpBuiltinRunner::new(&EcOpInstanceDef::default(), true).into(); @@ -1229,10 +1213,7 @@ mod tests { #[test] #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] fn run_security_checks_empty_memory() { - let builtin = BuiltinRunner::Bitwise(BitwiseBuiltinRunner::new( - &BitwiseInstanceDef::default(), - true, - )); + let builtin = BuiltinRunner::Bitwise(BitwiseBuiltinRunner::new(Some(256), true)); let vm = vm!(); // Unused builtin shouldn't fail security checks assert_matches!(builtin.run_security_checks(&vm), Ok(())); @@ -1241,10 +1222,7 @@ mod tests { #[test] #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] fn run_security_checks_empty_offsets() { - let builtin = BuiltinRunner::Bitwise(BitwiseBuiltinRunner::new( - &BitwiseInstanceDef::default(), - true, - )); + let builtin = BuiltinRunner::Bitwise(BitwiseBuiltinRunner::new(Some(256), true)); let mut vm = vm!(); vm.segments.memory.data = vec![vec![]]; @@ -1255,10 +1233,7 @@ mod tests { #[test] #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] fn run_security_checks_bitwise_missing_memory_cells_with_offsets() { - let builtin = BuiltinRunner::Bitwise(BitwiseBuiltinRunner::new( - &BitwiseInstanceDef::default(), - true, - )); + let builtin = BuiltinRunner::Bitwise(BitwiseBuiltinRunner::new(Some(256), true)); let mut vm = vm!(); vm.segments.memory = memory![ ((0, 1), (0, 1)), @@ -1278,7 +1253,7 @@ mod tests { #[test] #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] fn run_security_checks_bitwise_missing_memory_cells() { - let mut bitwise_builtin = BitwiseBuiltinRunner::new(&BitwiseInstanceDef::default(), true); + let mut bitwise_builtin = BitwiseBuiltinRunner::new(Some(256), true); bitwise_builtin.cells_per_instance = 2; bitwise_builtin.n_input_cells = 5; @@ -1404,8 +1379,7 @@ mod tests { #[test] #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] fn run_security_checks_validate_auto_deductions() { - let builtin: BuiltinRunner = - BitwiseBuiltinRunner::new(&BitwiseInstanceDef::default(), true).into(); + let builtin: BuiltinRunner = BitwiseBuiltinRunner::new(Some(256), true).into(); let mut vm = vm!(); vm.segments @@ -1534,8 +1508,7 @@ mod tests { #[test] #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] fn get_used_perm_range_check_units_bitwise() { - let builtin_runner: BuiltinRunner = - BitwiseBuiltinRunner::new(&BitwiseInstanceDef::default(), true).into(); + let builtin_runner: BuiltinRunner = BitwiseBuiltinRunner::new(Some(256), true).into(); let mut vm = vm!(); vm.current_step = 8; @@ -1600,8 +1573,7 @@ mod tests { #[test] #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] fn get_ratio_tests() { - let bitwise_builtin: BuiltinRunner = - BitwiseBuiltinRunner::new(&BitwiseInstanceDef::default(), true).into(); + let bitwise_builtin: BuiltinRunner = BitwiseBuiltinRunner::new(Some(256), true).into(); assert_eq!(bitwise_builtin.ratio(), (Some(256)),); let ec_op_builtin: BuiltinRunner = EcOpBuiltinRunner::new(&EcOpInstanceDef::default(), true).into(); @@ -1625,8 +1597,7 @@ mod tests { let mut vm = vm!(); vm.segments.segment_used_sizes = Some(vec![4]); - let bitwise_builtin: BuiltinRunner = - BitwiseBuiltinRunner::new(&BitwiseInstanceDef::default(), true).into(); + let bitwise_builtin: BuiltinRunner = BitwiseBuiltinRunner::new(Some(256), true).into(); assert_eq!(bitwise_builtin.get_used_instances(&vm.segments), Ok(1)); } @@ -1676,10 +1647,7 @@ mod tests { #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] fn runners_final_stack() { let mut builtins = vec![ - BuiltinRunner::Bitwise(BitwiseBuiltinRunner::new( - &BitwiseInstanceDef::default(), - false, - )), + BuiltinRunner::Bitwise(BitwiseBuiltinRunner::new(Some(256), false)), BuiltinRunner::EcOp(EcOpBuiltinRunner::new(&EcOpInstanceDef::default(), false)), BuiltinRunner::Hash(HashBuiltinRunner::new(Some(1), false)), BuiltinRunner::Output(OutputBuiltinRunner::new(false)), @@ -1707,10 +1675,7 @@ mod tests { #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] fn runners_set_stop_ptr() { let builtins = vec![ - BuiltinRunner::Bitwise(BitwiseBuiltinRunner::new( - &BitwiseInstanceDef::default(), - false, - )), + BuiltinRunner::Bitwise(BitwiseBuiltinRunner::new(Some(256), false)), BuiltinRunner::EcOp(EcOpBuiltinRunner::new(&EcOpInstanceDef::default(), false)), BuiltinRunner::Hash(HashBuiltinRunner::new(Some(1), false)), BuiltinRunner::Output(OutputBuiltinRunner::new(false)), From 10a84ec6093ac48d7590bf44ec6acc7c12188706 Mon Sep 17 00:00:00 2001 From: Federica Date: Wed, 10 Apr 2024 17:51:00 -0300 Subject: [PATCH 04/22] Yeet CpuInstanceDef --- .../instance_definitions/cpu_instance_def.rs | 27 ------------------- vm/src/types/instance_definitions/mod.rs | 1 - vm/src/types/layout.rs | 13 +-------- vm/src/vm/vm_core.rs | 14 +++++----- 4 files changed, 7 insertions(+), 48 deletions(-) delete mode 100644 vm/src/types/instance_definitions/cpu_instance_def.rs diff --git a/vm/src/types/instance_definitions/cpu_instance_def.rs b/vm/src/types/instance_definitions/cpu_instance_def.rs deleted file mode 100644 index 19d22643a1..0000000000 --- a/vm/src/types/instance_definitions/cpu_instance_def.rs +++ /dev/null @@ -1,27 +0,0 @@ -use serde::Serialize; - -#[derive(Serialize, Debug, PartialEq)] -pub(crate) struct CpuInstanceDef { - pub(crate) _safe_call: bool, -} - -impl CpuInstanceDef { - pub(crate) fn default() -> Self { - CpuInstanceDef { _safe_call: true } - } -} - -#[cfg(test)] -mod tests { - use super::CpuInstanceDef; - - #[cfg(target_arch = "wasm32")] - use wasm_bindgen_test::*; - - #[test] - #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] - fn test_default() { - let cpu_instance = CpuInstanceDef::default(); - assert!(cpu_instance._safe_call) - } -} diff --git a/vm/src/types/instance_definitions/mod.rs b/vm/src/types/instance_definitions/mod.rs index 691be29847..8f1bba2198 100644 --- a/vm/src/types/instance_definitions/mod.rs +++ b/vm/src/types/instance_definitions/mod.rs @@ -1,6 +1,5 @@ pub mod bitwise_instance_def; pub mod builtins_instance_def; -pub mod cpu_instance_def; pub mod diluted_pool_instance_def; pub mod ec_op_instance_def; pub mod ecdsa_instance_def; diff --git a/vm/src/types/layout.rs b/vm/src/types/layout.rs index f9a2f8376f..b40ec8b9c7 100644 --- a/vm/src/types/layout.rs +++ b/vm/src/types/layout.rs @@ -1,7 +1,7 @@ use crate::stdlib::prelude::*; use super::instance_definitions::{ - builtins_instance_def::BuiltinsInstanceDef, cpu_instance_def::CpuInstanceDef, + builtins_instance_def::BuiltinsInstanceDef, diluted_pool_instance_def::DilutedPoolInstanceDef, }; @@ -17,7 +17,6 @@ pub struct CairoLayout { pub(crate) _memory_units_per_step: u32, pub(crate) diluted_pool_instance_def: Option, pub(crate) _n_trace_colums: u32, - pub(crate) _cpu_instance_def: CpuInstanceDef, } impl CairoLayout { @@ -31,7 +30,6 @@ impl CairoLayout { _memory_units_per_step: 8, diluted_pool_instance_def: None, _n_trace_colums: 8, - _cpu_instance_def: CpuInstanceDef::default(), } } @@ -45,7 +43,6 @@ impl CairoLayout { _memory_units_per_step: 8, diluted_pool_instance_def: None, _n_trace_colums: 25, - _cpu_instance_def: CpuInstanceDef::default(), } } @@ -59,7 +56,6 @@ impl CairoLayout { _memory_units_per_step: 8, diluted_pool_instance_def: None, _n_trace_colums: 22, - _cpu_instance_def: CpuInstanceDef::default(), } } @@ -73,7 +69,6 @@ impl CairoLayout { _memory_units_per_step: 8, diluted_pool_instance_def: Some(DilutedPoolInstanceDef::default()), _n_trace_colums: 10, - _cpu_instance_def: CpuInstanceDef::default(), } } @@ -87,7 +82,6 @@ impl CairoLayout { _memory_units_per_step: 8, diluted_pool_instance_def: Some(DilutedPoolInstanceDef::new(2, 4, 16)), _n_trace_colums: 10, - _cpu_instance_def: CpuInstanceDef::default(), } } @@ -101,7 +95,6 @@ impl CairoLayout { _memory_units_per_step: 8, diluted_pool_instance_def: Some(DilutedPoolInstanceDef::default()), _n_trace_colums: 15, - _cpu_instance_def: CpuInstanceDef::default(), } } @@ -115,7 +108,6 @@ impl CairoLayout { _memory_units_per_step: 8, diluted_pool_instance_def: Some(DilutedPoolInstanceDef::default()), _n_trace_colums: 12, - _cpu_instance_def: CpuInstanceDef::default(), } } @@ -129,7 +121,6 @@ impl CairoLayout { _memory_units_per_step: 8, diluted_pool_instance_def: Some(DilutedPoolInstanceDef::default()), _n_trace_colums: 11, - _cpu_instance_def: CpuInstanceDef::default(), } } @@ -143,7 +134,6 @@ impl CairoLayout { _memory_units_per_step: 8, diluted_pool_instance_def: Some(DilutedPoolInstanceDef::default()), _n_trace_colums: 27, - _cpu_instance_def: CpuInstanceDef::default(), } } @@ -157,7 +147,6 @@ impl CairoLayout { _memory_units_per_step: 8, diluted_pool_instance_def: Some(DilutedPoolInstanceDef::default()), _n_trace_colums: 73, - _cpu_instance_def: CpuInstanceDef::default(), } } } diff --git a/vm/src/vm/vm_core.rs b/vm/src/vm/vm_core.rs index dc8818e81d..79e01c9fd0 100644 --- a/vm/src/vm/vm_core.rs +++ b/vm/src/vm/vm_core.rs @@ -1290,9 +1290,7 @@ mod tests { }, relocatable, types::{ - instance_definitions::{ - bitwise_instance_def::BitwiseInstanceDef, ec_op_instance_def::EcOpInstanceDef, - }, + instance_definitions::ec_op_instance_def::EcOpInstanceDef, instruction::{Op1Addr, Register}, relocatable::Relocatable, }, @@ -3414,7 +3412,7 @@ mod tests { #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] fn deduce_memory_cell_bitwise_builtin_valid_and() { let mut vm = vm!(); - let builtin = BitwiseBuiltinRunner::new(&BitwiseInstanceDef::default(), true); + let builtin = BitwiseBuiltinRunner::new(Some(256), true); vm.builtin_runners.push(builtin.into()); vm.segments = segments![((0, 5), 10), ((0, 6), 12), ((0, 7), 0)]; assert_matches!( @@ -3452,7 +3450,7 @@ mod tests { opcode: Opcode::AssertEq, }; - let mut builtin = BitwiseBuiltinRunner::new(&BitwiseInstanceDef::default(), true); + let mut builtin = BitwiseBuiltinRunner::new(Some(256), true); builtin.base = 2; let mut vm = vm!(); @@ -3681,7 +3679,7 @@ mod tests { end */ fn verify_auto_deductions_bitwise() { - let mut builtin = BitwiseBuiltinRunner::new(&BitwiseInstanceDef::default(), true); + let mut builtin = BitwiseBuiltinRunner::new(Some(256), true); builtin.base = 2; let mut vm = vm!(); vm.builtin_runners.push(builtin.into()); @@ -3704,7 +3702,7 @@ mod tests { end */ fn verify_auto_deductions_for_addr_bitwise() { - let mut builtin = BitwiseBuiltinRunner::new(&BitwiseInstanceDef::default(), true); + let mut builtin = BitwiseBuiltinRunner::new(Some(256), true); builtin.base = 2; let builtin: BuiltinRunner = builtin.into(); let mut vm = vm!(); @@ -3894,7 +3892,7 @@ mod tests { fn test_get_builtin_runners() { let mut vm = vm!(); let hash_builtin = HashBuiltinRunner::new(Some(8), true); - let bitwise_builtin = BitwiseBuiltinRunner::new(&BitwiseInstanceDef::default(), true); + let bitwise_builtin = BitwiseBuiltinRunner::new(Some(256), true); vm.builtin_runners.push(hash_builtin.into()); vm.builtin_runners.push(bitwise_builtin.into()); From 9e2822b893484b3fecf3c9b771d667456d1a451e Mon Sep 17 00:00:00 2001 From: Federica Date: Wed, 10 Apr 2024 17:52:00 -0300 Subject: [PATCH 05/22] Update tests --- vm/src/types/layout.rs | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/vm/src/types/layout.rs b/vm/src/types/layout.rs index b40ec8b9c7..286f786344 100644 --- a/vm/src/types/layout.rs +++ b/vm/src/types/layout.rs @@ -171,7 +171,6 @@ mod tests { assert_eq!(layout._memory_units_per_step, 8); assert_eq!(layout.diluted_pool_instance_def, None); assert_eq!(layout._n_trace_colums, 8); - assert_eq!(layout._cpu_instance_def, CpuInstanceDef::default()); } #[test] @@ -187,7 +186,6 @@ mod tests { assert_eq!(layout._memory_units_per_step, 8); assert_eq!(layout.diluted_pool_instance_def, None); assert_eq!(layout._n_trace_colums, 25); - assert_eq!(layout._cpu_instance_def, CpuInstanceDef::default()); } #[test] @@ -203,7 +201,6 @@ mod tests { assert_eq!(layout._memory_units_per_step, 8); assert_eq!(layout.diluted_pool_instance_def, None); assert_eq!(layout._n_trace_colums, 22); - assert_eq!(layout._cpu_instance_def, CpuInstanceDef::default()); } #[test] @@ -221,7 +218,6 @@ mod tests { Some(DilutedPoolInstanceDef::default()) ); assert_eq!(layout._n_trace_colums, 10); - assert_eq!(layout._cpu_instance_def, CpuInstanceDef::default()); } #[test] @@ -239,7 +235,6 @@ mod tests { Some(DilutedPoolInstanceDef::new(2, 4, 16)) ); assert_eq!(layout._n_trace_colums, 10); - assert_eq!(layout._cpu_instance_def, CpuInstanceDef::default()); } #[test] @@ -257,7 +252,6 @@ mod tests { Some(DilutedPoolInstanceDef::default()) ); assert_eq!(layout._n_trace_colums, 15); - assert_eq!(layout._cpu_instance_def, CpuInstanceDef::default()); } #[test] @@ -275,7 +269,6 @@ mod tests { Some(DilutedPoolInstanceDef::default()) ); assert_eq!(layout._n_trace_colums, 12); - assert_eq!(layout._cpu_instance_def, CpuInstanceDef::default()); } #[test] @@ -293,7 +286,6 @@ mod tests { Some(DilutedPoolInstanceDef::default()) ); assert_eq!(layout._n_trace_colums, 11); - assert_eq!(layout._cpu_instance_def, CpuInstanceDef::default()); } #[test] @@ -311,7 +303,6 @@ mod tests { Some(DilutedPoolInstanceDef::default()) ); assert_eq!(layout._n_trace_colums, 27); - assert_eq!(layout._cpu_instance_def, CpuInstanceDef::default()); } #[test] @@ -329,6 +320,5 @@ mod tests { Some(DilutedPoolInstanceDef::default()) ); assert_eq!(layout._n_trace_colums, 73); - assert_eq!(layout._cpu_instance_def, CpuInstanceDef::default()); } } From f0b60dd1d039d11162d5323c9bfa0a15a61280c3 Mon Sep 17 00:00:00 2001 From: Federica Date: Wed, 10 Apr 2024 17:57:50 -0300 Subject: [PATCH 06/22] Simplify ec op instance def --- .../ec_op_instance_def.rs | 56 ++++--------------- vm/src/types/layout.rs | 3 +- vm/src/vm/runners/builtin_runner/ec_op.rs | 55 +++++++----------- vm/src/vm/runners/builtin_runner/mod.rs | 49 ++++++---------- vm/src/vm/runners/cairo_runner.rs | 8 +-- vm/src/vm/vm_core.rs | 6 +- 6 files changed, 56 insertions(+), 121 deletions(-) diff --git a/vm/src/types/instance_definitions/ec_op_instance_def.rs b/vm/src/types/instance_definitions/ec_op_instance_def.rs index 75e8039dba..01145e8f89 100644 --- a/vm/src/types/instance_definitions/ec_op_instance_def.rs +++ b/vm/src/types/instance_definitions/ec_op_instance_def.rs @@ -2,37 +2,23 @@ use serde::Serialize; pub(crate) const CELLS_PER_EC_OP: u32 = 7; pub(crate) const INPUT_CELLS_PER_EC_OP: u32 = 5; +pub(crate) const SCALAR_HEIGHT: u32 = 256; +pub(crate) const SCALAR_BITS: u32 = 252; #[derive(Serialize, Clone, Debug, PartialEq)] pub(crate) struct EcOpInstanceDef { pub(crate) ratio: Option, - pub(crate) scalar_height: u32, - pub(crate) _scalar_bits: u32, } -impl EcOpInstanceDef { - pub(crate) fn default() -> Self { - EcOpInstanceDef { - ratio: Some(256), - scalar_height: 256, - _scalar_bits: 252, - } +impl Default for EcOpInstanceDef { + fn default() -> Self { + EcOpInstanceDef { ratio: Some(256) } } +} +impl EcOpInstanceDef { pub(crate) fn new(ratio: Option) -> Self { - EcOpInstanceDef { - ratio, - scalar_height: 256, - _scalar_bits: 252, - } - } - - pub(crate) fn _cells_per_builtin(&self) -> u32 { - CELLS_PER_EC_OP - } - - pub(crate) fn _range_check_units_per_builtin(&self) -> u32 { - 0 + EcOpInstanceDef { ratio } } } @@ -43,39 +29,17 @@ mod tests { #[cfg(target_arch = "wasm32")] use wasm_bindgen_test::*; - #[test] - #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] - fn get_range_check_units_per_builtin() { - let builtin_instance = EcOpInstanceDef::default(); - assert_eq!(builtin_instance._range_check_units_per_builtin(), 0); - } - - #[test] - #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] - fn get_cells_per_builtin() { - let builtin_instance = EcOpInstanceDef::default(); - assert_eq!(builtin_instance._cells_per_builtin(), 7); - } - #[test] #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] fn test_new() { - let builtin_instance = EcOpInstanceDef { - ratio: Some(8), - scalar_height: 256, - _scalar_bits: 252, - }; + let builtin_instance = EcOpInstanceDef { ratio: Some(8) }; assert_eq!(EcOpInstanceDef::new(Some(8)), builtin_instance); } #[test] #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] fn test_default() { - let builtin_instance = EcOpInstanceDef { - ratio: Some(256), - scalar_height: 256, - _scalar_bits: 252, - }; + let builtin_instance = EcOpInstanceDef { ratio: Some(256) }; assert_eq!(EcOpInstanceDef::default(), builtin_instance); } } diff --git a/vm/src/types/layout.rs b/vm/src/types/layout.rs index 286f786344..6c2df0d2fb 100644 --- a/vm/src/types/layout.rs +++ b/vm/src/types/layout.rs @@ -1,8 +1,7 @@ use crate::stdlib::prelude::*; use super::instance_definitions::{ - builtins_instance_def::BuiltinsInstanceDef, - diluted_pool_instance_def::DilutedPoolInstanceDef, + builtins_instance_def::BuiltinsInstanceDef, diluted_pool_instance_def::DilutedPoolInstanceDef, }; use serde::Serialize; diff --git a/vm/src/vm/runners/builtin_runner/ec_op.rs b/vm/src/vm/runners/builtin_runner/ec_op.rs index 2c9be94793..5c9d43be42 100644 --- a/vm/src/vm/runners/builtin_runner/ec_op.rs +++ b/vm/src/vm/runners/builtin_runner/ec_op.rs @@ -2,7 +2,7 @@ use crate::air_private_input::{PrivateInput, PrivateInputEcOp}; use crate::stdlib::{borrow::Cow, prelude::*}; use crate::stdlib::{cell::RefCell, collections::HashMap}; use crate::types::instance_definitions::ec_op_instance_def::{ - EcOpInstanceDef, CELLS_PER_EC_OP, INPUT_CELLS_PER_EC_OP, + CELLS_PER_EC_OP, INPUT_CELLS_PER_EC_OP, SCALAR_HEIGHT, }; use crate::types::relocatable::{MaybeRelocatable, Relocatable}; use crate::vm::errors::memory_errors::MemoryError; @@ -19,7 +19,6 @@ pub struct EcOpBuiltinRunner { pub base: usize, pub(crate) cells_per_instance: u32, pub(crate) n_input_cells: u32, - ec_op_builtin: EcOpInstanceDef, pub(crate) stop_ptr: Option, pub(crate) included: bool, pub(crate) instances_per_component: u32, @@ -27,13 +26,12 @@ pub struct EcOpBuiltinRunner { } impl EcOpBuiltinRunner { - pub(crate) fn new(instance_def: &EcOpInstanceDef, included: bool) -> Self { + pub(crate) fn new(ratio: Option, included: bool) -> Self { EcOpBuiltinRunner { base: 0, - ratio: instance_def.ratio, + ratio, n_input_cells: INPUT_CELLS_PER_EC_OP, cells_per_instance: CELLS_PER_EC_OP, - ec_op_builtin: instance_def.clone(), stop_ptr: None, included, instances_per_component: 1, @@ -174,7 +172,7 @@ impl EcOpBuiltinRunner { (input_cells[0].to_owned(), input_cells[1].to_owned()), (input_cells[2].to_owned(), input_cells[3].to_owned()), input_cells[4], - self.ec_op_builtin.scalar_height, + SCALAR_HEIGHT, )?; self.cache.borrow_mut().insert(x_addr, result.0); self.cache.borrow_mut().insert( @@ -274,7 +272,7 @@ mod tests { #[test] #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] fn get_used_instances() { - let builtin = EcOpBuiltinRunner::new(&EcOpInstanceDef::new(Some(10)), true); + let builtin = EcOpBuiltinRunner::new(Some(10), true); let mut vm = vm!(); vm.segments.segment_used_sizes = Some(vec![1]); @@ -285,8 +283,7 @@ mod tests { #[test] #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] fn final_stack() { - let mut builtin: BuiltinRunner = - EcOpBuiltinRunner::new(&EcOpInstanceDef::new(Some(10)), true).into(); + let mut builtin: BuiltinRunner = EcOpBuiltinRunner::new(Some(10), true).into(); let mut vm = vm!(); @@ -310,8 +307,7 @@ mod tests { #[test] #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] fn final_stack_error_stop_pointer() { - let mut builtin: BuiltinRunner = - EcOpBuiltinRunner::new(&EcOpInstanceDef::new(Some(10)), true).into(); + let mut builtin: BuiltinRunner = EcOpBuiltinRunner::new(Some(10), true).into(); let mut vm = vm!(); @@ -339,8 +335,7 @@ mod tests { #[test] #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] fn final_stack_error_when_notincluded() { - let mut builtin: BuiltinRunner = - EcOpBuiltinRunner::new(&EcOpInstanceDef::new(Some(10)), false).into(); + let mut builtin: BuiltinRunner = EcOpBuiltinRunner::new(Some(10), false).into(); let mut vm = vm!(); @@ -364,8 +359,7 @@ mod tests { #[test] #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] fn final_stack_error_non_relocatable() { - let mut builtin: BuiltinRunner = - EcOpBuiltinRunner::new(&EcOpInstanceDef::new(Some(10)), true).into(); + let mut builtin: BuiltinRunner = EcOpBuiltinRunner::new(Some(10), true).into(); let mut vm = vm!(); @@ -389,8 +383,7 @@ mod tests { #[test] #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] fn get_used_cells_and_allocated_size_test() { - let builtin: BuiltinRunner = - EcOpBuiltinRunner::new(&EcOpInstanceDef::new(Some(10)), true).into(); + let builtin: BuiltinRunner = EcOpBuiltinRunner::new(Some(10), true).into(); let mut vm = vm!(); @@ -435,8 +428,7 @@ mod tests { #[test] #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] fn get_allocated_memory_units() { - let builtin: BuiltinRunner = - EcOpBuiltinRunner::new(&EcOpInstanceDef::new(Some(10)), true).into(); + let builtin: BuiltinRunner = EcOpBuiltinRunner::new(Some(10), true).into(); let mut vm = vm!(); @@ -655,7 +647,7 @@ mod tests { ) ) ]; - let builtin = EcOpBuiltinRunner::new(&EcOpInstanceDef::default(), true); + let builtin = EcOpBuiltinRunner::new(Some(256), true); let result = builtin.deduce_memory_cell(Relocatable::from((3, 6)), &memory); assert_eq!( @@ -701,7 +693,7 @@ mod tests { ) ]; - let builtin = EcOpBuiltinRunner::new(&EcOpInstanceDef::default(), true); + let builtin = EcOpBuiltinRunner::new(Some(256), true); let result = builtin.deduce_memory_cell(Relocatable::from((3, 6)), &memory); assert_eq!(result, Ok(None)); } @@ -747,7 +739,7 @@ mod tests { ) ) ]; - let builtin = EcOpBuiltinRunner::new(&EcOpInstanceDef::default(), true); + let builtin = EcOpBuiltinRunner::new(Some(256), true); let result = builtin.deduce_memory_cell(Relocatable::from((3, 3)), &memory); assert_eq!(result, Ok(None)); @@ -788,7 +780,7 @@ mod tests { ) ) ]; - let builtin = EcOpBuiltinRunner::new(&EcOpInstanceDef::default(), true); + let builtin = EcOpBuiltinRunner::new(Some(256), true); assert_eq!( builtin.deduce_memory_cell(Relocatable::from((3, 6)), &memory), @@ -801,8 +793,7 @@ mod tests { #[test] #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] fn get_used_cells_missing_segment_used_sizes() { - let builtin = - BuiltinRunner::EcOp(EcOpBuiltinRunner::new(&EcOpInstanceDef::default(), true)); + let builtin = BuiltinRunner::EcOp(EcOpBuiltinRunner::new(Some(256), true)); let vm = vm!(); assert_eq!( @@ -814,8 +805,7 @@ mod tests { #[test] #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] fn get_used_cells_empty() { - let builtin = - BuiltinRunner::EcOp(EcOpBuiltinRunner::new(&EcOpInstanceDef::default(), true)); + let builtin = BuiltinRunner::EcOp(EcOpBuiltinRunner::new(Some(256), true)); let mut vm = vm!(); vm.segments.segment_used_sizes = Some(vec![0]); @@ -825,8 +815,7 @@ mod tests { #[test] #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] fn get_used_cells() { - let builtin = - BuiltinRunner::EcOp(EcOpBuiltinRunner::new(&EcOpInstanceDef::default(), true)); + let builtin = BuiltinRunner::EcOp(EcOpBuiltinRunner::new(Some(256), true)); let mut vm = vm!(); vm.segments.segment_used_sizes = Some(vec![4]); @@ -836,15 +825,14 @@ mod tests { #[test] #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] fn initial_stackincluded_test() { - let ec_op_builtin: BuiltinRunner = - EcOpBuiltinRunner::new(&EcOpInstanceDef::default(), true).into(); + let ec_op_builtin: BuiltinRunner = EcOpBuiltinRunner::new(Some(256), true).into(); assert_eq!(ec_op_builtin.initial_stack(), vec![mayberelocatable!(0, 0)]) } #[test] #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] fn initial_stack_notincluded_test() { - let ec_op_builtin = EcOpBuiltinRunner::new(&EcOpInstanceDef::default(), false); + let ec_op_builtin = EcOpBuiltinRunner::new(Some(256), false); assert_eq!(ec_op_builtin.initial_stack(), Vec::new()) } @@ -902,8 +890,7 @@ mod tests { #[test] #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] fn get_air_private_input() { - let builtin: BuiltinRunner = - EcOpBuiltinRunner::new(&EcOpInstanceDef::default(), true).into(); + let builtin: BuiltinRunner = EcOpBuiltinRunner::new(Some(256), true).into(); let segments = segments![ ((0, 0), 0), diff --git a/vm/src/vm/runners/builtin_runner/mod.rs b/vm/src/vm/runners/builtin_runner/mod.rs index 0058de1821..191b6c9a5d 100644 --- a/vm/src/vm/runners/builtin_runner/mod.rs +++ b/vm/src/vm/runners/builtin_runner/mod.rs @@ -677,7 +677,7 @@ mod tests { #[test] #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] fn get_n_input_cells_ec_op() { - let ec_op = EcOpBuiltinRunner::new(&EcOpInstanceDef::default(), true); + let ec_op = EcOpBuiltinRunner::new(Some(256), true); let builtin: BuiltinRunner = ec_op.clone().into(); assert_eq!(ec_op.n_input_cells, builtin.n_input_cells()) } @@ -725,7 +725,7 @@ mod tests { #[test] #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] fn get_cells_per_instance_ec_op() { - let ec_op = EcOpBuiltinRunner::new(&EcOpInstanceDef::default(), true); + let ec_op = EcOpBuiltinRunner::new(Some(256), true); let builtin: BuiltinRunner = ec_op.clone().into(); assert_eq!(ec_op.cells_per_instance, builtin.cells_per_instance()) } @@ -781,7 +781,7 @@ mod tests { #[test] #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] fn get_name_ec_op() { - let ec_op = EcOpBuiltinRunner::new(&EcOpInstanceDef::default(), true); + let ec_op = EcOpBuiltinRunner::new(Some(256), true); let builtin: BuiltinRunner = ec_op.into(); assert_eq!(EC_OP_BUILTIN_NAME, builtin.name()) } @@ -849,10 +849,7 @@ mod tests { #[test] #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] fn get_allocated_memory_units_ec_op_with_items() { - let builtin = BuiltinRunner::EcOp(EcOpBuiltinRunner::new( - &EcOpInstanceDef::new(Some(10)), - true, - )); + let builtin = BuiltinRunner::EcOp(EcOpBuiltinRunner::new(Some(10), true)); let mut vm = vm!(); @@ -1058,8 +1055,7 @@ mod tests { #[test] #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] fn get_allocated_memory_units_ec_op() { - let builtin = - BuiltinRunner::EcOp(EcOpBuiltinRunner::new(&EcOpInstanceDef::default(), true)); + let builtin = BuiltinRunner::EcOp(EcOpBuiltinRunner::new(Some(256), true)); let mut vm = vm!(); vm.current_step = 256; assert_eq!(builtin.get_allocated_memory_units(&vm), Ok(7)); @@ -1106,8 +1102,7 @@ mod tests { #[test] #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] fn get_range_check_usage_ec_op() { - let builtin = - BuiltinRunner::EcOp(EcOpBuiltinRunner::new(&EcOpInstanceDef::default(), true)); + let builtin = BuiltinRunner::EcOp(EcOpBuiltinRunner::new(Some(256), true)); let memory = memory![((0, 0), 1), ((0, 1), 2), ((0, 2), 3), ((0, 3), 4)]; assert_eq!(builtin.get_range_check_usage(&memory), None); } @@ -1150,10 +1145,7 @@ mod tests { #[test] #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] fn get_used_diluted_check_units_ec_op() { - let builtin = BuiltinRunner::EcOp(EcOpBuiltinRunner::new( - &EcOpInstanceDef::new(Some(10)), - true, - )); + let builtin = BuiltinRunner::EcOp(EcOpBuiltinRunner::new(Some(10), true)); assert_eq!(builtin.get_used_diluted_check_units(270, 7), 0); } @@ -1185,8 +1177,7 @@ mod tests { fn get_memory_segment_addresses_test() { let bitwise_builtin: BuiltinRunner = BitwiseBuiltinRunner::new(Some(256), true).into(); assert_eq!(bitwise_builtin.get_memory_segment_addresses(), (0, None),); - let ec_op_builtin: BuiltinRunner = - EcOpBuiltinRunner::new(&EcOpInstanceDef::default(), true).into(); + let ec_op_builtin: BuiltinRunner = EcOpBuiltinRunner::new(Some(256), true).into(); assert_eq!(ec_op_builtin.get_memory_segment_addresses(), (0, None),); let hash_builtin: BuiltinRunner = HashBuiltinRunner::new(Some(8), true).into(); assert_eq!(hash_builtin.get_memory_segment_addresses(), (0, None),); @@ -1401,7 +1392,7 @@ mod tests { #[test] #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] fn run_security_ec_op_check_memory_empty() { - let ec_op_builtin = EcOpBuiltinRunner::new(&EcOpInstanceDef::default(), true); + let ec_op_builtin = EcOpBuiltinRunner::new(Some(256), true); let builtin: BuiltinRunner = ec_op_builtin.into(); @@ -1415,7 +1406,7 @@ mod tests { #[test] #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] fn run_security_ec_op_check_memory_1_element() { - let ec_op_builtin = EcOpBuiltinRunner::new(&EcOpInstanceDef::default(), true); + let ec_op_builtin = EcOpBuiltinRunner::new(Some(256), true); let builtin: BuiltinRunner = ec_op_builtin.into(); @@ -1433,7 +1424,7 @@ mod tests { #[test] #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] fn run_security_ec_op_check_memory_3_elements() { - let ec_op_builtin = EcOpBuiltinRunner::new(&EcOpInstanceDef::default(), true); + let ec_op_builtin = EcOpBuiltinRunner::new(Some(256), true); let builtin: BuiltinRunner = ec_op_builtin.into(); @@ -1452,8 +1443,7 @@ mod tests { #[test] #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] fn run_security_ec_op_missing_memory_cells_with_offsets() { - let builtin: BuiltinRunner = - EcOpBuiltinRunner::new(&EcOpInstanceDef::default(), true).into(); + let builtin: BuiltinRunner = EcOpBuiltinRunner::new(Some(256), true).into(); let mut vm = vm!(); vm.segments.memory = memory![ ((0, 1), (0, 1)), @@ -1475,7 +1465,7 @@ mod tests { #[test] #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] fn run_security_ec_op_check_memory_gap() { - let ec_op_builtin = EcOpBuiltinRunner::new(&EcOpInstanceDef::default(), true); + let ec_op_builtin = EcOpBuiltinRunner::new(Some(256), true); let builtin: BuiltinRunner = ec_op_builtin.into(); @@ -1521,8 +1511,7 @@ mod tests { #[test] #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] fn get_used_perm_range_check_units_ec_op() { - let builtin_runner: BuiltinRunner = - EcOpBuiltinRunner::new(&EcOpInstanceDef::default(), true).into(); + let builtin_runner: BuiltinRunner = EcOpBuiltinRunner::new(Some(256), true).into(); let mut vm = vm!(); vm.current_step = 8; @@ -1575,8 +1564,7 @@ mod tests { fn get_ratio_tests() { let bitwise_builtin: BuiltinRunner = BitwiseBuiltinRunner::new(Some(256), true).into(); assert_eq!(bitwise_builtin.ratio(), (Some(256)),); - let ec_op_builtin: BuiltinRunner = - EcOpBuiltinRunner::new(&EcOpInstanceDef::default(), true).into(); + let ec_op_builtin: BuiltinRunner = EcOpBuiltinRunner::new(Some(256), true).into(); assert_eq!(ec_op_builtin.ratio(), (Some(256)),); let hash_builtin: BuiltinRunner = HashBuiltinRunner::new(Some(8), true).into(); assert_eq!(hash_builtin.ratio(), (Some(8)),); @@ -1607,8 +1595,7 @@ mod tests { let mut vm = vm!(); vm.segments.segment_used_sizes = Some(vec![4]); - let ec_op_builtin: BuiltinRunner = - EcOpBuiltinRunner::new(&EcOpInstanceDef::default(), true).into(); + let ec_op_builtin: BuiltinRunner = EcOpBuiltinRunner::new(Some(256), true).into(); assert_eq!(ec_op_builtin.get_used_instances(&vm.segments), Ok(1)); } @@ -1648,7 +1635,7 @@ mod tests { fn runners_final_stack() { let mut builtins = vec![ BuiltinRunner::Bitwise(BitwiseBuiltinRunner::new(Some(256), false)), - BuiltinRunner::EcOp(EcOpBuiltinRunner::new(&EcOpInstanceDef::default(), false)), + BuiltinRunner::EcOp(EcOpBuiltinRunner::new(Some(256), false)), BuiltinRunner::Hash(HashBuiltinRunner::new(Some(1), false)), BuiltinRunner::Output(OutputBuiltinRunner::new(false)), BuiltinRunner::RangeCheck(RangeCheckBuiltinRunner::::new( @@ -1676,7 +1663,7 @@ mod tests { fn runners_set_stop_ptr() { let builtins = vec![ BuiltinRunner::Bitwise(BitwiseBuiltinRunner::new(Some(256), false)), - BuiltinRunner::EcOp(EcOpBuiltinRunner::new(&EcOpInstanceDef::default(), false)), + BuiltinRunner::EcOp(EcOpBuiltinRunner::new(Some(256), false)), BuiltinRunner::Hash(HashBuiltinRunner::new(Some(1), false)), BuiltinRunner::Output(OutputBuiltinRunner::new(false)), BuiltinRunner::RangeCheck(RangeCheckBuiltinRunner::::new( diff --git a/vm/src/vm/runners/cairo_runner.rs b/vm/src/vm/runners/cairo_runner.rs index cea4564672..826049b023 100644 --- a/vm/src/vm/runners/cairo_runner.rs +++ b/vm/src/vm/runners/cairo_runner.rs @@ -22,9 +22,7 @@ use crate::{ types::{ errors::{math_errors::MathError, program_errors::ProgramError}, exec_scope::ExecutionScopes, - instance_definitions::{ - ec_op_instance_def::EcOpInstanceDef, ecdsa_instance_def::EcdsaInstanceDef, - }, + instance_definitions::ecdsa_instance_def::EcdsaInstanceDef, layout::CairoLayout, program::Program, relocatable::{relocate_address, relocate_value, MaybeRelocatable, Relocatable}, @@ -317,7 +315,7 @@ impl CairoRunner { if let Some(instance_def) = self.layout.builtins.ec_op.as_ref() { let included = program_builtins.remove(&BuiltinName::ec_op); if included || self.is_proof_mode() { - builtin_runners.push(EcOpBuiltinRunner::new(instance_def, included).into()); + builtin_runners.push(EcOpBuiltinRunner::new(instance_def.ratio, included).into()); } } @@ -414,7 +412,7 @@ impl CairoRunner { .push(BitwiseBuiltinRunner::new(Some(1), true).into()), BuiltinName::ec_op => vm .builtin_runners - .push(EcOpBuiltinRunner::new(&EcOpInstanceDef::new(Some(1)), true).into()), + .push(EcOpBuiltinRunner::new(Some(1), true).into()), BuiltinName::keccak => vm.builtin_runners.push( KeccakBuiltinRunner::new(&KeccakInstanceDef::new(Some(1), vec![200; 8]), true) .into(), diff --git a/vm/src/vm/vm_core.rs b/vm/src/vm/vm_core.rs index 79e01c9fd0..0fa1b5b84a 100644 --- a/vm/src/vm/vm_core.rs +++ b/vm/src/vm/vm_core.rs @@ -3491,7 +3491,7 @@ mod tests { #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] fn deduce_memory_cell_ec_op_builtin_valid() { let mut vm = vm!(); - let builtin = EcOpBuiltinRunner::new(&EcOpInstanceDef::default(), true); + let builtin = EcOpBuiltinRunner::new(Some(256), true); vm.builtin_runners.push(builtin.into()); vm.segments = segments![ @@ -3560,7 +3560,7 @@ mod tests { end */ fn verify_auto_deductions_for_ec_op_builtin_valid() { - let mut builtin = EcOpBuiltinRunner::new(&EcOpInstanceDef::default(), true); + let mut builtin = EcOpBuiltinRunner::new(Some(256), true); builtin.base = 3; let mut vm = vm!(); vm.builtin_runners.push(builtin.into()); @@ -3608,7 +3608,7 @@ mod tests { #[test] #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] fn verify_auto_deductions_for_ec_op_builtin_valid_points_invalid_result() { - let mut builtin = EcOpBuiltinRunner::new(&EcOpInstanceDef::default(), true); + let mut builtin = EcOpBuiltinRunner::new(Some(256), true); builtin.base = 3; let mut vm = vm!(); vm.builtin_runners.push(builtin.into()); From 920c922a820c99edf7745893973863cdc51a8b99 Mon Sep 17 00:00:00 2001 From: Federica Date: Wed, 10 Apr 2024 18:11:32 -0300 Subject: [PATCH 07/22] Clean Ecdsa instance def --- .../builtin_hint_processor/signature.rs | 9 +-- .../ec_op_instance_def.rs | 1 - .../ecdsa_instance_def.rs | 63 +++-------------- vm/src/vm/runners/builtin_runner/mod.rs | 22 ++---- vm/src/vm/runners/builtin_runner/signature.rs | 69 ++++++------------- vm/src/vm/runners/cairo_runner.rs | 10 +-- vm/src/vm/vm_core.rs | 1 - vm/src/vm/vm_memory/memory.rs | 5 +- 8 files changed, 47 insertions(+), 133 deletions(-) diff --git a/vm/src/hint_processor/builtin_hint_processor/signature.rs b/vm/src/hint_processor/builtin_hint_processor/signature.rs index 23ffa70086..6766787729 100644 --- a/vm/src/hint_processor/builtin_hint_processor/signature.rs +++ b/vm/src/hint_processor/builtin_hint_processor/signature.rs @@ -67,8 +67,7 @@ mod tests { #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] fn verify_ecdsa_signature_valid() { let mut vm = vm!(); - vm.builtin_runners = - vec![SignatureBuiltinRunner::new(&EcdsaInstanceDef::default(), true).into()]; + vm.builtin_runners = vec![SignatureBuiltinRunner::new(Some(512), true).into()]; vm.segments = segments![ ((1, 0), (0, 0)), ( @@ -94,8 +93,7 @@ mod tests { #[test] fn verify_ecdsa_signature_invalid_ecdsa_ptr() { let mut vm = vm!(); - vm.builtin_runners = - vec![SignatureBuiltinRunner::new(&EcdsaInstanceDef::default(), true).into()]; + vm.builtin_runners = vec![SignatureBuiltinRunner::new(Some(512), true).into()]; vm.segments = segments![ ((1, 0), (3, 0)), ( @@ -121,8 +119,7 @@ mod tests { #[test] fn verify_ecdsa_signature_invalid_input_cell() { let mut vm = vm!(); - vm.builtin_runners = - vec![SignatureBuiltinRunner::new(&EcdsaInstanceDef::default(), true).into()]; + vm.builtin_runners = vec![SignatureBuiltinRunner::new(Some(512), true).into()]; vm.segments = segments![ ((1, 0), (0, 3)), ( diff --git a/vm/src/types/instance_definitions/ec_op_instance_def.rs b/vm/src/types/instance_definitions/ec_op_instance_def.rs index 01145e8f89..3f4bc6ac2a 100644 --- a/vm/src/types/instance_definitions/ec_op_instance_def.rs +++ b/vm/src/types/instance_definitions/ec_op_instance_def.rs @@ -3,7 +3,6 @@ use serde::Serialize; pub(crate) const CELLS_PER_EC_OP: u32 = 7; pub(crate) const INPUT_CELLS_PER_EC_OP: u32 = 5; pub(crate) const SCALAR_HEIGHT: u32 = 256; -pub(crate) const SCALAR_BITS: u32 = 252; #[derive(Serialize, Clone, Debug, PartialEq)] pub(crate) struct EcOpInstanceDef { diff --git a/vm/src/types/instance_definitions/ecdsa_instance_def.rs b/vm/src/types/instance_definitions/ecdsa_instance_def.rs index 518e5f5288..42f2ad6beb 100644 --- a/vm/src/types/instance_definitions/ecdsa_instance_def.rs +++ b/vm/src/types/instance_definitions/ecdsa_instance_def.rs @@ -1,44 +1,23 @@ use serde::Serialize; pub(crate) const CELLS_PER_SIGNATURE: u32 = 2; -pub(crate) const _INPUTCELLS_PER_SIGNATURE: u32 = 2; -#[derive(Serialize, Debug, PartialEq)] +#[derive(Serialize, Clone, Debug, PartialEq)] pub(crate) struct EcdsaInstanceDef { pub(crate) ratio: Option, - pub(crate) _repetitions: u32, - pub(crate) _height: u32, - pub(crate) _n_hash_bits: u32, } -impl EcdsaInstanceDef { - pub(crate) fn default() -> Self { - EcdsaInstanceDef { - ratio: Some(512), - _repetitions: 1, - _height: 256, - _n_hash_bits: 251, - } +impl Default for EcdsaInstanceDef { + fn default() -> Self { + EcdsaInstanceDef { ratio: Some(512) } } +} +impl EcdsaInstanceDef { pub(crate) fn new(ratio: Option) -> Self { - EcdsaInstanceDef { - ratio, - _repetitions: 1, - _height: 256, - _n_hash_bits: 251, - } - } - - pub(crate) fn _cells_per_builtin(&self) -> u32 { - CELLS_PER_SIGNATURE - } - - pub(crate) fn _range_check_units_per_builtin(&self) -> u32 { - 0 + EcdsaInstanceDef { ratio } } } - #[cfg(test)] mod tests { use super::*; @@ -46,41 +25,17 @@ mod tests { #[cfg(target_arch = "wasm32")] use wasm_bindgen_test::*; - #[test] - #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] - fn get_range_check_units_per_builtin() { - let builtin_instance = EcdsaInstanceDef::default(); - assert_eq!(builtin_instance._range_check_units_per_builtin(), 0); - } - - #[test] - #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] - fn get_cells_per_builtin() { - let builtin_instance = EcdsaInstanceDef::default(); - assert_eq!(builtin_instance._cells_per_builtin(), 2); - } - #[test] #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] fn test_new() { - let builtin_instance = EcdsaInstanceDef { - ratio: Some(8), - _repetitions: 1, - _height: 256, - _n_hash_bits: 251, - }; + let builtin_instance = EcdsaInstanceDef { ratio: Some(8) }; assert_eq!(EcdsaInstanceDef::new(Some(8)), builtin_instance); } #[test] #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] fn test_default() { - let builtin_instance = EcdsaInstanceDef { - ratio: Some(512), - _repetitions: 1, - _height: 256, - _n_hash_bits: 251, - }; + let builtin_instance = EcdsaInstanceDef { ratio: Some(512) }; assert_eq!(EcdsaInstanceDef::default(), builtin_instance); } } diff --git a/vm/src/vm/runners/builtin_runner/mod.rs b/vm/src/vm/runners/builtin_runner/mod.rs index 191b6c9a5d..b7fec67024 100644 --- a/vm/src/vm/runners/builtin_runner/mod.rs +++ b/vm/src/vm/runners/builtin_runner/mod.rs @@ -636,15 +636,11 @@ mod tests { use crate::hint_processor::builtin_hint_processor::builtin_hint_processor_definition::BuiltinHintProcessor; use crate::relocatable; use crate::serde::deserialize_program::BuiltinName; - use crate::types::instance_definitions::ecdsa_instance_def::EcdsaInstanceDef; use crate::types::instance_definitions::keccak_instance_def::KeccakInstanceDef; use crate::types::program::Program; use crate::vm::errors::memory_errors::InsufficientAllocatedCellsError; use crate::vm::runners::cairo_runner::CairoRunner; - use crate::{ - types::instance_definitions::ec_op_instance_def::EcOpInstanceDef, utils::test_utils::*, - vm::vm_core::VirtualMachine, - }; + use crate::{utils::test_utils::*, vm::vm_core::VirtualMachine}; use assert_matches::assert_matches; #[cfg(target_arch = "wasm32")] @@ -685,7 +681,7 @@ mod tests { #[test] #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] fn get_n_input_cells_ecdsa() { - let signature = SignatureBuiltinRunner::new(&EcdsaInstanceDef::new(Some(10)), true); + let signature = SignatureBuiltinRunner::new(Some(10), true); let builtin: BuiltinRunner = signature.clone().into(); assert_eq!(signature.n_input_cells, builtin.n_input_cells()) } @@ -733,7 +729,7 @@ mod tests { #[test] #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] fn get_cells_per_instance_ecdsa() { - let signature = SignatureBuiltinRunner::new(&EcdsaInstanceDef::new(Some(10)), true); + let signature = SignatureBuiltinRunner::new(Some(10), true); let builtin: BuiltinRunner = signature.clone().into(); assert_eq!(signature.cells_per_instance, builtin.cells_per_instance()) } @@ -789,7 +785,7 @@ mod tests { #[test] #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] fn get_name_ecdsa() { - let signature = SignatureBuiltinRunner::new(&EcdsaInstanceDef::new(Some(10)), true); + let signature = SignatureBuiltinRunner::new(Some(10), true); let builtin: BuiltinRunner = signature.into(); assert_eq!(SIGNATURE_BUILTIN_NAME, builtin.name()) } @@ -1646,10 +1642,7 @@ mod tests { &KeccakInstanceDef::default(), false, )), - BuiltinRunner::Signature(SignatureBuiltinRunner::new( - &EcdsaInstanceDef::default(), - false, - )), + BuiltinRunner::Signature(SignatureBuiltinRunner::new(Some(512), false)), ]; let vm = vm!(); @@ -1674,10 +1667,7 @@ mod tests { &KeccakInstanceDef::default(), false, )), - BuiltinRunner::Signature(SignatureBuiltinRunner::new( - &EcdsaInstanceDef::default(), - false, - )), + BuiltinRunner::Signature(SignatureBuiltinRunner::new(Some(512), false)), BuiltinRunner::Poseidon(PoseidonBuiltinRunner::new(Some(32), false)), BuiltinRunner::SegmentArena(SegmentArenaBuiltinRunner::new(false)), ]; diff --git a/vm/src/vm/runners/builtin_runner/signature.rs b/vm/src/vm/runners/builtin_runner/signature.rs index 3d5fa6ef45..2f09a6899c 100644 --- a/vm/src/vm/runners/builtin_runner/signature.rs +++ b/vm/src/vm/runners/builtin_runner/signature.rs @@ -7,10 +7,7 @@ use crate::types::instance_definitions::ecdsa_instance_def::CELLS_PER_SIGNATURE; use crate::vm::runners::cairo_pie::BuiltinAdditionalData; use crate::Felt252; use crate::{ - types::{ - instance_definitions::ecdsa_instance_def::EcdsaInstanceDef, - relocatable::{MaybeRelocatable, Relocatable}, - }, + types::relocatable::{MaybeRelocatable, Relocatable}, vm::{ errors::memory_errors::MemoryError, vm_memory::{ @@ -40,21 +37,19 @@ pub struct SignatureBuiltinRunner { base: usize, pub(crate) cells_per_instance: u32, pub(crate) n_input_cells: u32, - _total_n_bits: u32, pub(crate) stop_ptr: Option, pub(crate) instances_per_component: u32, signatures: Rc>>, } impl SignatureBuiltinRunner { - pub(crate) fn new(instance_def: &EcdsaInstanceDef, included: bool) -> Self { + pub(crate) fn new(ratio: Option, included: bool) -> Self { SignatureBuiltinRunner { base: 0, included, - ratio: instance_def.ratio, + ratio, cells_per_instance: 2, n_input_cells: 2, - _total_n_bits: 251, stop_ptr: None, instances_per_component: 1, signatures: Rc::new(RefCell::new(HashMap::new())), @@ -227,7 +222,6 @@ mod tests { use super::*; use crate::{ relocatable, - types::instance_definitions::ecdsa_instance_def::EcdsaInstanceDef, utils::test_utils::*, vm::{ errors::{ @@ -246,8 +240,7 @@ mod tests { #[test] fn get_used_cells_and_allocated_size_valid() { - let builtin: BuiltinRunner = - SignatureBuiltinRunner::new(&EcdsaInstanceDef::new(Some(10)), true).into(); + let builtin: BuiltinRunner = SignatureBuiltinRunner::new(Some(10), true).into(); let mut vm = vm!(); vm.current_step = 110; vm.segments.segment_used_sizes = Some(vec![1]); @@ -257,7 +250,7 @@ mod tests { #[test] #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] fn initialize_segments_for_ecdsa() { - let mut builtin = SignatureBuiltinRunner::new(&EcdsaInstanceDef::default(), true); + let mut builtin = SignatureBuiltinRunner::new(Some(512), true); let mut segments = MemorySegmentManager::new(); builtin.initialize_segments(&mut segments); assert_eq!(builtin.base, 0); @@ -266,8 +259,7 @@ mod tests { #[test] #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] fn get_used_instances() { - let builtin: BuiltinRunner = - SignatureBuiltinRunner::new(&EcdsaInstanceDef::default(), true).into(); + let builtin: BuiltinRunner = SignatureBuiltinRunner::new(Some(512), true).into(); let mut vm = vm!(); vm.segments.segment_used_sizes = Some(vec![1]); @@ -278,8 +270,7 @@ mod tests { #[test] #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] fn final_stack() { - let mut builtin: BuiltinRunner = - SignatureBuiltinRunner::new(&EcdsaInstanceDef::default(), true).into(); + let mut builtin: BuiltinRunner = SignatureBuiltinRunner::new(Some(512), true).into(); let mut vm = vm!(); @@ -303,8 +294,7 @@ mod tests { #[test] #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] fn final_stack_error_stop_pointer() { - let mut builtin: BuiltinRunner = - SignatureBuiltinRunner::new(&EcdsaInstanceDef::default(), true).into(); + let mut builtin: BuiltinRunner = SignatureBuiltinRunner::new(Some(512), true).into(); let mut vm = vm!(); @@ -332,8 +322,7 @@ mod tests { #[test] #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] fn final_stack_error_non_relocatable() { - let mut builtin: BuiltinRunner = - SignatureBuiltinRunner::new(&EcdsaInstanceDef::default(), true).into(); + let mut builtin: BuiltinRunner = SignatureBuiltinRunner::new(Some(512), true).into(); let mut vm = vm!(); @@ -357,10 +346,7 @@ mod tests { #[test] #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] fn get_used_cells_missing_segment_used_sizes() { - let builtin = BuiltinRunner::Signature(SignatureBuiltinRunner::new( - &EcdsaInstanceDef::default(), - true, - )); + let builtin = BuiltinRunner::Signature(SignatureBuiltinRunner::new(Some(512), true)); let vm = vm!(); assert_eq!( @@ -372,10 +358,7 @@ mod tests { #[test] #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] fn get_used_cells_empty() { - let builtin = BuiltinRunner::Signature(SignatureBuiltinRunner::new( - &EcdsaInstanceDef::default(), - true, - )); + let builtin = BuiltinRunner::Signature(SignatureBuiltinRunner::new(Some(512), true)); let mut vm = vm!(); vm.segments.segment_used_sizes = Some(vec![0]); @@ -385,10 +368,7 @@ mod tests { #[test] #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] fn get_used_cells() { - let builtin = BuiltinRunner::Signature(SignatureBuiltinRunner::new( - &EcdsaInstanceDef::default(), - true, - )); + let builtin = BuiltinRunner::Signature(SignatureBuiltinRunner::new(Some(512), true)); let mut vm = vm!(); vm.segments.segment_used_sizes = Some(vec![4]); @@ -398,7 +378,7 @@ mod tests { #[test] #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] fn get_initial_stack_for_range_check_with_base() { - let mut builtin = SignatureBuiltinRunner::new(&EcdsaInstanceDef::default(), true); + let mut builtin = SignatureBuiltinRunner::new(Some(512), true); builtin.base = 1; let initial_stack = builtin.initial_stack(); assert_eq!( @@ -411,7 +391,7 @@ mod tests { #[test] #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] fn initial_stack_not_included_test() { - let ecdsa_builtin = SignatureBuiltinRunner::new(&EcdsaInstanceDef::default(), false); + let ecdsa_builtin = SignatureBuiltinRunner::new(Some(512), false); assert_eq!(ecdsa_builtin.initial_stack(), Vec::new()) } @@ -419,8 +399,7 @@ mod tests { #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] fn deduce_memory_cell_test() { let memory = Memory::new(); - let builtin: BuiltinRunner = - SignatureBuiltinRunner::new(&EcdsaInstanceDef::default(), true).into(); + let builtin: BuiltinRunner = SignatureBuiltinRunner::new(Some(512), true).into(); let result = builtin.deduce_memory_cell(Relocatable::from((0, 5)), &memory); assert_eq!(result, Ok(None)); } @@ -428,22 +407,21 @@ mod tests { #[test] #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] fn test_ratio() { - let builtin = SignatureBuiltinRunner::new(&EcdsaInstanceDef::default(), true); + let builtin = SignatureBuiltinRunner::new(Some(512), true); assert_eq!(builtin.ratio(), Some(512)); } #[test] #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] fn test_base() { - let builtin = SignatureBuiltinRunner::new(&EcdsaInstanceDef::default(), true); + let builtin = SignatureBuiltinRunner::new(Some(512), true); assert_eq!(builtin.base(), 0); } #[test] #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] fn get_allocated_memory_min_step_not_reached() { - let builtin: BuiltinRunner = - SignatureBuiltinRunner::new(&EcdsaInstanceDef::default(), true).into(); + let builtin: BuiltinRunner = SignatureBuiltinRunner::new(Some(512), true).into(); let mut vm = vm!(); vm.current_step = 500; assert_eq!( @@ -460,8 +438,7 @@ mod tests { #[test] #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] fn get_used_cells_and_allocated_size_insufficient_allocated() { - let builtin: BuiltinRunner = - SignatureBuiltinRunner::new(&EcdsaInstanceDef::default(), true).into(); + let builtin: BuiltinRunner = SignatureBuiltinRunner::new(Some(512), true).into(); let mut vm = vm!(); vm.segments.segment_used_sizes = Some(vec![50]); vm.current_step = 512; @@ -480,8 +457,7 @@ mod tests { #[test] #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] fn final_stack_invalid_stop_pointer() { - let mut builtin: BuiltinRunner = - SignatureBuiltinRunner::new(&EcdsaInstanceDef::default(), true).into(); + let mut builtin: BuiltinRunner = SignatureBuiltinRunner::new(Some(512), true).into(); let mut vm = vm!(); vm.segments = segments![((0, 0), (1, 0))]; assert_eq!( @@ -497,8 +473,7 @@ mod tests { #[test] #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] fn final_stack_no_used_instances() { - let mut builtin: BuiltinRunner = - SignatureBuiltinRunner::new(&EcdsaInstanceDef::default(), true).into(); + let mut builtin: BuiltinRunner = SignatureBuiltinRunner::new(Some(512), true).into(); let mut vm = vm!(); vm.segments = segments![((0, 0), (0, 0))]; assert_eq!( @@ -509,7 +484,7 @@ mod tests { #[test] fn get_additional_info() { - let mut builtin = SignatureBuiltinRunner::new(&EcdsaInstanceDef::default(), true); + let mut builtin = SignatureBuiltinRunner::new(Some(512), true); let signatures = HashMap::from([( Relocatable::from((4, 0)), Signature { diff --git a/vm/src/vm/runners/cairo_runner.rs b/vm/src/vm/runners/cairo_runner.rs index 826049b023..2686a4be7a 100644 --- a/vm/src/vm/runners/cairo_runner.rs +++ b/vm/src/vm/runners/cairo_runner.rs @@ -22,7 +22,6 @@ use crate::{ types::{ errors::{math_errors::MathError, program_errors::ProgramError}, exec_scope::ExecutionScopes, - instance_definitions::ecdsa_instance_def::EcdsaInstanceDef, layout::CairoLayout, program::Program, relocatable::{relocate_address, relocate_value, MaybeRelocatable, Relocatable}, @@ -300,7 +299,8 @@ impl CairoRunner { if let Some(instance_def) = self.layout.builtins.ecdsa.as_ref() { let included = program_builtins.remove(&BuiltinName::ecdsa); if included || self.is_proof_mode() { - builtin_runners.push(SignatureBuiltinRunner::new(instance_def, included).into()); + builtin_runners + .push(SignatureBuiltinRunner::new(instance_def.ratio, included).into()); } } @@ -404,9 +404,9 @@ impl CairoRunner { BuiltinName::output => vm .builtin_runners .push(OutputBuiltinRunner::new(true).into()), - BuiltinName::ecdsa => vm.builtin_runners.push( - SignatureBuiltinRunner::new(&EcdsaInstanceDef::new(Some(1)), true).into(), - ), + BuiltinName::ecdsa => vm + .builtin_runners + .push(SignatureBuiltinRunner::new(Some(1), true).into()), BuiltinName::bitwise => vm .builtin_runners .push(BitwiseBuiltinRunner::new(Some(1), true).into()), diff --git a/vm/src/vm/vm_core.rs b/vm/src/vm/vm_core.rs index 0fa1b5b84a..7b6bc10e71 100644 --- a/vm/src/vm/vm_core.rs +++ b/vm/src/vm/vm_core.rs @@ -1290,7 +1290,6 @@ mod tests { }, relocatable, types::{ - instance_definitions::ec_op_instance_def::EcOpInstanceDef, instruction::{Op1Addr, Register}, relocatable::Relocatable, }, diff --git a/vm/src/vm/vm_memory/memory.rs b/vm/src/vm/vm_memory/memory.rs index c776fa14d3..2ea342573b 100644 --- a/vm/src/vm/vm_memory/memory.rs +++ b/vm/src/vm/vm_memory/memory.rs @@ -629,7 +629,6 @@ mod memory_tests { use super::*; use crate::{ felt_hex, relocatable, - types::instance_definitions::ecdsa_instance_def::EcdsaInstanceDef, utils::test_utils::*, vm::{ runners::builtin_runner::{ @@ -855,7 +854,7 @@ mod memory_tests { #[test] #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] fn validate_existing_memory_for_invalid_signature() { - let mut builtin = SignatureBuiltinRunner::new(&EcdsaInstanceDef::default(), true); + let mut builtin = SignatureBuiltinRunner::new(Some(512), true); let mut segments = MemorySegmentManager::new(); builtin.initialize_segments(&mut segments); segments.memory = memory![ @@ -885,7 +884,7 @@ mod memory_tests { #[test] #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] fn validate_existing_memory_for_valid_signature() { - let mut builtin = SignatureBuiltinRunner::new(&EcdsaInstanceDef::default(), true); + let mut builtin = SignatureBuiltinRunner::new(Some(512), true); let signature_r = felt_hex!("0x411494b501a98abd8262b0da1351e17899a0c4ef23dd2f96fec5ba847310b20"); From f5a50087f5a55be273dd6b571cf111a564e2131e Mon Sep 17 00:00:00 2001 From: Federica Date: Wed, 10 Apr 2024 18:37:02 -0300 Subject: [PATCH 08/22] Clean Keccak instance def --- .../builtins_instance_def.rs | 4 +- .../keccak_instance_def.rs | 62 ++------- vm/src/vm/runners/builtin_runner/keccak.rs | 125 +++++++----------- vm/src/vm/runners/builtin_runner/mod.rs | 54 ++------ vm/src/vm/runners/cairo_runner.rs | 10 +- 5 files changed, 78 insertions(+), 177 deletions(-) diff --git a/vm/src/types/instance_definitions/builtins_instance_def.rs b/vm/src/types/instance_definitions/builtins_instance_def.rs index b54cd3c849..00e2c80878 100644 --- a/vm/src/types/instance_definitions/builtins_instance_def.rs +++ b/vm/src/types/instance_definitions/builtins_instance_def.rs @@ -112,7 +112,7 @@ impl BuiltinsInstanceDef { ecdsa: Some(EcdsaInstanceDef::new(Some(2048))), bitwise: Some(BitwiseInstanceDef::new(Some(64))), ec_op: Some(EcOpInstanceDef::new(Some(1024))), - keccak: Some(KeccakInstanceDef::new(Some(2048), vec![200; 8])), + keccak: Some(KeccakInstanceDef::new(Some(2048))), poseidon: Some(PoseidonInstanceDef::default()), range_check96: None, add_mod: None, @@ -144,7 +144,7 @@ impl BuiltinsInstanceDef { ecdsa: Some(EcdsaInstanceDef::new(Some(2048))), bitwise: Some(BitwiseInstanceDef::new(Some(16))), ec_op: Some(EcOpInstanceDef::new(Some(1024))), - keccak: Some(KeccakInstanceDef::new(Some(2048), vec![200; 8])), + keccak: Some(KeccakInstanceDef::new(Some(2048))), poseidon: Some(PoseidonInstanceDef::new(Some(256))), range_check96: Some(RangeCheckInstanceDef::new(Some(8))), #[cfg(feature = "mod_builtin")] diff --git a/vm/src/types/instance_definitions/keccak_instance_def.rs b/vm/src/types/instance_definitions/keccak_instance_def.rs index 655c361fcc..0da9150eb1 100644 --- a/vm/src/types/instance_definitions/keccak_instance_def.rs +++ b/vm/src/types/instance_definitions/keccak_instance_def.rs @@ -1,39 +1,26 @@ use crate::stdlib::prelude::*; use serde::Serialize; +pub(crate) const INPUT_CELLS_PER_KECCAK: u32 = 8; +pub(crate) const CELLS_PER_KECCAK: u32 = 16; +pub(crate) const STATE_REP: [u32; 8] = [200; 8]; +pub(crate) const INSTANCE_PER_COMPONENT: u32 = 16; + #[derive(Serialize, Clone, Debug, PartialEq)] pub(crate) struct KeccakInstanceDef { pub(crate) ratio: Option, - pub(crate) _state_rep: Vec, - pub(crate) _instance_per_component: u32, } impl Default for KeccakInstanceDef { fn default() -> Self { - Self { - // ratio should be equal to 2 ** 11 -> 2048 - ratio: Some(2048), - _state_rep: vec![200; 8], - _instance_per_component: 16, - } + // ratio should be equal to 2 ** 11 -> 2048 + KeccakInstanceDef { ratio: Some(2048) } } } impl KeccakInstanceDef { - pub(crate) fn new(ratio: Option, _state_rep: Vec) -> Self { - Self { - ratio, - _state_rep, - ..Default::default() - } - } - - pub(crate) fn cells_per_builtin(&self) -> u32 { - 2 * self._state_rep.len() as u32 - } - - pub(crate) fn _range_check_units_per_builtin(&self) -> u32 { - 0 + pub(crate) fn new(ratio: Option) -> Self { + KeccakInstanceDef { ratio } } } @@ -44,42 +31,17 @@ mod tests { #[cfg(target_arch = "wasm32")] use wasm_bindgen_test::*; - #[test] - #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] - fn get_range_check_units_per_builtin() { - let builtin_instance = KeccakInstanceDef::default(); - assert_eq!(builtin_instance._range_check_units_per_builtin(), 0); - } - - #[test] - #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] - fn get_cells_per_builtin() { - let builtin_instance = KeccakInstanceDef::default(); - assert_eq!(builtin_instance.cells_per_builtin(), 16); - } - #[test] #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] fn test_new() { - let builtin_instance = KeccakInstanceDef { - ratio: Some(2048), - _state_rep: vec![200; 8], - _instance_per_component: 16, - }; - assert_eq!( - KeccakInstanceDef::new(Some(2048), vec![200; 8]), - builtin_instance - ); + let builtin_instance = KeccakInstanceDef { ratio: Some(2048) }; + assert_eq!(KeccakInstanceDef::new(Some(2048)), builtin_instance); } #[test] #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] fn test_default() { - let builtin_instance = KeccakInstanceDef { - ratio: Some(2048), - _state_rep: vec![200; 8], - _instance_per_component: 16, - }; + let builtin_instance = KeccakInstanceDef { ratio: Some(2048) }; assert_eq!(KeccakInstanceDef::default(), builtin_instance); } } diff --git a/vm/src/vm/runners/builtin_runner/keccak.rs b/vm/src/vm/runners/builtin_runner/keccak.rs index cbd5ad0dc5..904ccd9567 100644 --- a/vm/src/vm/runners/builtin_runner/keccak.rs +++ b/vm/src/vm/runners/builtin_runner/keccak.rs @@ -1,44 +1,45 @@ use crate::air_private_input::{PrivateInput, PrivateInputKeccakState}; use crate::math_utils::safe_div_usize; use crate::stdlib::{cell::RefCell, collections::HashMap, prelude::*}; -use crate::types::instance_definitions::keccak_instance_def::KeccakInstanceDef; +use crate::types::instance_definitions::keccak_instance_def::{ + CELLS_PER_KECCAK, INPUT_CELLS_PER_KECCAK, INSTANCE_PER_COMPONENT, +}; use crate::types::relocatable::{MaybeRelocatable, Relocatable}; use crate::vm::errors::memory_errors::MemoryError; use crate::vm::errors::runner_errors::RunnerError; use crate::vm::vm_memory::memory::Memory; use crate::vm::vm_memory::memory_segments::MemorySegmentManager; use crate::Felt252; +use lazy_static::lazy_static; use num_bigint::BigUint; use num_integer::div_ceil; use super::KECCAK_BUILTIN_NAME; const KECCAK_FELT_BYTE_SIZE: usize = 25; // 200 / 8 +const BITS: u32 = 200; +lazy_static! { + static ref KECCAK_INPUT_MAX: Felt252 = Felt252::TWO.pow(BITS); +} #[derive(Debug, Clone)] pub struct KeccakBuiltinRunner { ratio: Option, pub base: usize, - pub(crate) cells_per_instance: u32, - pub(crate) n_input_cells: u32, pub(crate) stop_ptr: Option, pub(crate) included: bool, - state_rep: Vec, pub(crate) instances_per_component: u32, cache: RefCell>, } impl KeccakBuiltinRunner { - pub(crate) fn new(instance_def: &KeccakInstanceDef, included: bool) -> Self { + pub(crate) fn new(ratio: Option, included: bool) -> Self { KeccakBuiltinRunner { base: 0, - ratio: instance_def.ratio, - n_input_cells: instance_def._state_rep.len() as u32, - cells_per_instance: instance_def.cells_per_builtin(), + ratio, stop_ptr: None, included, - instances_per_component: instance_def._instance_per_component, - state_rep: instance_def._state_rep.clone(), + instances_per_component: INSTANCE_PER_COMPONENT, cache: RefCell::new(HashMap::new()), } } @@ -68,19 +69,19 @@ impl KeccakBuiltinRunner { address: Relocatable, memory: &Memory, ) -> Result, RunnerError> { - let index = address.offset % self.cells_per_instance as usize; - if index < self.n_input_cells as usize { + let index = address.offset % CELLS_PER_KECCAK as usize; + if index < INPUT_CELLS_PER_KECCAK as usize { return Ok(None); } if let Some(felt) = self.cache.borrow().get(&address) { return Ok(Some(felt.into())); } let first_input_addr = (address - index)?; - let first_output_addr = (first_input_addr + self.n_input_cells as usize)?; + let first_output_addr = (first_input_addr + INPUT_CELLS_PER_KECCAK as usize)?; let mut input_felts = vec![]; - for i in 0..self.n_input_cells as usize { + for i in 0..INPUT_CELLS_PER_KECCAK as usize { let m_index = (first_input_addr + i)?; let val = match memory.get(&m_index) { Some(value) => { @@ -90,10 +91,10 @@ impl KeccakBuiltinRunner { KECCAK_BUILTIN_NAME, (first_input_addr + i)?, ))))?; - if num >= &(Felt252::TWO.pow(self.state_rep[i])) { + if num >= &KECCAK_INPUT_MAX { return Err(RunnerError::IntegerBiggerThanPowerOfTwo(Box::new(( (first_input_addr + i)?, - self.state_rep[i], + BITS, *num, )))); } @@ -114,8 +115,8 @@ impl KeccakBuiltinRunner { let keccak_result = Self::keccak_f(&input_message)?; let mut start_index = 0_usize; - for (i, bits) in self.state_rep.iter().enumerate() { - let end_index = start_index + *bits as usize / 8; + for i in 0..INPUT_CELLS_PER_KECCAK { + let end_index = start_index + BITS as usize / 8; self.cache.borrow_mut().insert((first_output_addr + i)?, { let mut bytes = keccak_result[start_index..end_index].to_vec(); bytes.resize(32, 0); @@ -137,7 +138,7 @@ impl KeccakBuiltinRunner { segments: &MemorySegmentManager, ) -> Result { let used_cells = self.get_used_cells(segments)?; - Ok(div_ceil(used_cells, self.cells_per_instance as usize)) + Ok(div_ceil(used_cells, CELLS_PER_KECCAK as usize)) } pub fn get_used_diluted_check_units(&self, diluted_n_bits: u32) -> usize { @@ -169,7 +170,7 @@ impl KeccakBuiltinRunner { if let Some(segment) = memory.data.get(self.base) { let segment_len = segment.len(); for (index, off) in (0..segment_len) - .step_by(self.cells_per_instance as usize) + .step_by(CELLS_PER_KECCAK as usize) .enumerate() { // Add the input cells of each keccak instance to the private inputs @@ -231,8 +232,7 @@ mod tests { #[test] #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] fn get_used_instances() { - let builtin: BuiltinRunner = - KeccakBuiltinRunner::new(&KeccakInstanceDef::new(Some(10), vec![200; 8]), true).into(); + let builtin: BuiltinRunner = KeccakBuiltinRunner::new(Some(10), true).into(); let mut vm = vm!(); vm.segments.segment_used_sizes = Some(vec![1]); @@ -243,8 +243,7 @@ mod tests { #[test] #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] fn final_stack() { - let mut builtin: BuiltinRunner = - KeccakBuiltinRunner::new(&KeccakInstanceDef::new(Some(10), vec![200; 8]), true).into(); + let mut builtin: BuiltinRunner = KeccakBuiltinRunner::new(Some(10), true).into(); let mut vm = vm!(); @@ -268,8 +267,7 @@ mod tests { #[test] #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] fn final_stack_error_stop_pointer() { - let mut builtin: BuiltinRunner = - KeccakBuiltinRunner::new(&KeccakInstanceDef::new(Some(10), vec![200; 8]), true).into(); + let mut builtin: BuiltinRunner = KeccakBuiltinRunner::new(Some(10), true).into(); let mut vm = vm!(); @@ -296,8 +294,7 @@ mod tests { #[test] #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] fn final_stack_error_when_not_included() { - let mut builtin: BuiltinRunner = - KeccakBuiltinRunner::new(&KeccakInstanceDef::new(Some(10), vec![200; 8]), false).into(); + let mut builtin: BuiltinRunner = KeccakBuiltinRunner::new(Some(10), false).into(); let mut vm = vm!(); @@ -321,8 +318,7 @@ mod tests { #[test] #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] fn final_stack_error_non_relocatable() { - let mut builtin: BuiltinRunner = - KeccakBuiltinRunner::new(&KeccakInstanceDef::new(Some(10), vec![200; 8]), true).into(); + let mut builtin: BuiltinRunner = KeccakBuiltinRunner::new(Some(10), true).into(); let mut vm = vm!(); @@ -346,8 +342,7 @@ mod tests { #[test] #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] fn get_used_cells_and_allocated_size_test() { - let builtin: BuiltinRunner = - KeccakBuiltinRunner::new(&KeccakInstanceDef::new(Some(10), vec![200; 8]), true).into(); + let builtin: BuiltinRunner = KeccakBuiltinRunner::new(Some(10), true).into(); let mut vm = vm!(); @@ -377,8 +372,7 @@ mod tests { #[test] #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] fn get_allocated_memory_units() { - let builtin: BuiltinRunner = - KeccakBuiltinRunner::new(&KeccakInstanceDef::new(Some(10), vec![200; 8]), true).into(); + let builtin: BuiltinRunner = KeccakBuiltinRunner::new(Some(10), true).into(); let mut vm = vm!(); vm.current_step = 160; @@ -389,8 +383,7 @@ mod tests { #[test] #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] fn get_used_cells_missing_segment_used_sizes() { - let builtin: BuiltinRunner = - KeccakBuiltinRunner::new(&KeccakInstanceDef::default(), true).into(); + let builtin: BuiltinRunner = KeccakBuiltinRunner::new(Some(2048), true).into(); let vm = vm!(); assert_eq!( @@ -402,8 +395,7 @@ mod tests { #[test] #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] fn get_used_cells_empty() { - let builtin: BuiltinRunner = - KeccakBuiltinRunner::new(&KeccakInstanceDef::default(), true).into(); + let builtin: BuiltinRunner = KeccakBuiltinRunner::new(Some(2048), true).into(); let mut vm = vm!(); vm.segments.segment_used_sizes = Some(vec![0]); @@ -413,8 +405,7 @@ mod tests { #[test] #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] fn get_used_cells() { - let builtin: BuiltinRunner = - KeccakBuiltinRunner::new(&KeccakInstanceDef::default(), true).into(); + let builtin: BuiltinRunner = KeccakBuiltinRunner::new(Some(2048), true).into(); let mut vm = vm!(); vm.segments.segment_used_sizes = Some(vec![4]); @@ -424,7 +415,7 @@ mod tests { #[test] #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] fn initial_stackincluded_test() { - let keccak_builtin = KeccakBuiltinRunner::new(&KeccakInstanceDef::default(), true); + let keccak_builtin = KeccakBuiltinRunner::new(Some(2048), true); assert_eq!( keccak_builtin.initial_stack(), vec![mayberelocatable!(0, 0)] @@ -434,7 +425,7 @@ mod tests { #[test] #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] fn initial_stack_notincluded_test() { - let keccak_builtin = KeccakBuiltinRunner::new(&KeccakInstanceDef::default(), false); + let keccak_builtin = KeccakBuiltinRunner::new(Some(2048), false); assert_eq!(keccak_builtin.initial_stack(), Vec::new()) } @@ -463,7 +454,7 @@ mod tests { ((0, 34), 0), ((0, 35), 0) ]; - let builtin = KeccakBuiltinRunner::new(&KeccakInstanceDef::default(), true); + let builtin = KeccakBuiltinRunner::new(Some(2048), true); let result = builtin.deduce_memory_cell(Relocatable::from((0, 25)), &memory); assert_eq!( @@ -484,7 +475,7 @@ mod tests { ((0, 7), 120), ((0, 8), 52) ]; - let builtin = KeccakBuiltinRunner::new(&KeccakInstanceDef::default(), true); + let builtin = KeccakBuiltinRunner::new(Some(2048), true); let result = builtin.deduce_memory_cell(Relocatable::from((0, 1)), &memory); assert_eq!(result, Ok(None)); } @@ -493,7 +484,7 @@ mod tests { #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] fn deduce_memory_cell_offset_lt_input_cell_length_none() { let memory = memory![((0, 4), 32)]; - let builtin = KeccakBuiltinRunner::new(&KeccakInstanceDef::default(), true); + let builtin = KeccakBuiltinRunner::new(Some(2048), true); let result = builtin.deduce_memory_cell(Relocatable::from((0, 2)), &memory); assert_eq!(result, Ok(None)); } @@ -503,10 +494,7 @@ mod tests { fn deduce_memory_cell_expected_integer() { let memory = memory![((0, 0), (1, 2))]; - let mut builtin = KeccakBuiltinRunner::new(&KeccakInstanceDef::default(), true); - - builtin.n_input_cells = 1; - builtin.cells_per_instance = 100; + let mut builtin = KeccakBuiltinRunner::new(Some(2048), true); let result = builtin.deduce_memory_cell(Relocatable::from((0, 1)), &memory); @@ -524,37 +512,19 @@ mod tests { fn deduce_memory_cell_missing_input_cells() { let memory = memory![((0, 1), (1, 2))]; - let mut builtin = KeccakBuiltinRunner::new(&KeccakInstanceDef::default(), true); - - builtin.n_input_cells = 1; - builtin.cells_per_instance = 100; + let mut builtin = KeccakBuiltinRunner::new(Some(2048), true); let result = builtin.deduce_memory_cell(Relocatable::from((0, 1)), &memory); assert_eq!(result, Ok(None)); } - #[test] - #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] - fn deduce_memory_cell_input_cell() { - let memory = memory![((0, 0), (1, 2))]; - - let mut builtin = KeccakBuiltinRunner::new(&KeccakInstanceDef::default(), true); - - builtin.n_input_cells = 1; - builtin.cells_per_instance = 100; - - let result = builtin.deduce_memory_cell(Relocatable::from((0, 0)), &memory); - - assert_eq!(result, Ok(None)); - } - #[test] #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] fn deduce_memory_cell_get_memory_err() { let memory = memory![((0, 35), 0)]; - let builtin = KeccakBuiltinRunner::new(&KeccakInstanceDef::default(), true); + let builtin = KeccakBuiltinRunner::new(Some(2048), true); let result = builtin.deduce_memory_cell(Relocatable::from((0, 15)), &memory); @@ -564,8 +534,7 @@ mod tests { #[test] #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] fn deduce_memory_cell_memory_int_larger_than_bits() { - let memory = memory![ - ((0, 16), 43), + let mut memory = memory![ ((0, 17), 199), ((0, 18), 0), ((0, 19), 0), @@ -587,8 +556,9 @@ mod tests { ((0, 35), 0) ]; - let keccak_instance = KeccakInstanceDef::new(Some(2048), vec![1; 8]); - let builtin = KeccakBuiltinRunner::new(&keccak_instance, true); + memory.insert((0, 16).into(), Felt252::MAX); + + let builtin = KeccakBuiltinRunner::new(Some(2048), true); let result = builtin.deduce_memory_cell(Relocatable::from((0, 25)), &memory); @@ -596,8 +566,8 @@ mod tests { result, Err(RunnerError::IntegerBiggerThanPowerOfTwo(Box::new(( (0, 16).into(), - 1, - 43.into() + BITS, + Felt252::MAX )))) ); } @@ -605,7 +575,7 @@ mod tests { #[test] #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] fn get_used_diluted_check_units_result() { - let builtin = KeccakBuiltinRunner::new(&KeccakInstanceDef::default(), true); + let builtin = KeccakBuiltinRunner::new(Some(2048), true); let result: usize = builtin.get_used_diluted_check_units(16); @@ -623,8 +593,7 @@ mod tests { #[test] #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] fn get_air_private_input() { - let builtin: BuiltinRunner = - KeccakBuiltinRunner::new(&KeccakInstanceDef::default(), true).into(); + let builtin: BuiltinRunner = KeccakBuiltinRunner::new(Some(2048), true).into(); let segments = segments![ ((0, 0), 0), diff --git a/vm/src/vm/runners/builtin_runner/mod.rs b/vm/src/vm/runners/builtin_runner/mod.rs index b7fec67024..681bdc955b 100644 --- a/vm/src/vm/runners/builtin_runner/mod.rs +++ b/vm/src/vm/runners/builtin_runner/mod.rs @@ -1,6 +1,9 @@ use crate::air_private_input::PrivateInput; use crate::math_utils::safe_div_usize; use crate::stdlib::prelude::*; +use crate::types::instance_definitions::keccak_instance_def::{ + CELLS_PER_KECCAK, INPUT_CELLS_PER_KECCAK, +}; use crate::types::relocatable::{MaybeRelocatable, Relocatable}; use crate::vm::errors::memory_errors::{self, InsufficientAllocatedCellsError, MemoryError}; use crate::vm::errors::runner_errors::RunnerError; @@ -356,7 +359,7 @@ impl BuiltinRunner { BuiltinRunner::RangeCheck(builtin) => builtin.cells_per_instance, BuiltinRunner::RangeCheck96(builtin) => builtin.cells_per_instance, BuiltinRunner::Output(_) => 0, - BuiltinRunner::Keccak(builtin) => builtin.cells_per_instance, + BuiltinRunner::Keccak(_) => CELLS_PER_KECCAK, BuiltinRunner::Signature(builtin) => builtin.cells_per_instance, BuiltinRunner::Poseidon(builtin) => builtin.cells_per_instance, BuiltinRunner::SegmentArena(builtin) => builtin.cells_per_instance, @@ -372,7 +375,7 @@ impl BuiltinRunner { BuiltinRunner::RangeCheck(builtin) => builtin.n_input_cells, BuiltinRunner::RangeCheck96(builtin) => builtin.n_input_cells, BuiltinRunner::Output(_) => 0, - BuiltinRunner::Keccak(builtin) => builtin.n_input_cells, + BuiltinRunner::Keccak(_) => INPUT_CELLS_PER_KECCAK, BuiltinRunner::Signature(builtin) => builtin.n_input_cells, BuiltinRunner::Poseidon(builtin) => builtin.n_input_cells, BuiltinRunner::SegmentArena(builtin) => builtin.n_input_cells_per_instance, @@ -636,7 +639,6 @@ mod tests { use crate::hint_processor::builtin_hint_processor::builtin_hint_processor_definition::BuiltinHintProcessor; use crate::relocatable; use crate::serde::deserialize_program::BuiltinName; - use crate::types::instance_definitions::keccak_instance_def::KeccakInstanceDef; use crate::types::program::Program; use crate::vm::errors::memory_errors::InsufficientAllocatedCellsError; use crate::vm::runners::cairo_runner::CairoRunner; @@ -742,14 +744,6 @@ mod tests { assert_eq!(0, builtin.cells_per_instance()) } - #[test] - #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] - fn get_cells_per_instance_keccak() { - let keccak = KeccakBuiltinRunner::new(&KeccakInstanceDef::default(), true); - let builtin: BuiltinRunner = keccak.clone().into(); - assert_eq!(keccak.cells_per_instance, builtin.cells_per_instance()) - } - #[test] #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] fn get_name_bitwise() { @@ -979,10 +973,7 @@ mod tests { #[test] #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] fn get_allocated_memory_units_keccak_with_items() { - let builtin = BuiltinRunner::Keccak(KeccakBuiltinRunner::new( - &KeccakInstanceDef::new(Some(10), vec![200; 8]), - true, - )); + let builtin = BuiltinRunner::Keccak(KeccakBuiltinRunner::new(Some(10), true)); let mut vm = vm!(); vm.current_step = 160; @@ -991,10 +982,7 @@ mod tests { #[test] fn get_allocated_memory_units_keccak_min_steps_not_reached() { - let builtin = BuiltinRunner::Keccak(KeccakBuiltinRunner::new( - &KeccakInstanceDef::new(Some(10), vec![200; 8]), - true, - )); + let builtin = BuiltinRunner::Keccak(KeccakBuiltinRunner::new(Some(10), true)); let mut vm = vm!(); vm.current_step = 10; @@ -1060,10 +1048,7 @@ mod tests { #[test] #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] fn get_allocated_memory_units_keccak() { - let builtin = BuiltinRunner::Keccak(KeccakBuiltinRunner::new( - &KeccakInstanceDef::default(), - true, - )); + let builtin = BuiltinRunner::Keccak(KeccakBuiltinRunner::new(Some(2048), true)); let mut vm = vm!(); vm.current_step = 32768; assert_eq!(builtin.get_allocated_memory_units(&vm), Ok(256)); @@ -1121,20 +1106,14 @@ mod tests { #[test] #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] fn get_used_diluted_check_units_keccak_zero_case() { - let builtin = BuiltinRunner::Keccak(KeccakBuiltinRunner::new( - &KeccakInstanceDef::default(), - true, - )); + let builtin = BuiltinRunner::Keccak(KeccakBuiltinRunner::new(Some(2048), true)); assert_eq!(builtin.get_used_diluted_check_units(270, 7), 0); } #[test] #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] fn get_used_diluted_check_units_keccak_non_zero_case() { - let builtin = BuiltinRunner::Keccak(KeccakBuiltinRunner::new( - &KeccakInstanceDef::default(), - true, - )); + let builtin = BuiltinRunner::Keccak(KeccakBuiltinRunner::new(Some(2048), true)); assert_eq!(builtin.get_used_diluted_check_units(0, 8), 32768); } @@ -1570,8 +1549,7 @@ mod tests { RangeCheckBuiltinRunner::::new(Some(8), true), ); assert_eq!(range_check_builtin.ratio(), (Some(8)),); - let keccak_builtin: BuiltinRunner = - KeccakBuiltinRunner::new(&KeccakInstanceDef::default(), true).into(); + let keccak_builtin: BuiltinRunner = KeccakBuiltinRunner::new(Some(2048), true).into(); assert_eq!(keccak_builtin.ratio(), (Some(2048)),); } @@ -1638,10 +1616,7 @@ mod tests { Some(8), false, )), - BuiltinRunner::Keccak(KeccakBuiltinRunner::new( - &KeccakInstanceDef::default(), - false, - )), + BuiltinRunner::Keccak(KeccakBuiltinRunner::new(Some(2048), false)), BuiltinRunner::Signature(SignatureBuiltinRunner::new(Some(512), false)), ]; let vm = vm!(); @@ -1663,10 +1638,7 @@ mod tests { Some(8), false, )), - BuiltinRunner::Keccak(KeccakBuiltinRunner::new( - &KeccakInstanceDef::default(), - false, - )), + BuiltinRunner::Keccak(KeccakBuiltinRunner::new(Some(2048), false)), BuiltinRunner::Signature(SignatureBuiltinRunner::new(Some(512), false)), BuiltinRunner::Poseidon(PoseidonBuiltinRunner::new(Some(32), false)), BuiltinRunner::SegmentArena(SegmentArenaBuiltinRunner::new(false)), diff --git a/vm/src/vm/runners/cairo_runner.rs b/vm/src/vm/runners/cairo_runner.rs index 2686a4be7a..35a90fe76e 100644 --- a/vm/src/vm/runners/cairo_runner.rs +++ b/vm/src/vm/runners/cairo_runner.rs @@ -7,7 +7,6 @@ use crate::{ ops::{Add, AddAssign, Mul, MulAssign, Sub, SubAssign}, prelude::*, }, - types::instance_definitions::keccak_instance_def::KeccakInstanceDef, vm::{ runners::builtin_runner::SegmentArenaBuiltinRunner, trace::trace_entry::{relocate_trace_register, RelocatedTraceEntry}, @@ -322,7 +321,7 @@ impl CairoRunner { if let Some(instance_def) = self.layout.builtins.keccak.as_ref() { let included = program_builtins.remove(&BuiltinName::keccak); if included || self.is_proof_mode() { - builtin_runners.push(KeccakBuiltinRunner::new(instance_def, included).into()); + builtin_runners.push(KeccakBuiltinRunner::new(instance_def.ratio, included).into()); } } @@ -413,10 +412,9 @@ impl CairoRunner { BuiltinName::ec_op => vm .builtin_runners .push(EcOpBuiltinRunner::new(Some(1), true).into()), - BuiltinName::keccak => vm.builtin_runners.push( - KeccakBuiltinRunner::new(&KeccakInstanceDef::new(Some(1), vec![200; 8]), true) - .into(), - ), + BuiltinName::keccak => vm + .builtin_runners + .push(KeccakBuiltinRunner::new(Some(1), true).into()), BuiltinName::poseidon => vm .builtin_runners .push(PoseidonBuiltinRunner::new(Some(1), true).into()), From 2cdbb5a1818dd87880cea488b3af1a1492f7270a Mon Sep 17 00:00:00 2001 From: Federica Date: Wed, 10 Apr 2024 18:49:55 -0300 Subject: [PATCH 09/22] Update tests --- .../hint_processor/builtin_hint_processor/blake2s_utils.rs | 1 - .../builtin_hint_processor/cairo_keccak/keccak_hints.rs | 2 +- vm/src/hint_processor/builtin_hint_processor/ec_utils.rs | 1 - .../builtin_hint_processor/field_arithmetic.rs | 1 - vm/src/hint_processor/builtin_hint_processor/garaga.rs | 1 - .../hint_processor/builtin_hint_processor/keccak_utils.rs | 1 - .../hint_processor/builtin_hint_processor/poseidon_utils.rs | 1 - vm/src/hint_processor/builtin_hint_processor/pow_utils.rs | 2 +- vm/src/hint_processor/builtin_hint_processor/segments.rs | 1 - vm/src/hint_processor/builtin_hint_processor/set.rs | 2 +- .../hint_processor/builtin_hint_processor/sha256_utils.rs | 1 - vm/src/hint_processor/builtin_hint_processor/signature.rs | 3 --- .../hint_processor/builtin_hint_processor/uint256_utils.rs | 5 +---- vm/src/hint_processor/builtin_hint_processor/uint384.rs | 5 +---- .../builtin_hint_processor/uint384_extension.rs | 1 - vm/src/hint_processor/builtin_hint_processor/vrf/fq.rs | 1 - vm/src/types/instance_definitions/keccak_instance_def.rs | 1 - vm/src/utils.rs | 2 +- vm/src/vm/runners/builtin_runner/keccak.rs | 6 +++--- 19 files changed, 9 insertions(+), 29 deletions(-) diff --git a/vm/src/hint_processor/builtin_hint_processor/blake2s_utils.rs b/vm/src/hint_processor/builtin_hint_processor/blake2s_utils.rs index b095bcc69d..e56258018e 100644 --- a/vm/src/hint_processor/builtin_hint_processor/blake2s_utils.rs +++ b/vm/src/hint_processor/builtin_hint_processor/blake2s_utils.rs @@ -301,7 +301,6 @@ mod tests { hint_processor_definition::HintProcessorLogic, }, relocatable, - types::exec_scope::ExecutionScopes, utils::test_utils::*, vm::errors::memory_errors::MemoryError, }; diff --git a/vm/src/hint_processor/builtin_hint_processor/cairo_keccak/keccak_hints.rs b/vm/src/hint_processor/builtin_hint_processor/cairo_keccak/keccak_hints.rs index 0beea39ee9..202cba60a0 100644 --- a/vm/src/hint_processor/builtin_hint_processor/cairo_keccak/keccak_hints.rs +++ b/vm/src/hint_processor/builtin_hint_processor/cairo_keccak/keccak_hints.rs @@ -375,7 +375,7 @@ mod tests { }, hint_processor_definition::{HintProcessorLogic, HintReference}, }, - types::{exec_scope::ExecutionScopes, relocatable::Relocatable}, + types::relocatable::Relocatable, utils::test_utils::*, vm::vm_core::VirtualMachine, }; diff --git a/vm/src/hint_processor/builtin_hint_processor/ec_utils.rs b/vm/src/hint_processor/builtin_hint_processor/ec_utils.rs index 9530141f6d..2b8b0e7685 100644 --- a/vm/src/hint_processor/builtin_hint_processor/ec_utils.rs +++ b/vm/src/hint_processor/builtin_hint_processor/ec_utils.rs @@ -220,7 +220,6 @@ mod tests { use crate::hint_processor::builtin_hint_processor::builtin_hint_processor_definition::HintProcessorData; use crate::hint_processor::hint_processor_definition::HintProcessorLogic; use crate::relocatable; - use crate::types::exec_scope::ExecutionScopes; use crate::types::relocatable::Relocatable; use num_traits::Zero; diff --git a/vm/src/hint_processor/builtin_hint_processor/field_arithmetic.rs b/vm/src/hint_processor/builtin_hint_processor/field_arithmetic.rs index 6f5430a387..9c4ce28fe3 100644 --- a/vm/src/hint_processor/builtin_hint_processor/field_arithmetic.rs +++ b/vm/src/hint_processor/builtin_hint_processor/field_arithmetic.rs @@ -274,7 +274,6 @@ mod tests { }, hint_processor_definition::HintProcessorLogic, }, - types::exec_scope::ExecutionScopes, utils::test_utils::*, vm::vm_core::VirtualMachine, }; diff --git a/vm/src/hint_processor/builtin_hint_processor/garaga.rs b/vm/src/hint_processor/builtin_hint_processor/garaga.rs index 37f5a33025..7c1322fff9 100644 --- a/vm/src/hint_processor/builtin_hint_processor/garaga.rs +++ b/vm/src/hint_processor/builtin_hint_processor/garaga.rs @@ -29,7 +29,6 @@ mod tests { use crate::hint_processor::builtin_hint_processor::builtin_hint_processor_definition::BuiltinHintProcessor; use crate::hint_processor::builtin_hint_processor::builtin_hint_processor_definition::HintProcessorData; use crate::hint_processor::hint_processor_definition::HintProcessorLogic; - use crate::types::exec_scope::ExecutionScopes; use crate::Felt252; use crate::{hint_processor::builtin_hint_processor::hint_code, utils::test_utils::*}; diff --git a/vm/src/hint_processor/builtin_hint_processor/keccak_utils.rs b/vm/src/hint_processor/builtin_hint_processor/keccak_utils.rs index 86eec72eee..69b593e36f 100644 --- a/vm/src/hint_processor/builtin_hint_processor/keccak_utils.rs +++ b/vm/src/hint_processor/builtin_hint_processor/keccak_utils.rs @@ -297,7 +297,6 @@ mod tests { }, hint_processor_definition::{HintProcessorLogic, HintReference}, }, - types::exec_scope::ExecutionScopes, utils::test_utils::*, vm::vm_core::VirtualMachine, }; diff --git a/vm/src/hint_processor/builtin_hint_processor/poseidon_utils.rs b/vm/src/hint_processor/builtin_hint_processor/poseidon_utils.rs index 02a6dd7f25..1cc19daa4d 100644 --- a/vm/src/hint_processor/builtin_hint_processor/poseidon_utils.rs +++ b/vm/src/hint_processor/builtin_hint_processor/poseidon_utils.rs @@ -57,7 +57,6 @@ mod tests { use crate::hint_processor::builtin_hint_processor::builtin_hint_processor_definition::HintProcessorData; use crate::hint_processor::hint_processor_definition::HintProcessorLogic; use crate::hint_processor::hint_processor_definition::HintReference; - use crate::types::exec_scope::ExecutionScopes; use crate::vm::vm_core::VirtualMachine; use crate::{hint_processor::builtin_hint_processor::hint_code, utils::test_utils::*}; diff --git a/vm/src/hint_processor/builtin_hint_processor/pow_utils.rs b/vm/src/hint_processor/builtin_hint_processor/pow_utils.rs index a749f4b896..0a31277a18 100644 --- a/vm/src/hint_processor/builtin_hint_processor/pow_utils.rs +++ b/vm/src/hint_processor/builtin_hint_processor/pow_utils.rs @@ -45,7 +45,7 @@ mod tests { builtin_hint_processor::builtin_hint_processor_definition::HintProcessorData, hint_processor_definition::HintProcessorLogic, }, - types::{exec_scope::ExecutionScopes, relocatable::MaybeRelocatable}, + types::relocatable::MaybeRelocatable, utils::test_utils::*, vm::{errors::memory_errors::MemoryError, vm_core::VirtualMachine}, }; diff --git a/vm/src/hint_processor/builtin_hint_processor/segments.rs b/vm/src/hint_processor/builtin_hint_processor/segments.rs index c23c58d3d4..36576973d9 100644 --- a/vm/src/hint_processor/builtin_hint_processor/segments.rs +++ b/vm/src/hint_processor/builtin_hint_processor/segments.rs @@ -57,7 +57,6 @@ mod tests { }, hint_processor_definition::HintProcessorLogic, }, - types::exec_scope::ExecutionScopes, utils::test_utils::*, vm::vm_core::VirtualMachine, }; diff --git a/vm/src/hint_processor/builtin_hint_processor/set.rs b/vm/src/hint_processor/builtin_hint_processor/set.rs index 28576e4a9f..86fc4fdadb 100644 --- a/vm/src/hint_processor/builtin_hint_processor/set.rs +++ b/vm/src/hint_processor/builtin_hint_processor/set.rs @@ -66,7 +66,7 @@ mod tests { }, hint_processor_definition::HintProcessorLogic, }, - types::{exec_scope::ExecutionScopes, relocatable::MaybeRelocatable}, + types::relocatable::MaybeRelocatable, utils::test_utils::*, vm::vm_core::VirtualMachine, }; diff --git a/vm/src/hint_processor/builtin_hint_processor/sha256_utils.rs b/vm/src/hint_processor/builtin_hint_processor/sha256_utils.rs index 659c752036..a7e77bd42c 100644 --- a/vm/src/hint_processor/builtin_hint_processor/sha256_utils.rs +++ b/vm/src/hint_processor/builtin_hint_processor/sha256_utils.rs @@ -223,7 +223,6 @@ mod tests { }, hint_processor_definition::{HintProcessorLogic, HintReference}, }, - types::exec_scope::ExecutionScopes, utils::test_utils::*, vm::vm_core::VirtualMachine, }; diff --git a/vm/src/hint_processor/builtin_hint_processor/signature.rs b/vm/src/hint_processor/builtin_hint_processor/signature.rs index 6766787729..878a379b7a 100644 --- a/vm/src/hint_processor/builtin_hint_processor/signature.rs +++ b/vm/src/hint_processor/builtin_hint_processor/signature.rs @@ -52,9 +52,6 @@ mod tests { }, hint_processor_definition::HintProcessorLogic, }, - types::{ - exec_scope::ExecutionScopes, instance_definitions::ecdsa_instance_def::EcdsaInstanceDef, - }, utils::test_utils::*, vm::runners::builtin_runner::SignatureBuiltinRunner, }; diff --git a/vm/src/hint_processor/builtin_hint_processor/uint256_utils.rs b/vm/src/hint_processor/builtin_hint_processor/uint256_utils.rs index 30fc0d6396..9c91fafa8a 100644 --- a/vm/src/hint_processor/builtin_hint_processor/uint256_utils.rs +++ b/vm/src/hint_processor/builtin_hint_processor/uint256_utils.rs @@ -507,10 +507,7 @@ mod tests { }, hint_processor_definition::HintProcessorLogic, }, - types::{ - exec_scope::ExecutionScopes, - relocatable::{MaybeRelocatable, Relocatable}, - }, + types::relocatable::{MaybeRelocatable, Relocatable}, utils::test_utils::*, vm::{errors::memory_errors::MemoryError, vm_core::VirtualMachine}, }; diff --git a/vm/src/hint_processor/builtin_hint_processor/uint384.rs b/vm/src/hint_processor/builtin_hint_processor/uint384.rs index c3a9f35683..a973fb9d3d 100644 --- a/vm/src/hint_processor/builtin_hint_processor/uint384.rs +++ b/vm/src/hint_processor/builtin_hint_processor/uint384.rs @@ -252,10 +252,7 @@ mod tests { }, hint_processor_definition::HintProcessorLogic, }, - types::{ - exec_scope::ExecutionScopes, - relocatable::{MaybeRelocatable, Relocatable}, - }, + types::relocatable::{MaybeRelocatable, Relocatable}, utils::test_utils::*, vm::{errors::memory_errors::MemoryError, vm_core::VirtualMachine}, }; diff --git a/vm/src/hint_processor/builtin_hint_processor/uint384_extension.rs b/vm/src/hint_processor/builtin_hint_processor/uint384_extension.rs index 85c3cf6af8..b7ee55bf7d 100644 --- a/vm/src/hint_processor/builtin_hint_processor/uint384_extension.rs +++ b/vm/src/hint_processor/builtin_hint_processor/uint384_extension.rs @@ -73,7 +73,6 @@ mod tests { use crate::hint_processor::builtin_hint_processor::hint_code; use crate::hint_processor::builtin_hint_processor::secp::bigint_utils::Uint768; use crate::hint_processor::hint_processor_definition::HintProcessorLogic; - use crate::types::exec_scope::ExecutionScopes; use crate::utils::test_utils::*; use assert_matches::assert_matches; diff --git a/vm/src/hint_processor/builtin_hint_processor/vrf/fq.rs b/vm/src/hint_processor/builtin_hint_processor/vrf/fq.rs index 91ca9e7f8e..c31047d8e0 100644 --- a/vm/src/hint_processor/builtin_hint_processor/vrf/fq.rs +++ b/vm/src/hint_processor/builtin_hint_processor/vrf/fq.rs @@ -123,7 +123,6 @@ mod tests { use crate::hint_processor::builtin_hint_processor::hint_code; use crate::hint_processor::hint_processor_definition::HintProcessorLogic; use crate::types::errors::math_errors::MathError; - use crate::types::exec_scope::ExecutionScopes; use crate::utils::test_utils::*; use assert_matches::assert_matches; diff --git a/vm/src/types/instance_definitions/keccak_instance_def.rs b/vm/src/types/instance_definitions/keccak_instance_def.rs index 0da9150eb1..7de55ebfeb 100644 --- a/vm/src/types/instance_definitions/keccak_instance_def.rs +++ b/vm/src/types/instance_definitions/keccak_instance_def.rs @@ -3,7 +3,6 @@ use serde::Serialize; pub(crate) const INPUT_CELLS_PER_KECCAK: u32 = 8; pub(crate) const CELLS_PER_KECCAK: u32 = 16; -pub(crate) const STATE_REP: [u32; 8] = [200; 8]; pub(crate) const INSTANCE_PER_COMPONENT: u32 = 16; #[derive(Serialize, Clone, Debug, PartialEq)] diff --git a/vm/src/utils.rs b/vm/src/utils.rs index 4ec902dcfb..adb68cbc07 100644 --- a/vm/src/utils.rs +++ b/vm/src/utils.rs @@ -440,7 +440,7 @@ pub mod test_utils { macro_rules! exec_scopes_ref { () => { - &mut ExecutionScopes::new() + &mut crate::types::exec_scope::ExecutionScopes::new() }; } pub(crate) use exec_scopes_ref; diff --git a/vm/src/vm/runners/builtin_runner/keccak.rs b/vm/src/vm/runners/builtin_runner/keccak.rs index 904ccd9567..de2936525d 100644 --- a/vm/src/vm/runners/builtin_runner/keccak.rs +++ b/vm/src/vm/runners/builtin_runner/keccak.rs @@ -494,7 +494,7 @@ mod tests { fn deduce_memory_cell_expected_integer() { let memory = memory![((0, 0), (1, 2))]; - let mut builtin = KeccakBuiltinRunner::new(Some(2048), true); + let builtin = KeccakBuiltinRunner::new(Some(2048), true); let result = builtin.deduce_memory_cell(Relocatable::from((0, 1)), &memory); @@ -512,7 +512,7 @@ mod tests { fn deduce_memory_cell_missing_input_cells() { let memory = memory![((0, 1), (1, 2))]; - let mut builtin = KeccakBuiltinRunner::new(Some(2048), true); + let builtin = KeccakBuiltinRunner::new(Some(2048), true); let result = builtin.deduce_memory_cell(Relocatable::from((0, 1)), &memory); @@ -556,7 +556,7 @@ mod tests { ((0, 35), 0) ]; - memory.insert((0, 16).into(), Felt252::MAX); + memory.insert((0, 16).into(), Felt252::MAX).unwrap(); let builtin = KeccakBuiltinRunner::new(Some(2048), true); From 661946d438557c7b2ab2565673b43131bc63828b Mon Sep 17 00:00:00 2001 From: Federica Date: Wed, 10 Apr 2024 18:53:16 -0300 Subject: [PATCH 10/22] Clean Pedersen instance def --- .../builtins_instance_def.rs | 12 +-- .../pedersen_instance_def.rs | 76 +++---------------- 2 files changed, 17 insertions(+), 71 deletions(-) diff --git a/vm/src/types/instance_definitions/builtins_instance_def.rs b/vm/src/types/instance_definitions/builtins_instance_def.rs index 00e2c80878..2356b8d129 100644 --- a/vm/src/types/instance_definitions/builtins_instance_def.rs +++ b/vm/src/types/instance_definitions/builtins_instance_def.rs @@ -75,7 +75,7 @@ impl BuiltinsInstanceDef { pub(crate) fn recursive() -> BuiltinsInstanceDef { BuiltinsInstanceDef { output: true, - pedersen: Some(PedersenInstanceDef::new(Some(128), 1)), + pedersen: Some(PedersenInstanceDef::new(Some(128))), range_check: Some(RangeCheckInstanceDef::default()), ecdsa: None, bitwise: Some(BitwiseInstanceDef::new(Some(8))), @@ -91,7 +91,7 @@ impl BuiltinsInstanceDef { pub(crate) fn starknet() -> BuiltinsInstanceDef { BuiltinsInstanceDef { output: true, - pedersen: Some(PedersenInstanceDef::new(Some(32), 1)), + pedersen: Some(PedersenInstanceDef::new(Some(32))), range_check: Some(RangeCheckInstanceDef::new(Some(16))), ecdsa: Some(EcdsaInstanceDef::new(Some(2048))), bitwise: Some(BitwiseInstanceDef::new(Some(64))), @@ -107,7 +107,7 @@ impl BuiltinsInstanceDef { pub(crate) fn starknet_with_keccak() -> BuiltinsInstanceDef { BuiltinsInstanceDef { output: true, - pedersen: Some(PedersenInstanceDef::new(Some(32), 1)), + pedersen: Some(PedersenInstanceDef::new(Some(32))), range_check: Some(RangeCheckInstanceDef::new(Some(16))), ecdsa: Some(EcdsaInstanceDef::new(Some(2048))), bitwise: Some(BitwiseInstanceDef::new(Some(64))), @@ -123,7 +123,7 @@ impl BuiltinsInstanceDef { pub(crate) fn recursive_large_output() -> BuiltinsInstanceDef { BuiltinsInstanceDef { output: true, - pedersen: Some(PedersenInstanceDef::new(Some(128), 1)), + pedersen: Some(PedersenInstanceDef::new(Some(128))), range_check: Some(RangeCheckInstanceDef::default()), ecdsa: None, bitwise: Some(BitwiseInstanceDef::new(Some(8))), @@ -139,7 +139,7 @@ impl BuiltinsInstanceDef { pub(crate) fn all_cairo() -> BuiltinsInstanceDef { BuiltinsInstanceDef { output: true, - pedersen: Some(PedersenInstanceDef::new(Some(256), 1)), + pedersen: Some(PedersenInstanceDef::new(Some(256))), range_check: Some(RangeCheckInstanceDef::default()), ecdsa: Some(EcdsaInstanceDef::new(Some(2048))), bitwise: Some(BitwiseInstanceDef::new(Some(16))), @@ -177,7 +177,7 @@ impl BuiltinsInstanceDef { pub(crate) fn dynamic() -> BuiltinsInstanceDef { BuiltinsInstanceDef { output: true, - pedersen: Some(PedersenInstanceDef::new(None, 4)), + pedersen: Some(PedersenInstanceDef::new(None)), range_check: Some(RangeCheckInstanceDef::new(None)), ecdsa: Some(EcdsaInstanceDef::new(None)), bitwise: Some(BitwiseInstanceDef::new(None)), diff --git a/vm/src/types/instance_definitions/pedersen_instance_def.rs b/vm/src/types/instance_definitions/pedersen_instance_def.rs index d6273f35f1..5f5bc0e564 100644 --- a/vm/src/types/instance_definitions/pedersen_instance_def.rs +++ b/vm/src/types/instance_definitions/pedersen_instance_def.rs @@ -1,48 +1,22 @@ -use num_bigint::{BigInt, Sign}; use serde::Serialize; pub(crate) const CELLS_PER_HASH: u32 = 3; pub(crate) const INPUT_CELLS_PER_HASH: u32 = 2; -#[derive(Serialize, Debug, PartialEq)] +#[derive(Serialize, Clone, Debug, PartialEq)] pub(crate) struct PedersenInstanceDef { pub(crate) ratio: Option, - pub(crate) _repetitions: u32, - pub(crate) _element_height: u32, - pub(crate) _element_bits: u32, - pub(crate) _n_inputs: u32, - pub(crate) _hash_limit: BigInt, } -impl PedersenInstanceDef { - pub(crate) fn default() -> Self { - PedersenInstanceDef { - ratio: Some(8), - _repetitions: 4, - _element_height: 256, - _element_bits: 252, - _n_inputs: 2, - _hash_limit: BigInt::new(Sign::Plus, vec![1, 0, 0, 0, 0, 0, 17, 134217728]), - } - } - - pub(crate) fn new(ratio: Option, _repetitions: u32) -> Self { - PedersenInstanceDef { - ratio, - _repetitions, - _element_height: 256, - _element_bits: 252, - _n_inputs: 2, - _hash_limit: BigInt::new(Sign::Plus, vec![1, 0, 0, 0, 0, 0, 17, 134217728]), - } - } - - pub(crate) fn _cells_per_builtin(&self) -> u32 { - CELLS_PER_HASH +impl Default for PedersenInstanceDef { + fn default() -> Self { + PedersenInstanceDef { ratio: Some(8) } } +} - pub(crate) fn _range_check_units_per_builtin(&self) -> u32 { - 0 +impl PedersenInstanceDef { + pub(crate) fn new(ratio: Option) -> Self { + PedersenInstanceDef { ratio } } } @@ -53,45 +27,17 @@ mod tests { #[cfg(target_arch = "wasm32")] use wasm_bindgen_test::*; - #[test] - #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] - fn get_range_check_units_per_builtin() { - let builtin_instance = PedersenInstanceDef::default(); - assert_eq!(builtin_instance._range_check_units_per_builtin(), 0); - } - - #[test] - #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] - fn get_cells_per_builtin() { - let builtin_instance = PedersenInstanceDef::default(); - assert_eq!(builtin_instance._cells_per_builtin(), 3); - } - #[test] #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] fn test_new() { - let builtin_instance = PedersenInstanceDef { - ratio: Some(10), - _repetitions: 2, - _element_height: 256, - _element_bits: 252, - _n_inputs: 2, - _hash_limit: BigInt::new(Sign::Plus, vec![1, 0, 0, 0, 0, 0, 17, 134217728]), - }; - assert_eq!(PedersenInstanceDef::new(Some(10), 2), builtin_instance); + let builtin_instance = PedersenInstanceDef { ratio: Some(10) }; + assert_eq!(PedersenInstanceDef::new(Some(10)), builtin_instance); } #[test] #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] fn test_default() { - let builtin_instance = PedersenInstanceDef { - ratio: Some(8), - _repetitions: 4, - _element_height: 256, - _element_bits: 252, - _n_inputs: 2, - _hash_limit: BigInt::new(Sign::Plus, vec![1, 0, 0, 0, 0, 0, 17, 134217728]), - }; + let builtin_instance = PedersenInstanceDef { ratio: Some(8) }; assert_eq!(PedersenInstanceDef::default(), builtin_instance); } } From 1e27dbf5cfad8e00fb6e2cbb188384d6a5cb0d33 Mon Sep 17 00:00:00 2001 From: Federica Date: Wed, 10 Apr 2024 19:00:13 -0300 Subject: [PATCH 11/22] Remove instances_per_component field --- .../builtins_instance_def.rs | 2 + .../keccak_instance_def.rs | 2 +- vm/src/vm/runners/builtin_runner/bitwise.rs | 2 - vm/src/vm/runners/builtin_runner/ec_op.rs | 2 - vm/src/vm/runners/builtin_runner/hash.rs | 2 - vm/src/vm/runners/builtin_runner/keccak.rs | 4 +- vm/src/vm/runners/builtin_runner/mod.rs | 39 ++++--------------- .../vm/runners/builtin_runner/range_check.rs | 11 +----- 8 files changed, 12 insertions(+), 52 deletions(-) diff --git a/vm/src/types/instance_definitions/builtins_instance_def.rs b/vm/src/types/instance_definitions/builtins_instance_def.rs index 2356b8d129..a6d0bc44cc 100644 --- a/vm/src/types/instance_definitions/builtins_instance_def.rs +++ b/vm/src/types/instance_definitions/builtins_instance_def.rs @@ -6,6 +6,8 @@ use super::{ range_check_instance_def::RangeCheckInstanceDef, }; +pub(crate) const BUILTIN_INSTANCES_PER_COMPONENT: u32 = 1; + use serde::Serialize; #[derive(Serialize, Debug, PartialEq)] diff --git a/vm/src/types/instance_definitions/keccak_instance_def.rs b/vm/src/types/instance_definitions/keccak_instance_def.rs index 7de55ebfeb..5746050067 100644 --- a/vm/src/types/instance_definitions/keccak_instance_def.rs +++ b/vm/src/types/instance_definitions/keccak_instance_def.rs @@ -3,7 +3,7 @@ use serde::Serialize; pub(crate) const INPUT_CELLS_PER_KECCAK: u32 = 8; pub(crate) const CELLS_PER_KECCAK: u32 = 16; -pub(crate) const INSTANCE_PER_COMPONENT: u32 = 16; +pub(crate) const KECCAK_INSTANCES_PER_COMPONENT: u32 = 16; #[derive(Serialize, Clone, Debug, PartialEq)] pub(crate) struct KeccakInstanceDef { diff --git a/vm/src/vm/runners/builtin_runner/bitwise.rs b/vm/src/vm/runners/builtin_runner/bitwise.rs index aca617f58a..860e591c29 100644 --- a/vm/src/vm/runners/builtin_runner/bitwise.rs +++ b/vm/src/vm/runners/builtin_runner/bitwise.rs @@ -23,7 +23,6 @@ pub struct BitwiseBuiltinRunner { pub(crate) n_input_cells: u32, pub(crate) stop_ptr: Option, pub(crate) included: bool, - pub(crate) instances_per_component: u32, } impl BitwiseBuiltinRunner { @@ -35,7 +34,6 @@ impl BitwiseBuiltinRunner { n_input_cells: INPUT_CELLS_PER_BITWISE, stop_ptr: None, included, - instances_per_component: 1, } } diff --git a/vm/src/vm/runners/builtin_runner/ec_op.rs b/vm/src/vm/runners/builtin_runner/ec_op.rs index 5c9d43be42..5457fb4bc8 100644 --- a/vm/src/vm/runners/builtin_runner/ec_op.rs +++ b/vm/src/vm/runners/builtin_runner/ec_op.rs @@ -21,7 +21,6 @@ pub struct EcOpBuiltinRunner { pub(crate) n_input_cells: u32, pub(crate) stop_ptr: Option, pub(crate) included: bool, - pub(crate) instances_per_component: u32, cache: RefCell>, } @@ -34,7 +33,6 @@ impl EcOpBuiltinRunner { cells_per_instance: CELLS_PER_EC_OP, stop_ptr: None, included, - instances_per_component: 1, cache: RefCell::new(HashMap::new()), } } diff --git a/vm/src/vm/runners/builtin_runner/hash.rs b/vm/src/vm/runners/builtin_runner/hash.rs index c9b437403f..1d9c5fa00d 100644 --- a/vm/src/vm/runners/builtin_runner/hash.rs +++ b/vm/src/vm/runners/builtin_runner/hash.rs @@ -22,7 +22,6 @@ pub struct HashBuiltinRunner { pub(crate) n_input_cells: u32, pub(crate) stop_ptr: Option, pub(crate) included: bool, - pub(crate) instances_per_component: u32, // This act as a cache to optimize calls to deduce_memory_cell // Therefore need interior mutability // 1 at position 'n' means offset 'n' relative to base pointer @@ -40,7 +39,6 @@ impl HashBuiltinRunner { stop_ptr: None, verified_addresses: RefCell::new(Vec::new()), included, - instances_per_component: 1, } } diff --git a/vm/src/vm/runners/builtin_runner/keccak.rs b/vm/src/vm/runners/builtin_runner/keccak.rs index de2936525d..180b76e624 100644 --- a/vm/src/vm/runners/builtin_runner/keccak.rs +++ b/vm/src/vm/runners/builtin_runner/keccak.rs @@ -2,7 +2,7 @@ use crate::air_private_input::{PrivateInput, PrivateInputKeccakState}; use crate::math_utils::safe_div_usize; use crate::stdlib::{cell::RefCell, collections::HashMap, prelude::*}; use crate::types::instance_definitions::keccak_instance_def::{ - CELLS_PER_KECCAK, INPUT_CELLS_PER_KECCAK, INSTANCE_PER_COMPONENT, + CELLS_PER_KECCAK, INPUT_CELLS_PER_KECCAK, }; use crate::types::relocatable::{MaybeRelocatable, Relocatable}; use crate::vm::errors::memory_errors::MemoryError; @@ -28,7 +28,6 @@ pub struct KeccakBuiltinRunner { pub base: usize, pub(crate) stop_ptr: Option, pub(crate) included: bool, - pub(crate) instances_per_component: u32, cache: RefCell>, } @@ -39,7 +38,6 @@ impl KeccakBuiltinRunner { ratio, stop_ptr: None, included, - instances_per_component: INSTANCE_PER_COMPONENT, cache: RefCell::new(HashMap::new()), } } diff --git a/vm/src/vm/runners/builtin_runner/mod.rs b/vm/src/vm/runners/builtin_runner/mod.rs index 681bdc955b..704cea4ecb 100644 --- a/vm/src/vm/runners/builtin_runner/mod.rs +++ b/vm/src/vm/runners/builtin_runner/mod.rs @@ -1,9 +1,11 @@ use crate::air_private_input::PrivateInput; use crate::math_utils::safe_div_usize; use crate::stdlib::prelude::*; +use crate::types::instance_definitions::builtins_instance_def::BUILTIN_INSTANCES_PER_COMPONENT; use crate::types::instance_definitions::keccak_instance_def::{ - CELLS_PER_KECCAK, INPUT_CELLS_PER_KECCAK, + CELLS_PER_KECCAK, INPUT_CELLS_PER_KECCAK, KECCAK_INSTANCES_PER_COMPONENT, }; +use crate::types::instance_definitions::range_check_instance_def::CELLS_PER_RANGE_CHECK; use crate::types::relocatable::{MaybeRelocatable, Relocatable}; use crate::vm::errors::memory_errors::{self, InsufficientAllocatedCellsError, MemoryError}; use crate::vm::errors::runner_errors::RunnerError; @@ -356,8 +358,7 @@ impl BuiltinRunner { BuiltinRunner::Bitwise(builtin) => builtin.cells_per_instance, BuiltinRunner::EcOp(builtin) => builtin.cells_per_instance, BuiltinRunner::Hash(builtin) => builtin.cells_per_instance, - BuiltinRunner::RangeCheck(builtin) => builtin.cells_per_instance, - BuiltinRunner::RangeCheck96(builtin) => builtin.cells_per_instance, + BuiltinRunner::RangeCheck(_) | BuiltinRunner::RangeCheck96(_) => CELLS_PER_RANGE_CHECK, BuiltinRunner::Output(_) => 0, BuiltinRunner::Keccak(_) => CELLS_PER_KECCAK, BuiltinRunner::Signature(builtin) => builtin.cells_per_instance, @@ -372,8 +373,7 @@ impl BuiltinRunner { BuiltinRunner::Bitwise(builtin) => builtin.n_input_cells, BuiltinRunner::EcOp(builtin) => builtin.n_input_cells, BuiltinRunner::Hash(builtin) => builtin.n_input_cells, - BuiltinRunner::RangeCheck(builtin) => builtin.n_input_cells, - BuiltinRunner::RangeCheck96(builtin) => builtin.n_input_cells, + BuiltinRunner::RangeCheck(_) | BuiltinRunner::RangeCheck96(_) => CELLS_PER_RANGE_CHECK, BuiltinRunner::Output(_) => 0, BuiltinRunner::Keccak(_) => INPUT_CELLS_PER_KECCAK, BuiltinRunner::Signature(builtin) => builtin.n_input_cells, @@ -385,17 +385,8 @@ impl BuiltinRunner { fn instances_per_component(&self) -> u32 { match self { - BuiltinRunner::Bitwise(builtin) => builtin.instances_per_component, - BuiltinRunner::EcOp(builtin) => builtin.instances_per_component, - BuiltinRunner::Hash(builtin) => builtin.instances_per_component, - BuiltinRunner::RangeCheck(builtin) => builtin.instances_per_component, - BuiltinRunner::RangeCheck96(builtin) => builtin.instances_per_component, - BuiltinRunner::Output(_) | BuiltinRunner::SegmentArena(_) => 1, - BuiltinRunner::Keccak(builtin) => builtin.instances_per_component, - BuiltinRunner::Signature(builtin) => builtin.instances_per_component, - BuiltinRunner::Poseidon(builtin) => builtin.instances_per_component, - // TODO: Placeholder till we see layout data - BuiltinRunner::Mod(_) => 1, + BuiltinRunner::Keccak(_) => KECCAK_INSTANCES_PER_COMPONENT, + _ => BUILTIN_INSTANCES_PER_COMPONENT, } } @@ -664,14 +655,6 @@ mod tests { assert_eq!(hash.n_input_cells, builtin.n_input_cells()) } - #[test] - #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] - fn get_n_input_cells_range_check() { - let range_check = RangeCheckBuiltinRunner::::new(Some(10), true); - let builtin: BuiltinRunner = range_check.clone().into(); - assert_eq!(range_check.n_input_cells, builtin.n_input_cells()) - } - #[test] #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] fn get_n_input_cells_ec_op() { @@ -712,14 +695,6 @@ mod tests { assert_eq!(hash.cells_per_instance, builtin.cells_per_instance()) } - #[test] - #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] - fn get_cells_per_instance_range_check() { - let range_check = RangeCheckBuiltinRunner::::new(Some(10), true); - let builtin: BuiltinRunner = range_check.clone().into(); - assert_eq!(range_check.cells_per_instance, builtin.cells_per_instance()) - } - #[test] #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] fn get_cells_per_instance_ec_op() { diff --git a/vm/src/vm/runners/builtin_runner/range_check.rs b/vm/src/vm/runners/builtin_runner/range_check.rs index cb02e79b46..b9b49992ce 100644 --- a/vm/src/vm/runners/builtin_runner/range_check.rs +++ b/vm/src/vm/runners/builtin_runner/range_check.rs @@ -8,10 +8,7 @@ use crate::{ use crate::Felt252; use crate::{ - types::{ - instance_definitions::range_check_instance_def::CELLS_PER_RANGE_CHECK, - relocatable::{MaybeRelocatable, Relocatable}, - }, + types::relocatable::{MaybeRelocatable, Relocatable}, vm::{ errors::memory_errors::MemoryError, vm_memory::{ @@ -42,10 +39,7 @@ pub struct RangeCheckBuiltinRunner { ratio: Option, base: usize, pub(crate) stop_ptr: Option, - pub(crate) cells_per_instance: u32, - pub(crate) n_input_cells: u32, pub(crate) included: bool, - pub(crate) instances_per_component: u32, } impl RangeCheckBuiltinRunner { @@ -54,10 +48,7 @@ impl RangeCheckBuiltinRunner { ratio, base: 0, stop_ptr: None, - cells_per_instance: CELLS_PER_RANGE_CHECK, - n_input_cells: CELLS_PER_RANGE_CHECK, included, - instances_per_component: 1, } } From 8cd852d0091aa51a26679628cc970ad5c47e114b Mon Sep 17 00:00:00 2001 From: Federica Date: Thu, 11 Apr 2024 11:05:04 -0300 Subject: [PATCH 12/22] Use the constants instead of storing a value for n_input cells and cells_per_instance for all builtins --- .../instance_definitions/mod_instance_def.rs | 2 + vm/src/vm/runners/builtin_runner/bitwise.rs | 14 ++-- vm/src/vm/runners/builtin_runner/ec_op.rs | 16 ++--- vm/src/vm/runners/builtin_runner/hash.rs | 15 +---- vm/src/vm/runners/builtin_runner/mod.rs | 64 +++++++++++-------- vm/src/vm/runners/builtin_runner/modulo.rs | 27 +++----- vm/src/vm/runners/builtin_runner/poseidon.rs | 16 ++--- .../runners/builtin_runner/segment_arena.rs | 8 +-- vm/src/vm/runners/builtin_runner/signature.rs | 10 +-- 9 files changed, 71 insertions(+), 101 deletions(-) diff --git a/vm/src/types/instance_definitions/mod_instance_def.rs b/vm/src/types/instance_definitions/mod_instance_def.rs index 50bd8184c1..0b84077d33 100644 --- a/vm/src/types/instance_definitions/mod_instance_def.rs +++ b/vm/src/types/instance_definitions/mod_instance_def.rs @@ -2,6 +2,8 @@ use serde::Serialize; pub(crate) const N_WORDS: usize = 4; +pub(crate) const CELLS_PER_MOD: u32 = 7; + #[derive(Serialize, Debug, PartialEq, Clone)] pub(crate) struct ModInstanceDef { pub(crate) ratio: Option, diff --git a/vm/src/vm/runners/builtin_runner/bitwise.rs b/vm/src/vm/runners/builtin_runner/bitwise.rs index 860e591c29..e5901194db 100644 --- a/vm/src/vm/runners/builtin_runner/bitwise.rs +++ b/vm/src/vm/runners/builtin_runner/bitwise.rs @@ -3,9 +3,7 @@ use crate::stdlib::{boxed::Box, vec::Vec}; use crate::Felt252; use crate::{ types::{ - instance_definitions::bitwise_instance_def::{ - CELLS_PER_BITWISE, INPUT_CELLS_PER_BITWISE, TOTAL_N_BITS, - }, + instance_definitions::bitwise_instance_def::{CELLS_PER_BITWISE, TOTAL_N_BITS}, relocatable::{MaybeRelocatable, Relocatable}, }, vm::{ @@ -19,8 +17,6 @@ use num_integer::div_ceil; pub struct BitwiseBuiltinRunner { ratio: Option, pub base: usize, - pub(crate) cells_per_instance: u32, - pub(crate) n_input_cells: u32, pub(crate) stop_ptr: Option, pub(crate) included: bool, } @@ -29,9 +25,7 @@ impl BitwiseBuiltinRunner { pub(crate) fn new(ratio: Option, included: bool) -> Self { BitwiseBuiltinRunner { base: 0, - ratio: ratio, - cells_per_instance: CELLS_PER_BITWISE, - n_input_cells: INPUT_CELLS_PER_BITWISE, + ratio, stop_ptr: None, included, } @@ -62,7 +56,7 @@ impl BitwiseBuiltinRunner { address: Relocatable, memory: &Memory, ) -> Result, RunnerError> { - let index = address.offset % self.cells_per_instance as usize; + let index = address.offset % CELLS_PER_BITWISE as usize; if index <= 1 { return Ok(None); } @@ -142,7 +136,7 @@ impl BitwiseBuiltinRunner { segments: &MemorySegmentManager, ) -> Result { let used_cells = self.get_used_cells(segments)?; - Ok(div_ceil(used_cells, self.cells_per_instance as usize)) + Ok(div_ceil(used_cells, CELLS_PER_BITWISE as usize)) } pub fn air_private_input(&self, memory: &Memory) -> Vec { diff --git a/vm/src/vm/runners/builtin_runner/ec_op.rs b/vm/src/vm/runners/builtin_runner/ec_op.rs index 5457fb4bc8..8dd50f0ffa 100644 --- a/vm/src/vm/runners/builtin_runner/ec_op.rs +++ b/vm/src/vm/runners/builtin_runner/ec_op.rs @@ -17,8 +17,6 @@ use starknet_types_core::curve::ProjectivePoint; pub struct EcOpBuiltinRunner { ratio: Option, pub base: usize, - pub(crate) cells_per_instance: u32, - pub(crate) n_input_cells: u32, pub(crate) stop_ptr: Option, pub(crate) included: bool, cache: RefCell>, @@ -29,8 +27,6 @@ impl EcOpBuiltinRunner { EcOpBuiltinRunner { base: 0, ratio, - n_input_cells: INPUT_CELLS_PER_EC_OP, - cells_per_instance: CELLS_PER_EC_OP, stop_ptr: None, included, cache: RefCell::new(HashMap::new()), @@ -111,9 +107,7 @@ impl EcOpBuiltinRunner { let beta_high: Felt252 = Felt252::from(0x6f21413efbe40de150e596d72f7a8c5_u128); let beta: Felt252 = (beta_high * (Felt252::ONE + Felt252::from(u128::MAX))) + beta_low; - let index = address - .offset - .mod_floor(&(self.cells_per_instance as usize)); + let index = address.offset.mod_floor(&(CELLS_PER_EC_OP as usize)); //Index should be an output cell if index != OUTPUT_INDICES.0 && index != OUTPUT_INDICES.1 { return Ok(None); @@ -128,8 +122,8 @@ impl EcOpBuiltinRunner { //All input cells should be filled, and be integer values //If an input cell is not filled, return None - let mut input_cells = Vec::<&Felt252>::with_capacity(self.n_input_cells as usize); - for i in 0..self.n_input_cells as usize { + let mut input_cells = Vec::<&Felt252>::with_capacity(INPUT_CELLS_PER_EC_OP as usize); + for i in 0..INPUT_CELLS_PER_EC_OP as usize { match memory.get(&(instance + i)?) { None => return Ok(None), Some(addr) => { @@ -178,7 +172,7 @@ impl EcOpBuiltinRunner { .map_err(|_| RunnerError::Memory(MemoryError::ExpectedInteger(Box::new(x_addr))))?, result.1, ); - match index - self.n_input_cells as usize { + match index - INPUT_CELLS_PER_EC_OP as usize { 0 => Ok(Some(MaybeRelocatable::Int(result.0))), _ => Ok(Some(MaybeRelocatable::Int(result.1))), //Default case corresponds to 1, as there are no other possible cases @@ -196,7 +190,7 @@ impl EcOpBuiltinRunner { segments: &MemorySegmentManager, ) -> Result { let used_cells = self.get_used_cells(segments)?; - Ok(div_ceil(used_cells, self.cells_per_instance as usize)) + Ok(div_ceil(used_cells, CELLS_PER_EC_OP as usize)) } pub fn format_ec_op_error( diff --git a/vm/src/vm/runners/builtin_runner/hash.rs b/vm/src/vm/runners/builtin_runner/hash.rs index 1d9c5fa00d..a6d045ade2 100644 --- a/vm/src/vm/runners/builtin_runner/hash.rs +++ b/vm/src/vm/runners/builtin_runner/hash.rs @@ -1,9 +1,7 @@ use crate::air_private_input::{PrivateInput, PrivateInputPair}; use crate::stdlib::{cell::RefCell, prelude::*}; use crate::types::errors::math_errors::MathError; -use crate::types::instance_definitions::pedersen_instance_def::{ - CELLS_PER_HASH, INPUT_CELLS_PER_HASH, -}; +use crate::types::instance_definitions::pedersen_instance_def::CELLS_PER_HASH; use crate::types::relocatable::{MaybeRelocatable, Relocatable}; use crate::vm::errors::memory_errors::MemoryError; use crate::vm::errors::runner_errors::RunnerError; @@ -18,8 +16,6 @@ use starknet_crypto::{pedersen_hash, FieldElement}; pub struct HashBuiltinRunner { pub base: usize, ratio: Option, - pub(crate) cells_per_instance: u32, - pub(crate) n_input_cells: u32, pub(crate) stop_ptr: Option, pub(crate) included: bool, // This act as a cache to optimize calls to deduce_memory_cell @@ -34,8 +30,6 @@ impl HashBuiltinRunner { HashBuiltinRunner { base: 0, ratio, - cells_per_instance: CELLS_PER_HASH, - n_input_cells: INPUT_CELLS_PER_HASH, stop_ptr: None, verified_addresses: RefCell::new(Vec::new()), included, @@ -67,10 +61,7 @@ impl HashBuiltinRunner { address: Relocatable, memory: &Memory, ) -> Result, RunnerError> { - if address - .offset - .mod_floor(&(self.cells_per_instance as usize)) - != 2 + if address.offset.mod_floor(&(CELLS_PER_HASH as usize)) != 2 || *self .verified_addresses .borrow() @@ -129,7 +120,7 @@ impl HashBuiltinRunner { segments: &MemorySegmentManager, ) -> Result { let used_cells = self.get_used_cells(segments)?; - Ok(div_ceil(used_cells, self.cells_per_instance as usize)) + Ok(div_ceil(used_cells, CELLS_PER_HASH as usize)) } pub fn get_additional_data(&self) -> BuiltinAdditionalData { diff --git a/vm/src/vm/runners/builtin_runner/mod.rs b/vm/src/vm/runners/builtin_runner/mod.rs index 704cea4ecb..3ade4bcb3e 100644 --- a/vm/src/vm/runners/builtin_runner/mod.rs +++ b/vm/src/vm/runners/builtin_runner/mod.rs @@ -1,10 +1,24 @@ use crate::air_private_input::PrivateInput; use crate::math_utils::safe_div_usize; use crate::stdlib::prelude::*; +use crate::types::instance_definitions::bitwise_instance_def::{ + CELLS_PER_BITWISE, INPUT_CELLS_PER_BITWISE, +}; use crate::types::instance_definitions::builtins_instance_def::BUILTIN_INSTANCES_PER_COMPONENT; +use crate::types::instance_definitions::ec_op_instance_def::{ + CELLS_PER_EC_OP, INPUT_CELLS_PER_EC_OP, +}; +use crate::types::instance_definitions::ecdsa_instance_def::CELLS_PER_SIGNATURE; use crate::types::instance_definitions::keccak_instance_def::{ CELLS_PER_KECCAK, INPUT_CELLS_PER_KECCAK, KECCAK_INSTANCES_PER_COMPONENT, }; +use crate::types::instance_definitions::mod_instance_def::CELLS_PER_MOD; +use crate::types::instance_definitions::pedersen_instance_def::{ + CELLS_PER_HASH, INPUT_CELLS_PER_HASH, +}; +use crate::types::instance_definitions::poseidon_instance_def::{ + CELLS_PER_POSEIDON, INPUT_CELLS_PER_POSEIDON, +}; use crate::types::instance_definitions::range_check_instance_def::CELLS_PER_RANGE_CHECK; use crate::types::relocatable::{MaybeRelocatable, Relocatable}; use crate::vm::errors::memory_errors::{self, InsufficientAllocatedCellsError, MemoryError}; @@ -26,6 +40,7 @@ mod segment_arena; mod signature; pub(crate) use self::range_check::{RC_N_PARTS_96, RC_N_PARTS_STANDARD}; +use self::segment_arena::ARENA_BUILTIN_SIZE; pub use bitwise::BitwiseBuiltinRunner; pub use ec_op::EcOpBuiltinRunner; pub use hash::HashBuiltinRunner; @@ -355,31 +370,31 @@ impl BuiltinRunner { fn cells_per_instance(&self) -> u32 { match self { - BuiltinRunner::Bitwise(builtin) => builtin.cells_per_instance, - BuiltinRunner::EcOp(builtin) => builtin.cells_per_instance, - BuiltinRunner::Hash(builtin) => builtin.cells_per_instance, + BuiltinRunner::Bitwise(_) => CELLS_PER_BITWISE, + BuiltinRunner::EcOp(_) => CELLS_PER_EC_OP, + BuiltinRunner::Hash(_) => CELLS_PER_HASH, BuiltinRunner::RangeCheck(_) | BuiltinRunner::RangeCheck96(_) => CELLS_PER_RANGE_CHECK, BuiltinRunner::Output(_) => 0, BuiltinRunner::Keccak(_) => CELLS_PER_KECCAK, - BuiltinRunner::Signature(builtin) => builtin.cells_per_instance, - BuiltinRunner::Poseidon(builtin) => builtin.cells_per_instance, - BuiltinRunner::SegmentArena(builtin) => builtin.cells_per_instance, - BuiltinRunner::Mod(mod_builtin) => mod_builtin.cells_per_instance(), + BuiltinRunner::Signature(_) => CELLS_PER_SIGNATURE, + BuiltinRunner::Poseidon(_) => CELLS_PER_POSEIDON, + BuiltinRunner::SegmentArena(_) => ARENA_BUILTIN_SIZE, + BuiltinRunner::Mod(_) => CELLS_PER_MOD, } } fn n_input_cells(&self) -> u32 { match self { - BuiltinRunner::Bitwise(builtin) => builtin.n_input_cells, - BuiltinRunner::EcOp(builtin) => builtin.n_input_cells, - BuiltinRunner::Hash(builtin) => builtin.n_input_cells, + BuiltinRunner::Bitwise(_) => INPUT_CELLS_PER_BITWISE, + BuiltinRunner::EcOp(_) => INPUT_CELLS_PER_EC_OP, + BuiltinRunner::Hash(_) => INPUT_CELLS_PER_HASH, BuiltinRunner::RangeCheck(_) | BuiltinRunner::RangeCheck96(_) => CELLS_PER_RANGE_CHECK, BuiltinRunner::Output(_) => 0, BuiltinRunner::Keccak(_) => INPUT_CELLS_PER_KECCAK, - BuiltinRunner::Signature(builtin) => builtin.n_input_cells, - BuiltinRunner::Poseidon(builtin) => builtin.n_input_cells, - BuiltinRunner::SegmentArena(builtin) => builtin.n_input_cells_per_instance, - BuiltinRunner::Mod(builtin) => builtin.n_input_cells(), + BuiltinRunner::Signature(_) => CELLS_PER_SIGNATURE, + BuiltinRunner::Poseidon(_) => INPUT_CELLS_PER_POSEIDON, + BuiltinRunner::SegmentArena(_) => ARENA_BUILTIN_SIZE, + BuiltinRunner::Mod(_) => CELLS_PER_MOD, } } @@ -644,7 +659,7 @@ mod tests { fn get_n_input_cells_bitwise() { let bitwise = BitwiseBuiltinRunner::new(Some(10), true); let builtin: BuiltinRunner = bitwise.clone().into(); - assert_eq!(bitwise.n_input_cells, builtin.n_input_cells()) + assert_eq!(INPUT_CELLS_PER_BITWISE, builtin.n_input_cells()) } #[test] @@ -652,7 +667,7 @@ mod tests { fn get_n_input_cells_hash() { let hash = HashBuiltinRunner::new(Some(10), true); let builtin: BuiltinRunner = hash.clone().into(); - assert_eq!(hash.n_input_cells, builtin.n_input_cells()) + assert_eq!(INPUT_CELLS_PER_HASH, builtin.n_input_cells()) } #[test] @@ -660,7 +675,7 @@ mod tests { fn get_n_input_cells_ec_op() { let ec_op = EcOpBuiltinRunner::new(Some(256), true); let builtin: BuiltinRunner = ec_op.clone().into(); - assert_eq!(ec_op.n_input_cells, builtin.n_input_cells()) + assert_eq!(INPUT_CELLS_PER_EC_OP, builtin.n_input_cells()) } #[test] @@ -668,7 +683,7 @@ mod tests { fn get_n_input_cells_ecdsa() { let signature = SignatureBuiltinRunner::new(Some(10), true); let builtin: BuiltinRunner = signature.clone().into(); - assert_eq!(signature.n_input_cells, builtin.n_input_cells()) + assert_eq!(CELLS_PER_SIGNATURE, builtin.n_input_cells()) } #[test] @@ -684,7 +699,7 @@ mod tests { fn get_cells_per_instance_bitwise() { let bitwise = BitwiseBuiltinRunner::new(Some(10), true); let builtin: BuiltinRunner = bitwise.clone().into(); - assert_eq!(bitwise.cells_per_instance, builtin.cells_per_instance()) + assert_eq!(CELLS_PER_BITWISE, builtin.cells_per_instance()) } #[test] @@ -692,7 +707,7 @@ mod tests { fn get_cells_per_instance_hash() { let hash = HashBuiltinRunner::new(Some(10), true); let builtin: BuiltinRunner = hash.clone().into(); - assert_eq!(hash.cells_per_instance, builtin.cells_per_instance()) + assert_eq!(CELLS_PER_HASH, builtin.cells_per_instance()) } #[test] @@ -700,7 +715,7 @@ mod tests { fn get_cells_per_instance_ec_op() { let ec_op = EcOpBuiltinRunner::new(Some(256), true); let builtin: BuiltinRunner = ec_op.clone().into(); - assert_eq!(ec_op.cells_per_instance, builtin.cells_per_instance()) + assert_eq!(CELLS_PER_EC_OP, builtin.cells_per_instance()) } #[test] @@ -708,7 +723,7 @@ mod tests { fn get_cells_per_instance_ecdsa() { let signature = SignatureBuiltinRunner::new(Some(10), true); let builtin: BuiltinRunner = signature.clone().into(); - assert_eq!(signature.cells_per_instance, builtin.cells_per_instance()) + assert_eq!(CELLS_PER_SIGNATURE, builtin.cells_per_instance()) } #[test] @@ -1194,10 +1209,7 @@ mod tests { #[test] #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] fn run_security_checks_bitwise_missing_memory_cells() { - let mut bitwise_builtin = BitwiseBuiltinRunner::new(Some(256), true); - - bitwise_builtin.cells_per_instance = 2; - bitwise_builtin.n_input_cells = 5; + let bitwise_builtin = BitwiseBuiltinRunner::new(Some(256), true); let builtin: BuiltinRunner = bitwise_builtin.into(); diff --git a/vm/src/vm/runners/builtin_runner/modulo.rs b/vm/src/vm/runners/builtin_runner/modulo.rs index dc4e69f8c1..85a1380e5d 100644 --- a/vm/src/vm/runners/builtin_runner/modulo.rs +++ b/vm/src/vm/runners/builtin_runner/modulo.rs @@ -8,7 +8,7 @@ use crate::{ }, types::{ errors::math_errors::MathError, - instance_definitions::mod_instance_def::{ModInstanceDef, N_WORDS}, + instance_definitions::mod_instance_def::{ModInstanceDef, CELLS_PER_MOD, N_WORDS}, relocatable::{relocate_address, MaybeRelocatable, Relocatable}, }, vm::{ @@ -30,8 +30,6 @@ use num_traits::Zero; //The maximum n value that the function fill_memory accepts. const FILL_MEMORY_MAX: usize = 100000; -const INPUT_CELLS: usize = 7; - const VALUES_PTR_OFFSET: u32 = 4; const OFFSETS_PTR_OFFSET: u32 = 5; const N_OFFSET: u32 = 6; @@ -138,14 +136,6 @@ impl ModBuiltinRunner { self.instance_def.ratio } - pub fn cells_per_instance(&self) -> u32 { - INPUT_CELLS as u32 - } - - pub fn n_input_cells(&self) -> u32 { - INPUT_CELLS as u32 - } - pub fn batch_size(&self) -> usize { self.instance_def.batch_size } @@ -161,7 +151,7 @@ impl ModBuiltinRunner { segments: &MemorySegmentManager, ) -> Result { let used_cells = self.get_used_cells(segments)?; - Ok(div_ceil(used_cells, self.cells_per_instance() as usize)) + Ok(div_ceil(used_cells, CELLS_PER_MOD as usize)) } pub(crate) fn air_private_input(&self, segments: &MemorySegmentManager) -> Vec { @@ -171,8 +161,11 @@ impl ModBuiltinRunner { .unwrap_or_default(); let relocation_table = segments.relocate_segments().unwrap_or_default(); let mut instances = Vec::::new(); - for instance in 0..segment_size.checked_div(INPUT_CELLS).unwrap_or_default() { - let instance_addr_offset = instance * INPUT_CELLS; + for instance in 0..segment_size + .checked_div(CELLS_PER_MOD as usize) + .unwrap_or_default() + { + let instance_addr_offset = instance * CELLS_PER_MOD as usize; let values_ptr = segments .memory .get_relocatable( @@ -374,7 +367,7 @@ impl ModBuiltinRunner { } let n_instances = safe_div_usize(inputs.n, self.instance_def.batch_size)?; for instance in 1..n_instances { - let instance_ptr = (builtin_ptr + instance * INPUT_CELLS)?; + let instance_ptr = (builtin_ptr + instance * CELLS_PER_MOD as usize)?; for i in 0..N_WORDS { memory.insert_as_accessed((instance_ptr + i)?, &inputs.p_values[i])?; } @@ -592,12 +585,12 @@ impl ModBuiltinRunner { let segment_size = vm .get_segment_used_size(self.base) .ok_or(MemoryError::MissingSegmentUsedSizes)?; - let n_instances = div_ceil(segment_size, INPUT_CELLS); + let n_instances = div_ceil(segment_size, CELLS_PER_MOD as usize); let mut prev_inputs = Inputs::default(); for instance in 0..n_instances { let inputs = self.read_inputs( &vm.segments.memory, - (self.base as isize, instance * INPUT_CELLS).into(), + (self.base as isize, instance * CELLS_PER_MOD as usize).into(), )?; if !instance.is_zero() && prev_inputs.n > self.instance_def.batch_size { for i in 0..N_WORDS { diff --git a/vm/src/vm/runners/builtin_runner/poseidon.rs b/vm/src/vm/runners/builtin_runner/poseidon.rs index d2a4ce9c18..51b12cc73b 100644 --- a/vm/src/vm/runners/builtin_runner/poseidon.rs +++ b/vm/src/vm/runners/builtin_runner/poseidon.rs @@ -19,12 +19,9 @@ use super::POSEIDON_BUILTIN_NAME; pub struct PoseidonBuiltinRunner { pub base: usize, ratio: Option, - pub(crate) cells_per_instance: u32, - pub(crate) n_input_cells: u32, pub(crate) stop_ptr: Option, pub(crate) included: bool, cache: RefCell>, - pub(crate) instances_per_component: u32, } impl PoseidonBuiltinRunner { @@ -32,12 +29,9 @@ impl PoseidonBuiltinRunner { PoseidonBuiltinRunner { base: 0, ratio, - cells_per_instance: CELLS_PER_POSEIDON, - n_input_cells: INPUT_CELLS_PER_POSEIDON, stop_ptr: None, included, cache: RefCell::new(HashMap::new()), - instances_per_component: 1, } } @@ -68,19 +62,19 @@ impl PoseidonBuiltinRunner { address: Relocatable, memory: &Memory, ) -> Result, RunnerError> { - let index = address.offset % self.cells_per_instance as usize; - if index < self.n_input_cells as usize { + let index = address.offset % CELLS_PER_POSEIDON as usize; + if index < INPUT_CELLS_PER_POSEIDON as usize { return Ok(None); } if let Some(felt) = self.cache.borrow().get(&address) { return Ok(Some(felt.into())); } let first_input_addr = (address - index)?; - let first_output_addr = (first_input_addr + self.n_input_cells as usize)?; + let first_output_addr = (first_input_addr + INPUT_CELLS_PER_POSEIDON as usize)?; let mut input_felts = vec![]; - for i in 0..self.n_input_cells as usize { + for i in 0..INPUT_CELLS_PER_POSEIDON as usize { let m_index = (first_input_addr + i)?; let val = match memory.get(&m_index) { Some(value) => { @@ -121,7 +115,7 @@ impl PoseidonBuiltinRunner { segments: &MemorySegmentManager, ) -> Result { let used_cells = self.get_used_cells(segments)?; - Ok(div_ceil(used_cells, self.cells_per_instance as usize)) + Ok(div_ceil(used_cells, CELLS_PER_POSEIDON as usize)) } pub fn air_private_input(&self, memory: &Memory) -> Vec { diff --git a/vm/src/vm/runners/builtin_runner/segment_arena.rs b/vm/src/vm/runners/builtin_runner/segment_arena.rs index b505ac3813..5cc61fb706 100644 --- a/vm/src/vm/runners/builtin_runner/segment_arena.rs +++ b/vm/src/vm/runners/builtin_runner/segment_arena.rs @@ -8,7 +8,7 @@ use crate::{ use alloc::vec::Vec; use num_integer::div_ceil; -const ARENA_BUILTIN_SIZE: u32 = 3; +pub(crate) const ARENA_BUILTIN_SIZE: u32 = 3; // The size of the builtin segment at the time of its creation. const INITIAL_SEGMENT_SIZE: usize = ARENA_BUILTIN_SIZE as usize; @@ -16,8 +16,6 @@ const INITIAL_SEGMENT_SIZE: usize = ARENA_BUILTIN_SIZE as usize; pub struct SegmentArenaBuiltinRunner { base: Relocatable, pub(crate) included: bool, - pub(crate) cells_per_instance: u32, - pub(crate) n_input_cells_per_instance: u32, pub(crate) stop_ptr: Option, } @@ -26,8 +24,6 @@ impl SegmentArenaBuiltinRunner { SegmentArenaBuiltinRunner { base: Relocatable::from((0, 0)), included, - cells_per_instance: ARENA_BUILTIN_SIZE, - n_input_cells_per_instance: ARENA_BUILTIN_SIZE, stop_ptr: None, } } @@ -67,7 +63,7 @@ impl SegmentArenaBuiltinRunner { ) -> Result { Ok(div_ceil( self.get_used_cells(segments)?, - self.cells_per_instance as usize, + ARENA_BUILTIN_SIZE as usize, )) } diff --git a/vm/src/vm/runners/builtin_runner/signature.rs b/vm/src/vm/runners/builtin_runner/signature.rs index 2f09a6899c..9520ebcc63 100644 --- a/vm/src/vm/runners/builtin_runner/signature.rs +++ b/vm/src/vm/runners/builtin_runner/signature.rs @@ -35,10 +35,7 @@ pub struct SignatureBuiltinRunner { pub(crate) included: bool, ratio: Option, base: usize, - pub(crate) cells_per_instance: u32, - pub(crate) n_input_cells: u32, pub(crate) stop_ptr: Option, - pub(crate) instances_per_component: u32, signatures: Rc>>, } @@ -48,10 +45,7 @@ impl SignatureBuiltinRunner { base: 0, included, ratio, - cells_per_instance: 2, - n_input_cells: 2, stop_ptr: None, - instances_per_component: 1, signatures: Rc::new(RefCell::new(HashMap::new())), } } @@ -99,7 +93,7 @@ impl SignatureBuiltinRunner { self.base } pub fn add_validation_rule(&self, memory: &mut Memory) { - let cells_per_instance = self.cells_per_instance; + let cells_per_instance = CELLS_PER_SIGNATURE; let signatures = Rc::clone(&self.signatures); let rule: ValidationRule = ValidationRule(Box::new( move |memory: &Memory, addr: Relocatable| -> Result, MemoryError> { @@ -164,7 +158,7 @@ impl SignatureBuiltinRunner { segments: &MemorySegmentManager, ) -> Result { let used_cells = self.get_used_cells(segments)?; - Ok(div_ceil(used_cells, self.cells_per_instance as usize)) + Ok(div_ceil(used_cells, CELLS_PER_SIGNATURE as usize)) } pub fn get_additional_data(&self) -> BuiltinAdditionalData { From 8508725fccc1f38db11ab598570fb184a0a6400d Mon Sep 17 00:00:00 2001 From: Federica Date: Thu, 11 Apr 2024 11:09:49 -0300 Subject: [PATCH 13/22] Extract memory_units_per_step into a constant --- vm/src/types/layout.rs | 23 ++--------------------- vm/src/vm/runners/cairo_runner.rs | 3 ++- 2 files changed, 4 insertions(+), 22 deletions(-) diff --git a/vm/src/types/layout.rs b/vm/src/types/layout.rs index 6c2df0d2fb..a74b96568d 100644 --- a/vm/src/types/layout.rs +++ b/vm/src/types/layout.rs @@ -4,6 +4,8 @@ use super::instance_definitions::{ builtins_instance_def::BuiltinsInstanceDef, diluted_pool_instance_def::DilutedPoolInstanceDef, }; +pub(crate) const MEMORY_UNITS_PER_STEP: u32 = 8; + use serde::Serialize; #[derive(Serialize, Debug)] @@ -13,7 +15,6 @@ pub struct CairoLayout { pub(crate) rc_units: u32, pub(crate) builtins: BuiltinsInstanceDef, pub(crate) _public_memory_fraction: u32, - pub(crate) _memory_units_per_step: u32, pub(crate) diluted_pool_instance_def: Option, pub(crate) _n_trace_colums: u32, } @@ -26,7 +27,6 @@ impl CairoLayout { rc_units: 16, builtins: BuiltinsInstanceDef::plain(), _public_memory_fraction: 4, - _memory_units_per_step: 8, diluted_pool_instance_def: None, _n_trace_colums: 8, } @@ -39,7 +39,6 @@ impl CairoLayout { rc_units: 16, builtins: BuiltinsInstanceDef::small(), _public_memory_fraction: 4, - _memory_units_per_step: 8, diluted_pool_instance_def: None, _n_trace_colums: 25, } @@ -52,7 +51,6 @@ impl CairoLayout { rc_units: 4, builtins: BuiltinsInstanceDef::dex(), _public_memory_fraction: 4, - _memory_units_per_step: 8, diluted_pool_instance_def: None, _n_trace_colums: 22, } @@ -65,7 +63,6 @@ impl CairoLayout { rc_units: 4, builtins: BuiltinsInstanceDef::recursive(), _public_memory_fraction: 8, - _memory_units_per_step: 8, diluted_pool_instance_def: Some(DilutedPoolInstanceDef::default()), _n_trace_colums: 10, } @@ -78,7 +75,6 @@ impl CairoLayout { rc_units: 4, builtins: BuiltinsInstanceDef::starknet(), _public_memory_fraction: 8, - _memory_units_per_step: 8, diluted_pool_instance_def: Some(DilutedPoolInstanceDef::new(2, 4, 16)), _n_trace_colums: 10, } @@ -91,7 +87,6 @@ impl CairoLayout { rc_units: 4, builtins: BuiltinsInstanceDef::starknet_with_keccak(), _public_memory_fraction: 8, - _memory_units_per_step: 8, diluted_pool_instance_def: Some(DilutedPoolInstanceDef::default()), _n_trace_colums: 15, } @@ -104,7 +99,6 @@ impl CairoLayout { rc_units: 4, builtins: BuiltinsInstanceDef::recursive_large_output(), _public_memory_fraction: 8, - _memory_units_per_step: 8, diluted_pool_instance_def: Some(DilutedPoolInstanceDef::default()), _n_trace_colums: 12, } @@ -117,7 +111,6 @@ impl CairoLayout { rc_units: 4, builtins: BuiltinsInstanceDef::all_cairo(), _public_memory_fraction: 8, - _memory_units_per_step: 8, diluted_pool_instance_def: Some(DilutedPoolInstanceDef::default()), _n_trace_colums: 11, } @@ -130,7 +123,6 @@ impl CairoLayout { rc_units: 8, builtins: BuiltinsInstanceDef::all_solidity(), _public_memory_fraction: 8, - _memory_units_per_step: 8, diluted_pool_instance_def: Some(DilutedPoolInstanceDef::default()), _n_trace_colums: 27, } @@ -143,7 +135,6 @@ impl CairoLayout { rc_units: 16, builtins: BuiltinsInstanceDef::dynamic(), _public_memory_fraction: 8, - _memory_units_per_step: 8, diluted_pool_instance_def: Some(DilutedPoolInstanceDef::default()), _n_trace_colums: 73, } @@ -167,7 +158,6 @@ mod tests { assert_eq!(layout.rc_units, 16); assert_eq!(layout.builtins, builtins); assert_eq!(layout._public_memory_fraction, 4); - assert_eq!(layout._memory_units_per_step, 8); assert_eq!(layout.diluted_pool_instance_def, None); assert_eq!(layout._n_trace_colums, 8); } @@ -182,7 +172,6 @@ mod tests { assert_eq!(layout.rc_units, 16); assert_eq!(layout.builtins, builtins); assert_eq!(layout._public_memory_fraction, 4); - assert_eq!(layout._memory_units_per_step, 8); assert_eq!(layout.diluted_pool_instance_def, None); assert_eq!(layout._n_trace_colums, 25); } @@ -197,7 +186,6 @@ mod tests { assert_eq!(layout.rc_units, 4); assert_eq!(layout.builtins, builtins); assert_eq!(layout._public_memory_fraction, 4); - assert_eq!(layout._memory_units_per_step, 8); assert_eq!(layout.diluted_pool_instance_def, None); assert_eq!(layout._n_trace_colums, 22); } @@ -211,7 +199,6 @@ mod tests { assert_eq!(layout.rc_units, 4); assert_eq!(layout.builtins, builtins); assert_eq!(layout._public_memory_fraction, 8); - assert_eq!(layout._memory_units_per_step, 8); assert_eq!( layout.diluted_pool_instance_def, Some(DilutedPoolInstanceDef::default()) @@ -228,7 +215,6 @@ mod tests { assert_eq!(layout.rc_units, 4); assert_eq!(layout.builtins, builtins); assert_eq!(layout._public_memory_fraction, 8); - assert_eq!(layout._memory_units_per_step, 8); assert_eq!( layout.diluted_pool_instance_def, Some(DilutedPoolInstanceDef::new(2, 4, 16)) @@ -245,7 +231,6 @@ mod tests { assert_eq!(layout.rc_units, 4); assert_eq!(layout.builtins, builtins); assert_eq!(layout._public_memory_fraction, 8); - assert_eq!(layout._memory_units_per_step, 8); assert_eq!( layout.diluted_pool_instance_def, Some(DilutedPoolInstanceDef::default()) @@ -262,7 +247,6 @@ mod tests { assert_eq!(layout.rc_units, 4); assert_eq!(layout.builtins, builtins); assert_eq!(layout._public_memory_fraction, 8); - assert_eq!(layout._memory_units_per_step, 8); assert_eq!( layout.diluted_pool_instance_def, Some(DilutedPoolInstanceDef::default()) @@ -279,7 +263,6 @@ mod tests { assert_eq!(layout.rc_units, 4); assert_eq!(layout.builtins, builtins); assert_eq!(layout._public_memory_fraction, 8); - assert_eq!(layout._memory_units_per_step, 8); assert_eq!( layout.diluted_pool_instance_def, Some(DilutedPoolInstanceDef::default()) @@ -296,7 +279,6 @@ mod tests { assert_eq!(layout.rc_units, 8); assert_eq!(layout.builtins, builtins); assert_eq!(layout._public_memory_fraction, 8); - assert_eq!(layout._memory_units_per_step, 8); assert_eq!( layout.diluted_pool_instance_def, Some(DilutedPoolInstanceDef::default()) @@ -313,7 +295,6 @@ mod tests { assert_eq!(layout.rc_units, 16); assert_eq!(layout.builtins, builtins); assert_eq!(layout._public_memory_fraction, 8); - assert_eq!(layout._memory_units_per_step, 8); assert_eq!( layout.diluted_pool_instance_def, Some(DilutedPoolInstanceDef::default()) diff --git a/vm/src/vm/runners/cairo_runner.rs b/vm/src/vm/runners/cairo_runner.rs index 35a90fe76e..66819aa17f 100644 --- a/vm/src/vm/runners/cairo_runner.rs +++ b/vm/src/vm/runners/cairo_runner.rs @@ -7,6 +7,7 @@ use crate::{ ops::{Add, AddAssign, Mul, MulAssign, Sub, SubAssign}, prelude::*, }, + types::layout::MEMORY_UNITS_PER_STEP, vm::{ runners::builtin_runner::SegmentArenaBuiltinRunner, trace::trace_entry::{relocate_trace_register, RelocatedTraceEntry}, @@ -1193,7 +1194,7 @@ impl CairoRunner { // Out of the memory units available per step, a fraction is used for public memory, and // four are used for the instruction. - let total_memory_units = instance._memory_units_per_step * vm_current_step_u32; + let total_memory_units = MEMORY_UNITS_PER_STEP * vm_current_step_u32; let (public_memory_units, rem) = div_rem(total_memory_units, instance._public_memory_fraction); if rem != 0 { From 3f0bb765fa2e4897f3e1736cc03a097bf5ee4a7b Mon Sep 17 00:00:00 2001 From: Federica Date: Thu, 11 Apr 2024 11:11:16 -0300 Subject: [PATCH 14/22] Remove underscore from used field --- vm/src/types/layout.rs | 42 +++++++++++++++---------------- vm/src/vm/runners/cairo_runner.rs | 2 +- 2 files changed, 22 insertions(+), 22 deletions(-) diff --git a/vm/src/types/layout.rs b/vm/src/types/layout.rs index a74b96568d..1be0968538 100644 --- a/vm/src/types/layout.rs +++ b/vm/src/types/layout.rs @@ -14,7 +14,7 @@ pub struct CairoLayout { pub(crate) _cpu_component_step: u32, pub(crate) rc_units: u32, pub(crate) builtins: BuiltinsInstanceDef, - pub(crate) _public_memory_fraction: u32, + pub(crate) public_memory_fraction: u32, pub(crate) diluted_pool_instance_def: Option, pub(crate) _n_trace_colums: u32, } @@ -26,7 +26,7 @@ impl CairoLayout { _cpu_component_step: 1, rc_units: 16, builtins: BuiltinsInstanceDef::plain(), - _public_memory_fraction: 4, + public_memory_fraction: 4, diluted_pool_instance_def: None, _n_trace_colums: 8, } @@ -38,7 +38,7 @@ impl CairoLayout { _cpu_component_step: 1, rc_units: 16, builtins: BuiltinsInstanceDef::small(), - _public_memory_fraction: 4, + public_memory_fraction: 4, diluted_pool_instance_def: None, _n_trace_colums: 25, } @@ -50,7 +50,7 @@ impl CairoLayout { _cpu_component_step: 1, rc_units: 4, builtins: BuiltinsInstanceDef::dex(), - _public_memory_fraction: 4, + public_memory_fraction: 4, diluted_pool_instance_def: None, _n_trace_colums: 22, } @@ -62,7 +62,7 @@ impl CairoLayout { _cpu_component_step: 1, rc_units: 4, builtins: BuiltinsInstanceDef::recursive(), - _public_memory_fraction: 8, + public_memory_fraction: 8, diluted_pool_instance_def: Some(DilutedPoolInstanceDef::default()), _n_trace_colums: 10, } @@ -74,7 +74,7 @@ impl CairoLayout { _cpu_component_step: 1, rc_units: 4, builtins: BuiltinsInstanceDef::starknet(), - _public_memory_fraction: 8, + public_memory_fraction: 8, diluted_pool_instance_def: Some(DilutedPoolInstanceDef::new(2, 4, 16)), _n_trace_colums: 10, } @@ -86,7 +86,7 @@ impl CairoLayout { _cpu_component_step: 1, rc_units: 4, builtins: BuiltinsInstanceDef::starknet_with_keccak(), - _public_memory_fraction: 8, + public_memory_fraction: 8, diluted_pool_instance_def: Some(DilutedPoolInstanceDef::default()), _n_trace_colums: 15, } @@ -98,7 +98,7 @@ impl CairoLayout { _cpu_component_step: 1, rc_units: 4, builtins: BuiltinsInstanceDef::recursive_large_output(), - _public_memory_fraction: 8, + public_memory_fraction: 8, diluted_pool_instance_def: Some(DilutedPoolInstanceDef::default()), _n_trace_colums: 12, } @@ -110,7 +110,7 @@ impl CairoLayout { _cpu_component_step: 1, rc_units: 4, builtins: BuiltinsInstanceDef::all_cairo(), - _public_memory_fraction: 8, + public_memory_fraction: 8, diluted_pool_instance_def: Some(DilutedPoolInstanceDef::default()), _n_trace_colums: 11, } @@ -122,7 +122,7 @@ impl CairoLayout { _cpu_component_step: 1, rc_units: 8, builtins: BuiltinsInstanceDef::all_solidity(), - _public_memory_fraction: 8, + public_memory_fraction: 8, diluted_pool_instance_def: Some(DilutedPoolInstanceDef::default()), _n_trace_colums: 27, } @@ -134,7 +134,7 @@ impl CairoLayout { _cpu_component_step: 1, rc_units: 16, builtins: BuiltinsInstanceDef::dynamic(), - _public_memory_fraction: 8, + public_memory_fraction: 8, diluted_pool_instance_def: Some(DilutedPoolInstanceDef::default()), _n_trace_colums: 73, } @@ -157,7 +157,7 @@ mod tests { assert_eq!(layout._cpu_component_step, 1); assert_eq!(layout.rc_units, 16); assert_eq!(layout.builtins, builtins); - assert_eq!(layout._public_memory_fraction, 4); + assert_eq!(layout.public_memory_fraction, 4); assert_eq!(layout.diluted_pool_instance_def, None); assert_eq!(layout._n_trace_colums, 8); } @@ -171,7 +171,7 @@ mod tests { assert_eq!(layout._cpu_component_step, 1); assert_eq!(layout.rc_units, 16); assert_eq!(layout.builtins, builtins); - assert_eq!(layout._public_memory_fraction, 4); + assert_eq!(layout.public_memory_fraction, 4); assert_eq!(layout.diluted_pool_instance_def, None); assert_eq!(layout._n_trace_colums, 25); } @@ -185,7 +185,7 @@ mod tests { assert_eq!(layout._cpu_component_step, 1); assert_eq!(layout.rc_units, 4); assert_eq!(layout.builtins, builtins); - assert_eq!(layout._public_memory_fraction, 4); + assert_eq!(layout.public_memory_fraction, 4); assert_eq!(layout.diluted_pool_instance_def, None); assert_eq!(layout._n_trace_colums, 22); } @@ -198,7 +198,7 @@ mod tests { assert_eq!(layout._cpu_component_step, 1); assert_eq!(layout.rc_units, 4); assert_eq!(layout.builtins, builtins); - assert_eq!(layout._public_memory_fraction, 8); + assert_eq!(layout.public_memory_fraction, 8); assert_eq!( layout.diluted_pool_instance_def, Some(DilutedPoolInstanceDef::default()) @@ -214,7 +214,7 @@ mod tests { assert_eq!(layout._cpu_component_step, 1); assert_eq!(layout.rc_units, 4); assert_eq!(layout.builtins, builtins); - assert_eq!(layout._public_memory_fraction, 8); + assert_eq!(layout.public_memory_fraction, 8); assert_eq!( layout.diluted_pool_instance_def, Some(DilutedPoolInstanceDef::new(2, 4, 16)) @@ -230,7 +230,7 @@ mod tests { assert_eq!(layout._cpu_component_step, 1); assert_eq!(layout.rc_units, 4); assert_eq!(layout.builtins, builtins); - assert_eq!(layout._public_memory_fraction, 8); + assert_eq!(layout.public_memory_fraction, 8); assert_eq!( layout.diluted_pool_instance_def, Some(DilutedPoolInstanceDef::default()) @@ -246,7 +246,7 @@ mod tests { assert_eq!(layout._cpu_component_step, 1); assert_eq!(layout.rc_units, 4); assert_eq!(layout.builtins, builtins); - assert_eq!(layout._public_memory_fraction, 8); + assert_eq!(layout.public_memory_fraction, 8); assert_eq!( layout.diluted_pool_instance_def, Some(DilutedPoolInstanceDef::default()) @@ -262,7 +262,7 @@ mod tests { assert_eq!(layout._cpu_component_step, 1); assert_eq!(layout.rc_units, 4); assert_eq!(layout.builtins, builtins); - assert_eq!(layout._public_memory_fraction, 8); + assert_eq!(layout.public_memory_fraction, 8); assert_eq!( layout.diluted_pool_instance_def, Some(DilutedPoolInstanceDef::default()) @@ -278,7 +278,7 @@ mod tests { assert_eq!(layout._cpu_component_step, 1); assert_eq!(layout.rc_units, 8); assert_eq!(layout.builtins, builtins); - assert_eq!(layout._public_memory_fraction, 8); + assert_eq!(layout.public_memory_fraction, 8); assert_eq!( layout.diluted_pool_instance_def, Some(DilutedPoolInstanceDef::default()) @@ -294,7 +294,7 @@ mod tests { assert_eq!(layout._cpu_component_step, 1); assert_eq!(layout.rc_units, 16); assert_eq!(layout.builtins, builtins); - assert_eq!(layout._public_memory_fraction, 8); + assert_eq!(layout.public_memory_fraction, 8); assert_eq!( layout.diluted_pool_instance_def, Some(DilutedPoolInstanceDef::default()) diff --git a/vm/src/vm/runners/cairo_runner.rs b/vm/src/vm/runners/cairo_runner.rs index 66819aa17f..155b7b5c4f 100644 --- a/vm/src/vm/runners/cairo_runner.rs +++ b/vm/src/vm/runners/cairo_runner.rs @@ -1196,7 +1196,7 @@ impl CairoRunner { // four are used for the instruction. let total_memory_units = MEMORY_UNITS_PER_STEP * vm_current_step_u32; let (public_memory_units, rem) = - div_rem(total_memory_units, instance._public_memory_fraction); + div_rem(total_memory_units, instance.public_memory_fraction); if rem != 0 { return Err(MathError::SafeDivFailU32( total_memory_units, From cd826b5332c5b02ae116a4de8e10fa9906845655 Mon Sep 17 00:00:00 2001 From: Federica Date: Thu, 11 Apr 2024 11:12:12 -0300 Subject: [PATCH 15/22] Remove unused field _cpu_component_step --- vm/src/types/layout.rs | 11 ----------- vm/src/vm/runners/cairo_runner.rs | 2 +- 2 files changed, 1 insertion(+), 12 deletions(-) diff --git a/vm/src/types/layout.rs b/vm/src/types/layout.rs index 1be0968538..de808bf01f 100644 --- a/vm/src/types/layout.rs +++ b/vm/src/types/layout.rs @@ -11,7 +11,6 @@ use serde::Serialize; #[derive(Serialize, Debug)] pub struct CairoLayout { pub(crate) _name: String, - pub(crate) _cpu_component_step: u32, pub(crate) rc_units: u32, pub(crate) builtins: BuiltinsInstanceDef, pub(crate) public_memory_fraction: u32, @@ -23,7 +22,6 @@ impl CairoLayout { pub(crate) fn plain_instance() -> CairoLayout { CairoLayout { _name: String::from("plain"), - _cpu_component_step: 1, rc_units: 16, builtins: BuiltinsInstanceDef::plain(), public_memory_fraction: 4, @@ -35,7 +33,6 @@ impl CairoLayout { pub(crate) fn small_instance() -> CairoLayout { CairoLayout { _name: String::from("small"), - _cpu_component_step: 1, rc_units: 16, builtins: BuiltinsInstanceDef::small(), public_memory_fraction: 4, @@ -47,7 +44,6 @@ impl CairoLayout { pub(crate) fn dex_instance() -> CairoLayout { CairoLayout { _name: String::from("dex"), - _cpu_component_step: 1, rc_units: 4, builtins: BuiltinsInstanceDef::dex(), public_memory_fraction: 4, @@ -59,7 +55,6 @@ impl CairoLayout { pub(crate) fn recursive_instance() -> CairoLayout { CairoLayout { _name: String::from("recursive"), - _cpu_component_step: 1, rc_units: 4, builtins: BuiltinsInstanceDef::recursive(), public_memory_fraction: 8, @@ -71,7 +66,6 @@ impl CairoLayout { pub(crate) fn starknet_instance() -> CairoLayout { CairoLayout { _name: String::from("starknet"), - _cpu_component_step: 1, rc_units: 4, builtins: BuiltinsInstanceDef::starknet(), public_memory_fraction: 8, @@ -83,7 +77,6 @@ impl CairoLayout { pub(crate) fn starknet_with_keccak_instance() -> CairoLayout { CairoLayout { _name: String::from("starknet_with_keccak"), - _cpu_component_step: 1, rc_units: 4, builtins: BuiltinsInstanceDef::starknet_with_keccak(), public_memory_fraction: 8, @@ -95,7 +88,6 @@ impl CairoLayout { pub(crate) fn recursive_large_output_instance() -> CairoLayout { CairoLayout { _name: String::from("recursive_large_output"), - _cpu_component_step: 1, rc_units: 4, builtins: BuiltinsInstanceDef::recursive_large_output(), public_memory_fraction: 8, @@ -107,7 +99,6 @@ impl CairoLayout { pub(crate) fn all_cairo_instance() -> CairoLayout { CairoLayout { _name: String::from("all_cairo"), - _cpu_component_step: 1, rc_units: 4, builtins: BuiltinsInstanceDef::all_cairo(), public_memory_fraction: 8, @@ -119,7 +110,6 @@ impl CairoLayout { pub(crate) fn all_solidity_instance() -> CairoLayout { CairoLayout { _name: String::from("all_solidity"), - _cpu_component_step: 1, rc_units: 8, builtins: BuiltinsInstanceDef::all_solidity(), public_memory_fraction: 8, @@ -131,7 +121,6 @@ impl CairoLayout { pub(crate) fn dynamic_instance() -> CairoLayout { CairoLayout { _name: String::from("dynamic"), - _cpu_component_step: 1, rc_units: 16, builtins: BuiltinsInstanceDef::dynamic(), public_memory_fraction: 8, diff --git a/vm/src/vm/runners/cairo_runner.rs b/vm/src/vm/runners/cairo_runner.rs index 155b7b5c4f..41eb21516d 100644 --- a/vm/src/vm/runners/cairo_runner.rs +++ b/vm/src/vm/runners/cairo_runner.rs @@ -1200,7 +1200,7 @@ impl CairoRunner { if rem != 0 { return Err(MathError::SafeDivFailU32( total_memory_units, - instance._public_memory_fraction, + instance.public_memory_fraction, ) .into()); } From 194363caf701152695df89baa575dbc4047110ec Mon Sep 17 00:00:00 2001 From: Federica Date: Thu, 11 Apr 2024 11:14:12 -0300 Subject: [PATCH 16/22] Remove unused field _n_trace_columns --- vm/src/types/layout.rs | 31 ------------------------------- 1 file changed, 31 deletions(-) diff --git a/vm/src/types/layout.rs b/vm/src/types/layout.rs index de808bf01f..6ff6c97bd3 100644 --- a/vm/src/types/layout.rs +++ b/vm/src/types/layout.rs @@ -15,7 +15,6 @@ pub struct CairoLayout { pub(crate) builtins: BuiltinsInstanceDef, pub(crate) public_memory_fraction: u32, pub(crate) diluted_pool_instance_def: Option, - pub(crate) _n_trace_colums: u32, } impl CairoLayout { @@ -26,7 +25,6 @@ impl CairoLayout { builtins: BuiltinsInstanceDef::plain(), public_memory_fraction: 4, diluted_pool_instance_def: None, - _n_trace_colums: 8, } } @@ -37,7 +35,6 @@ impl CairoLayout { builtins: BuiltinsInstanceDef::small(), public_memory_fraction: 4, diluted_pool_instance_def: None, - _n_trace_colums: 25, } } @@ -48,7 +45,6 @@ impl CairoLayout { builtins: BuiltinsInstanceDef::dex(), public_memory_fraction: 4, diluted_pool_instance_def: None, - _n_trace_colums: 22, } } @@ -59,7 +55,6 @@ impl CairoLayout { builtins: BuiltinsInstanceDef::recursive(), public_memory_fraction: 8, diluted_pool_instance_def: Some(DilutedPoolInstanceDef::default()), - _n_trace_colums: 10, } } @@ -70,7 +65,6 @@ impl CairoLayout { builtins: BuiltinsInstanceDef::starknet(), public_memory_fraction: 8, diluted_pool_instance_def: Some(DilutedPoolInstanceDef::new(2, 4, 16)), - _n_trace_colums: 10, } } @@ -81,7 +75,6 @@ impl CairoLayout { builtins: BuiltinsInstanceDef::starknet_with_keccak(), public_memory_fraction: 8, diluted_pool_instance_def: Some(DilutedPoolInstanceDef::default()), - _n_trace_colums: 15, } } @@ -92,7 +85,6 @@ impl CairoLayout { builtins: BuiltinsInstanceDef::recursive_large_output(), public_memory_fraction: 8, diluted_pool_instance_def: Some(DilutedPoolInstanceDef::default()), - _n_trace_colums: 12, } } @@ -103,7 +95,6 @@ impl CairoLayout { builtins: BuiltinsInstanceDef::all_cairo(), public_memory_fraction: 8, diluted_pool_instance_def: Some(DilutedPoolInstanceDef::default()), - _n_trace_colums: 11, } } @@ -114,7 +105,6 @@ impl CairoLayout { builtins: BuiltinsInstanceDef::all_solidity(), public_memory_fraction: 8, diluted_pool_instance_def: Some(DilutedPoolInstanceDef::default()), - _n_trace_colums: 27, } } @@ -125,7 +115,6 @@ impl CairoLayout { builtins: BuiltinsInstanceDef::dynamic(), public_memory_fraction: 8, diluted_pool_instance_def: Some(DilutedPoolInstanceDef::default()), - _n_trace_colums: 73, } } } @@ -143,12 +132,10 @@ mod tests { let layout = CairoLayout::plain_instance(); let builtins = BuiltinsInstanceDef::plain(); assert_eq!(&layout._name, "plain"); - assert_eq!(layout._cpu_component_step, 1); assert_eq!(layout.rc_units, 16); assert_eq!(layout.builtins, builtins); assert_eq!(layout.public_memory_fraction, 4); assert_eq!(layout.diluted_pool_instance_def, None); - assert_eq!(layout._n_trace_colums, 8); } #[test] @@ -157,12 +144,10 @@ mod tests { let layout = CairoLayout::small_instance(); let builtins = BuiltinsInstanceDef::small(); assert_eq!(&layout._name, "small"); - assert_eq!(layout._cpu_component_step, 1); assert_eq!(layout.rc_units, 16); assert_eq!(layout.builtins, builtins); assert_eq!(layout.public_memory_fraction, 4); assert_eq!(layout.diluted_pool_instance_def, None); - assert_eq!(layout._n_trace_colums, 25); } #[test] @@ -171,12 +156,10 @@ mod tests { let layout = CairoLayout::dex_instance(); let builtins = BuiltinsInstanceDef::dex(); assert_eq!(&layout._name, "dex"); - assert_eq!(layout._cpu_component_step, 1); assert_eq!(layout.rc_units, 4); assert_eq!(layout.builtins, builtins); assert_eq!(layout.public_memory_fraction, 4); assert_eq!(layout.diluted_pool_instance_def, None); - assert_eq!(layout._n_trace_colums, 22); } #[test] @@ -184,7 +167,6 @@ mod tests { let layout = CairoLayout::recursive_instance(); let builtins = BuiltinsInstanceDef::recursive(); assert_eq!(&layout._name, "recursive"); - assert_eq!(layout._cpu_component_step, 1); assert_eq!(layout.rc_units, 4); assert_eq!(layout.builtins, builtins); assert_eq!(layout.public_memory_fraction, 8); @@ -192,7 +174,6 @@ mod tests { layout.diluted_pool_instance_def, Some(DilutedPoolInstanceDef::default()) ); - assert_eq!(layout._n_trace_colums, 10); } #[test] @@ -200,7 +181,6 @@ mod tests { let layout = CairoLayout::starknet_instance(); let builtins = BuiltinsInstanceDef::starknet(); assert_eq!(&layout._name, "starknet"); - assert_eq!(layout._cpu_component_step, 1); assert_eq!(layout.rc_units, 4); assert_eq!(layout.builtins, builtins); assert_eq!(layout.public_memory_fraction, 8); @@ -208,7 +188,6 @@ mod tests { layout.diluted_pool_instance_def, Some(DilutedPoolInstanceDef::new(2, 4, 16)) ); - assert_eq!(layout._n_trace_colums, 10); } #[test] @@ -216,7 +195,6 @@ mod tests { let layout = CairoLayout::starknet_with_keccak_instance(); let builtins = BuiltinsInstanceDef::starknet_with_keccak(); assert_eq!(&layout._name, "starknet_with_keccak"); - assert_eq!(layout._cpu_component_step, 1); assert_eq!(layout.rc_units, 4); assert_eq!(layout.builtins, builtins); assert_eq!(layout.public_memory_fraction, 8); @@ -224,7 +202,6 @@ mod tests { layout.diluted_pool_instance_def, Some(DilutedPoolInstanceDef::default()) ); - assert_eq!(layout._n_trace_colums, 15); } #[test] @@ -232,7 +209,6 @@ mod tests { let layout = CairoLayout::recursive_large_output_instance(); let builtins = BuiltinsInstanceDef::recursive_large_output(); assert_eq!(&layout._name, "recursive_large_output"); - assert_eq!(layout._cpu_component_step, 1); assert_eq!(layout.rc_units, 4); assert_eq!(layout.builtins, builtins); assert_eq!(layout.public_memory_fraction, 8); @@ -240,7 +216,6 @@ mod tests { layout.diluted_pool_instance_def, Some(DilutedPoolInstanceDef::default()) ); - assert_eq!(layout._n_trace_colums, 12); } #[test] @@ -248,7 +223,6 @@ mod tests { let layout = CairoLayout::all_cairo_instance(); let builtins = BuiltinsInstanceDef::all_cairo(); assert_eq!(&layout._name, "all_cairo"); - assert_eq!(layout._cpu_component_step, 1); assert_eq!(layout.rc_units, 4); assert_eq!(layout.builtins, builtins); assert_eq!(layout.public_memory_fraction, 8); @@ -256,7 +230,6 @@ mod tests { layout.diluted_pool_instance_def, Some(DilutedPoolInstanceDef::default()) ); - assert_eq!(layout._n_trace_colums, 11); } #[test] @@ -264,7 +237,6 @@ mod tests { let layout = CairoLayout::all_solidity_instance(); let builtins = BuiltinsInstanceDef::all_solidity(); assert_eq!(&layout._name, "all_solidity"); - assert_eq!(layout._cpu_component_step, 1); assert_eq!(layout.rc_units, 8); assert_eq!(layout.builtins, builtins); assert_eq!(layout.public_memory_fraction, 8); @@ -272,7 +244,6 @@ mod tests { layout.diluted_pool_instance_def, Some(DilutedPoolInstanceDef::default()) ); - assert_eq!(layout._n_trace_colums, 27); } #[test] @@ -280,7 +251,6 @@ mod tests { let layout = CairoLayout::dynamic_instance(); let builtins = BuiltinsInstanceDef::dynamic(); assert_eq!(&layout._name, "dynamic"); - assert_eq!(layout._cpu_component_step, 1); assert_eq!(layout.rc_units, 16); assert_eq!(layout.builtins, builtins); assert_eq!(layout.public_memory_fraction, 8); @@ -288,6 +258,5 @@ mod tests { layout.diluted_pool_instance_def, Some(DilutedPoolInstanceDef::default()) ); - assert_eq!(layout._n_trace_colums, 73); } } From d602e1d21b0937ee7593d3a22d6c5a3f42bf69e9 Mon Sep 17 00:00:00 2001 From: Federica Date: Thu, 11 Apr 2024 11:33:44 -0300 Subject: [PATCH 17/22] Impl Default for PoseidonInstanceDef --- vm/src/types/instance_definitions/poseidon_instance_def.rs | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/vm/src/types/instance_definitions/poseidon_instance_def.rs b/vm/src/types/instance_definitions/poseidon_instance_def.rs index fa478c4c3d..ae52df75fe 100644 --- a/vm/src/types/instance_definitions/poseidon_instance_def.rs +++ b/vm/src/types/instance_definitions/poseidon_instance_def.rs @@ -8,11 +8,12 @@ pub(crate) struct PoseidonInstanceDef { pub(crate) ratio: Option, } -impl PoseidonInstanceDef { - pub(crate) fn default() -> Self { +impl Default for PoseidonInstanceDef { + fn default() -> Self { PoseidonInstanceDef { ratio: Some(32) } } - +} +impl PoseidonInstanceDef { pub(crate) fn new(ratio: Option) -> Self { PoseidonInstanceDef { ratio } } From 376767aed3d29976abb62297a0a2cf167dbdc466 Mon Sep 17 00:00:00 2001 From: Federica Date: Fri, 12 Apr 2024 15:55:01 -0300 Subject: [PATCH 18/22] Fix test --- vm/src/vm/runners/builtin_runner/keccak.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vm/src/vm/runners/builtin_runner/keccak.rs b/vm/src/vm/runners/builtin_runner/keccak.rs index 180b76e624..93daf92f82 100644 --- a/vm/src/vm/runners/builtin_runner/keccak.rs +++ b/vm/src/vm/runners/builtin_runner/keccak.rs @@ -494,7 +494,7 @@ mod tests { let builtin = KeccakBuiltinRunner::new(Some(2048), true); - let result = builtin.deduce_memory_cell(Relocatable::from((0, 1)), &memory); + let result = builtin.deduce_memory_cell(Relocatable::from((0, 9)), &memory); assert_eq!( result, From 993b70b8f6a20fbab74eafdc7027bf72850cf2bf Mon Sep 17 00:00:00 2001 From: Federica Date: Fri, 12 Apr 2024 17:49:33 -0300 Subject: [PATCH 19/22] Fix test --- vm/src/vm/runners/builtin_runner/mod.rs | 4 ---- 1 file changed, 4 deletions(-) diff --git a/vm/src/vm/runners/builtin_runner/mod.rs b/vm/src/vm/runners/builtin_runner/mod.rs index 3ade4bcb3e..437edda91f 100644 --- a/vm/src/vm/runners/builtin_runner/mod.rs +++ b/vm/src/vm/runners/builtin_runner/mod.rs @@ -1216,10 +1216,6 @@ mod tests { let mut vm = vm!(); vm.segments.memory = memory![ - ((0, 0), (0, 1)), - ((0, 1), (0, 2)), - ((0, 2), (0, 3)), - ((0, 3), (0, 4)), ((0, 4), (0, 5)) ]; From 53bb98503d8702c82d5fe03754985ce957855fbf Mon Sep 17 00:00:00 2001 From: Federica Date: Fri, 12 Apr 2024 17:57:05 -0300 Subject: [PATCH 20/22] fmt --- vm/src/vm/runners/builtin_runner/mod.rs | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/vm/src/vm/runners/builtin_runner/mod.rs b/vm/src/vm/runners/builtin_runner/mod.rs index 437edda91f..f53608b676 100644 --- a/vm/src/vm/runners/builtin_runner/mod.rs +++ b/vm/src/vm/runners/builtin_runner/mod.rs @@ -1215,9 +1215,7 @@ mod tests { let mut vm = vm!(); - vm.segments.memory = memory![ - ((0, 4), (0, 5)) - ]; + vm.segments.memory = memory![((0, 4), (0, 5))]; assert_matches!( builtin.run_security_checks(&vm), From b7892e7efaa3026905eff170ff29575a1ca322fb Mon Sep 17 00:00:00 2001 From: Federica Date: Fri, 12 Apr 2024 18:06:22 -0300 Subject: [PATCH 21/22] Add changelog entry --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 91ef388a56..675291ce95 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,8 @@ #### Upcoming Changes +* refactor: Remove unused code & use constants whenever possible for builtin instance definitions[#1707](https://github.com/lambdaclass/cairo-vm/pull/1707) + * feat(BREAKING): Add range_check96 builtin[#1698](https://github.com/lambdaclass/cairo-vm/pull/1698) * Add the new `range_check96` builtin to the `all_cairo` layout. * `RangeCheckBuiltinRunner` changes: From a205a83b3d3e6337b9de989ac0652b61d9fd49f0 Mon Sep 17 00:00:00 2001 From: Federica Date: Fri, 12 Apr 2024 18:08:55 -0300 Subject: [PATCH 22/22] Fix field name --- vm/src/types/layout.rs | 42 +++++++++++++++---------------- vm/src/vm/runners/cairo_runner.rs | 4 +-- 2 files changed, 23 insertions(+), 23 deletions(-) diff --git a/vm/src/types/layout.rs b/vm/src/types/layout.rs index 6ff6c97bd3..3533f817fe 100644 --- a/vm/src/types/layout.rs +++ b/vm/src/types/layout.rs @@ -10,7 +10,7 @@ use serde::Serialize; #[derive(Serialize, Debug)] pub struct CairoLayout { - pub(crate) _name: String, + pub(crate) name: String, pub(crate) rc_units: u32, pub(crate) builtins: BuiltinsInstanceDef, pub(crate) public_memory_fraction: u32, @@ -20,7 +20,7 @@ pub struct CairoLayout { impl CairoLayout { pub(crate) fn plain_instance() -> CairoLayout { CairoLayout { - _name: String::from("plain"), + name: String::from("plain"), rc_units: 16, builtins: BuiltinsInstanceDef::plain(), public_memory_fraction: 4, @@ -30,7 +30,7 @@ impl CairoLayout { pub(crate) fn small_instance() -> CairoLayout { CairoLayout { - _name: String::from("small"), + name: String::from("small"), rc_units: 16, builtins: BuiltinsInstanceDef::small(), public_memory_fraction: 4, @@ -40,7 +40,7 @@ impl CairoLayout { pub(crate) fn dex_instance() -> CairoLayout { CairoLayout { - _name: String::from("dex"), + name: String::from("dex"), rc_units: 4, builtins: BuiltinsInstanceDef::dex(), public_memory_fraction: 4, @@ -50,7 +50,7 @@ impl CairoLayout { pub(crate) fn recursive_instance() -> CairoLayout { CairoLayout { - _name: String::from("recursive"), + name: String::from("recursive"), rc_units: 4, builtins: BuiltinsInstanceDef::recursive(), public_memory_fraction: 8, @@ -60,7 +60,7 @@ impl CairoLayout { pub(crate) fn starknet_instance() -> CairoLayout { CairoLayout { - _name: String::from("starknet"), + name: String::from("starknet"), rc_units: 4, builtins: BuiltinsInstanceDef::starknet(), public_memory_fraction: 8, @@ -70,7 +70,7 @@ impl CairoLayout { pub(crate) fn starknet_with_keccak_instance() -> CairoLayout { CairoLayout { - _name: String::from("starknet_with_keccak"), + name: String::from("starknet_with_keccak"), rc_units: 4, builtins: BuiltinsInstanceDef::starknet_with_keccak(), public_memory_fraction: 8, @@ -80,7 +80,7 @@ impl CairoLayout { pub(crate) fn recursive_large_output_instance() -> CairoLayout { CairoLayout { - _name: String::from("recursive_large_output"), + name: String::from("recursive_large_output"), rc_units: 4, builtins: BuiltinsInstanceDef::recursive_large_output(), public_memory_fraction: 8, @@ -90,7 +90,7 @@ impl CairoLayout { pub(crate) fn all_cairo_instance() -> CairoLayout { CairoLayout { - _name: String::from("all_cairo"), + name: String::from("all_cairo"), rc_units: 4, builtins: BuiltinsInstanceDef::all_cairo(), public_memory_fraction: 8, @@ -100,7 +100,7 @@ impl CairoLayout { pub(crate) fn all_solidity_instance() -> CairoLayout { CairoLayout { - _name: String::from("all_solidity"), + name: String::from("all_solidity"), rc_units: 8, builtins: BuiltinsInstanceDef::all_solidity(), public_memory_fraction: 8, @@ -110,7 +110,7 @@ impl CairoLayout { pub(crate) fn dynamic_instance() -> CairoLayout { CairoLayout { - _name: String::from("dynamic"), + name: String::from("dynamic"), rc_units: 16, builtins: BuiltinsInstanceDef::dynamic(), public_memory_fraction: 8, @@ -131,7 +131,7 @@ mod tests { fn get_plain_instance() { let layout = CairoLayout::plain_instance(); let builtins = BuiltinsInstanceDef::plain(); - assert_eq!(&layout._name, "plain"); + assert_eq!(&layout.name, "plain"); assert_eq!(layout.rc_units, 16); assert_eq!(layout.builtins, builtins); assert_eq!(layout.public_memory_fraction, 4); @@ -143,7 +143,7 @@ mod tests { fn get_small_instance() { let layout = CairoLayout::small_instance(); let builtins = BuiltinsInstanceDef::small(); - assert_eq!(&layout._name, "small"); + assert_eq!(&layout.name, "small"); assert_eq!(layout.rc_units, 16); assert_eq!(layout.builtins, builtins); assert_eq!(layout.public_memory_fraction, 4); @@ -155,7 +155,7 @@ mod tests { fn get_dex_instance() { let layout = CairoLayout::dex_instance(); let builtins = BuiltinsInstanceDef::dex(); - assert_eq!(&layout._name, "dex"); + assert_eq!(&layout.name, "dex"); assert_eq!(layout.rc_units, 4); assert_eq!(layout.builtins, builtins); assert_eq!(layout.public_memory_fraction, 4); @@ -166,7 +166,7 @@ mod tests { fn get_recursive_instance() { let layout = CairoLayout::recursive_instance(); let builtins = BuiltinsInstanceDef::recursive(); - assert_eq!(&layout._name, "recursive"); + assert_eq!(&layout.name, "recursive"); assert_eq!(layout.rc_units, 4); assert_eq!(layout.builtins, builtins); assert_eq!(layout.public_memory_fraction, 8); @@ -180,7 +180,7 @@ mod tests { fn get_starknet_instance() { let layout = CairoLayout::starknet_instance(); let builtins = BuiltinsInstanceDef::starknet(); - assert_eq!(&layout._name, "starknet"); + assert_eq!(&layout.name, "starknet"); assert_eq!(layout.rc_units, 4); assert_eq!(layout.builtins, builtins); assert_eq!(layout.public_memory_fraction, 8); @@ -194,7 +194,7 @@ mod tests { fn get_starknet_with_keccak_instance() { let layout = CairoLayout::starknet_with_keccak_instance(); let builtins = BuiltinsInstanceDef::starknet_with_keccak(); - assert_eq!(&layout._name, "starknet_with_keccak"); + assert_eq!(&layout.name, "starknet_with_keccak"); assert_eq!(layout.rc_units, 4); assert_eq!(layout.builtins, builtins); assert_eq!(layout.public_memory_fraction, 8); @@ -208,7 +208,7 @@ mod tests { fn get_recursive_large_output_instance() { let layout = CairoLayout::recursive_large_output_instance(); let builtins = BuiltinsInstanceDef::recursive_large_output(); - assert_eq!(&layout._name, "recursive_large_output"); + assert_eq!(&layout.name, "recursive_large_output"); assert_eq!(layout.rc_units, 4); assert_eq!(layout.builtins, builtins); assert_eq!(layout.public_memory_fraction, 8); @@ -222,7 +222,7 @@ mod tests { fn get_all_cairo_instance() { let layout = CairoLayout::all_cairo_instance(); let builtins = BuiltinsInstanceDef::all_cairo(); - assert_eq!(&layout._name, "all_cairo"); + assert_eq!(&layout.name, "all_cairo"); assert_eq!(layout.rc_units, 4); assert_eq!(layout.builtins, builtins); assert_eq!(layout.public_memory_fraction, 8); @@ -236,7 +236,7 @@ mod tests { fn get_all_solidity_instance() { let layout = CairoLayout::all_solidity_instance(); let builtins = BuiltinsInstanceDef::all_solidity(); - assert_eq!(&layout._name, "all_solidity"); + assert_eq!(&layout.name, "all_solidity"); assert_eq!(layout.rc_units, 8); assert_eq!(layout.builtins, builtins); assert_eq!(layout.public_memory_fraction, 8); @@ -250,7 +250,7 @@ mod tests { fn get_dynamic_instance() { let layout = CairoLayout::dynamic_instance(); let builtins = BuiltinsInstanceDef::dynamic(); - assert_eq!(&layout._name, "dynamic"); + assert_eq!(&layout.name, "dynamic"); assert_eq!(layout.rc_units, 16); assert_eq!(layout.builtins, builtins); assert_eq!(layout.public_memory_fraction, 8); diff --git a/vm/src/vm/runners/cairo_runner.rs b/vm/src/vm/runners/cairo_runner.rs index 41eb21516d..63bbcba9f7 100644 --- a/vm/src/vm/runners/cairo_runner.rs +++ b/vm/src/vm/runners/cairo_runner.rs @@ -358,7 +358,7 @@ impl CairoRunner { if !program_builtins.is_empty() && !allow_missing_builtins { return Err(RunnerError::NoBuiltinForInstance(Box::new(( program_builtins.iter().map(|n| n.name()).collect(), - self.layout._name.clone(), + self.layout.name.clone(), )))); } @@ -1427,7 +1427,7 @@ impl CairoRunner { &self, vm: &VirtualMachine, ) -> Result { - let layout_name = self.get_layout()._name.as_str(); + let layout_name = self.get_layout().name.as_str(); let dyn_layout = match layout_name { "dynamic" => Some(self.get_layout()), _ => None,