diff --git a/noir-projects/aztec-nr/aztec/src/encrypted_logs/encrypted_event_emission.nr b/noir-projects/aztec-nr/aztec/src/encrypted_logs/encrypted_event_emission.nr index e28987ccedee..2e624869c427 100644 --- a/noir-projects/aztec-nr/aztec/src/encrypted_logs/encrypted_event_emission.nr +++ b/noir-projects/aztec-nr/aztec/src/encrypted_logs/encrypted_event_emission.nr @@ -49,9 +49,8 @@ pub fn encode_and_encrypt_event( iv: AztecAddress ) -> fn[(&mut PrivateContext, AztecAddress, AztecAddress)](Event) -> () where Event: EventInterface, [u8; NB]: LensForEncryptedEvent { | e: Event | { - let header = context.get_header(); - let ovpk = header.get_ovpk_m(context, ov); - let ivpk = header.get_ivpk_m(context, iv); + let ovpk = context.get_ovpk_m(ov); + let ivpk = context.get_ivpk_m(iv); let randomness = unsafe_rand(); emit_with_keys(context, randomness, e, ovpk, ivpk, compute); } @@ -63,9 +62,8 @@ pub fn encode_and_encrypt_event_unconstrained( iv: AztecAddress ) -> fn[(&mut PrivateContext, AztecAddress, AztecAddress)](Event) -> () where Event: EventInterface, [u8; NB]: LensForEncryptedEvent { | e: Event | { - let header = context.get_header(); - let ovpk = header.get_ovpk_m(context, ov); - let ivpk = header.get_ivpk_m(context, iv); + let ovpk = context.get_ovpk_m(ov); + let ivpk = context.get_ivpk_m(iv); let randomness = unsafe_rand(); emit_with_keys(context, randomness, e, ovpk, ivpk, compute_unconstrained); } @@ -78,9 +76,8 @@ pub fn encode_and_encrypt_event_with_randomness( iv: AztecAddress ) -> fn[(&mut PrivateContext, AztecAddress, AztecAddress, Field)](Event) -> () where Event: EventInterface, [u8; NB]: LensForEncryptedEvent { | e: Event | { - let header = context.get_header(); - let ovpk = header.get_ovpk_m(context, ov); - let ivpk = header.get_ivpk_m(context, iv); + let ovpk = context.get_ovpk_m(ov); + let ivpk = context.get_ivpk_m(iv); emit_with_keys(context, randomness, e, ovpk, ivpk, compute); } } @@ -92,9 +89,8 @@ pub fn encode_and_encrypt_event_with_randomness_unconstrained iv: AztecAddress ) -> fn[(&mut PrivateContext, AztecAddress, AztecAddress, Field)](Event) -> () where Event: EventInterface, [u8; NB]: LensForEncryptedEvent { | e: Event | { - let header = context.get_header(); - let ovpk = header.get_ovpk_m(context, ov); - let ivpk = header.get_ivpk_m(context, iv); + let ovpk = context.get_ovpk_m(ov); + let ivpk = context.get_ivpk_m(iv); emit_with_keys(context, randomness, e, ovpk, ivpk, compute_unconstrained); } } diff --git a/noir-projects/aztec-nr/aztec/src/encrypted_logs/encrypted_note_emission.nr b/noir-projects/aztec-nr/aztec/src/encrypted_logs/encrypted_note_emission.nr index a81569bdf41e..ee5aa9dff27b 100644 --- a/noir-projects/aztec-nr/aztec/src/encrypted_logs/encrypted_note_emission.nr +++ b/noir-projects/aztec-nr/aztec/src/encrypted_logs/encrypted_note_emission.nr @@ -64,9 +64,8 @@ pub fn encode_and_encrypt_note( iv: AztecAddress ) -> fn[(&mut PrivateContext, AztecAddress, AztecAddress)](NoteEmission) -> () where Note: NoteInterface, [Field; N]: LensForEncryptedLog { | e: NoteEmission | { - let header = context.get_header(); - let ovpk = header.get_ovpk_m(context, ov); - let ivpk = header.get_ivpk_m(context, iv); + let ovpk = context.get_ovpk_m(ov); + let ivpk = context.get_ivpk_m(iv); emit_with_keys(context, e.note, ovpk, ivpk, compute); } } @@ -77,9 +76,8 @@ pub fn encode_and_encrypt_note_unconstrained( iv: AztecAddress ) -> fn[(&mut PrivateContext, AztecAddress, AztecAddress)](NoteEmission) -> () where Note: NoteInterface, [Field; N]: LensForEncryptedLog { | e: NoteEmission | { - let header = context.get_header(); - let ovpk = header.get_ovpk_m(context, ov); - let ivpk = header.get_ivpk_m(context, iv); + let ovpk = context.get_ovpk_m(ov); + let ivpk = context.get_ivpk_m(iv); emit_with_keys(context, e.note, ovpk, ivpk, compute_unconstrained); } } diff --git a/noir-projects/aztec-nr/aztec/src/keys/getters.nr b/noir-projects/aztec-nr/aztec/src/keys/getters.nr index c79d1d69a1b9..254e7a581bdb 100644 --- a/noir-projects/aztec-nr/aztec/src/keys/getters.nr +++ b/noir-projects/aztec-nr/aztec/src/keys/getters.nr @@ -14,36 +14,66 @@ global DELAY = 5; // docs:start:key-getters trait KeyGettersPrivate { - fn get_npk_m(header: Header, context: &mut PrivateContext, address: AztecAddress) -> Point; - fn get_ivpk_m(header: Header, context: &mut PrivateContext, address: AztecAddress) -> Point; - fn get_ovpk_m(header: Header, context: &mut PrivateContext, address: AztecAddress) -> Point; - fn get_tpk_m(header: Header, context: &mut PrivateContext, address: AztecAddress) -> Point; - fn get_npk_m_hash(header: Header, context: &mut PrivateContext, address: AztecAddress) -> Field; + fn get_npk_m(context: &mut PrivateContext, address: AztecAddress) -> Point; + fn get_ivpk_m(context: &mut PrivateContext, address: AztecAddress) -> Point; + fn get_ovpk_m(context: &mut PrivateContext, address: AztecAddress) -> Point; + fn get_tpk_m(context: &mut PrivateContext, address: AztecAddress) -> Point; + fn get_npk_m_hash(context: &mut PrivateContext, address: AztecAddress) -> Field; } -impl KeyGettersPrivate for Header { - fn get_npk_m(self, context: &mut PrivateContext, address: AztecAddress) -> Point { - get_master_key(context, address, NULLIFIER_INDEX, self) +impl KeyGettersPrivate for PrivateContext { + fn get_npk_m(context: &mut PrivateContext, address: AztecAddress) -> Point { + get_master_key(context, NULLIFIER_INDEX, address) } - fn get_ivpk_m(self, context: &mut PrivateContext, address: AztecAddress) -> Point { - get_master_key(context, address, INCOMING_INDEX, self) + fn get_ivpk_m(context: &mut PrivateContext, address: AztecAddress) -> Point { + get_master_key(context, INCOMING_INDEX, address) } - fn get_ovpk_m(self, context: &mut PrivateContext, address: AztecAddress) -> Point { - get_master_key(context, address, OUTGOING_INDEX, self) + fn get_ovpk_m(context: &mut PrivateContext, address: AztecAddress) -> Point { + get_master_key(context, OUTGOING_INDEX, address) } - fn get_tpk_m(self, context: &mut PrivateContext, address: AztecAddress) -> Point { - get_master_key(context, address, TAGGING_INDEX, self) + fn get_tpk_m(context: &mut PrivateContext, address: AztecAddress) -> Point { + get_master_key(context, TAGGING_INDEX, address) } - fn get_npk_m_hash(self, context: &mut PrivateContext, address: AztecAddress) -> Field { - get_master_key(context, address, NULLIFIER_INDEX, self).hash() + fn get_npk_m_hash(context: &mut PrivateContext, address: AztecAddress) -> Field { + get_master_key(context, NULLIFIER_INDEX, address).hash() } } // docs:end:key-getters +trait KeyGettersPrivateHistorical { + fn get_npk_m_historical(header: Header, address: AztecAddress) -> Point; + fn get_ivpk_m_historical(header: Header, address: AztecAddress) -> Point; + fn get_ovpk_m_historical(header: Header, address: AztecAddress) -> Point; + fn get_tpk_m_historical(header: Header, address: AztecAddress) -> Point; + fn get_npk_m_hash_historical(header: Header, address: AztecAddress) -> Field; +} + +impl KeyGettersPrivateHistorical for Header { + fn get_npk_m_historical(header: Header, address: AztecAddress) -> Point { + get_master_key_historical(header, NULLIFIER_INDEX, address) + } + + fn get_ivpk_m_historical(header: Header, address: AztecAddress) -> Point { + get_master_key_historical(header, INCOMING_INDEX, address) + } + + fn get_ovpk_m_historical(header: Header, address: AztecAddress) -> Point { + get_master_key_historical(header, OUTGOING_INDEX, address) + } + + fn get_tpk_m_historical(header: Header, address: AztecAddress) -> Point { + get_master_key_historical(header, TAGGING_INDEX, address) + } + + fn get_npk_m_hash_historical(header: Header, address: AztecAddress) -> Field { + get_master_key_historical(header, NULLIFIER_INDEX, address).hash() + } +} + trait KeyGettersUnconstrained { fn get_npk_m(context: UnconstrainedContext, address: AztecAddress) -> Point; fn get_ivpk_m(context: UnconstrainedContext, address: AztecAddress) -> Point; @@ -53,31 +83,31 @@ trait KeyGettersUnconstrained { } impl KeyGettersUnconstrained for UnconstrainedContext { - fn get_npk_m(self, address: AztecAddress) -> Point { - get_master_key_unconstrained(self, address, NULLIFIER_INDEX) + fn get_npk_m(context: UnconstrainedContext, address: AztecAddress) -> Point { + get_master_key_unconstrained(context, NULLIFIER_INDEX, address) } - fn get_ivpk_m(self, address: AztecAddress) -> Point { - get_master_key_unconstrained(self, address, INCOMING_INDEX) + fn get_ivpk_m(context: UnconstrainedContext, address: AztecAddress) -> Point { + get_master_key_unconstrained(context, INCOMING_INDEX, address) } - fn get_ovpk_m(self, address: AztecAddress) -> Point { - get_master_key_unconstrained(self, address, OUTGOING_INDEX) + fn get_ovpk_m(context: UnconstrainedContext, address: AztecAddress) -> Point { + get_master_key_unconstrained(context, OUTGOING_INDEX, address) } - fn get_tpk_m(self, address: AztecAddress) -> Point { - get_master_key_unconstrained(self, address, TAGGING_INDEX) + fn get_tpk_m(context: UnconstrainedContext, address: AztecAddress) -> Point { + get_master_key_unconstrained(context, TAGGING_INDEX, address) } - fn get_npk_m_hash(self, address: AztecAddress) -> Field { - get_master_key_unconstrained(self, address, NULLIFIER_INDEX).hash() + fn get_npk_m_hash(context: UnconstrainedContext, address: AztecAddress) -> Field { + get_master_key_unconstrained(context, NULLIFIER_INDEX, address).hash() } } fn get_master_key_unconstrained( context: UnconstrainedContext, - address: AztecAddress, key_index: Field, + address: AztecAddress ) -> Point { let key = fetch_key_from_registry_unconstrained(context, key_index, address); if is_empty(key) { @@ -94,7 +124,7 @@ fn get_master_key_unconstrained( fn fetch_key_from_registry_unconstrained( context: UnconstrainedContext, key_index: Field, - address: AztecAddress, + address: AztecAddress ) -> Point { let x_coordinate_map_slot = key_index * 2 + 1; let y_coordinate_map_slot = x_coordinate_map_slot + 1; @@ -117,11 +147,27 @@ fn fetch_key_from_registry_unconstrained( fn get_master_key( context: &mut PrivateContext, - address: AztecAddress, key_index: Field, - header: Header + address: AztecAddress ) -> Point { - let key = fetch_key_from_registry(context, key_index, address, header); + let key = fetch_key_from_registry(context, key_index, address); + if is_empty(key) { + // Keys were not registered in registry yet --> fetch key from PXE + let keys = fetch_and_constrain_keys(address); + // Return the corresponding to index + keys.get_key_by_index(key_index) + } else { + // Keys were registered --> return the key + key + } +} + +fn get_master_key_historical( + header: Header, + key_index: Field, + address: AztecAddress +) -> Point { + let key = fetch_key_from_registry_historical(header, key_index, address); if is_empty(key) { // Keys were not registered in registry yet --> fetch key from PXE let keys = fetch_and_constrain_keys(address); @@ -136,8 +182,7 @@ fn get_master_key( fn fetch_key_from_registry( context: &mut PrivateContext, key_index: Field, - address: AztecAddress, - header: Header + address: AztecAddress ) -> Point { let x_coordinate_map_slot = key_index * 2 + 1; let y_coordinate_map_slot = x_coordinate_map_slot + 1; @@ -158,6 +203,30 @@ fn fetch_key_from_registry( Point { x: x_coordinate, y: y_coordinate, is_infinite: false } } +fn fetch_key_from_registry_historical( + header: Header, + key_index: Field, + address: AztecAddress +) -> Point { + let x_coordinate_map_slot = key_index * 2 + 1; + let y_coordinate_map_slot = x_coordinate_map_slot + 1; + let x_coordinate_derived_slot = derive_storage_slot_in_map(x_coordinate_map_slot, address); + let y_coordinate_derived_slot = derive_storage_slot_in_map(y_coordinate_map_slot, address); + + let x_coordinate = SharedMutable::get_historical_value_in_private_other::( + header, + AztecAddress::from_field(CANONICAL_KEY_REGISTRY_ADDRESS), + x_coordinate_derived_slot + ); + let y_coordinate = SharedMutable::get_historical_value_in_private_other::( + header, + AztecAddress::from_field(CANONICAL_KEY_REGISTRY_ADDRESS), + y_coordinate_derived_slot + ); + + Point { x: x_coordinate, y: y_coordinate, is_infinite: false } +} + // Passes only when keys were not rotated - is expected to be called only when keys were not registered yet fn fetch_and_constrain_keys(address: AztecAddress) -> PublicKeys { let (public_keys, partial_address) = get_public_keys_and_partial_address(address); diff --git a/noir-projects/aztec-nr/aztec/src/state_vars/shared_mutable/shared_mutable.nr b/noir-projects/aztec-nr/aztec/src/state_vars/shared_mutable/shared_mutable.nr index 960692e4fe29..de9dc3a64df2 100644 --- a/noir-projects/aztec-nr/aztec/src/state_vars/shared_mutable/shared_mutable.nr +++ b/noir-projects/aztec-nr/aztec/src/state_vars/shared_mutable/shared_mutable.nr @@ -254,6 +254,22 @@ impl SharedMutable { context.set_tx_max_block_number(block_horizon); value_change.get_current_at(historical_block_number) } + + pub fn get_historical_value_in_private_other( + header: Header, + address: AztecAddress, + storage_slot: Field + ) -> T_OTHER where T_OTHER: FromField + ToField + Eq { + // When reading the current value in private we construct a historical state proof for the public value. + // However, since this value might change, we must constrain the maximum transaction block number as this proof + // will only be valid for however many blocks we can ensure the value will not change, which will depend on the + // current delay and any scheduled delay changes. + let dummy: SharedMutable = SharedMutable::new((), storage_slot); + + let (value_change, _, historical_block_number): (ScheduledValueChange, ScheduledDelayChange, u32) = dummy.historical_read_from_public_storage(header, address); + + value_change.get_current_at(historical_block_number) + } } impl SharedMutable where T: ToField + FromField + Eq { diff --git a/noir-projects/aztec-nr/easy-private-state/src/easy_private_uint.nr b/noir-projects/aztec-nr/easy-private-state/src/easy_private_uint.nr index 0d93ae6fc21d..de226f11583e 100644 --- a/noir-projects/aztec-nr/easy-private-state/src/easy_private_uint.nr +++ b/noir-projects/aztec-nr/easy-private-state/src/easy_private_uint.nr @@ -23,8 +23,7 @@ impl EasyPrivateUint { impl EasyPrivateUint<&mut PrivateContext> { // Very similar to `value_note::utils::increment`. pub fn add(self, addend: u64, owner: AztecAddress, outgoing_viewer: AztecAddress) { - let header = self.context.get_header(); - let owner_npk_m_hash = header.get_npk_m_hash(self.context, owner); + let owner_npk_m_hash = self.context.get_npk_m_hash(owner); // Creates new note for the owner. let mut addend_note = ValueNote::new(addend as Field, owner_npk_m_hash); @@ -36,8 +35,7 @@ impl EasyPrivateUint<&mut PrivateContext> { // Very similar to `value_note::utils::decrement`. pub fn sub(self, subtrahend: u64, owner: AztecAddress, outgoing_viewer: AztecAddress) { - let header = self.context.get_header(); - let owner_npk_m_hash = header.get_npk_m_hash(self.context, owner); + let owner_npk_m_hash = self.context.get_npk_m_hash(owner); // docs:start:get_notes let options = NoteGetterOptions::with_filter(filter_notes_min_sum, subtrahend as Field); diff --git a/noir-projects/aztec-nr/value-note/src/utils.nr b/noir-projects/aztec-nr/value-note/src/utils.nr index 6f3982a06dc2..f975012cfcae 100644 --- a/noir-projects/aztec-nr/value-note/src/utils.nr +++ b/noir-projects/aztec-nr/value-note/src/utils.nr @@ -17,8 +17,7 @@ pub fn increment( recipient: AztecAddress, outgoing_viewer: AztecAddress ) { - let header = balance.context.get_header(); - let recipient_npk_m_hash = header.get_npk_m_hash(balance.context, recipient); + let recipient_npk_m_hash = balance.context.get_npk_m_hash(recipient); let mut note = ValueNote::new(amount, recipient_npk_m_hash); // Insert the new note to the owner's set of notes and emit the log if value is non-zero. diff --git a/noir-projects/noir-contracts/contracts/app_subscription_contract/src/main.nr b/noir-projects/noir-contracts/contracts/app_subscription_contract/src/main.nr index 532c772c9b9c..a77ce0449fed 100644 --- a/noir-projects/noir-contracts/contracts/app_subscription_contract/src/main.nr +++ b/noir-projects/noir-contracts/contracts/app_subscription_contract/src/main.nr @@ -111,8 +111,7 @@ contract AppSubscription { // Assert that the given expiry_block_number < current_block_number + SUBSCRIPTION_DURATION_IN_BLOCKS. AppSubscription::at(context.this_address()).assert_block_number(expiry_block_number).enqueue_view(&mut context); - let header = context.get_header(); - let subscriber_npk_m_hash = header.get_npk_m_hash(&mut context, subscriber_address); + let subscriber_npk_m_hash = context.get_npk_m_hash(subscriber_address); let mut subscription_note = SubscriptionNote::new(subscriber_npk_m_hash, expiry_block_number, tx_count); storage.subscriptions.at(subscriber_address).initialize_or_replace(&mut subscription_note).emit(encode_and_encrypt_note(&mut context, context.msg_sender(), subscriber_address)); diff --git a/noir-projects/noir-contracts/contracts/card_game_contract/src/cards.nr b/noir-projects/noir-contracts/contracts/card_game_contract/src/cards.nr index 1af2b3c81f03..65c6419a88a0 100644 --- a/noir-projects/noir-contracts/contracts/card_game_contract/src/cards.nr +++ b/noir-projects/noir-contracts/contracts/card_game_contract/src/cards.nr @@ -103,10 +103,10 @@ impl Deck { impl Deck<&mut PrivateContext> { pub fn add_cards(&mut self, cards: [Card; N], owner: AztecAddress) -> [CardNote] { - let header = self.set.context.get_header(); - let owner_npk_m_hash = header.get_npk_m_hash(self.set.context, owner); - let msg_sender_ovpk_m = header.get_ovpk_m(self.set.context, self.set.context.msg_sender()); - let owner_ivpk_m = header.get_ivpk_m(self.set.context, owner); + let context = self.set.context; + let owner_npk_m_hash = context.get_npk_m_hash(owner); + let msg_sender_ovpk_m = context.get_ovpk_m(context.msg_sender()); + let owner_ivpk_m = context.get_ivpk_m(owner); let mut inserted_cards = &[]; for card in cards { @@ -182,8 +182,7 @@ pub fn get_pack_cards( owner: AztecAddress, context: &mut PrivateContext ) -> [Card; PACK_CARDS] { - let header = context.get_header(); - let owner_npk_m_hash = header.get_npk_m_hash(context, owner); + let owner_npk_m_hash = context.get_npk_m_hash(owner); // generate pseudo randomness deterministically from 'seed' and user secret let secret = context.request_nsk_app(owner_npk_m_hash); diff --git a/noir-projects/noir-contracts/contracts/child_contract/src/main.nr b/noir-projects/noir-contracts/contracts/child_contract/src/main.nr index 4464dce3ea08..41dafbbed592 100644 --- a/noir-projects/noir-contracts/contracts/child_contract/src/main.nr +++ b/noir-projects/noir-contracts/contracts/child_contract/src/main.nr @@ -51,8 +51,7 @@ contract Child { #[aztec(private)] fn private_set_value(new_value: Field, owner: AztecAddress) -> Field { - let header = context.get_header(); - let owner_npk_m_hash = header.get_npk_m_hash(&mut context, owner); + let owner_npk_m_hash = context.get_npk_m_hash(owner); let mut note = ValueNote::new(new_value, owner_npk_m_hash); storage.a_map_with_private_values.at(owner).insert(&mut note).emit(encode_and_encrypt_note(&mut context, owner, owner)); diff --git a/noir-projects/noir-contracts/contracts/crowdfunding_contract/src/main.nr b/noir-projects/noir-contracts/contracts/crowdfunding_contract/src/main.nr index 4eb7657462e2..039307918a82 100644 --- a/noir-projects/noir-contracts/contracts/crowdfunding_contract/src/main.nr +++ b/noir-projects/noir-contracts/contracts/crowdfunding_contract/src/main.nr @@ -74,10 +74,9 @@ contract Crowdfunding { Token::at(storage.donation_token.read_private()).transfer_from(donor, context.this_address(), amount as Field, 0).call(&mut context); // docs:end:do-transfer - let header = context.get_header(); // 3) Create a value note for the donor so that he can later on claim a rewards token in the Claim // contract by proving that the hash of this note exists in the note hash tree. - let donor_npk_m_hash = header.get_npk_m_hash(&mut context, donor); + let donor_npk_m_hash = context.get_npk_m_hash(donor); let mut note = ValueNote::new(amount as Field, donor_npk_m_hash); storage.donation_receipts.insert(&mut note).emit(encode_and_encrypt_note(&mut context, donor, donor)); } diff --git a/noir-projects/noir-contracts/contracts/delegated_on_contract/src/main.nr b/noir-projects/noir-contracts/contracts/delegated_on_contract/src/main.nr index 772d3021827f..c41be03d28e8 100644 --- a/noir-projects/noir-contracts/contracts/delegated_on_contract/src/main.nr +++ b/noir-projects/noir-contracts/contracts/delegated_on_contract/src/main.nr @@ -15,8 +15,7 @@ contract DelegatedOn { #[aztec(private)] fn private_set_value(new_value: Field, owner: AztecAddress) -> Field { - let header = context.get_header(); - let owner_npk_m_hash = header.get_npk_m_hash(&mut context, owner); + let owner_npk_m_hash = context.get_npk_m_hash(owner); let mut note = ValueNote::new(new_value, owner_npk_m_hash); storage.a_map_with_private_values.at(owner).insert(&mut note).emit(encode_and_encrypt_note(&mut context, context.msg_sender(), owner)); diff --git a/noir-projects/noir-contracts/contracts/docs_example_contract/src/main.nr b/noir-projects/noir-contracts/contracts/docs_example_contract/src/main.nr index 6af65f9286cd..9681b8d84553 100644 --- a/noir-projects/noir-contracts/contracts/docs_example_contract/src/main.nr +++ b/noir-projects/noir-contracts/contracts/docs_example_contract/src/main.nr @@ -168,8 +168,7 @@ contract DocsExample { // docs:start:initialize-private-mutable #[aztec(private)] fn initialize_private_immutable(randomness: Field, points: u8) { - let header = context.get_header(); - let msg_sender_npk_m_hash = header.get_npk_m_hash(&mut context, context.msg_sender()); + let msg_sender_npk_m_hash = context.get_npk_m_hash(context.msg_sender()); let mut new_card = CardNote::new(points, randomness, msg_sender_npk_m_hash); storage.private_immutable.initialize(&mut new_card).emit(encode_and_encrypt_note(&mut context, context.msg_sender(), context.msg_sender())); @@ -179,8 +178,7 @@ contract DocsExample { #[aztec(private)] // msg_sender() is 0 at deploy time. So created another function fn initialize_private(randomness: Field, points: u8) { - let header = context.get_header(); - let msg_sender_npk_m_hash = header.get_npk_m_hash(&mut context, context.msg_sender()); + let msg_sender_npk_m_hash = context.get_npk_m_hash(context.msg_sender()); let mut legendary_card = CardNote::new(points, randomness, msg_sender_npk_m_hash); // create and broadcast note @@ -189,10 +187,9 @@ contract DocsExample { #[aztec(private)] fn insert_notes(amounts: [u8; 3]) { - let header = context.get_header(); - let msg_sender_npk_m_hash = header.get_npk_m_hash(&mut context, context.msg_sender()); - let msg_sender_ovpk_m = header.get_ovpk_m(&mut context, context.msg_sender()); - let msg_sender_ivpk_m = header.get_ivpk_m(&mut context, context.msg_sender()); + let msg_sender_npk_m_hash = context.get_npk_m_hash(context.msg_sender()); + let msg_sender_ovpk_m = context.get_ovpk_m(context.msg_sender()); + let msg_sender_ivpk_m = context.get_ivpk_m(context.msg_sender()); for i in 0..amounts.len() { let mut note = CardNote::new(amounts[i], 1, msg_sender_npk_m_hash); @@ -202,8 +199,7 @@ contract DocsExample { #[aztec(private)] fn insert_note(amount: u8, randomness: Field) { - let header = context.get_header(); - let msg_sender_npk_m_hash = header.get_npk_m_hash(&mut context, context.msg_sender()); + let msg_sender_npk_m_hash = context.get_npk_m_hash(context.msg_sender()); let mut note = CardNote::new(amount, randomness, msg_sender_npk_m_hash); storage.set.insert(&mut note).emit(encode_and_encrypt_note(&mut context, context.msg_sender(), context.msg_sender())); @@ -224,8 +220,7 @@ contract DocsExample { #[aztec(private)] fn update_legendary_card(randomness: Field, points: u8) { - let header = context.get_header(); - let msg_sender_npk_m_hash = header.get_npk_m_hash(&mut context, context.msg_sender()); + let msg_sender_npk_m_hash = context.get_npk_m_hash(context.msg_sender()); let mut new_card = CardNote::new(points, randomness, msg_sender_npk_m_hash); storage.legendary_card.replace(&mut new_card).emit(encode_and_encrypt_note(&mut context, context.msg_sender(), context.msg_sender())); @@ -236,9 +231,7 @@ contract DocsExample { fn increase_legendary_points() { // Ensure `points` > current value // Also serves as a e2e test that you can `get_note()` and then `replace()` - - let header = context.get_header(); - let msg_sender_npk_m_hash = header.get_npk_m_hash(&mut context, context.msg_sender()); + let msg_sender_npk_m_hash = context.get_npk_m_hash(context.msg_sender()); // docs:start:state_vars-PrivateMutableGet let card = storage.legendary_card.get_note().note; diff --git a/noir-projects/noir-contracts/contracts/easy_private_voting_contract/src/main.nr b/noir-projects/noir-contracts/contracts/easy_private_voting_contract/src/main.nr index 774034e276ac..e9ca9eba1cab 100644 --- a/noir-projects/noir-contracts/contracts/easy_private_voting_contract/src/main.nr +++ b/noir-projects/noir-contracts/contracts/easy_private_voting_contract/src/main.nr @@ -31,7 +31,7 @@ contract EasyPrivateVoting { // Below, we make sure to get our nullifier public key at a specific block. By pinning the nullifier public key at a specific block, // rotating keys will have no effect on the nullifier being produced, and voting again after will fail because the same nullifier is computed each time the user votes. let header_at_active_at_block = context.get_header_at(storage.active_at_block.read_private()); - let msg_sender_npk_m_hash = header_at_active_at_block.get_npk_m_hash(&mut context, context.msg_sender()); + let msg_sender_npk_m_hash = header_at_active_at_block.get_npk_m_hash_historical(context.msg_sender()); let secret = context.request_nsk_app(msg_sender_npk_m_hash); // get secret key of caller of function let nullifier = std::hash::pedersen_hash([context.msg_sender().to_field(), secret]); // derive nullifier from sender and secret diff --git a/noir-projects/noir-contracts/contracts/ecdsa_account_contract/src/main.nr b/noir-projects/noir-contracts/contracts/ecdsa_account_contract/src/main.nr index f4495e48217d..f9705db0bf1d 100644 --- a/noir-projects/noir-contracts/contracts/ecdsa_account_contract/src/main.nr +++ b/noir-projects/noir-contracts/contracts/ecdsa_account_contract/src/main.nr @@ -26,8 +26,8 @@ contract EcdsaAccount { #[aztec(initializer)] fn constructor(signing_pub_key_x: [u8; 32], signing_pub_key_y: [u8; 32]) { let this = context.this_address(); - let header = context.get_header(); - let this_npk_m_hash = header.get_npk_m_hash(&mut context, this); + + let this_npk_m_hash = context.get_npk_m_hash(this); // Not emitting outgoing for msg_sender here to not have to register keys for the contract through which we // deploy this (typically MultiCallEntrypoint). I think it's ok here as I feel the outgoing here is not that // important. diff --git a/noir-projects/noir-contracts/contracts/escrow_contract/src/main.nr b/noir-projects/noir-contracts/contracts/escrow_contract/src/main.nr index 27159437c1b3..3a60e69dbd6a 100644 --- a/noir-projects/noir-contracts/contracts/escrow_contract/src/main.nr +++ b/noir-projects/noir-contracts/contracts/escrow_contract/src/main.nr @@ -16,8 +16,7 @@ contract Escrow { #[aztec(private)] #[aztec(initializer)] fn constructor(owner: AztecAddress) { - let header = context.get_header(); - let owner_npk_m_hash = header.get_npk_m_hash(&mut context, owner); + let owner_npk_m_hash = context.get_npk_m_hash(owner); let mut note = AddressNote::new(owner, owner_npk_m_hash); storage.owner.initialize(&mut note).emit(encode_and_encrypt_note(&mut context, context.msg_sender(), owner)); diff --git a/noir-projects/noir-contracts/contracts/inclusion_proofs_contract/src/main.nr b/noir-projects/noir-contracts/contracts/inclusion_proofs_contract/src/main.nr index 2b370e1ec355..18e2aad8aa6a 100644 --- a/noir-projects/noir-contracts/contracts/inclusion_proofs_contract/src/main.nr +++ b/noir-projects/noir-contracts/contracts/inclusion_proofs_contract/src/main.nr @@ -32,8 +32,7 @@ contract InclusionProofs { #[aztec(private)] fn create_note(owner: AztecAddress, value: Field) { let owner_private_values = storage.private_values.at(owner); - let header = context.get_header(); - let owner_npk_m_hash = header.get_npk_m_hash(&mut context, owner); + let owner_npk_m_hash = context.get_npk_m_hash(owner); let mut note = ValueNote::new(value, owner_npk_m_hash); owner_private_values.insert(&mut note).emit(encode_and_encrypt_note(&mut context, context.msg_sender(), owner)); @@ -75,8 +74,7 @@ contract InclusionProofs { use_block_number: bool, block_number: u32 // The block at which we'll prove that the note exists ) { - let header = context.get_header(); - let owner_npk_m_hash = header.get_npk_m_hash(&mut context, owner); + let owner_npk_m_hash = context.get_npk_m_hash(owner); let mut note = ValueNote::new(1, owner_npk_m_hash); let header = if (use_block_number) { diff --git a/noir-projects/noir-contracts/contracts/pending_note_hashes_contract/src/main.nr b/noir-projects/noir-contracts/contracts/pending_note_hashes_contract/src/main.nr index 6948ddf2e0b7..6c62acc32401 100644 --- a/noir-projects/noir-contracts/contracts/pending_note_hashes_contract/src/main.nr +++ b/noir-projects/noir-contracts/contracts/pending_note_hashes_contract/src/main.nr @@ -29,8 +29,7 @@ contract PendingNoteHashes { ) -> Field { let owner_balance = storage.balances.at(owner); - let header = context.get_header(); - let owner_npk_m_hash = header.get_npk_m_hash(&mut context, owner); + let owner_npk_m_hash = context.get_npk_m_hash(owner); let mut note = ValueNote::new(amount, owner_npk_m_hash); @@ -65,8 +64,7 @@ contract PendingNoteHashes { // test. assert(notes.len() == 0); - let header = context.get_header(); - let owner_npk_m_hash = header.get_npk_m_hash(&mut context, owner); + let owner_npk_m_hash = context.get_npk_m_hash(owner); // Insert note let mut note = ValueNote::new(amount, owner_npk_m_hash); @@ -84,8 +82,7 @@ contract PendingNoteHashes { fn insert_note(amount: Field, owner: AztecAddress, outgoing_viewer: AztecAddress) { let owner_balance = storage.balances.at(owner); - let header = context.get_header(); - let owner_npk_m_hash = header.get_npk_m_hash(&mut context, owner); + let owner_npk_m_hash = context.get_npk_m_hash(owner); let mut note = ValueNote::new(amount, owner_npk_m_hash); @@ -104,8 +101,7 @@ contract PendingNoteHashes { ) { let mut owner_balance = storage.balances.at(owner); - let header = context.get_header(); - let owner_npk_m_hash = header.get_npk_m_hash(&mut context, owner); + let owner_npk_m_hash = context.get_npk_m_hash(owner); let mut note = ValueNote::new(amount, owner_npk_m_hash); note.randomness = 2; @@ -120,8 +116,7 @@ contract PendingNoteHashes { fn insert_note_extra_emit(amount: Field, owner: AztecAddress, outgoing_viewer: AztecAddress) { let mut owner_balance = storage.balances.at(owner); - let header = context.get_header(); - let owner_npk_m_hash = header.get_npk_m_hash(&mut context, owner); + let owner_npk_m_hash = context.get_npk_m_hash(owner); let mut note = ValueNote::new(amount, owner_npk_m_hash); @@ -344,10 +339,9 @@ contract PendingNoteHashes { fn test_emit_bad_note_log(owner: AztecAddress, outgoing_viewer: AztecAddress) { let owner_balance = storage.balances.at(owner); - let header = context.get_header(); - let owner_npk_m_hash = header.get_npk_m_hash(&mut context, owner); - let outgoing_viewer_ovpk_m = header.get_ovpk_m(&mut context, outgoing_viewer); - let owner_ivpk_m = header.get_ivpk_m(&mut context, owner); + let owner_npk_m_hash = context.get_npk_m_hash(owner); + let outgoing_viewer_ovpk_m = context.get_ovpk_m(outgoing_viewer); + let owner_ivpk_m = context.get_ivpk_m(owner); let mut good_note = ValueNote::new(10, owner_npk_m_hash); // Insert good note with real log owner_balance.insert(&mut good_note).emit(encode_and_encrypt_note(&mut context, outgoing_viewer, owner)); @@ -370,10 +364,9 @@ contract PendingNoteHashes { context: &mut PrivateContext ) { let owner_balance = storage.balances.at(owner); - let header = context.get_header(); - let owner_npk_m_hash = header.get_npk_m_hash(context, owner); - let outgoing_viewer_ovpk_m = header.get_ovpk_m(context, outgoing_viewer); - let owner_ivpk_m = header.get_ivpk_m(context, owner); + let owner_npk_m_hash = context.get_npk_m_hash(owner); + let outgoing_viewer_ovpk_m = context.get_ovpk_m(outgoing_viewer); + let owner_ivpk_m = context.get_ivpk_m(owner); for i in 0..max_notes_per_call() { let mut note = ValueNote::new(i as Field, owner_npk_m_hash); diff --git a/noir-projects/noir-contracts/contracts/private_token_contract/src/main.nr b/noir-projects/noir-contracts/contracts/private_token_contract/src/main.nr index b7d99c8d1070..6690e434daa0 100644 --- a/noir-projects/noir-contracts/contracts/private_token_contract/src/main.nr +++ b/noir-projects/noir-contracts/contracts/private_token_contract/src/main.nr @@ -94,8 +94,7 @@ contract PrivateToken { #[aztec(private)] fn privately_mint_private_note(amount: Field) { let caller = context.msg_sender(); - let header = context.get_header(); - let caller_npk_m_hash = header.get_npk_m_hash(&mut context, caller); + let caller_npk_m_hash = context.get_npk_m_hash(caller); storage.balances.add(caller_npk_m_hash, U128::from_integer(amount)).emit(encode_and_encrypt_note(&mut context, caller, caller)); PrivateToken::at(context.this_address()).assert_minter_and_mint(context.msg_sender(), amount).enqueue(&mut context); } @@ -115,12 +114,11 @@ contract PrivateToken { assert(nonce == 0, "invalid nonce"); } - let header = context.get_header(); - let from_ovpk = header.get_ovpk_m(&mut context, from); - let from_ivpk = header.get_ivpk_m(&mut context, from); - let from_npk_m_hash = header.get_npk_m_hash(&mut context, from); - let to_ivpk = header.get_ivpk_m(&mut context, to); - let to_npk_m_hash = header.get_npk_m_hash(&mut context, to); + let from_ovpk = context.get_ovpk_m(from); + let from_ivpk = context.get_ivpk_m(from); + let from_npk_m_hash = context.get_npk_m_hash(from); + let to_ivpk = context.get_ivpk_m(to); + let to_npk_m_hash = context.get_npk_m_hash(to); let amount = U128::from_integer(amount); storage.balances.sub(from_npk_m_hash, amount).emit(encode_and_encrypt_note_with_keys(&mut context, from_ovpk, from_ivpk)); @@ -130,12 +128,11 @@ contract PrivateToken { #[aztec(private)] fn transfer(to: AztecAddress, amount: Field) { let from = context.msg_sender(); - let header = context.get_header(); - let from_ovpk = header.get_ovpk_m(&mut context, from); - let from_ivpk = header.get_ivpk_m(&mut context, from); - let from_npk_m_hash = header.get_npk_m_hash(&mut context, from); - let to_ivpk = header.get_ivpk_m(&mut context, to); - let to_npk_m_hash = header.get_npk_m_hash(&mut context, to); + let from_ovpk = context.get_ovpk_m(from); + let from_ivpk = context.get_ivpk_m(from); + let from_npk_m_hash = context.get_npk_m_hash(from); + let to_ivpk = context.get_ivpk_m(to); + let to_npk_m_hash = context.get_npk_m_hash(to); let amount = U128::from_integer(amount); storage.balances.sub(from_npk_m_hash, amount).emit(encode_and_encrypt_note_with_keys(&mut context, from_ovpk, from_ivpk)); @@ -144,8 +141,7 @@ contract PrivateToken { #[aztec(private)] fn balance_of_private(owner: AztecAddress) -> pub Field { - let header = context.get_header(); - let owner_npk_m_hash = header.get_npk_m_hash(&mut context, owner); + let owner_npk_m_hash = context.get_npk_m_hash(owner); storage.balances.to_unconstrained().balance_of(owner_npk_m_hash).to_integer() } @@ -171,10 +167,9 @@ contract PrivateToken { assert_current_call_valid_authwit(&mut context, user); // 2. Get all the relevant user keys - let header = context.get_header(); - let user_npk_m_hash = header.get_npk_m_hash(&mut context, user); - let user_ovpk = header.get_ovpk_m(&mut context, user); - let user_ivpk = header.get_ivpk_m(&mut context, user); + let user_npk_m_hash = context.get_npk_m_hash(user); + let user_ovpk = context.get_ovpk_m(user); + let user_ivpk = context.get_ivpk_m(user); // 3. Deduct the funded amount from the user's balance - this is a maximum fee a user is willing to pay // (called fee limit in aztec spec). The difference between fee limit and the actual tx fee will be refunded diff --git a/noir-projects/noir-contracts/contracts/private_token_contract/src/test/basic.nr b/noir-projects/noir-contracts/contracts/private_token_contract/src/test/basic.nr index dc593bf10852..c453d46ac4f3 100644 --- a/noir-projects/noir-contracts/contracts/private_token_contract/src/test/basic.nr +++ b/noir-projects/noir-contracts/contracts/private_token_contract/src/test/basic.nr @@ -43,7 +43,7 @@ unconstrained fn setup_refund_success() { let user_randomness = 42; let fee_payer_randomness = 123; let mut context = env.private(); - let recipient_npk_m_hash = context.get_header().get_npk_m_hash(&mut context, recipient); + let recipient_npk_m_hash = context.get_npk_m_hash(recipient); let setup_refund_from_call_interface = PrivateToken::at(token_contract_address).setup_refund( recipient_npk_m_hash, // fee payer @@ -59,8 +59,8 @@ unconstrained fn setup_refund_success() { env.call_private_void(setup_refund_from_call_interface); let mut context = env.private(); - let owner_npk_m_hash = context.get_header().get_npk_m_hash(&mut context, owner); - let recipient_npk_m_hash = context.get_header().get_npk_m_hash(&mut context, recipient); + let owner_npk_m_hash = context.get_npk_m_hash(owner); + let recipient_npk_m_hash = context.get_npk_m_hash(recipient); // when the refund was set up, we would've broken the note worth mint_amount, and added back a note worth // mint_amount - funded_amount diff --git a/noir-projects/noir-contracts/contracts/private_token_contract/src/test/utils.nr b/noir-projects/noir-contracts/contracts/private_token_contract/src/test/utils.nr index fb660d6ef45e..de97d66dfd78 100644 --- a/noir-projects/noir-contracts/contracts/private_token_contract/src/test/utils.nr +++ b/noir-projects/noir-contracts/contracts/private_token_contract/src/test/utils.nr @@ -61,8 +61,7 @@ pub fn check_private_balance( let current_contract_address = cheatcodes::get_contract_address(); cheatcodes::set_contract_address(token_contract_address); - let header = context.get_header(); - let owner_npk_m_hash = header.get_npk_m_hash(context, address); + let owner_npk_m_hash = context.get_npk_m_hash(address); let balance_of_private = PrivateToken::balance_of_unconstrained(owner_npk_m_hash); assert(balance_of_private == address_amount, "Private balance is not correct"); diff --git a/noir-projects/noir-contracts/contracts/schnorr_account_contract/src/main.nr b/noir-projects/noir-contracts/contracts/schnorr_account_contract/src/main.nr index e918e42d2f4d..f4752c3a1dbe 100644 --- a/noir-projects/noir-contracts/contracts/schnorr_account_contract/src/main.nr +++ b/noir-projects/noir-contracts/contracts/schnorr_account_contract/src/main.nr @@ -28,8 +28,7 @@ contract SchnorrAccount { #[aztec(initializer)] fn constructor(signing_pub_key_x: Field, signing_pub_key_y: Field) { let this = context.this_address(); - let header = context.get_header(); - let this_npk_m_hash = header.get_npk_m_hash(&mut context, this); + let this_npk_m_hash = context.get_npk_m_hash(this); // Not emitting outgoing for msg_sender here to not have to register keys for the contract through which we // deploy this (typically MultiCallEntrypoint). I think it's ok here as I feel the outgoing here is not that // important. diff --git a/noir-projects/noir-contracts/contracts/static_child_contract/src/main.nr b/noir-projects/noir-contracts/contracts/static_child_contract/src/main.nr index e0d113569fed..2cc434068469 100644 --- a/noir-projects/noir-contracts/contracts/static_child_contract/src/main.nr +++ b/noir-projects/noir-contracts/contracts/static_child_contract/src/main.nr @@ -40,8 +40,7 @@ contract StaticChild { #[aztec(private)] #[aztec(view)] fn private_illegal_set_value(new_value: Field, owner: AztecAddress) -> Field { - let header = context.get_header(); - let owner_npk_m_hash = header.get_npk_m_hash(&mut context, owner); + let owner_npk_m_hash = context.get_npk_m_hash(owner); let mut note = ValueNote::new(new_value, owner_npk_m_hash); storage.a_private_value.insert(&mut note).emit(encode_and_encrypt_note(&mut context, context.msg_sender(), owner)); new_value @@ -54,8 +53,7 @@ contract StaticChild { owner: AztecAddress, outgoing_viewer: AztecAddress ) -> Field { - let header = context.get_header(); - let owner_npk_m_hash = header.get_npk_m_hash(&mut context, owner); + let owner_npk_m_hash = context.get_npk_m_hash(owner); let mut note = ValueNote::new(new_value, owner_npk_m_hash); storage.a_private_value.insert(&mut note).emit(encode_and_encrypt_note(&mut context, outgoing_viewer, owner)); new_value @@ -65,7 +63,7 @@ contract StaticChild { #[aztec(private)] #[aztec(view)] fn private_get_value(amount: Field, owner: AztecAddress) -> Field { - let owner_npk_m_hash = context.get_header().get_npk_m_hash(&mut context, owner); + let owner_npk_m_hash = context.get_npk_m_hash(owner); let mut options = NoteGetterOptions::new(); options = options.select(ValueNote::properties().value, amount, Option::none()).select( ValueNote::properties().npk_m_hash, diff --git a/noir-projects/noir-contracts/contracts/test_contract/src/main.nr b/noir-projects/noir-contracts/contracts/test_contract/src/main.nr index 324e964d4d92..7ddeff06aed0 100644 --- a/noir-projects/noir-contracts/contracts/test_contract/src/main.nr +++ b/noir-projects/noir-contracts/contracts/test_contract/src/main.nr @@ -63,8 +63,7 @@ contract Test { #[aztec(private)] fn get_master_incoming_viewing_public_key(address: AztecAddress) -> [Field; 2] { - let header = context.get_header(); - let pub_key = header.get_ivpk_m(&mut context, address); + let pub_key = context.get_ivpk_m(address); [pub_key.x, pub_key.y] } @@ -99,8 +98,7 @@ contract Test { storage_slot != storage.example_constant.get_storage_slot(), "this storage slot is reserved for example_constant" ); - let header = context.get_header(); - let owner_npk_m_hash = header.get_npk_m_hash(&mut context, owner); + let owner_npk_m_hash = context.get_npk_m_hash(owner); let mut note = ValueNote::new(value, owner_npk_m_hash); create_note(&mut context, storage_slot, &mut note).emit(encode_and_encrypt_note(&mut context, outgoing_viewer, owner)); @@ -265,9 +263,8 @@ contract Test { outgoing_viewer: AztecAddress, nest: bool ) { - let header = context.get_header(); - let outgoing_viewer_ovpk_m = header.get_ovpk_m(&mut context, outgoing_viewer); - let owner_ivpk_m = header.get_ivpk_m(&mut context, owner); + let outgoing_viewer_ovpk_m = context.get_ovpk_m(outgoing_viewer); + let owner_ivpk_m = context.get_ivpk_m(owner); let event = ExampleEvent { value0: fields[0], value1: fields[1], value2: fields[2], value3: fields[3], value4: fields[4] }; @@ -306,8 +303,7 @@ contract Test { Test::at(context.this_address()).call_create_note(value, owner, outgoing_viewer, storage_slot).call(&mut context); storage_slot += 1; - let header = context.get_header(); - let owner_npk_m_hash = header.get_npk_m_hash(&mut context, owner); + let owner_npk_m_hash = context.get_npk_m_hash(owner); let mut note = ValueNote::new(value + 1, owner_npk_m_hash); create_note(&mut context, storage_slot, &mut note).emit(encode_and_encrypt_note(&mut context, context.msg_sender(), owner)); @@ -537,7 +533,7 @@ contract Test { #[aztec(private)] fn test_nullifier_key_freshness(address: AztecAddress, public_nullifying_key: Point) { - assert_eq(context.get_header().get_npk_m(&mut context, address), public_nullifying_key); + assert_eq(context.get_npk_m(address), public_nullifying_key); } // Purely exists for testing diff --git a/noir-projects/noir-contracts/contracts/token_blacklist_contract/src/types/balances_map.nr b/noir-projects/noir-contracts/contracts/token_blacklist_contract/src/types/balances_map.nr index 882364d9f655..60cc45127269 100644 --- a/noir-projects/noir-contracts/contracts/token_blacklist_contract/src/types/balances_map.nr +++ b/noir-projects/noir-contracts/contracts/token_blacklist_contract/src/types/balances_map.nr @@ -64,10 +64,9 @@ impl BalancesMap { OuterNoteEmission::new(Option::none()) } else { let context = self.map.context; - let header = context.get_header(); // We fetch the nullifier public key hash from the registry / from our PXE - let owner_npk_m_hash = header.get_npk_m_hash(context, owner); + let owner_npk_m_hash = context.get_npk_m_hash(owner); let mut addend_note = T::new(addend, owner_npk_m_hash); // docs:start:insert diff --git a/noir-projects/noir-contracts/contracts/token_contract/src/main.nr b/noir-projects/noir-contracts/contracts/token_contract/src/main.nr index 6323d6773bf2..434287c52f9d 100644 --- a/noir-projects/noir-contracts/contracts/token_contract/src/main.nr +++ b/noir-projects/noir-contracts/contracts/token_contract/src/main.nr @@ -329,10 +329,9 @@ contract Token { // By fetching the keys here, we can avoid doing an extra read from the storage, since from_ovpk would // be needed twice. - let header = context.get_header(); - let from_ovpk = header.get_ovpk_m(&mut context, from); - let from_ivpk = header.get_ivpk_m(&mut context, from); - let to_ivpk = header.get_ivpk_m(&mut context, to); + let from_ovpk = context.get_ovpk_m(from); + let from_ivpk = context.get_ivpk_m(from); + let to_ivpk = context.get_ivpk_m(to); let amount = U128::from_integer(amount); storage.balances.sub(from, amount).emit(encode_and_encrypt_note_with_keys_unconstrained(&mut context, from_ovpk, from_ivpk)); @@ -368,10 +367,9 @@ contract Token { // By fetching the keys here, we can avoid doing an extra read from the storage, since from_ovpk would // be needed twice. - let header = context.get_header(); - let from_ovpk = header.get_ovpk_m(&mut context, from); - let from_ivpk = header.get_ivpk_m(&mut context, from); - let to_ivpk = header.get_ivpk_m(&mut context, to); + let from_ovpk = context.get_ovpk_m(from); + let from_ivpk = context.get_ivpk_m(from); + let to_ivpk = context.get_ivpk_m(to); let amount = U128::from_integer(amount); // docs:start:increase_private_balance diff --git a/noir-projects/noir-contracts/contracts/token_contract/src/types/balances_map.nr b/noir-projects/noir-contracts/contracts/token_contract/src/types/balances_map.nr index 63a0092ea5c9..c883644e3d4a 100644 --- a/noir-projects/noir-contracts/contracts/token_contract/src/types/balances_map.nr +++ b/noir-projects/noir-contracts/contracts/token_contract/src/types/balances_map.nr @@ -67,10 +67,9 @@ impl BalancesMap { OuterNoteEmission::new(Option::none()) } else { let context = self.map.context; - let header = context.get_header(); // We fetch the nullifier public key hash from the registry / from our PXE - let owner_npk_m_hash = header.get_npk_m_hash(context, owner); + let owner_npk_m_hash = context.get_npk_m_hash(owner); let mut addend_note = T::new(addend, owner_npk_m_hash); // docs:start:insert