Skip to content

Commit 74a4758

Browse files
committed
Handle case for extra hints and fix tests
1 parent 171422a commit 74a4758

File tree

6 files changed

+98
-121
lines changed

6 files changed

+98
-121
lines changed

Cargo.lock

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

vm/src/hint_processor/builtin_hint_processor/builtin_hint_processor_definition.rs

Lines changed: 36 additions & 106 deletions
Original file line numberDiff line numberDiff line change
@@ -230,6 +230,8 @@ impl HintProcessorLogic for BuiltinHintProcessor {
230230
);
231231
}
232232

233+
println!("{}", hint_data.code);
234+
233235
let hint_func = hint_data.f.unwrap(); // TODO: Remove unwrap
234236

235237
hint_func(
@@ -256,6 +258,18 @@ impl HintProcessorLogic for BuiltinHintProcessor {
256258
constants: Rc<HashMap<String, Felt252>>,
257259
) -> Result<Box<dyn Any>, crate::vm::errors::vm_errors::VirtualMachineError> {
258260
let ids_data = get_ids_data(reference_ids, references)?;
261+
262+
if let Some(_) = self.extra_hints.get(hint_code) {
263+
// TODO: This is to handle the extra_hints. Handle this case nicely
264+
return Ok(any_box!(HintProcessorData {
265+
code: hint_code.to_string(),
266+
ap_tracking: ap_tracking_data.clone(),
267+
ids_data,
268+
constants,
269+
f: None
270+
}));
271+
}
272+
259273
let f = match hint_code {
260274
hint_code::ADD_SEGMENT => add_segment,
261275
hint_code::IS_NN => is_nn,
@@ -466,134 +480,50 @@ impl HintProcessorLogic for BuiltinHintProcessor {
466480
hint_code::PRINT_DICT => print_dict,
467481
hint_code::EXCESS_BALANCE => excess_balance_hint,
468482
#[cfg(feature = "cairo-0-secp-hints")]
469-
cairo0_hints::COMPUTE_Q_MOD_PRIME => cairo0_hints::compute_q_mod_prime(
470-
vm,
471-
exec_scopes,
472-
&hint_data.ids_data,
473-
&hint_data.ap_tracking,
474-
constants,
475-
),
483+
cairo0_hints::COMPUTE_Q_MOD_PRIME => cairo0_hints::compute_q_mod_prime,
476484
#[cfg(feature = "cairo-0-secp-hints")]
477-
cairo0_hints::COMPUTE_IDS_HIGH_LOW => cairo0_hints::compute_ids_high_low(
478-
vm,
479-
exec_scopes,
480-
&hint_data.ids_data,
481-
&hint_data.ap_tracking,
482-
constants,
483-
),
485+
cairo0_hints::COMPUTE_IDS_HIGH_LOW => cairo0_hints::compute_ids_high_low,
484486
#[cfg(feature = "cairo-0-secp-hints")]
485-
cairo0_hints::SECP_DOUBLE_ASSIGN_NEW_X => cairo0_hints::secp_double_assign_new_x(
486-
vm,
487-
exec_scopes,
488-
&hint_data.ids_data,
489-
&hint_data.ap_tracking,
490-
constants,
491-
SECP256R1_P.magnitude(),
492-
),
487+
cairo0_hints::SECP_DOUBLE_ASSIGN_NEW_X => {
488+
cairo0_hints::secp_double_assign_new_x_wrapper
489+
}
493490
#[cfg(feature = "cairo-0-secp-hints")]
494-
cairo0_hints::SECP_DOUBLE_ASSIGN_NEW_X_V2 => cairo0_hints::secp_double_assign_new_x(
495-
vm,
496-
exec_scopes,
497-
&hint_data.ids_data,
498-
&hint_data.ap_tracking,
499-
constants,
500-
&CAIRO_PRIME,
501-
),
491+
cairo0_hints::SECP_DOUBLE_ASSIGN_NEW_X_V2 => {
492+
cairo0_hints::secp_double_assign_new_x_v2_wrapper
493+
}
502494
#[cfg(feature = "cairo-0-secp-hints")]
503-
cairo0_hints::FAST_SECP_ADD_ASSIGN_NEW_Y => cairo0_hints::fast_secp_add_assign_new_y(
504-
vm,
505-
exec_scopes,
506-
&hint_data.ids_data,
507-
&hint_data.ap_tracking,
508-
constants,
509-
),
495+
cairo0_hints::FAST_SECP_ADD_ASSIGN_NEW_Y => cairo0_hints::fast_secp_add_assign_new_y,
510496
#[cfg(feature = "cairo-0-secp-hints")]
511-
cairo0_hints::COMPUTE_VALUE_DIV_MOD => cairo0_hints::compute_value_div_mod(
512-
vm,
513-
exec_scopes,
514-
&hint_data.ids_data,
515-
&hint_data.ap_tracking,
516-
constants,
517-
),
497+
cairo0_hints::COMPUTE_VALUE_DIV_MOD => cairo0_hints::compute_value_div_mod,
518498
#[cfg(feature = "cairo-0-secp-hints")]
519-
cairo0_hints::GENERATE_NIBBLES => cairo0_hints::generate_nibbles(
520-
vm,
521-
exec_scopes,
522-
&hint_data.ids_data,
523-
&hint_data.ap_tracking,
524-
constants,
525-
),
526-
499+
cairo0_hints::GENERATE_NIBBLES => cairo0_hints::generate_nibbles,
527500
#[cfg(feature = "cairo-0-secp-hints")]
528-
cairo0_hints::WRITE_NIBBLES_TO_MEM => cairo0_hints::write_nibbles_to_mem(
529-
vm,
530-
exec_scopes,
531-
&hint_data.ids_data,
532-
&hint_data.ap_tracking,
533-
constants,
534-
),
501+
cairo0_hints::WRITE_NIBBLES_TO_MEM => cairo0_hints::write_nibbles_to_mem,
535502
#[cfg(feature = "cairo-0-secp-hints")]
536-
cairo0_hints::IS_ON_CURVE_2 => cairo0_hints::is_on_curve_2(
537-
vm,
538-
exec_scopes,
539-
&hint_data.ids_data,
540-
&hint_data.ap_tracking,
541-
constants,
542-
),
503+
cairo0_hints::IS_ON_CURVE_2 => cairo0_hints::is_on_curve_2,
543504
#[cfg(feature = "cairo-0-secp-hints")]
544-
cairo0_hints::SECP_R1_GET_POINT_FROM_X => cairo0_hints::r1_get_point_from_x(
545-
vm,
546-
exec_scopes,
547-
&hint_data.ids_data,
548-
&hint_data.ap_tracking,
549-
constants,
550-
SECP256R1_P.magnitude(),
551-
),
552-
505+
cairo0_hints::SECP_R1_GET_POINT_FROM_X => cairo0_hints::r1_get_point_from_x_wrapper,
553506
#[cfg(feature = "cairo-0-secp-hints")]
554-
cairo0_hints::SECP_R1_GET_POINT_FROM_X_V2 => cairo0_hints::r1_get_point_from_x(
555-
vm,
556-
exec_scopes,
557-
&hint_data.ids_data,
558-
&hint_data.ap_tracking,
559-
constants,
560-
&CAIRO_PRIME,
561-
),
562-
507+
cairo0_hints::SECP_R1_GET_POINT_FROM_X_V2 => {
508+
cairo0_hints::r1_get_point_from_x_v2_wrapper
509+
}
563510
#[cfg(feature = "cairo-0-secp-hints")]
564-
cairo0_hints::SECP_REDUCE => cairo0_hints::reduce_value(
565-
vm,
566-
exec_scopes,
567-
&hint_data.ids_data,
568-
&hint_data.ap_tracking,
569-
constants,
570-
),
511+
cairo0_hints::SECP_REDUCE => cairo0_hints::reduce_value,
571512
#[cfg(feature = "cairo-0-secp-hints")]
572-
cairo0_hints::SECP_REDUCE_X => cairo0_hints::reduce_x(
573-
vm,
574-
exec_scopes,
575-
&hint_data.ids_data,
576-
&hint_data.ap_tracking,
577-
constants,
578-
),
513+
cairo0_hints::SECP_REDUCE_X => cairo0_hints::reduce_x,
579514
#[cfg(feature = "cairo-0-data-availability-hints")]
580-
super::kzg_da::WRITE_DIVMOD_SEGMENT => super::kzg_da::write_div_mod_segment(
581-
vm,
582-
exec_scopes,
583-
&hint_data.ids_data,
584-
&hint_data.ap_tracking,
585-
constants,
586-
),
515+
super::kzg_da::WRITE_DIVMOD_SEGMENT => super::kzg_da::write_div_mod_segment,
587516
// #[cfg(feature = "test_utils")]
588517
// super::simulated_builtins::GET_SIMULATED_BUILTIN_BASE => {
589518
// super::simulated_builtins::get_simulated_builtin_base
590519
// }
591520
code => {
521+
println!("#################################");
592522
return Err(
593523
crate::vm::errors::vm_errors::VirtualMachineError::CompileHintFail(
594524
code.to_string().into_boxed_str(),
595525
),
596-
)
526+
);
597527
}
598528
};
599529

vm/src/hint_processor/builtin_hint_processor/secp/cairo0_hints.rs

Lines changed: 59 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
1-
use crate::stdlib::{
2-
collections::HashMap,
3-
ops::Deref,
4-
ops::{Add, Mul, Rem},
5-
prelude::*,
1+
use crate::{
2+
stdlib::{
3+
collections::HashMap,
4+
ops::{Add, Deref, Mul, Rem},
5+
prelude::*,
6+
},
7+
utils::CAIRO_PRIME,
68
};
79

810
use crate::define_hint_string_map;
@@ -200,7 +202,6 @@ pub fn r1_get_point_from_x(
200202
exec_scopes: &mut ExecutionScopes,
201203
ids_data: &HashMap<String, HintReference>,
202204
ap_tracking: &ApTracking,
203-
_constants: &HashMap<String, Felt252>,
204205
pack_prime: &BigUint,
205206
) -> Result<(), HintError> {
206207
exec_scopes.insert_value::<BigInt>("SECP256R1_P", SECP256R1_P.clone());
@@ -256,6 +257,32 @@ pub fn r1_get_point_from_x(
256257
Ok(())
257258
}
258259

260+
pub fn r1_get_point_from_x_wrapper(
261+
vm: &mut VirtualMachine,
262+
exec_scopes: &mut ExecutionScopes,
263+
ids_data: &HashMap<String, HintReference>,
264+
ap_tracking: &ApTracking,
265+
_constants: &HashMap<String, Felt252>,
266+
) -> Result<(), HintError> {
267+
r1_get_point_from_x(
268+
vm,
269+
exec_scopes,
270+
ids_data,
271+
ap_tracking,
272+
SECP256R1_P.magnitude(),
273+
)
274+
}
275+
276+
pub fn r1_get_point_from_x_v2_wrapper(
277+
vm: &mut VirtualMachine,
278+
exec_scopes: &mut ExecutionScopes,
279+
ids_data: &HashMap<String, HintReference>,
280+
ap_tracking: &ApTracking,
281+
_constants: &HashMap<String, Felt252>,
282+
) -> Result<(), HintError> {
283+
r1_get_point_from_x(vm, exec_scopes, ids_data, ap_tracking, &CAIRO_PRIME)
284+
}
285+
259286
pub fn is_on_curve_2(
260287
vm: &mut VirtualMachine,
261288
exec_scopes: &mut ExecutionScopes,
@@ -283,7 +310,6 @@ pub fn secp_double_assign_new_x(
283310
exec_scopes: &mut ExecutionScopes,
284311
ids_data: &HashMap<String, HintReference>,
285312
ap_tracking: &ApTracking,
286-
_constants: &HashMap<String, Felt252>,
287313
pack_prime: &BigUint,
288314
) -> Result<(), HintError> {
289315
exec_scopes.insert_value::<BigInt>("SECP256R1_P", SECP256R1_P.clone());
@@ -308,6 +334,32 @@ pub fn secp_double_assign_new_x(
308334
Ok(())
309335
}
310336

337+
pub fn secp_double_assign_new_x_wrapper(
338+
vm: &mut VirtualMachine,
339+
exec_scopes: &mut ExecutionScopes,
340+
ids_data: &HashMap<String, HintReference>,
341+
ap_tracking: &ApTracking,
342+
_constants: &HashMap<String, Felt252>,
343+
) -> Result<(), HintError> {
344+
secp_double_assign_new_x(
345+
vm,
346+
exec_scopes,
347+
ids_data,
348+
ap_tracking,
349+
SECP256R1_P.magnitude(),
350+
)
351+
}
352+
353+
pub fn secp_double_assign_new_x_v2_wrapper(
354+
vm: &mut VirtualMachine,
355+
exec_scopes: &mut ExecutionScopes,
356+
ids_data: &HashMap<String, HintReference>,
357+
ap_tracking: &ApTracking,
358+
_constants: &HashMap<String, Felt252>,
359+
) -> Result<(), HintError> {
360+
secp_double_assign_new_x(vm, exec_scopes, ids_data, ap_tracking, &CAIRO_PRIME)
361+
}
362+
311363
pub fn generate_nibbles(
312364
vm: &mut VirtualMachine,
313365
exec_scopes: &mut ExecutionScopes,
@@ -560,7 +612,6 @@ mod tests {
560612
&mut exec_scopes,
561613
&ids_data,
562614
&ap_tracking,
563-
&constants,
564615
SECP256R1_P.magnitude(),
565616
)
566617
.expect("calculate_value() failed");

vm/src/hint_processor/builtin_hint_processor/secp/signature.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,7 @@ pub fn div_mod_n_safe_div_plus_one_wrapper(
105105
_ap_tracking: &ApTracking,
106106
_constants: &HashMap<String, Felt252>,
107107
) -> Result<(), HintError> {
108-
div_mod_n_safe_div(exec_scopes, "a", "b", 0)
108+
div_mod_n_safe_div(exec_scopes, "a", "b", 1)
109109
}
110110

111111
pub fn div_mod_n_safe_div_xs_wrapper(

vm/src/utils.rs

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -478,14 +478,12 @@ pub mod test_utils {
478478
let ap_tracking = ApTracking::default();
479479
let reference_ids = HashMap::new();
480480
let references = Vec::new();
481-
let accessible_scopes = Vec::new();
482481
let hint_processor = BuiltinHintProcessor::new_empty();
483482
let hint_data_ref = hint_processor.compile_hint(
484483
$hint_code,
485484
&ap_tracking,
486485
&reference_ids,
487486
&references,
488-
&accessible_scopes,
489487
crate::stdlib::rc::Rc::new(constants.clone()),
490488
);
491489
(hint_data_ref, hint_processor) // TODO: Check if the processor can be passed as a reference so we dont have to return it
@@ -520,7 +518,6 @@ pub mod test_utils {
520518
let ap_tracking = ApTracking::default();
521519
let reference_ids = HashMap::new();
522520
let references = Vec::new();
523-
let accessible_scopes = Vec::new();
524521
let constants = crate::stdlib::rc::Rc::new(HashMap::new());
525522
let mut hint_processor = BuiltinHintProcessor::new_empty();
526523
let hint_data_ref = hint_processor
@@ -529,7 +526,6 @@ pub mod test_utils {
529526
&ap_tracking,
530527
&reference_ids,
531528
&references,
532-
&accessible_scopes,
533529
constants,
534530
)
535531
.unwrap(); // TODO: Remove unwrap
@@ -541,7 +537,6 @@ pub mod test_utils {
541537
let ap_tracking = ApTracking::default();
542538
let reference_ids = HashMap::new();
543539
let references = Vec::new();
544-
let accessible_scopes = Vec::new();
545540
let constants = crate::stdlib::rc::Rc::new(HashMap::new());
546541
let mut hint_processor = BuiltinHintProcessor::new_empty();
547542
let hint_data_ref = hint_processor
@@ -550,7 +545,6 @@ pub mod test_utils {
550545
&ap_tracking,
551546
&reference_ids,
552547
&references,
553-
&accessible_scopes,
554548
constants,
555549
)
556550
.unwrap(); // TODO: Remove unwrap

vm/src/vm/runners/cairo_runner.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -651,6 +651,7 @@ impl CairoRunner {
651651
.hints_collection
652652
.iter_hints()
653653
.map(|hint| {
654+
println!("{:?}", hint.code);
654655
hint_executor
655656
.compile_hint(
656657
&hint.code,

0 commit comments

Comments
 (0)