From 11555ee86666c0efcdff6961491423229cc88b41 Mon Sep 17 00:00:00 2001 From: LHerskind Date: Mon, 10 Jun 2024 11:31:59 +0000 Subject: [PATCH] refactor: split log emission to encrypt and a log, remove address input --- .../aztec-nr/address-note/src/address_note.nr | 1 - .../aztec/src/context/private_context.nr | 32 +++++++++++++------ .../aztec-nr/value-note/src/value_note.nr | 1 - .../src/subscription_note.nr | 1 - .../src/types/card_note.nr | 1 - .../src/ecdsa_public_key_note.nr | 1 - .../pending_note_hashes_contract/src/main.nr | 2 -- .../src/public_key_note.nr | 1 - .../contracts/test_contract/src/main.nr | 2 -- .../src/types/token_note.nr | 1 - .../token_contract/src/types/token_note.nr | 1 - 11 files changed, 22 insertions(+), 22 deletions(-) diff --git a/noir-projects/aztec-nr/address-note/src/address_note.nr b/noir-projects/aztec-nr/address-note/src/address_note.nr index 7478b59994c4..ebfa9abf6c16 100644 --- a/noir-projects/aztec-nr/address-note/src/address_note.nr +++ b/noir-projects/aztec-nr/address-note/src/address_note.nr @@ -47,7 +47,6 @@ impl NoteInterface for AddressNote { fn broadcast(self, context: &mut PrivateContext, slot: Field, ovpk_m: GrumpkinPoint, ivpk_m: GrumpkinPoint) { // docs:start:encrypted context.encrypt_and_emit_note( - (*context).this_address(), slot, ovpk_m, ivpk_m, diff --git a/noir-projects/aztec-nr/aztec/src/context/private_context.nr b/noir-projects/aztec-nr/aztec/src/context/private_context.nr index aeba73e0554a..0d70d85bef94 100644 --- a/noir-projects/aztec-nr/aztec/src/context/private_context.nr +++ b/noir-projects/aztec-nr/aztec/src/context/private_context.nr @@ -313,7 +313,6 @@ impl PrivateContext { // used in siloing later on e.g. 'handshaking' contract w/ known address. pub fn encrypt_and_emit_log( &mut self, - contract_address: AztecAddress, randomness: Field, // Secret random value used later for masked_contract_address event_type_id: Field, ovpk_m: GrumpkinPoint, @@ -321,9 +320,9 @@ impl PrivateContext { preimage: [Field; N] ) where [Field; N]: LensForEncryptedLog { let ovsk_app = self.request_ovsk_app(ovpk_m.hash()); + let contract_address = self.this_address(); // We are currently just encrypting it unconstrained, but otherwise the same way as if it was a note. - let counter = self.next_counter(); let encrypted_log: [u8; M] = compute_encrypted_log( contract_address, randomness, @@ -333,16 +332,27 @@ impl PrivateContext { ivpk_m, preimage ); - emit_encrypted_log(contract_address, randomness, encrypted_log, counter); - let len = 32 + 32 + 64 + 48 + 48 + 176 + 64 + (preimage.len() as Field * 32) + 16 + 4; + + self.emit_raw_log_with_masked_address(randomness, encrypted_log); + } + + pub fn emit_raw_log_with_masked_address( + &mut self, + randomness: Field, + encrypted_log: [u8; M] + ) { + let counter = self.next_counter(); + let contract_address = self.this_address(); + let len = encrypted_log.len() as Field + 4; let log_hash = sha256_to_field(encrypted_log); let side_effect = EncryptedLogHash { value: log_hash, counter, length: len, randomness }; self.encrypted_logs_hashes.push(side_effect); + + emit_encrypted_log(contract_address, randomness, encrypted_log, counter); } pub fn encrypt_and_emit_note( &mut self, - contract_address: AztecAddress, storage_slot: Field, ovpk_m: GrumpkinPoint, ivpk_m: GrumpkinPoint, @@ -357,8 +367,7 @@ impl PrivateContext { note_exists_index as u32 != MAX_NEW_NOTE_HASHES_PER_CALL, "Can only emit a note log for an existing note." ); - let counter = self.next_counter(); - + let contract_address = self.this_address(); let ovsk_app = self.request_ovsk_app(ovpk_m.hash()); // Current unoptimized size of the encrypted log @@ -371,14 +380,17 @@ impl PrivateContext { // incoming_body_fixed (64 bytes) // incoming_body_variable (N * 32 bytes + 16 bytes padding) let encrypted_log: [u8; M] = compute_encrypted_note_log(contract_address, storage_slot, ovsk_app, ovpk_m, ivpk_m, note); - emit_encrypted_note_log(note_hash_counter, encrypted_log, counter); + self.emit_raw_log(note_hash_counter, encrypted_log); + } - // len of processed log (4 bytes) + pub fn emit_raw_log(&mut self, note_hash_counter: u32, encrypted_log: [u8; M]) { + let counter = self.next_counter(); let len = encrypted_log.len() as Field + 4; - let log_hash = sha256_to_field(encrypted_log); let side_effect = NoteLogHash { value: log_hash, counter, length: len, note_hash_counter }; self.note_encrypted_logs_hashes.push(side_effect); + + emit_encrypted_note_log(note_hash_counter, encrypted_log, counter); } pub fn call_private_function( diff --git a/noir-projects/aztec-nr/value-note/src/value_note.nr b/noir-projects/aztec-nr/value-note/src/value_note.nr index 042144d76ae1..bdce09e6f9a8 100644 --- a/noir-projects/aztec-nr/value-note/src/value_note.nr +++ b/noir-projects/aztec-nr/value-note/src/value_note.nr @@ -49,7 +49,6 @@ impl NoteInterface for ValueNote { // Broadcasts the note as an encrypted log on L1. fn broadcast(self, context: &mut PrivateContext, slot: Field, ovpk_m: GrumpkinPoint, ivpk_m: GrumpkinPoint) { context.encrypt_and_emit_note( - (*context).this_address(), slot, ovpk_m, ivpk_m, diff --git a/noir-projects/noir-contracts/contracts/app_subscription_contract/src/subscription_note.nr b/noir-projects/noir-contracts/contracts/app_subscription_contract/src/subscription_note.nr index aebe782e4c67..b157c5b32fab 100644 --- a/noir-projects/noir-contracts/contracts/app_subscription_contract/src/subscription_note.nr +++ b/noir-projects/noir-contracts/contracts/app_subscription_contract/src/subscription_note.nr @@ -42,7 +42,6 @@ impl NoteInterface for Subsc // Broadcasts the note as an encrypted log on L1. fn broadcast(self, context: &mut PrivateContext, slot: Field, ovpk_m: GrumpkinPoint, ivpk_m: GrumpkinPoint) { context.encrypt_and_emit_note( - (*context).this_address(), slot, ovpk_m, ivpk_m, diff --git a/noir-projects/noir-contracts/contracts/docs_example_contract/src/types/card_note.nr b/noir-projects/noir-contracts/contracts/docs_example_contract/src/types/card_note.nr index ecef44ab3552..844a1e367ef4 100644 --- a/noir-projects/noir-contracts/contracts/docs_example_contract/src/types/card_note.nr +++ b/noir-projects/noir-contracts/contracts/docs_example_contract/src/types/card_note.nr @@ -53,7 +53,6 @@ impl NoteInterface for CardNote { // Broadcasts the note as an encrypted log on L1. fn broadcast(self, context: &mut PrivateContext, slot: Field, ovpk_m: GrumpkinPoint, ivpk_m: GrumpkinPoint) { context.encrypt_and_emit_note( - (*context).this_address(), slot, ovpk_m, ivpk_m, diff --git a/noir-projects/noir-contracts/contracts/ecdsa_account_contract/src/ecdsa_public_key_note.nr b/noir-projects/noir-contracts/contracts/ecdsa_account_contract/src/ecdsa_public_key_note.nr index 93583b8b67d6..b2e834d2d186 100644 --- a/noir-projects/noir-contracts/contracts/ecdsa_account_contract/src/ecdsa_public_key_note.nr +++ b/noir-projects/noir-contracts/contracts/ecdsa_account_contract/src/ecdsa_public_key_note.nr @@ -88,7 +88,6 @@ impl NoteInterface f // Broadcasts the note as an encrypted log on L1. fn broadcast(self, context: &mut PrivateContext, slot: Field, ovpk_m: GrumpkinPoint, ivpk_m: GrumpkinPoint) { context.encrypt_and_emit_note( - (*context).this_address(), slot, ovpk_m, ivpk_m, 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 ef112b675984..4a926ee88d49 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 @@ -136,7 +136,6 @@ contract PendingNoteHashes { // Emit note again context.encrypt_and_emit_note( - context.this_address(), note.get_header().storage_slot, outgoing_viewer_ovpk_m, owner_ivpk_m, @@ -369,7 +368,6 @@ contract PendingNoteHashes { bad_note.set_header(existing_note_header); context.encrypt_and_emit_note( - context.this_address(), existing_note_header.storage_slot, outgoing_viewer_ovpk_m, owner_ivpk_m, diff --git a/noir-projects/noir-contracts/contracts/schnorr_account_contract/src/public_key_note.nr b/noir-projects/noir-contracts/contracts/schnorr_account_contract/src/public_key_note.nr index 819a3a3916c4..db9b3d26f0a1 100644 --- a/noir-projects/noir-contracts/contracts/schnorr_account_contract/src/public_key_note.nr +++ b/noir-projects/noir-contracts/contracts/schnorr_account_contract/src/public_key_note.nr @@ -42,7 +42,6 @@ impl NoteInterface for PublicKey // Broadcasts the note as an encrypted log on L1. fn broadcast(self, context: &mut PrivateContext, slot: Field, ovpk_m: GrumpkinPoint, ivpk_m: GrumpkinPoint) { context.encrypt_and_emit_note( - (*context).this_address(), slot, ovpk_m, ivpk_m, 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 d1329c33dd04..700efc268cc2 100644 --- a/noir-projects/noir-contracts/contracts/test_contract/src/main.nr +++ b/noir-projects/noir-contracts/contracts/test_contract/src/main.nr @@ -270,7 +270,6 @@ contract Test { let outgoing_viewer_ovpk_m = header.get_ovpk_m(&mut context, outgoing_viewer); let owner_ivpk_m = header.get_ivpk_m(&mut context, owner); context.encrypt_and_emit_log( - context.this_address(), 5, // testing only - this should be a secret random value to salt the addr 1, outgoing_viewer_ovpk_m, @@ -282,7 +281,6 @@ contract Test { if nest { Test::at(context.this_address()).emit_array_as_encrypted_log([0, 0, 0, 0, 0], owner, outgoing_viewer, false).call(&mut context); context.encrypt_and_emit_log( - context.this_address(), 0, // testing only - this signals to the kerels to not mask the address 1, outgoing_viewer_ovpk_m, diff --git a/noir-projects/noir-contracts/contracts/token_blacklist_contract/src/types/token_note.nr b/noir-projects/noir-contracts/contracts/token_blacklist_contract/src/types/token_note.nr index 29f2112959d0..f1afad92e9cf 100644 --- a/noir-projects/noir-contracts/contracts/token_blacklist_contract/src/types/token_note.nr +++ b/noir-projects/noir-contracts/contracts/token_blacklist_contract/src/types/token_note.nr @@ -54,7 +54,6 @@ impl NoteInterface for TokenNote { // TODO: (#5901) This will be changed a lot, as it should use the updated encrypted log format if !(self.amount == U128::from_integer(0)) { context.encrypt_and_emit_note( - (*context).this_address(), slot, ovpk_m, ivpk_m, diff --git a/noir-projects/noir-contracts/contracts/token_contract/src/types/token_note.nr b/noir-projects/noir-contracts/contracts/token_contract/src/types/token_note.nr index 29f2112959d0..f1afad92e9cf 100644 --- a/noir-projects/noir-contracts/contracts/token_contract/src/types/token_note.nr +++ b/noir-projects/noir-contracts/contracts/token_contract/src/types/token_note.nr @@ -54,7 +54,6 @@ impl NoteInterface for TokenNote { // TODO: (#5901) This will be changed a lot, as it should use the updated encrypted log format if !(self.amount == U128::from_integer(0)) { context.encrypt_and_emit_note( - (*context).this_address(), slot, ovpk_m, ivpk_m,