Skip to content

Commit

Permalink
fmt
Browse files Browse the repository at this point in the history
  • Loading branch information
benesjan committed Oct 24, 2024
1 parent 36915b7 commit d0bd136
Show file tree
Hide file tree
Showing 7 changed files with 96 additions and 53 deletions.
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
use crate::{
context::PrivateContext, event::event_interface::EventInterface,
encrypted_logs::payload::compute_encrypted_event_log, keys::getters::get_ovsk_app,
oracle::random::random
oracle::random::random,
};

fn compute_raw_event_log<Event, let N: u32>(
Expand All @@ -18,7 +18,8 @@ where
{
let contract_address: AztecAddress = context.this_address();
let plaintext = event.private_to_be_bytes(randomness);
let encrypted_log: [u8; 416 + N * 32] = compute_encrypted_event_log(contract_address, ovsk_app, ovpk, ivpk, recipient, plaintext);
let encrypted_log: [u8; 416 + N * 32] =
compute_encrypted_event_log(contract_address, ovsk_app, ovpk, ivpk, recipient, plaintext);
let log_hash = sha256_to_field(encrypted_log);
(encrypted_log, log_hash)
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
use crate::{
context::PrivateContext, note::{note_emission::NoteEmission, note_interface::NoteInterface},
keys::getters::get_ovsk_app, encrypted_logs::payload::compute_encrypted_note_log,
utils::bytes::bytes_to_fields
utils::bytes::bytes_to_fields,
};
use dep::protocol_types::{
address::AztecAddress, public_keys::{PublicKeys, OvpkM, IvpkM}, hash::sha256_to_field,
Expand All @@ -14,8 +14,11 @@ fn compute_raw_note_log<Note, let N: u32>(
ovsk_app: Field,
ovpk: OvpkM,
ivpk: IvpkM,
recipient: AztecAddress
) -> (u32, [u8; 417 + N * 32], Field) where Note: NoteInterface<N> {
recipient: AztecAddress,
) -> (u32, [u8; 417 + N * 32], Field)
where
Note: NoteInterface<N>,
{
let note_header = note.get_header();
let note_hash_counter = note_header.note_hash_counter;
let storage_slot = note_header.storage_slot;
Expand All @@ -27,7 +30,8 @@ fn compute_raw_note_log<Note, let N: u32>(
let contract_address: AztecAddress = context.this_address();

let plaintext = note.to_be_bytes(storage_slot);
let encrypted_log: [u8; 417 + N * 32] = compute_encrypted_note_log(contract_address, ovsk_app, ovpk, ivpk, recipient, plaintext);
let encrypted_log: [u8; 417 + N * 32] =
compute_encrypted_note_log(contract_address, ovsk_app, ovpk, ivpk, recipient, plaintext);
let log_hash = sha256_to_field(encrypted_log);

(note_hash_counter, encrypted_log, log_hash)
Expand All @@ -38,8 +42,11 @@ unconstrained fn compute_raw_note_log_unconstrained<Note, let N: u32>(
note: Note,
ovpk: OvpkM,
ivpk: IvpkM,
recipient: AztecAddress
) -> (u32, [u8; 417 + N * 32], Field) where Note: NoteInterface<N> {
recipient: AztecAddress,
) -> (u32, [u8; 417 + N * 32], Field)
where
Note: NoteInterface<N>,
{
let ovsk_app = get_ovsk_app(ovpk.hash());
compute_raw_note_log(context, note, ovsk_app, ovpk, ivpk, recipient)
}
Expand Down
27 changes: 21 additions & 6 deletions noir-projects/aztec-nr/aztec/src/encrypted_logs/payload.nr
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,15 @@ pub fn compute_encrypted_note_log<let P: u32, let M: u32>(
recipient: AztecAddress,
plaintext: [u8; P],
) -> [u8; M] {
compute_encrypted_log(contract_address, ovsk_app, ovpk, ivpk, recipient, plaintext, 1)
compute_encrypted_log(
contract_address,
ovsk_app,
ovpk,
ivpk,
recipient,
plaintext,
1,
)
}

pub fn compute_encrypted_event_log<let P: u32, let M: u32>(
Expand All @@ -30,9 +38,17 @@ pub fn compute_encrypted_event_log<let P: u32, let M: u32>(
ovpk: OvpkM,
ivpk: IvpkM,
recipient: AztecAddress,
plaintext: [u8; P]
plaintext: [u8; P],
) -> [u8; M] {
compute_encrypted_log(contract_address, ovsk_app, ovpk, ivpk, recipient, plaintext, 0)
compute_encrypted_log(
contract_address,
ovsk_app,
ovpk,
ivpk,
recipient,
plaintext,
0,
)
}

fn compute_encrypted_log<let P: u32, let M: u32>(
Expand All @@ -42,7 +58,7 @@ fn compute_encrypted_log<let P: u32, let M: u32>(
ivpk: IvpkM,
recipient: AztecAddress,
plaintext: [u8; P],
mut offset: u32
mut offset: u32,
) -> [u8; M] {
let (eph_sk, eph_pk) = generate_ephemeral_key_pair();

Expand All @@ -56,7 +72,6 @@ fn compute_encrypted_log<let P: u32, let M: u32>(

let mut encrypted_bytes: [u8; M] = [0; M];
// @todo We ignore the tags for now

offset += 64;

let eph_pk_bytes = point_to_bytes(eph_pk);
Expand Down Expand Up @@ -236,7 +251,7 @@ mod test {
ivpk_m,
recipient,
plaintext,
0
0,
);

// The following value was generated by `tagged_log.test.ts`
Expand Down
12 changes: 8 additions & 4 deletions noir-projects/aztec-nr/aztec/src/macros/notes/mod.nr
Original file line number Diff line number Diff line change
Expand Up @@ -432,7 +432,8 @@ comptime fn generate_setup_payload(
// --> we achieve rouding by adding 30 and then dividing without remainder
let encrypted_log_field_length = (encrypted_log_byte_length + 30) / 31;

(quote {
(
quote {
struct $setup_payload_name {
log_plaintext: [u8; $log_plaintext_length],
hiding_point: aztec::protocol_types::point::Point
Expand Down Expand Up @@ -630,12 +631,14 @@ comptime fn generate_finalization_payload(
let fields = fields_list.join(quote {,});

// Now we compute quotes relevant to the multi-scalar multiplication.
let (generators_list, _, args_list, msm_aux_vars) = generate_multi_scalar_mul(indexed_nullable_fields);
let (generators_list, _, args_list, msm_aux_vars) =
generate_multi_scalar_mul(indexed_nullable_fields);

// We generate scalars_list manually as we need it to refer self.public_values
let mut scalars_list: [Quoted] = &[];
for i in 0..public_values_length {
scalars_list = scalars_list.push_back(quote { std::hash::from_field_unsafe(self.public_values[$i]) });
scalars_list =
scalars_list.push_back(quote { std::hash::from_field_unsafe(self.public_values[$i]) });
}

let generators = generators_list.join(quote {,});
Expand All @@ -651,7 +654,8 @@ comptime fn generate_finalization_payload(
let setup_log_field_length = (setup_log_byte_length + 30) / 31;
let finalization_log_byte_length = setup_log_byte_length + public_values_length * 32;

(quote {
(
quote {
struct $finalization_payload_name {
context: &mut aztec::prelude::PublicContext,
hiding_point_slot: Field,
Expand Down
34 changes: 22 additions & 12 deletions noir-projects/noir-contracts/contracts/nft_contract/src/main.nr
Original file line number Diff line number Diff line change
Expand Up @@ -11,14 +11,16 @@ contract NFT {
use dep::aztec::{
oracle::random::random,
prelude::{
NoteGetterOptions, NoteViewerOptions, Map, PublicMutable, SharedImmutable, PrivateContext,
PrivateSet, AztecAddress, PublicContext
},
encrypted_logs::encrypted_note_emission::encode_and_encrypt_note,
NoteGetterOptions, NoteViewerOptions, Map, PublicMutable, SharedImmutable,
PrivateContext, PrivateSet, AztecAddress, PublicContext,
}, encrypted_logs::encrypted_note_emission::encode_and_encrypt_note,
keys::getters::get_public_keys, note::constants::MAX_NOTES_PER_PAGE,
utils::comparison::Comparator, protocol_types::{point::Point, traits::Serialize},
utils::bytes::fields_to_bytes,
macros::{storage::storage, events::event, functions::{private, public, view, internal, initializer}}
macros::{
storage::storage, events::event,
functions::{private, public, view, internal, initializer},
},
};
use dep::authwit::auth::{
assert_current_call_valid_authwit, assert_current_call_valid_authwit_public,
Expand Down Expand Up @@ -203,7 +205,13 @@ contract NFT {
// We don't need to perform a check that the value overwritten by `_store_point_in_transient_storage_unsafe`
// is zero because the slot is the x-coordinate of the hiding point and hence we could only overwrite
// the value in the slot with the same value. This makes usage of the `unsafe` method safe.
NFT::at(context.this_address())._store_payload_in_transient_storage_unsafe(hiding_point_slot, note_setup_payload.hiding_point, setup_log).enqueue(context);
NFT::at(context.this_address())
._store_payload_in_transient_storage_unsafe(
hiding_point_slot,
note_setup_payload.hiding_point,
setup_log,
)
.enqueue(context);

hiding_point_slot
}
Expand All @@ -213,12 +221,13 @@ contract NFT {
// as it is an entrypoint function.
#[public]
#[internal]
fn _store_payload_in_transient_storage_unsafe(slot: Field, point: Point, setup_log: [Field; 16]) {
fn _store_payload_in_transient_storage_unsafe(
slot: Field,
point: Point,
setup_log: [Field; 16],
) {
context.storage_write(slot, point);
context.storage_write(
slot + aztec::protocol_types::point::POINT_LENGTH as Field,
setup_log
);
context.storage_write(slot + aztec::protocol_types::point::POINT_LENGTH as Field, setup_log);
}

/// Finalizes a transfer of NFT with `token_id` from public balance of `from` to a private balance of `to`.
Expand Down Expand Up @@ -255,7 +264,8 @@ contract NFT {
public_owners_storage.write(AztecAddress::zero());

// Finalize the partial note with the `token_id`
let finalization_payload = NFTNote::finalization_payload().new(context, note_transient_storage_slot, token_id);
let finalization_payload =
NFTNote::finalization_payload().new(context, note_transient_storage_slot, token_id);

// At last we emit the note hash and the final log
finalization_payload.emit();
Expand Down
50 changes: 28 additions & 22 deletions noir-projects/noir-contracts/contracts/token_contract/src/main.nr
Original file line number Diff line number Diff line change
Expand Up @@ -572,29 +572,32 @@ contract Token {
let user_point_slot = user_setup_payload.hiding_point.x;

// 6. We compute setup logs
let fee_payer_setup_log = fee_payer_setup_payload.encrypt_log(&mut context, fee_payer_keys, fee_payer);
let fee_payer_setup_log =
fee_payer_setup_payload.encrypt_log(&mut context, fee_payer_keys, fee_payer);
let user_setup_log = user_setup_payload.encrypt_log(&mut context, user_keys, user);

// 7. We store the hiding points an logs in transients storage
Token::at(context.this_address())._store_payload_in_transient_storage_unsafe(
fee_payer_point_slot,
fee_payer_setup_payload.hiding_point,
fee_payer_setup_log
).enqueue(&mut context);
Token::at(context.this_address())._store_payload_in_transient_storage_unsafe(
user_point_slot,
user_setup_payload.hiding_point,
user_setup_log
).enqueue(&mut context);
Token::at(context.this_address())
._store_payload_in_transient_storage_unsafe(
fee_payer_point_slot,
fee_payer_setup_payload.hiding_point,
fee_payer_setup_log,
)
.enqueue(&mut context);
Token::at(context.this_address())
._store_payload_in_transient_storage_unsafe(
user_point_slot,
user_setup_payload.hiding_point,
user_setup_log,
)
.enqueue(&mut context);

// 8. Set the public teardown function to `complete_refund(...)`. Public teardown is the only time when a public
// function has access to the final transaction fee, which is needed to compute the actual refund amount.
context.set_public_teardown_function(
context.this_address(),
comptime {
FunctionSelector::from_signature("complete_refund(Field,Field,Field)")
},
[fee_payer_point_slot, user_point_slot, funded_amount]
comptime { FunctionSelector::from_signature("complete_refund(Field,Field,Field)") },
[fee_payer_point_slot, user_point_slot, funded_amount],
);
}
// docs:end:setup_refund
Expand All @@ -604,12 +607,13 @@ contract Token {
// as it is an entrypoint function.
#[public]
#[internal]
fn _store_payload_in_transient_storage_unsafe(slot: Field, point: Point, setup_log: [Field; 16]) {
fn _store_payload_in_transient_storage_unsafe(
slot: Field,
point: Point,
setup_log: [Field; 16],
) {
context.storage_write(slot, point);
context.storage_write(
slot + aztec::protocol_types::point::POINT_LENGTH as Field,
setup_log
);
context.storage_write(slot + aztec::protocol_types::point::POINT_LENGTH as Field, setup_log);
}

// TODO(#7728): even though the funded_amount should be a U128, we can't have that type in a contract interface due
Expand All @@ -631,8 +635,10 @@ contract Token {

// 3. We construct the note finalization payloads with the correct amounts and hiding points to get the note
// hashes and unencrypted logs.
let fee_payer_finalization_payload = TokenNote::finalization_payload().new(&mut context, fee_payer_slot, tx_fee);
let user_finalization_payload = TokenNote::finalization_payload().new(&mut context, user_slot, refund_amount);
let fee_payer_finalization_payload =
TokenNote::finalization_payload().new(&mut context, fee_payer_slot, tx_fee);
let user_finalization_payload =
TokenNote::finalization_payload().new(&mut context, user_slot, refund_amount);

// 4. At last we emit the note hashes and the final note logs.
fee_payer_finalization_payload.emit();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -96,7 +96,7 @@ pub comptime fn flatten_to_fields(name: Quoted, typ: Type, omit: [Quoted]) -> ([
let mut fields = &[];
let mut aux_vars = &[];

if omit.all(| to_omit | to_omit != name) {
if omit.all(|to_omit| to_omit != name) {
if typ.is_field() {
// For field we just add the value to fields
fields = fields.push_back(name);
Expand Down

0 comments on commit d0bd136

Please sign in to comment.