@@ -24,7 +24,9 @@ pub struct HashBuiltinRunner {
2424 pub ( crate ) instances_per_component : u32 ,
2525 // This act as a cache to optimize calls to deduce_memory_cell
2626 // Therefore need interior mutability
27- pub ( self ) verified_addresses : RefCell < Vec < Relocatable > > ,
27+ // 1 at position 'n' means offset 'n' relative to base pointer
28+ // has been verified
29+ pub ( self ) verified_addresses : RefCell < Vec < bool > > ,
2830}
2931
3032impl HashBuiltinRunner {
@@ -72,7 +74,11 @@ impl HashBuiltinRunner {
7274 . offset
7375 . mod_floor ( & ( self . cells_per_instance as usize ) )
7476 != 2
75- || self . verified_addresses . borrow ( ) . contains ( & address)
77+ || * self
78+ . verified_addresses
79+ . borrow ( )
80+ . get ( address. offset )
81+ . unwrap_or ( & false )
7682 {
7783 return Ok ( None ) ;
7884 } ;
@@ -89,7 +95,12 @@ impl HashBuiltinRunner {
8995 num_a. as_ref ( ) . map ( |x| x. as_ref ( ) ) ,
9096 num_b. as_ref ( ) . map ( |x| x. as_ref ( ) ) ,
9197 ) {
92- self . verified_addresses . borrow_mut ( ) . push ( address) ;
98+ if self . verified_addresses . borrow ( ) . len ( ) <= address. offset {
99+ self . verified_addresses
100+ . borrow_mut ( )
101+ . resize ( address. offset + 1 , false ) ;
102+ }
103+ self . verified_addresses . borrow_mut ( ) [ address. offset ] = true ;
93104
94105 //Convert MaybeRelocatable to FieldElement
95106 let a_string = num_a. to_str_radix ( 10 ) ;
@@ -404,7 +415,7 @@ mod tests {
404415 ) ;
405416 assert_eq ! (
406417 builtin. verified_addresses. into_inner( ) ,
407- vec![ Relocatable :: from ( ( 0 , 5 ) ) ]
418+ vec![ false , false , false , false , false , true ] ,
408419 ) ;
409420 }
410421
@@ -431,7 +442,7 @@ mod tests {
431442 fn deduce_memory_cell_pedersen_for_preset_memory_already_computed ( ) {
432443 let memory = memory ! [ ( ( 0 , 3 ) , 32 ) , ( ( 0 , 4 ) , 72 ) , ( ( 0 , 5 ) , 0 ) ] ;
433444 let mut builtin = HashBuiltinRunner :: new ( Some ( 8 ) , true ) ;
434- builtin. verified_addresses = RefCell :: new ( vec ! [ Relocatable :: from ( ( 0 , 5 ) ) ] ) ;
445+ builtin. verified_addresses = RefCell :: new ( vec ! [ false , false , false , false , false , true ] ) ;
435446 let result = builtin. deduce_memory_cell ( Relocatable :: from ( ( 0 , 5 ) ) , & memory) ;
436447 assert_eq ! ( result, Ok ( None ) ) ;
437448 }
0 commit comments