@@ -17,9 +17,9 @@ use crate::{
1717use dep::protocol_types:: {
1818 hash:: sha256_to_field ,
1919 abis ::{
20- function_selector::FunctionSelector , max_block_number::MaxBlockNumber ,
21- nullifier_key_validation_request::NullifierKeyValidationRequest ,
22- private_circuit_public_inputs::PrivateCircuitPublicInputs ,
20+ caller_context::CallerContext , function_selector::FunctionSelector ,
21+ max_block_number::MaxBlockNumber , nullifier_key_validation_request::NullifierKeyValidationRequest ,
22+ private_call_request::PrivateCallRequest , private_circuit_public_inputs::PrivateCircuitPublicInputs ,
2323 public_call_stack_item::PublicCallStackItem , read_request::ReadRequest , note_hash::NoteHash ,
2424 nullifier::Nullifier , log_hash ::{LogHash , NoteLogHash }
2525},
@@ -58,7 +58,7 @@ struct PrivateContext {
5858 new_note_hashes : BoundedVec <NoteHash , MAX_NEW_NOTE_HASHES_PER_CALL >,
5959 new_nullifiers : BoundedVec <Nullifier , MAX_NEW_NULLIFIERS_PER_CALL >,
6060
61- private_call_stack_hashes : BoundedVec <Field , MAX_PRIVATE_CALL_STACK_LENGTH_PER_CALL >,
61+ private_call_requests : BoundedVec <PrivateCallRequest , MAX_PRIVATE_CALL_STACK_LENGTH_PER_CALL >,
6262 public_call_stack_hashes : BoundedVec <Field , MAX_PUBLIC_CALL_STACK_LENGTH_PER_CALL >,
6363 public_teardown_function_hash : Field ,
6464 new_l2_to_l1_msgs : BoundedVec <L2ToL1Message , MAX_NEW_L2_TO_L1_MSGS_PER_CALL >,
@@ -124,7 +124,7 @@ impl PrivateContext {
124124 new_note_hashes : BoundedVec ::new (),
125125 new_nullifiers : BoundedVec ::new (),
126126 historical_header : inputs .historical_header ,
127- private_call_stack_hashes : BoundedVec ::new (),
127+ private_call_requests : BoundedVec ::new (),
128128 public_call_stack_hashes : BoundedVec ::new (),
129129 public_teardown_function_hash : 0 ,
130130 new_l2_to_l1_msgs : BoundedVec ::new (),
@@ -165,7 +165,7 @@ impl PrivateContext {
165165 nullifier_key_validation_requests : self .nullifier_key_validation_requests .storage ,
166166 new_note_hashes : self .new_note_hashes .storage ,
167167 new_nullifiers : self .new_nullifiers .storage ,
168- private_call_stack_hashes : self .private_call_stack_hashes .storage ,
168+ private_call_requests : self .private_call_requests .storage ,
169169 public_call_stack_hashes : self .public_call_stack_hashes .storage ,
170170 public_teardown_function_hash : self .public_teardown_function_hash ,
171171 new_l2_to_l1_msgs : self .new_l2_to_l1_msgs .storage ,
@@ -409,18 +409,20 @@ impl PrivateContext {
409409 is_delegate_call : bool
410410 ) -> PackedReturns {
411411 let mut is_static_call = is_static_call | self .inputs .call_context .is_static_call ;
412+ let start_side_effect_counter = self .side_effect_counter ;
412413 let item = call_private_function_internal (
413414 contract_address ,
414415 function_selector ,
415416 args_hash ,
416- self . side_effect_counter ,
417+ start_side_effect_counter ,
417418 is_static_call ,
418419 is_delegate_call
419420 );
420421
421- assert_eq (item .public_inputs .call_context .side_effect_counter , self .side_effect_counter );
422- assert_eq (item .public_inputs .start_side_effect_counter , self .side_effect_counter );
423- self .side_effect_counter = item .public_inputs .end_side_effect_counter + 1 ;
422+ assert_eq (item .public_inputs .call_context .side_effect_counter , start_side_effect_counter );
423+ assert_eq (item .public_inputs .start_side_effect_counter , start_side_effect_counter );
424+ let end_side_effect_counter = item .public_inputs .end_side_effect_counter ;
425+ self .side_effect_counter = end_side_effect_counter + 1 ;
424426
425427 // TODO (fees) figure out why this crashes the prover and enable it
426428 // we need this in order to pay fees inside child call contexts
@@ -458,7 +460,15 @@ impl PrivateContext {
458460 );
459461 }
460462
461- self .private_call_stack_hashes .push (item .hash ());
463+ let mut caller_context = CallerContext ::empty ();
464+ caller_context .is_static_call = self .inputs .call_context .is_static_call ;
465+ if is_delegate_call {
466+ caller_context .msg_sender = self .inputs .call_context .msg_sender ;
467+ caller_context .storage_contract_address = self .inputs .call_context .storage_contract_address ;
468+ }
469+ self .private_call_requests .push (
470+ PrivateCallRequest { hash : item .hash (), caller_context , start_side_effect_counter , end_side_effect_counter }
471+ );
462472
463473 PackedReturns ::new (item .public_inputs .returns_hash )
464474 }
@@ -652,10 +662,10 @@ impl Empty for PrivateContext {
652662 nullifier_key_validation_requests : BoundedVec ::new (),
653663 new_note_hashes : BoundedVec ::new (),
654664 new_nullifiers : BoundedVec ::new (),
655- private_call_stack_hashes : BoundedVec ::new (),
656- public_call_stack_hashes : BoundedVec ::new (),
665+ private_call_requests : BoundedVec ::new (),
666+ public_call_stack_hashes : BoundedVec ::new (),
657667 public_teardown_function_hash : 0 ,
658- new_l2_to_l1_msgs : BoundedVec ::new (),
668+ new_l2_to_l1_msgs : BoundedVec ::new (),
659669 historical_header : Header ::empty (),
660670 note_encrypted_logs_hashes : BoundedVec ::new (),
661671 encrypted_logs_hashes : BoundedVec ::new (),
0 commit comments