From 7751b8aac7a462acbe18935057588ef71433dbea Mon Sep 17 00:00:00 2001 From: LHerskind Date: Tue, 21 Nov 2023 11:59:09 +0000 Subject: [PATCH 1/8] chore: add nargo fmt to formatting fix in noir-contracts --- yarn-project/noir-contracts/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/yarn-project/noir-contracts/package.json b/yarn-project/noir-contracts/package.json index f4135a3dd646..164939f24106 100644 --- a/yarn-project/noir-contracts/package.json +++ b/yarn-project/noir-contracts/package.json @@ -11,7 +11,7 @@ "build:dev": "tsc -b --watch", "clean": "rm -rf ./dest .tsbuildinfo", "formatting": "run -T prettier --check ./src && run -T eslint ./src", - "formatting:fix": "run -T eslint --fix ./src && run -T prettier -w ./src", + "formatting:fix": "run -T eslint --fix ./src && run -T prettier -w ./src && nargo fmt", "test": "NODE_NO_WARNINGS=1 node --experimental-vm-modules $(yarn bin jest) --passWithNoTests", "noir:clean": "rm -rf ./src/artifacts ./src/types && mkdir -p ../aztec.js/src/artifacts/ && find ../aztec.js/src/artifacts/ -mindepth 1 -delete && rm -rf target/", "noir:build": "./src/scripts/compile.sh", From 21da46170725a28bfa0b9f63566849bcd7ba8226 Mon Sep 17 00:00:00 2001 From: LHerskind Date: Tue, 21 Nov 2023 13:58:10 +0000 Subject: [PATCH 2/8] chore: run formatting:fix --- .../benchmarking_contract/src/main.nr | 5 +- .../contracts/card_game_contract/src/cards.nr | 13 +-- .../contracts/card_game_contract/src/game.nr | 34 +++---- .../contracts/card_game_contract/src/main.nr | 52 ++++------ .../src/contracts/child_contract/src/main.nr | 11 +-- .../contracts/counter_contract/src/main.nr | 42 ++++---- .../docs_example_contract/src/actions.nr | 35 ++++--- .../docs_example_contract/src/main.nr | 70 +++++--------- .../docs_example_contract/src/options.nr | 28 ++---- .../docs_example_contract/src/types.nr | 2 +- .../src/types/card_note.nr | 2 +- .../docs_example_contract/src/types/queen.nr | 9 +- .../easy_private_token_contract/src/main.nr | 9 +- .../src/ecdsa_public_key_note.nr | 21 ++-- .../ecdsa_account_contract/src/main.nr | 6 +- .../src/contracts/escrow_contract/src/main.nr | 10 +- .../import_test_contract/src/main.nr | 25 ++--- .../contracts/lending_contract/src/asset.nr | 8 +- .../contracts/lending_contract/src/helpers.nr | 38 ++++---- .../lending_contract/src/interest_math.nr | 16 ++-- .../lending_contract/src/interfaces.nr | 2 +- .../contracts/lending_contract/src/main.nr | 51 ++++------ .../src/contracts/parent_contract/src/main.nr | 3 +- .../pending_commitments_contract/src/main.nr | 23 ++--- .../price_feed_contract/src/asset.nr | 4 +- .../contracts/price_feed_contract/src/main.nr | 8 +- .../schnorr_account_contract/src/main.nr | 8 +- .../src/public_key_note.nr | 9 +- .../src/main.nr | 7 +- .../src/auth_oracle.nr | 2 +- .../src/main.nr | 2 +- .../src/util.nr | 2 +- .../slow_tree_contract/src/capsule.nr | 2 +- .../contracts/slow_tree_contract/src/main.nr | 31 ++---- .../contracts/slow_tree_contract/src/types.nr | 16 ++-- .../stateful_test_contract/src/main.nr | 9 +- .../contracts/test_contract/src/interface.nr | 8 +- .../src/contracts/test_contract/src/main.nr | 24 ++--- .../src/interfaces.nr | 2 +- .../token_blacklist_contract/src/main.nr | 29 ++---- .../token_blacklist_contract/src/types.nr | 2 +- .../src/types/balance_set.nr | 2 +- .../src/types/roles.nr | 2 +- .../src/types/safe_u120_serialization.nr | 4 +- .../src/types/token_note.nr | 5 +- .../src/types/transparent_note.nr | 2 +- .../token_bridge_contract/src/main.nr | 34 +++---- .../src/token_interface.nr | 1 + .../src/contracts/token_contract/src/main.nr | 69 +++++++------- .../src/contracts/token_contract/src/types.nr | 2 +- .../token_contract/src/types/balance_set.nr | 2 +- .../src/types/safe_u120_serialization.nr | 4 +- .../token_contract/src/types/token_note.nr | 5 +- .../src/types/transparent_note.nr | 2 +- .../uniswap_contract/src/interfaces.nr | 1 + .../contracts/uniswap_contract/src/main.nr | 95 ++++++------------- .../contracts/uniswap_contract/src/util.nr | 10 +- 57 files changed, 375 insertions(+), 545 deletions(-) diff --git a/yarn-project/noir-contracts/src/contracts/benchmarking_contract/src/main.nr b/yarn-project/noir-contracts/src/contracts/benchmarking_contract/src/main.nr index 12ee0cccdcc5..b28718fe8df4 100644 --- a/yarn-project/noir-contracts/src/contracts/benchmarking_contract/src/main.nr +++ b/yarn-project/noir-contracts/src/contracts/benchmarking_contract/src/main.nr @@ -3,7 +3,6 @@ // would alter the metrics we're capturing in the benchmarks, and we want to keep the // subject being tested as unmodified as possible so we can detect metric changes that // arise from code changes. - contract Benchmarking { use dep::value_note::{ utils::{increment, decrement}, @@ -50,7 +49,7 @@ contract Benchmarking { // by @rahul-kothari for a full explanation on why this is needed. #[aztec(private)] fn recreate_note(owner: Field, index: u32) { - let owner_notes = storage.notes.at(owner); + let owner_notes = storage.notes.at(owner); let getter_options = NoteGetterOptions::new().set_limit(1).set_offset(index); let notes = owner_notes.get_notes(getter_options); let note = notes[0].unwrap_unchecked(); @@ -63,7 +62,7 @@ contract Benchmarking { fn increment_balance(owner: Field, value: Field) { let current = storage.balances.at(owner).read(); storage.balances.at(owner).write(current + value); - let _callStackItem1 = context.call_public_function(context.this_address(), compute_selector("broadcast(Field)"), [owner]); + let _callStackItem1 = context.call_public_function(context.this_address(), compute_selector("broadcast(Field)"), [owner]); } // Emits a public log. diff --git a/yarn-project/noir-contracts/src/contracts/card_game_contract/src/cards.nr b/yarn-project/noir-contracts/src/contracts/card_game_contract/src/cards.nr index 68c560c9de54..8ed77ee26e4c 100644 --- a/yarn-project/noir-contracts/src/contracts/card_game_contract/src/cards.nr +++ b/yarn-project/noir-contracts/src/contracts/card_game_contract/src/cards.nr @@ -50,7 +50,6 @@ fn test_to_from_field() { assert(card.to_field() == field); } - struct CardNote { card: Card, note: ValueNote, @@ -96,9 +95,7 @@ pub fn filter_cards(notes: [Option; MAX_READ_REQUESTS_PER_CALL], d for i in 0..notes.len() { let note = notes[i]; if note.is_some() { - let card_note = CardNote::from_note( - note.unwrap_unchecked() - ); + let card_note = CardNote::from_note(note.unwrap_unchecked()); for j in 0..N { if !found[j] & (card_note.card.strength == desired_cards[j].strength) & (card_note.card.points == desired_cards[j].points) { selected[i] = note; @@ -106,13 +103,11 @@ pub fn filter_cards(notes: [Option; MAX_READ_REQUESTS_PER_CALL], d } } } - } selected } - impl Deck { pub fn new( context: Context, @@ -189,7 +184,8 @@ impl Deck { } -global PACK_CARDS = 3; // Limited by number of write requests (max 4) +// Limited by number of write requests (max 4) +global PACK_CARDS = 3; pub fn get_pack_cards( seed: Field, @@ -201,6 +197,7 @@ pub fn get_pack_cards( let random_bytes = std::hash::sha256(mix.to_le_bytes(32)); let mut cards = [Card::from_field(0); PACK_CARDS]; + // we generate PACK_CARDS cards assert((PACK_CARDS as u64) < 8, "Cannot generate more than 8 cards"); for i in 0..PACK_CARDS { @@ -218,4 +215,4 @@ pub fn compute_deck_strength(cards: [Card; N]) -> Field { cards.fold(0, |acc, card: Card| { acc + card.strength as Field }) -} \ No newline at end of file +} diff --git a/yarn-project/noir-contracts/src/contracts/card_game_contract/src/game.nr b/yarn-project/noir-contracts/src/contracts/card_game_contract/src/game.nr index 75be5f84979f..c055968100e1 100644 --- a/yarn-project/noir-contracts/src/contracts/card_game_contract/src/game.nr +++ b/yarn-project/noir-contracts/src/contracts/card_game_contract/src/game.nr @@ -31,36 +31,25 @@ struct Game { global GAME_SERIALIZED_LEN: Field = 15; fn deserializeGame(fields: [Field; GAME_SERIALIZED_LEN]) -> Game { - let players = [ - PlayerEntry { - address: fields[0], - deck_strength: fields[1] as u32, - points: fields[2] as u120, - }, - PlayerEntry { - address: fields[3], - deck_strength: fields[4] as u32, - points: fields[5] as u120, - }, - ]; - let rounds_cards = [ - Card::from_field(fields[6]), Card::from_field(fields[7]), - Card::from_field(fields[8]), Card::from_field(fields[9]), - ]; - Game { + let players = [PlayerEntry { address: fields[0], deck_strength: fields[1] as u32, points: fields[2] as u120 }, + PlayerEntry { address: fields[3], deck_strength: fields[4] as u32, points: fields[5] as u120 }]; + let rounds_cards = [Card::from_field(fields[6]), + Card::from_field(fields[7]), + Card::from_field(fields[8]), + Card::from_field(fields[9])]; + Game { players, rounds_cards, started: fields[10] as bool, finished: fields[11] as bool, claimed: fields[12] as bool, current_player: fields[13] as u32, - current_round: fields[14] as u32, + current_round: fields[14] as u32 } } fn serializeGame(game: Game) -> [Field; GAME_SERIALIZED_LEN] { - [ - game.players[0].address, + [game.players[0].address, game.players[0].deck_strength as Field, game.players[0].points as Field, game.players[1].address, @@ -74,8 +63,7 @@ fn serializeGame(game: Game) -> [Field; GAME_SERIALIZED_LEN] { game.finished as Field, game.claimed as Field, game.current_player as Field, - game.current_round as Field, - ] + game.current_round as Field] } impl Game { @@ -169,4 +157,4 @@ impl Game { global GameSerializationMethods = TypeSerializationInterface { deserialize: deserializeGame, serialize: serializeGame, -}; \ No newline at end of file +}; diff --git a/yarn-project/noir-contracts/src/contracts/card_game_contract/src/main.nr b/yarn-project/noir-contracts/src/contracts/card_game_contract/src/main.nr index 732bf0f0c28d..a9f3291ecbb4 100644 --- a/yarn-project/noir-contracts/src/contracts/card_game_contract/src/main.nr +++ b/yarn-project/noir-contracts/src/contracts/card_game_contract/src/main.nr @@ -11,7 +11,6 @@ contract CardGame { }, }; - use dep::std::option::Option; use dep::value_note::{ balance_utils, @@ -50,7 +49,7 @@ contract CardGame { GameSerializationMethods, GAME_SERIALIZED_LEN }; - + struct Storage { collections: Map, game_decks: Map>, @@ -109,8 +108,8 @@ contract CardGame { #[aztec(private)] fn buy_pack( seed: Field, // The randomness used to generate the cards. Passed in for now. - ) { - + ) +{ let buyer = context.msg_sender(); let mut cards = get_pack_cards(seed, buyer); @@ -122,9 +121,9 @@ contract CardGame { fn join_game( game: u32, cards_fields: [Field; 2], - ) { + ) { let cards = cards_fields.map(|card_field| Card::from_field(card_field)); - + let player = context.msg_sender(); let mut collection = storage.collections.at(player); @@ -141,21 +140,19 @@ contract CardGame { game: u32, player: Field, deck_strength: u32, - ) { - + ) { let game_storage = storage.games.at(game as Field); let mut game_data = game_storage.read(); - assert(game_data.add_player(PlayerEntry {address: player, deck_strength, points: 0}), "Game full"); + assert(game_data.add_player(PlayerEntry { address: player, deck_strength, points: 0 }), "Game full"); game_storage.write(game_data); } #[aztec(public)] - fn start_game(game: u32) { - + fn start_game(game: u32) { let game_storage = storage.games.at(game as Field); - + let mut game_data = game_storage.read(); game_data.start_game(); game_storage.write(game_data); @@ -165,8 +162,7 @@ contract CardGame { fn play_card( game: u32, card: Card, - ) { - + ) { let player = context.msg_sender(); let mut game_deck = storage.game_decks.at(game as Field).at(player); @@ -178,9 +174,8 @@ contract CardGame { #[aztec(public)] internal fn on_card_played(game: u32, player: Field, card_as_field: Field) { - let game_storage = storage.games.at(game as Field); - + let mut game_data = game_storage.read(); let card = Card::from_field(card_as_field); @@ -195,8 +190,7 @@ contract CardGame { fn claim_cards( game: u32, cards_fields: [Field; PLAYABLE_CARDS], - ) { - + ) { let player = context.msg_sender(); let cards = cards_fields.map(|card_field| Card::from_field(card_field)); @@ -204,26 +198,18 @@ contract CardGame { let _inserted_cards = collection.add_cards(cards, player); let selector = compute_selector("on_cards_claimed(u32,Field,Field)"); - context.call_public_function( - context.this_address(), - selector, - [game as Field, player, pedersen_hash(cards_fields,0)] - ); + context.call_public_function(context.this_address(), selector, [game as Field, player, pedersen_hash(cards_fields, 0)]); } #[aztec(public)] internal fn on_cards_claimed(game: u32, player: Field, cards_hash: Field) { - let game_storage = storage.games.at(game as Field); let mut game_data = game_storage.read(); - + assert(!game_data.claimed, "Already claimed"); game_data.claimed = true; - assert_eq( - cards_hash, - pedersen_hash(game_data.rounds_cards.map(|card: Card| card.to_field()),0) - ); + assert_eq(cards_hash, pedersen_hash(game_data.rounds_cards.map(|card: Card| card.to_field()), 0)); let winner = game_data.winner(); assert_eq(player, winner.address, "Not the winner"); @@ -232,22 +218,20 @@ contract CardGame { } unconstrained fn view_collection_cards(owner: Field, offset: u32) -> [Option; MAX_NOTES_PER_PAGE] { - let collection = storage.collections.at(owner); collection.view_cards(offset) - } + } unconstrained fn view_game_cards(game: u32, player: Field, offset: u32) -> [Option; MAX_NOTES_PER_PAGE] { - let game_deck = storage.game_decks.at(game as Field).at(player); game_deck.view_cards(offset) - } + } unconstrained fn view_game(game: u32) -> Game { storage.games.at(game as Field).read() - } + } // Computes note hash and nullifier. // Note 1: Needs to be defined by every contract producing logs. diff --git a/yarn-project/noir-contracts/src/contracts/child_contract/src/main.nr b/yarn-project/noir-contracts/src/contracts/child_contract/src/main.nr index f1ecd53091e7..42b5ba0efe0c 100644 --- a/yarn-project/noir-contracts/src/contracts/child_contract/src/main.nr +++ b/yarn-project/noir-contracts/src/contracts/child_contract/src/main.nr @@ -28,7 +28,7 @@ contract Child { } #[aztec(private)] - fn constructor() {} + fn constructor() {} // Returns a sum of the input and the chain id and version of the contract in private circuit public input's return_values. #[aztec(private)] @@ -63,17 +63,15 @@ contract Child { // Sets `current_value` to `new_value` #[aztec(public)] fn pubSetValue(new_value: Field) -> Field { - storage.current_value.write(new_value); emit_unencrypted_log(&mut context, new_value); - + new_value } // Increments `current_value` by `new_value` #[aztec(public)] fn pubIncValue(new_value: Field) -> Field { - let old_value = storage.current_value.read(); storage.current_value.write(old_value + new_value); emit_unencrypted_log(&mut context, new_value); @@ -84,12 +82,11 @@ contract Child { // Increments `current_value` by `new_value`. Can only be called from this contract. #[aztec(public)] fn pubIncValueInternal(new_value: Field) -> Field { - check_sender(inputs.call_context); let old_value = storage.current_value.read(); storage.current_value.write(old_value + new_value); emit_unencrypted_log(&mut context, new_value); - + new_value } @@ -98,14 +95,12 @@ contract Child { let pubSetValueSelector = compute_selector("pubSetValue(Field)"); let _ret = context.call_public_function(context.this_address(), pubSetValueSelector, [10]); - storage.current_value.write(20); emit_unencrypted_log(&mut context, 20); } #[aztec(public)] fn setValueTwiceWithNestedLast() { - storage.current_value.write(20); emit_unencrypted_log(&mut context, 20); diff --git a/yarn-project/noir-contracts/src/contracts/counter_contract/src/main.nr b/yarn-project/noir-contracts/src/contracts/counter_contract/src/main.nr index 18836e718270..33ff18b0a497 100644 --- a/yarn-project/noir-contracts/src/contracts/counter_contract/src/main.nr +++ b/yarn-project/noir-contracts/src/contracts/counter_contract/src/main.nr @@ -1,5 +1,5 @@ contract Counter { -// docs:start:imports + // docs:start:imports use dep::aztec::{ context::{PrivateContext, Context}, note::{ @@ -16,17 +16,15 @@ contract Counter { }, }; use dep::easy_private_state::easy_private_state::EasyPrivateUint; -// docs:end:imports - -// docs:start:storage_struct + // docs:end:imports + // docs:start:storage_struct struct Storage { counters: Map, } -// docs:end:storage_struct - -// docs:start:storage_init + // docs:end:storage_struct + // docs:start:storage_init impl Storage { fn init(context: Context) -> pub Self { Storage { @@ -40,40 +38,40 @@ contract Counter { } } } -// docs:end:storage_init -// docs:start:constructor + // docs:end:storage_init + // docs:start:constructor #[aztec(private)] fn constructor(headstart: u120, owner: Field) { let counters = storage.counters; counters.at(owner).add(headstart, owner); } -// docs:end:constructor -// docs:start:increment + // docs:end:constructor + // docs:start:increment #[aztec(private)] - fn increment(owner: Field) { + fn increment(owner: Field) { let counters = storage.counters; counters.at(owner).add(1, owner); } -// docs:end:increment -// docs:start:get_counter + // docs:end:increment + // docs:start:get_counter unconstrained fn get_counter(owner: Field) -> Field { - let counters = storage.counters; - balance_utils::get_balance(counters.at(owner).set) + let counters = storage.counters; + balance_utils::get_balance(counters.at(owner).set) } -// docs:end:get_counter -// docs:start:nullifier + // docs:end:get_counter + // docs:start:nullifier unconstrained fn compute_note_hash_and_nullifier( contract_address: Field, nonce: Field, storage_slot: Field, preimage: [Field; VALUE_NOTE_LEN], ) -> [Field; 4] { - let note_header = NoteHeader::new(contract_address, nonce, storage_slot); - note_utils::compute_note_hash_and_nullifier(ValueNoteMethods, note_header, preimage) + let note_header = NoteHeader::new(contract_address, nonce, storage_slot); + note_utils::compute_note_hash_and_nullifier(ValueNoteMethods, note_header, preimage) } -// docs:end:nullifier -} \ No newline at end of file + // docs:end:nullifier +} diff --git a/yarn-project/noir-contracts/src/contracts/docs_example_contract/src/actions.nr b/yarn-project/noir-contracts/src/contracts/docs_example_contract/src/actions.nr index 03bd8c2c0ded..b4128a384508 100644 --- a/yarn-project/noir-contracts/src/contracts/docs_example_contract/src/actions.nr +++ b/yarn-project/noir-contracts/src/contracts/docs_example_contract/src/actions.nr @@ -20,14 +20,14 @@ use crate::types::{ pub fn is_locked(state_var: PublicState) -> bool { state_var.read() } -// docs:end:state_vars-PublicStateRead +// docs:end:state_vars-PublicStateRead // docs:start:state_vars-PublicStateWrite pub fn lock(state_var: PublicState) { state_var.write(true); } -// docs:end:state_vars-PublicStateWrite +// docs:end:state_vars-PublicStateWrite pub fn unlock(state_var: PublicState) { state_var.write(false); } @@ -36,8 +36,8 @@ pub fn unlock(state_var: PublicState) { pub fn get_current_queen(state_var: PublicState) -> Queen { state_var.read() } -// docs:end:state_vars-PublicStateReadCustom +// docs:end:state_vars-PublicStateReadCustom pub fn can_replace_queen( state_var: PublicState, new_queen: Queen, @@ -50,34 +50,34 @@ pub fn can_replace_queen( pub fn replace_queen(state_var: PublicState, new_queen: Queen) { state_var.write(new_queen); } -// docs:end:state_vars-PublicStateWriteCustom +// docs:end:state_vars-PublicStateWriteCustom // docs:start:state_vars-PublicStateReadWriteCustom pub fn add_points_to_queen(state_var: PublicState, new_points: u8) { let mut queen = state_var.read(); queen.points += new_points; state_var.write(queen); } -// docs:end:state_vars-PublicStateReadWriteCustom +// docs:end:state_vars-PublicStateReadWriteCustom // docs:start:state_vars-SingletonInit pub fn init_legendary_card(state_var: Singleton, card: &mut CardNote) { state_var.initialize(card, Option::some(card.owner), true); } -// docs:end:state_vars-SingletonInit +// docs:end:state_vars-SingletonInit // docs:start:state_vars-SingletonReplace pub fn update_legendary_card(state_var: Singleton, card: &mut CardNote) { state_var.replace(card, true); } -// docs:end:state_vars-SingletonReplace +// docs:end:state_vars-SingletonReplace // docs:start:state_vars-SingletonGet pub fn get_legendary_card(state_var: Singleton) -> CardNote { state_var.get_note(true) } -// docs:end:state_vars-SingletonGet +// docs:end:state_vars-SingletonGet // docs:start:state_vars-ImmutableSingletonInit pub fn init_game_rules( state_var: ImmutableSingleton, @@ -85,27 +85,27 @@ pub fn init_game_rules( ) { state_var.initialize(rules, Option::none(), true); } -// docs:end:state_vars-ImmutableSingletonInit +// docs:end:state_vars-ImmutableSingletonInit // docs:start:state_vars-ImmutableSingletonGet pub fn is_valid_card(state_var: ImmutableSingleton, card: CardNote) -> bool { let rules = state_var.get_note(); card.points >= rules.min_points & card.points <= rules.max_points } -// docs:end:state_vars-ImmutableSingletonGet +// docs:end:state_vars-ImmutableSingletonGet // docs:start:state_vars-SetInsert pub fn add_new_card(state_var: Set, card: &mut CardNote) { state_var.insert(card, true); } -// docs:end:state_vars-SetInsert +// docs:end:state_vars-SetInsert // docs:start:state_vars-SetRemove pub fn remove_card(state_var: Set, card: CardNote) { state_var.remove(card); } -// docs:end:state_vars-SetRemove +// docs:end:state_vars-SetRemove // docs:start:state_vars-SetGet pub fn get_cards( state_var: Set, @@ -113,8 +113,8 @@ pub fn get_cards( ) -> [Option; MAX_READ_REQUESTS_PER_CALL] { state_var.get_notes(options) } -// docs:end:state_vars-SetGet +// docs:end:state_vars-SetGet // docs:start:state_vars-SetView unconstrained pub fn view_cards( state_var: Set, @@ -122,16 +122,14 @@ unconstrained pub fn view_cards( ) -> [Option; MAX_NOTES_PER_PAGE] { state_var.view_notes(options) } -// docs:end:state_vars-SetView +// docs:end:state_vars-SetView unconstrained pub fn get_total_points( state_var: Set, account: Field, offset: u32, ) -> u8 { - let options = NoteViewerOptions::new() - .select(2, account) - .set_offset(offset); + let options = NoteViewerOptions::new().select(2, account).set_offset(offset); let mut total_points = 0; let notes = view_cards(state_var, options); for i in 0..notes.len() { @@ -153,8 +151,8 @@ pub fn add_new_profile( ) { state_var.at(account).initialize(profile, Option::some(account), true); } -// docs:end:state_vars-MapAtSingletonInit +// docs:end:state_vars-MapAtSingletonInit // docs:start:state_vars-MapAtSingletonGet pub fn get_profile( state_var: Map>, @@ -162,4 +160,5 @@ pub fn get_profile( ) -> ProfileNote { state_var.at(account).get_note(true) } + // docs:end:state_vars-MapAtSingletonGet diff --git a/yarn-project/noir-contracts/src/contracts/docs_example_contract/src/main.nr b/yarn-project/noir-contracts/src/contracts/docs_example_contract/src/main.nr index 3930ac84f2b2..2099c2a9fe89 100644 --- a/yarn-project/noir-contracts/src/contracts/docs_example_contract/src/main.nr +++ b/yarn-project/noir-contracts/src/contracts/docs_example_contract/src/main.nr @@ -12,10 +12,12 @@ contract DocsExample { singleton::Singleton, }, }; + // docs:start:state_vars-PublicStateBoolImport use dep::aztec::types::type_serialization::bool_serialization::{ BoolSerializationMethods, BOOL_SERIALIZED_LEN, }; + // docs:end:state_vars-PublicStateBoolImport use crate::account_contract_interface::AccountContractInterface; use crate::actions; @@ -40,8 +42,8 @@ contract DocsExample { profiles: Map>, // docs:end:storage-map-singleton-declaration } - // docs:end:storage-struct-declaration + // docs:end:storage-struct-declaration // docs:start:storage-declaration // docs:start:state_vars-PublicState // docs:start:state_vars-PublicStateCustomStruct @@ -79,6 +81,7 @@ contract DocsExample { } } } + // docs:end:state_vars-PublicState // docs:end:state_vars-PublicStateCustomStruct // docs:end:state_vars-Singleton @@ -86,7 +89,6 @@ contract DocsExample { // docs:end:state_vars-Set // docs:end:state_vars-MapSingleton // docs:end:storage-declaration - global REPLACE_QUEEN_FUNCTION_SELECTOR = 11111111; global GET_POINTS_OF_COMMON_CARD_FUNCTION_SELECTOR = 11111111; @@ -107,38 +109,32 @@ contract DocsExample { #[aztec(public)] fn lock() { // highlight-next-line:storage-init - storage.locked.write(true); } - // docs:end:storage-init + // docs:end:storage-init // docs:start:functions-OpenFunction #[aztec(public)] fn unlock() { - actions::unlock(storage.locked); } - // docs:end:functions-OpenFunction + // docs:end:functions-OpenFunction #[aztec(public)] fn replace_queen( account: Field, points: u8, ) { - - let new_queen = Queen { account, points }; - + assert(actions::can_replace_queen(storage.queen, new_queen)); - + actions::replace_queen(storage.queen, new_queen); } // docs:start:state_vars-PublicStateWriteBeforeCall #[aztec(public)] fn replace_queen_unsafe() { - - let account = context.msg_sender(); let points = actions::get_total_points(storage.cards, account, 0); @@ -147,31 +143,27 @@ contract DocsExample { assert(points > current_queen.points); AccountContractInterface::at(account).send_rewards(current_queen.points); - + let new_queen = Queen { account, points }; storage.queen.write(new_queen); } - // docs:end:state_vars-PublicStateWriteBeforeCall + // docs:end:state_vars-PublicStateWriteBeforeCall // docs:start:functions-SecretFunction #[aztec(private)] fn add_common_cards(secrets: [Field; 4]) { - - for i in 0..secrets.len() as u8 { let mut card = CardNote::new(0, secrets[i], 0); actions::add_new_card(storage.cards, &mut card); } } - // docs:end:functions-SecretFunction + // docs:end:functions-SecretFunction #[aztec(private)] fn update_legendary_card( new_points: u8, new_secret: Field, ) { - - let owner = inputs.call_context.msg_sender; let mut updated_card = CardNote::new(new_points, new_secret, owner); @@ -182,22 +174,16 @@ contract DocsExample { #[aztec(private)] fn become_queen() { - - let legendary_card = actions::get_legendary_card(storage.legendary_card); let owner = legendary_card.owner; let result = context.call_private_function( - inputs.call_context.storage_contract_address, - GET_POINTS_OF_COMMON_CARD_FUNCTION_SELECTOR, - [owner, 0] + inputs.call_context.storage_contract_address, GET_POINTS_OF_COMMON_CARD_FUNCTION_SELECTOR, [owner, 0] ); let total_points = legendary_card.points + result[0] as u8; context.call_public_function( - inputs.call_context.storage_contract_address, - REPLACE_QUEEN_FUNCTION_SELECTOR, - [owner, total_points as Field] + inputs.call_context.storage_contract_address, REPLACE_QUEEN_FUNCTION_SELECTOR, [owner, total_points as Field] ); } @@ -206,8 +192,6 @@ contract DocsExample { account: Field, offset: u32, ) { - - let mut total_points = 0; let options = create_account_card_getter_options(account, offset); let cards = actions::get_cards(storage.cards, options); @@ -224,12 +208,10 @@ contract DocsExample { // docs:start:functions-UnconstrainedFunction unconstrained fn get_total_points(account: Field) -> u8 { - actions::get_total_points(storage.cards, account, 0) } - // docs:end:functions-UnconstrainedFunction - + // docs:end:functions-UnconstrainedFunction /// Macro equivalence section use dep::aztec::abi; use dep::aztec::abi::Hasher; @@ -241,9 +223,8 @@ contract DocsExample { fn simple_macro_example(a: Field, b: Field) -> Field { a + b } - // docs:end:simple_macro_example - + // docs:end:simple_macro_example // docs:start:simple_macro_example_expanded fn simple_macro_example_expanded( // ************************************************************ @@ -260,7 +241,8 @@ contract DocsExample { // The actual return type of our circuit is the PrivateCircuitPublicInputs struct, this will be the // input to our kernel! // docs:start:context-example-return - ) -> distinct pub abi::PrivateCircuitPublicInputs { + ) -> distinct pub abi::PrivateCircuitPublicInputs +{ // docs:end:context-example-return // ************************************************************ // The hasher is a structure used to generate a hash of the circuits inputs. @@ -268,18 +250,18 @@ contract DocsExample { let mut hasher = Hasher::new(); hasher.add(a); hasher.add(b); - // docs:end:context-example-hasher + // docs:end:context-example-hasher // The context object is created with the inputs and the hash of the inputs // docs:start:context-example-context let mut context = PrivateContext::new(inputs, hasher.hash()); - // docs:end:context-example-context + // docs:end:context-example-context // docs:start:storage-example-context let mut storage = Storage::init(Context::private(&mut context)); + // docs:end:storage-example-context // ************************************************************ - // Our actual program let result = a + b; @@ -287,27 +269,23 @@ contract DocsExample { // Return values are pushed into the context // docs:start:context-example-context-return context.return_values.push(result); - // docs:end:context-example-context-return + // docs:end:context-example-context-return // The context is returned to be consumed by the kernel circuit! // docs:start:context-example-finish context.finish() // docs:end:context-example-finish // ************************************************************ } - // docs:end:simple_macro_example_expanded - + // docs:end:simple_macro_example_expanded // Cross chain messaging section // Demonstrates a cross chain message - // docs:start:l1_to_l2_cross_chain_message + // docs:start:l1_to_l2_cross_chain_message #[aztec(private)] - fn send_to_l1() { + fn send_to_l1() {} - - } // docs:end:l1_to_l2_cross_chain_message - // TODO: remove this placeholder once https://github.com/AztecProtocol/aztec-packages/issues/2918 is implemented unconstrained fn compute_note_hash_and_nullifier(contract_address: Field, nonce: Field, storage_slot: Field, serialized_note: [Field; 0]) -> [Field; 4] { [0, 0, 0, 0] diff --git a/yarn-project/noir-contracts/src/contracts/docs_example_contract/src/options.nr b/yarn-project/noir-contracts/src/contracts/docs_example_contract/src/options.nr index 636a6de36093..8551f13ceb91 100644 --- a/yarn-project/noir-contracts/src/contracts/docs_example_contract/src/options.nr +++ b/yarn-project/noir-contracts/src/contracts/docs_example_contract/src/options.nr @@ -8,26 +8,20 @@ pub fn create_account_card_getter_options( account_address: Field, offset: u32, ) -> NoteGetterOptions { - NoteGetterOptions::new() - .select(2, account_address) - .sort(0, SortOrder.DESC) - .set_offset(offset) + NoteGetterOptions::new().select(2, account_address).sort(0, SortOrder.DESC).set_offset(offset) } -// docs:end:state_vars-NoteGetterOptionsSelectSortOffset +// docs:end:state_vars-NoteGetterOptionsSelectSortOffset // docs:start:state_vars-NoteGetterOptionsMultiSelects pub fn create_exact_card_getter_options( points: u8, secret: Field, account_address: Field, ) -> NoteGetterOptions { - NoteGetterOptions::new() - .select(0, points as Field) - .select(1, secret) - .select(2, account_address) + NoteGetterOptions::new().select(0, points as Field).select(1, secret).select(2, account_address) } -// docs:end:state_vars-NoteGetterOptionsMultiSelects +// docs:end:state_vars-NoteGetterOptionsMultiSelects // docs:start:state_vars-OptionFilter pub fn filter_min_points( cards: [Option; MAX_READ_REQUESTS_PER_CALL], @@ -43,26 +37,22 @@ pub fn filter_min_points( } selected_cards } -// docs:end:state_vars-OptionFilter +// docs:end:state_vars-OptionFilter // docs:start:state_vars-NoteGetterOptionsFilter pub fn create_account_cards_with_min_points_getter_options( account_address: Field, min_points: u8, ) -> NoteGetterOptions { - NoteGetterOptions::with_filter(filter_min_points, min_points) - .select(2, account_address) - .sort(0, SortOrder.ASC) + NoteGetterOptions::with_filter(filter_min_points, min_points).select(2, account_address).sort(0, SortOrder.ASC) } -// docs:end:state_vars-NoteGetterOptionsFilter +// docs:end:state_vars-NoteGetterOptionsFilter // docs:start:state_vars-NoteGetterOptionsPickOne pub fn create_largest_account_card_getter_options( account_address: Field, ) -> NoteGetterOptions { - NoteGetterOptions::new() - .select(2, account_address) - .sort(0, SortOrder.DESC) - .set_limit(1) + NoteGetterOptions::new().select(2, account_address).sort(0, SortOrder.DESC).set_limit(1) } + // docs:end:state_vars-NoteGetterOptionsPickOne diff --git a/yarn-project/noir-contracts/src/contracts/docs_example_contract/src/types.nr b/yarn-project/noir-contracts/src/contracts/docs_example_contract/src/types.nr index 9e0784c92cad..b8bf6dc7bfd8 100644 --- a/yarn-project/noir-contracts/src/contracts/docs_example_contract/src/types.nr +++ b/yarn-project/noir-contracts/src/contracts/docs_example_contract/src/types.nr @@ -1,4 +1,4 @@ mod card_note; mod profile_note; mod queen; -mod rules_note; \ No newline at end of file +mod rules_note; diff --git a/yarn-project/noir-contracts/src/contracts/docs_example_contract/src/types/card_note.nr b/yarn-project/noir-contracts/src/contracts/docs_example_contract/src/types/card_note.nr index 01269b009543..5f6c6b57b260 100644 --- a/yarn-project/noir-contracts/src/contracts/docs_example_contract/src/types/card_note.nr +++ b/yarn-project/noir-contracts/src/contracts/docs_example_contract/src/types/card_note.nr @@ -22,8 +22,8 @@ struct CardNote { owner: Field, header: NoteHeader, } -// docs:end:state_vars-CardNote +// docs:end:state_vars-CardNote impl CardNote { pub fn new(points: u8, secret: Field, owner: Field) -> Self { CardNote { diff --git a/yarn-project/noir-contracts/src/contracts/docs_example_contract/src/types/queen.nr b/yarn-project/noir-contracts/src/contracts/docs_example_contract/src/types/queen.nr index 635205ecd6f6..76065e8de244 100644 --- a/yarn-project/noir-contracts/src/contracts/docs_example_contract/src/types/queen.nr +++ b/yarn-project/noir-contracts/src/contracts/docs_example_contract/src/types/queen.nr @@ -5,16 +5,13 @@ struct Queen { account: Field, points: u8, } -// docs:end:state_vars-CustomStruct +// docs:end:state_vars-CustomStruct // docs:start:state_vars-PublicStateCustomStruct global QUEEN_SERIALIZED_LEN: Field = 2; fn deserialize(fields: [Field; QUEEN_SERIALIZED_LEN]) -> Queen { - Queen { - account: fields[0], - points: fields[1] as u8, - } + Queen { account: fields[0], points: fields[1] as u8 } } fn serialize(queen: Queen) -> [Field; QUEEN_SERIALIZED_LEN] { @@ -25,4 +22,4 @@ global QueenSerializationMethods = TypeSerializationInterface { deserialize, serialize, }; -// docs:end:state_vars-PublicStateCustomStruct \ No newline at end of file +// docs:end:state_vars-PublicStateCustomStruct diff --git a/yarn-project/noir-contracts/src/contracts/easy_private_token_contract/src/main.nr b/yarn-project/noir-contracts/src/contracts/easy_private_token_contract/src/main.nr index fc3ebaf65acc..6c7f4b131b41 100644 --- a/yarn-project/noir-contracts/src/contracts/easy_private_token_contract/src/main.nr +++ b/yarn-project/noir-contracts/src/contracts/easy_private_token_contract/src/main.nr @@ -38,13 +38,12 @@ contract EasyPrivateToken { /** * initialize the contract's initial state variables. - */ + */ #[aztec(private)] fn constructor( initial_supply: u120, owner: Field, ) { - let balances = storage.balances; balances.at(owner).add(initial_supply, owner); @@ -55,8 +54,7 @@ contract EasyPrivateToken { fn mint( amount: u120, owner: Field, - ) { - + ) { let balances = storage.balances; balances.at(owner).add(amount, owner); @@ -69,7 +67,6 @@ contract EasyPrivateToken { sender: Field, recipient: Field, ) { - let balances = storage.balances; balances.at(sender).sub(amount, sender); @@ -80,7 +77,6 @@ contract EasyPrivateToken { unconstrained fn getBalance( owner: Field, ) -> Field { - let balances = storage.balances; // Return the sum of all notes in the set. @@ -95,4 +91,5 @@ contract EasyPrivateToken { note_utils::compute_note_hash_and_nullifier(ValueNoteMethods, note_header, serialized_note) } } + // docs:end:easy_private_token_contract diff --git a/yarn-project/noir-contracts/src/contracts/ecdsa_account_contract/src/ecdsa_public_key_note.nr b/yarn-project/noir-contracts/src/contracts/ecdsa_account_contract/src/ecdsa_public_key_note.nr index 18d45ad39dd6..436199240ada 100644 --- a/yarn-project/noir-contracts/src/contracts/ecdsa_account_contract/src/ecdsa_public_key_note.nr +++ b/yarn-project/noir-contracts/src/contracts/ecdsa_account_contract/src/ecdsa_public_key_note.nr @@ -89,23 +89,22 @@ impl EcdsaPublicKeyNote { } fn deserialize(serialized_note: [Field; ECDSA_PUBLIC_KEY_NOTE_LEN]) -> EcdsaPublicKeyNote { - let mut x: [u8; 32] = [0;32]; - let mut y: [u8; 32] = [0;32]; + let mut x: [u8; 32] = [0; 32]; + let mut y: [u8; 32] = [0; 32]; let part_x = serialized_note[0].to_be_bytes(32); - for i in 0..31 { x[i] = part_x[i + 1]; } + for i in 0..31 { + x[i] = part_x[i + 1]; + } x[31] = serialized_note[1].to_be_bytes(32)[31]; let part_y = serialized_note[2].to_be_bytes(32); - for i in 0..31 { y[i] = part_y[i + 1]; } + for i in 0..31 { + y[i] = part_y[i + 1]; + } y[31] = serialized_note[3].to_be_bytes(32)[31]; - EcdsaPublicKeyNote { - x, - y, - owner: serialized_note[4], - header: NoteHeader::empty(), - } + EcdsaPublicKeyNote { x, y, owner: serialized_note[4], header: NoteHeader::empty() } } fn serialize(note: EcdsaPublicKeyNote) -> [Field; ECDSA_PUBLIC_KEY_NOTE_LEN] { @@ -114,7 +113,7 @@ fn serialize(note: EcdsaPublicKeyNote) -> [Field; ECDSA_PUBLIC_KEY_NOTE_LEN] { fn compute_note_hash(note: EcdsaPublicKeyNote) -> Field { // TODO(#1205) Should use a non-zero generator index. - pedersen_hash(note.serialize(),0) + pedersen_hash(note.serialize(), 0) } fn compute_nullifier(note: EcdsaPublicKeyNote) -> Field { diff --git a/yarn-project/noir-contracts/src/contracts/ecdsa_account_contract/src/main.nr b/yarn-project/noir-contracts/src/contracts/ecdsa_account_contract/src/main.nr index 4dabf31b3b65..84463e5dad08 100644 --- a/yarn-project/noir-contracts/src/contracts/ecdsa_account_contract/src/main.nr +++ b/yarn-project/noir-contracts/src/contracts/ecdsa_account_contract/src/main.nr @@ -79,11 +79,13 @@ contract EcdsaAccount { // Load public key from storage let storage = Storage::init(Context::private(context)); let public_key = storage.public_key.get_note(); - + // Load auth witness let witness: [Field; 64] = get_auth_witness(message_field); let mut signature: [u8; 64] = [0; 64]; - for i in 0..64 { signature[i] = witness[i] as u8; } + for i in 0..64 { + signature[i] = witness[i] as u8; + } // Verify payload signature using Ethereum's signing scheme // Note that noir expects the hash of the message/challenge as input to the ECDSA verification. diff --git a/yarn-project/noir-contracts/src/contracts/escrow_contract/src/main.nr b/yarn-project/noir-contracts/src/contracts/escrow_contract/src/main.nr index 49bedc9234e3..04f57af2fc2b 100644 --- a/yarn-project/noir-contracts/src/contracts/escrow_contract/src/main.nr +++ b/yarn-project/noir-contracts/src/contracts/escrow_contract/src/main.nr @@ -39,15 +39,15 @@ contract Escrow { owner: pub Field ) { let this = context.this_address(); - + // Create a new note and add it to the owners set. let mut note = AddressNote::new(owner, this); // Insert the owner into storage storage.owners.insert(&mut note, true); } - // docs:end:constructor + // docs:end:constructor // Withdraws balance. Requires that msg.sender is registered as an owner. #[aztec(private)] fn withdraw( @@ -64,11 +64,7 @@ contract Escrow { assert(notes[0].is_some(), "Sender is not an owner."); let selector = compute_selector("transfer((Field),(Field),Field,Field)"); - let _callStackItem = context.call_private_function( - token, - selector, - [this, recipient, amount, 0] - ); + let _callStackItem = context.call_private_function(token, selector, [this, recipient, amount, 0]); } unconstrained fn compute_note_hash_and_nullifier(contract_address: Field, nonce: Field, storage_slot: Field, serialized_note: [Field; ADDRESS_NOTE_LEN]) -> [Field; 4] { diff --git a/yarn-project/noir-contracts/src/contracts/import_test_contract/src/main.nr b/yarn-project/noir-contracts/src/contracts/import_test_contract/src/main.nr index 599a28218fb7..d94d86a25a0b 100644 --- a/yarn-project/noir-contracts/src/contracts/import_test_contract/src/main.nr +++ b/yarn-project/noir-contracts/src/contracts/import_test_contract/src/main.nr @@ -12,11 +12,10 @@ contract ImportTest { ManyNotesADeepStructTestCodeGenStruct, }; - #[aztec(private)] fn constructor( ) {} - + // Calls the testCodeGen on the Test contract at the target address // Used for testing calling a function with arguments of multiple types // See yarn-project/acir-simulator/src/client/private_execution.ts @@ -27,21 +26,13 @@ contract ImportTest { ) -> Field { let test_contract_instance = TestPrivateContextInterface::at(target); let return_values = test_contract_instance.test_code_gen( - &mut context, - 1, - true, - 1 as u32, - [1, 2], - AStructTestCodeGenStruct { amount: 1, secret_hash: 2 }, - ADeepStructTestCodeGenStruct { - a_field: 1, - a_bool: true, + &mut context, 1, true, 1 as u32, [1, 2], AStructTestCodeGenStruct { amount: 1, secret_hash: 2 }, ADeepStructTestCodeGenStruct { + a_field: 1, + a_bool: true, a_note: ANoteADeepStructTestCodeGenStruct { amount: 1, secret_hash: 2 }, - many_notes: [ - ManyNotesADeepStructTestCodeGenStruct { amount: 1, secret_hash: 2 }, + many_notes: [ManyNotesADeepStructTestCodeGenStruct { amount: 1, secret_hash: 2 }, ManyNotesADeepStructTestCodeGenStruct { amount: 1, secret_hash: 2 }, - ManyNotesADeepStructTestCodeGenStruct { amount: 1, secret_hash: 2 }, - ] + ManyNotesADeepStructTestCodeGenStruct { amount: 1, secret_hash: 2 }] } ); @@ -57,7 +48,7 @@ contract ImportTest { ) -> Field { let test_contract_instance = TestPrivateContextInterface::at(target); let return_values = test_contract_instance.get_this_address(&mut context); - + return_values[0] } @@ -81,7 +72,7 @@ contract ImportTest { ) -> Field { let test_contract_instance = TestPublicContextInterface::at(target); let ret = test_contract_instance.create_nullifier_public(context, 1, 2); - + ret[0] } } diff --git a/yarn-project/noir-contracts/src/contracts/lending_contract/src/asset.nr b/yarn-project/noir-contracts/src/contracts/lending_contract/src/asset.nr index cb8dcd90ad4f..71446a28a060 100644 --- a/yarn-project/noir-contracts/src/contracts/lending_contract/src/asset.nr +++ b/yarn-project/noir-contracts/src/contracts/lending_contract/src/asset.nr @@ -21,17 +21,15 @@ fn deserializeAsset(fields: [Field; ASSET_SERIALIZED_LEN]) -> Asset { interest_accumulator: fields[0] as u120, last_updated_ts: fields[1] as u120, loan_to_value: fields[2] as u120, - oracle_address: fields[3], + oracle_address: fields[3] } } fn serializeAsset(asset: Asset) -> [Field; ASSET_SERIALIZED_LEN] { - [ - asset.interest_accumulator as Field, + [asset.interest_accumulator as Field, asset.last_updated_ts as Field, asset.loan_to_value as Field, - asset.oracle_address, - ] + asset.oracle_address] } impl Asset { diff --git a/yarn-project/noir-contracts/src/contracts/lending_contract/src/helpers.nr b/yarn-project/noir-contracts/src/contracts/lending_contract/src/helpers.nr index eb20e2d5bdb8..2300631cbd02 100644 --- a/yarn-project/noir-contracts/src/contracts/lending_contract/src/helpers.nr +++ b/yarn-project/noir-contracts/src/contracts/lending_contract/src/helpers.nr @@ -11,9 +11,9 @@ pub fn compute_identifier( self: Field, ) -> Field { // EITHER secret OR on_behalf_of MUST be set. But not both - assert (!((secret == 0) as bool & (on_behalf_of == 0) as bool)); + assert(!((secret == 0) as bool & (on_behalf_of == 0) as bool)); if (secret != 0) { - pedersen_hash([self, secret],0) + pedersen_hash([self, secret], 0) } else { on_behalf_of } @@ -26,12 +26,12 @@ pub fn covered_by_collateral( increase: u120, decrease: u120, ) -> u120 { - let price_precision = SafeU120{value: 1000000000}; - let ltv_precision = SafeU120{value: 10000}; + let price_precision = SafeU120 { value: 1000000000 }; + let ltv_precision = SafeU120 { value: 10000 }; - let price = SafeU120{value: price}; - let collateral = SafeU120{value: collateral}.add(SafeU120{value:increase}).sub(SafeU120{value:decrease}); - let loan_to_value = SafeU120{value: loan_to_value}; + let price = SafeU120 { value: price }; + let collateral = SafeU120 { value: collateral }.add(SafeU120 { value: increase }).sub(SafeU120 { value: decrease }); + let loan_to_value = SafeU120 { value: loan_to_value }; let collateral_value = collateral.mul_div(price, price_precision); let debt_covered = collateral_value.mul_div(loan_to_value, ltv_precision); @@ -51,12 +51,12 @@ pub fn debt_updates( decrease: u120, ) -> DebtReturn { assert(interest_accumulator > 0); - let accumulator_precision = SafeU120{value: 1000000000}; + let accumulator_precision = SafeU120 { value: 1000000000 }; - let static_debt = SafeU120{value: static_debt}; - let interest_accumulator = SafeU120{value: interest_accumulator}; - let increase = SafeU120{value: increase}; - let decrease = SafeU120{value: decrease}; + let static_debt = SafeU120 { value: static_debt }; + let interest_accumulator = SafeU120 { value: interest_accumulator }; + let increase = SafeU120 { value: increase }; + let decrease = SafeU120 { value: decrease }; let current_debt_value = static_debt.mul_div(interest_accumulator, accumulator_precision); let new_debt_value = current_debt_value.add(increase).sub(decrease); @@ -64,6 +64,7 @@ pub fn debt_updates( // static_debt_increase = amount / accumulator // rounding up new debt. let static_debt_increase = increase.mul_div_up(accumulator_precision, interest_accumulator); + // rounding down repayment. let static_debt_decrease = decrease.mul_div(accumulator_precision, interest_accumulator); @@ -71,18 +72,15 @@ pub fn debt_updates( // if you try to repay exact due to time diff between sim and execution. let new_static_debt = static_debt.add(static_debt_increase).sub(static_debt_decrease); - DebtReturn { - debt_value: new_debt_value.value, - static_debt: new_static_debt.value, - } + DebtReturn { debt_value: new_debt_value.value, static_debt: new_static_debt.value } } pub fn debt_value( static_debt: u120, interest_accumulator: u120, ) -> u120 { - let static_debt = SafeU120{value: static_debt}; - let accumulator_precision = SafeU120{value: 1000000000}; - let interest_accumulator = SafeU120{value: interest_accumulator}; + let static_debt = SafeU120 { value: static_debt }; + let accumulator_precision = SafeU120 { value: 1000000000 }; + let interest_accumulator = SafeU120 { value: interest_accumulator }; static_debt.mul_div_up(interest_accumulator, accumulator_precision).value -} \ No newline at end of file +} diff --git a/yarn-project/noir-contracts/src/contracts/lending_contract/src/interest_math.nr b/yarn-project/noir-contracts/src/contracts/lending_contract/src/interest_math.nr index 5b089405a3f3..61d5424a40c5 100644 --- a/yarn-project/noir-contracts/src/contracts/lending_contract/src/interest_math.nr +++ b/yarn-project/noir-contracts/src/contracts/lending_contract/src/interest_math.nr @@ -11,13 +11,15 @@ pub fn compute_multiplier( rate_per_second: u120, dt: SafeU120, ) -> SafeU120 { - let base = SafeU120{value: 1000000000}; // 1e9 - let WAD = SafeU120{value: 1000000000000000000}; // 1e18 + let base = SafeU120 { value: 1000000000 }; + // 1e9 + let WAD = SafeU120 { value: 1000000000000000000 }; + // 1e18 let diff = WAD.div(base); let mut res = base; if (!dt.is_zero()) { - let exp_minus_one = SafeU120{value: dt.value - 1}; - let exp_minus_two = SafeU120 {value: if (dt.value > 2) {dt.value - 2} else { 0 }}; + let exp_minus_one = SafeU120 { value: dt.value - 1 }; + let exp_minus_two = SafeU120 { value: if (dt.value > 2) { dt.value - 2 } else { 0 } }; // if rate_per_second < sqrt(WAD), then base_power_two and base_power_three = 0 let rate = SafeU120 { value: rate_per_second }; @@ -25,8 +27,8 @@ pub fn compute_multiplier( let base_power_three = base_power_two.mul_div(rate, WAD); let temp = dt.mul(exp_minus_one); - let second_term = temp.mul(base_power_two).div(SafeU120 {value: 2}); - let third_term = temp.mul(exp_minus_two).mul(base_power_three).div(SafeU120{value: 6}); + let second_term = temp.mul(base_power_two).div(SafeU120 { value: 2 }); + let third_term = temp.mul(exp_minus_two).mul(base_power_three).div(SafeU120 { value: 6 }); // throwing away precision to keep us under u120 :sob: let offset = dt.mul(rate).add(second_term).add(third_term).div(diff); @@ -34,4 +36,4 @@ pub fn compute_multiplier( res = base.add(offset); } res -} \ No newline at end of file +} diff --git a/yarn-project/noir-contracts/src/contracts/lending_contract/src/interfaces.nr b/yarn-project/noir-contracts/src/contracts/lending_contract/src/interfaces.nr index b4f0634f7234..e2377ef2f6ef 100644 --- a/yarn-project/noir-contracts/src/contracts/lending_contract/src/interfaces.nr +++ b/yarn-project/noir-contracts/src/contracts/lending_contract/src/interfaces.nr @@ -100,4 +100,4 @@ impl Lending { oracle_address: return_values[3], } } -} \ No newline at end of file +} diff --git a/yarn-project/noir-contracts/src/contracts/lending_contract/src/main.nr b/yarn-project/noir-contracts/src/contracts/lending_contract/src/main.nr index f9f32af3b84c..7685826ab81b 100644 --- a/yarn-project/noir-contracts/src/contracts/lending_contract/src/main.nr +++ b/yarn-project/noir-contracts/src/contracts/lending_contract/src/main.nr @@ -107,20 +107,19 @@ contract Lending { collateral_asset: Field, stable_coin: Field, ) -> Field { - let asset_loc = storage.assets.at(0); let asset = asset_loc.read(); - assert (loan_to_value as u120 <= 10000); - assert (asset.last_updated_ts == 0); - assert (asset.interest_accumulator == 0); + assert(loan_to_value as u120 <= 10000); + assert(asset.last_updated_ts == 0); + assert(asset.interest_accumulator == 0); asset_loc.write(Asset { - interest_accumulator: 1000000000, - last_updated_ts: context.timestamp() as u120, - loan_to_value: loan_to_value as u120, - oracle_address, - }); + interest_accumulator: 1000000000, + last_updated_ts: context.timestamp() as u120, + loan_to_value: loan_to_value as u120, + oracle_address + }); storage.collateral_asset.write(collateral_asset); storage.stable_coin.write(stable_coin); @@ -131,17 +130,17 @@ contract Lending { // Create a position. #[aztec(public)] fn update_accumulator() -> Asset { - - let asset_loc = storage.assets.at(0); let mut asset = asset_loc.read(); - let dt: SafeU120 = SafeU120{value: context.timestamp() as u120}.sub(SafeU120{value: asset.last_updated_ts}); + let dt: SafeU120 = SafeU120 { value: context.timestamp() as u120 }.sub(SafeU120 { value: asset.last_updated_ts }); // Only update if time has passed. if (!dt.is_zero()) { - let precision: SafeU120 = SafeU120{value: 1000000000}; - let rate_per_second: u120 = 1268391679; // 4% yearly rate / (60 * 60 * 24 * 365) + let precision: SafeU120 = SafeU120 { value: 1000000000 }; + let rate_per_second: u120 = 1268391679; + + // 4% yearly rate / (60 * 60 * 24 * 365) // if rate_per_second < sqrt(WAD) our approx is eq precision + rate * dt let multiplier = compute_multiplier(rate_per_second, dt); @@ -166,6 +165,7 @@ contract Lending { ) { let on_behalf_of = compute_identifier(secret, on_behalf_of, context.msg_sender()); let _res = Token::at(collateral_asset).unshield(&mut context, from, context.this_address(), amount, nonce); + // _deposit(on_behalf_of, amount, collateral_asset) let selector = compute_selector("_deposit(Field,Field,Field)"); let _callStackItem2 = context.call_public_function(context.this_address(), selector, [on_behalf_of, amount, collateral_asset]); @@ -181,7 +181,7 @@ contract Lending { Token::at(collateral_asset).transfer_public(context, context.msg_sender(), context.this_address(), amount, nonce); let selector = compute_selector("_deposit(Field,Field,Field)"); let return_values = context.call_public_function(context.this_address(), selector, [on_behalf_of, amount, collateral_asset]); - + return_values[0] } @@ -192,7 +192,6 @@ contract Lending { collateral_asset: Field, ) -> Field { let _asset = Lending::at(context.this_address()).update_accumulator(context); - let coll_asset = storage.collateral_asset.read(); assert(coll_asset == collateral_asset); @@ -234,8 +233,6 @@ contract Lending { ) -> Field { let asset = Lending::at(context.this_address()).update_accumulator(context); let price = PriceFeed::at(asset.oracle_address).get_price(context); - - let coll_loc = storage.collateral.at(owner); let collateral: Field = coll_loc.read(); @@ -248,7 +245,7 @@ contract Lending { let debt_covered = covered_by_collateral(price, asset.loan_to_value, collateral as u120, 0, amount as u120); let debt_returns = debt_updates(asset.interest_accumulator, static_debt as u120, 0, 0); - assert (debt_returns.debt_value < debt_covered); + assert(debt_returns.debt_value < debt_covered); coll_loc.write(collateral - amount); @@ -277,7 +274,7 @@ contract Lending { ) -> Field { let selector = compute_selector("_borrow(Field,Field,Field)"); let return_values = context.call_public_function(context.this_address(), selector, [context.msg_sender(), to, amount]); - + return_values[0] } @@ -289,8 +286,6 @@ contract Lending { ) -> Field { let asset = Lending::at(context.this_address()).update_accumulator(context); let price = PriceFeed::at(asset.oracle_address).get_price(context); - - // Fetch collateral and static_debt, compute health of current position let collateral = storage.collateral.at(owner).read() as u120; @@ -299,7 +294,7 @@ contract Lending { let debt_covered = covered_by_collateral(price, asset.loan_to_value, collateral, 0, 0); let debt_returns = debt_updates(asset.interest_accumulator, static_debt, amount as u120, 0); - assert (debt_returns.debt_value < debt_covered); + assert(debt_returns.debt_value < debt_covered); storage.static_debt.at(owner).write(debt_returns.static_debt as Field); @@ -335,7 +330,7 @@ contract Lending { Token::at(stable_coin).burn_public(context, context.msg_sender(), amount, nonce); let selector = compute_selector("_repay(Field,Field,Field)"); let return_values = context.call_public_function(context.this_address(), selector, [owner, amount, stable_coin]); - + return_values[0] } @@ -346,7 +341,6 @@ contract Lending { stable_coin: Field, ) { let asset = Lending::at(context.this_address()).update_accumulator(context); - // To ensure that private is using the correct token. assert(stable_coin == storage.stable_coin.read()); @@ -355,30 +349,27 @@ contract Lending { let debt_returns = debt_updates(asset.interest_accumulator, static_debt, 0, amount as u120); storage.static_debt.at(owner).write(debt_returns.static_debt as Field); - + 1 } unconstrained fn get_asset( assetId: Field, ) -> Asset { - storage.assets.at(assetId).read() } unconstrained fn get_position( owner: Field, ) -> Position { - let collateral = storage.collateral.at(owner).read(); let static_debt = storage.static_debt.at(owner).read(); let asset = storage.assets.at(0).read(); let debt = debt_value(static_debt as u120, asset.interest_accumulator as u120) as Field; - Position {collateral, static_debt, debt} + Position { collateral, static_debt, debt } } unconstrained fn get_assets() -> [Field; 2] { - [storage.collateral_asset.read(), storage.stable_coin.read()] } diff --git a/yarn-project/noir-contracts/src/contracts/parent_contract/src/main.nr b/yarn-project/noir-contracts/src/contracts/parent_contract/src/main.nr index 02e893ecb4ac..73a8aa92360c 100644 --- a/yarn-project/noir-contracts/src/contracts/parent_contract/src/main.nr +++ b/yarn-project/noir-contracts/src/contracts/parent_contract/src/main.nr @@ -88,6 +88,7 @@ contract Parent { ) { // Enqueue the first public call context.call_public_function(targetContract, targetSelector, [targetValue]); + // Enqueue the second public call context.call_public_function(targetContract, targetSelector, [targetValue + 1]); } @@ -113,7 +114,7 @@ contract Parent { ) { let pubEntryPointSelector = compute_selector("pubEntryPoint(Field,Field,Field)"); let thisAddress = context.this_address(); - + context.call_public_function(thisAddress, pubEntryPointSelector, [targetContract, targetSelector, targetValue]); context.call_public_function(thisAddress, pubEntryPointSelector, [targetContract, targetSelector, targetValue + 1]); diff --git a/yarn-project/noir-contracts/src/contracts/pending_commitments_contract/src/main.nr b/yarn-project/noir-contracts/src/contracts/pending_commitments_contract/src/main.nr index 7ccbc640daf3..a63ff1193b12 100644 --- a/yarn-project/noir-contracts/src/contracts/pending_commitments_contract/src/main.nr +++ b/yarn-project/noir-contracts/src/contracts/pending_commitments_contract/src/main.nr @@ -41,7 +41,6 @@ contract PendingCommitments { // TODO(dbanks12): consolidate code into internal helper functions // (once Noir's support for this is more robust) - #[aztec(private)] fn constructor() {} @@ -53,8 +52,6 @@ contract PendingCommitments { amount: Field, owner: Field, ) -> Field { - - let owner_balance = storage.balances.at(owner); let mut note = ValueNote::new(amount, owner); @@ -62,6 +59,7 @@ contract PendingCommitments { owner_balance.insert(&mut note, true); let options = NoteGetterOptions::with_filter(filter_notes_min_sum, amount); + // get note inserted above let maybe_notes = owner_balance.get_notes(options); @@ -80,11 +78,10 @@ contract PendingCommitments { amount: Field, owner: Field, ) -> Field { - - let owner_balance = storage.balances.at(owner); let options = NoteGetterOptions::with_filter(filter_notes_min_sum, amount); + // get note (note inserted at bottom of function shouldn't exist yet) let maybe_notes = owner_balance.get_notes(options); @@ -111,8 +108,6 @@ contract PendingCommitments { amount: Field, owner: Field, ) { - - let owner_balance = storage.balances.at(owner); let mut note = ValueNote::new(amount, owner); @@ -126,8 +121,6 @@ contract PendingCommitments { expected_value: Field, owner: Field, ) -> Field { - - let owner_balance = storage.balances.at(owner); let options = NoteGetterOptions::new().set_limit(1); @@ -145,8 +138,6 @@ contract PendingCommitments { fn get_note_zero_balance( owner: Field, ) { - - let owner_balance = storage.balances.at(owner); let options = NoteGetterOptions::new(); @@ -169,9 +160,11 @@ contract PendingCommitments { ) { // nested call to create/insert note let _callStackItem1 = context.call_private_function(inputs.call_context.storage_contract_address, insert_fn_selector, [amount, owner]); + // nested call to read and nullify that note let _callStackItem2 = context.call_private_function(inputs.call_context.storage_contract_address, get_then_nullify_fn_selector, [amount, owner]); - // nested call to confirm that balance is zero + + // nested call to confirm that balance is zero let _callStackItem3 = context.call_private_function(inputs.call_context.storage_contract_address, get_note_zero_fn_selector, [owner]); } @@ -189,6 +182,7 @@ contract PendingCommitments { // nested call to create/insert note let _callStackItem1 = context.call_private_function(inputs.call_context.storage_contract_address, insert_fn_selector, args); let _callStackItem2 = context.call_private_function(inputs.call_context.storage_contract_address, insert_fn_selector, args); + // nested call to read and nullify that note let _callStackItem3 = context.call_private_function(inputs.call_context.storage_contract_address, get_then_nullify_fn_selector, args); let _callStackItem4 = context.call_private_function(inputs.call_context.storage_contract_address, get_then_nullify_fn_selector, args); @@ -211,6 +205,7 @@ contract PendingCommitments { // nested call to create/insert note let _callStackItem1 = context.call_private_function(inputs.call_context.storage_contract_address, insert_fn_selector, args); let _callStackItem2 = context.call_private_function(inputs.call_context.storage_contract_address, insert_fn_selector, args); + // nested call to read and nullify that note let _callStackItem3 = context.call_private_function(inputs.call_context.storage_contract_address, get_then_nullify_fn_selector, args); } @@ -231,6 +226,7 @@ contract PendingCommitments { // nested call to create/insert note let _callStackItem1 = context.call_private_function(inputs.call_context.storage_contract_address, insert_fn_selector, args); + // nested call to read and nullify that note let _callStackItem2 = context.call_private_function(inputs.call_context.storage_contract_address, get_then_nullify_fn_selector, args); let _callStackItem3 = context.call_private_function(inputs.call_context.storage_contract_address, get_then_nullify_fn_selector, args); @@ -252,7 +248,6 @@ contract PendingCommitments { // get_then_nullify_fn_selector: Field, //) { //} - // Computes note hash and nullifier. // Note 1: Needs to be defined by every contract producing logs. // Note 2: Having it in all the contracts gives us the ability to compute the note hash and nullifier differently for different kind of notes. @@ -260,4 +255,4 @@ contract PendingCommitments { let note_header = NoteHeader::new(contract_address, nonce, storage_slot); note_utils::compute_note_hash_and_nullifier(ValueNoteMethods, note_header, serialized_note) } -} \ No newline at end of file +} diff --git a/yarn-project/noir-contracts/src/contracts/price_feed_contract/src/asset.nr b/yarn-project/noir-contracts/src/contracts/price_feed_contract/src/asset.nr index 9686d74a28dc..9d464eefddc2 100644 --- a/yarn-project/noir-contracts/src/contracts/price_feed_contract/src/asset.nr +++ b/yarn-project/noir-contracts/src/contracts/price_feed_contract/src/asset.nr @@ -7,9 +7,7 @@ struct Asset { global ASSET_SERIALIZED_LEN: Field = 1; fn deserializeAsset(fields: [Field; ASSET_SERIALIZED_LEN]) -> Asset { - Asset { - price: fields[0] as u120, - } + Asset { price: fields[0] as u120 } } fn serializeAsset(asset: Asset) -> [Field; ASSET_SERIALIZED_LEN] { diff --git a/yarn-project/noir-contracts/src/contracts/price_feed_contract/src/main.nr b/yarn-project/noir-contracts/src/contracts/price_feed_contract/src/main.nr index 1b59c3cd5acd..1cf999f2a6de 100644 --- a/yarn-project/noir-contracts/src/contracts/price_feed_contract/src/main.nr +++ b/yarn-project/noir-contracts/src/contracts/price_feed_contract/src/main.nr @@ -35,16 +35,15 @@ contract PriceFeed { } #[aztec(private)] - fn constructor(){} + fn constructor() {} #[aztec(public)] fn set_price( asset_id: Field, price: u120, ) -> Field { - let asset = storage.assets.at(asset_id); - asset.write(Asset {price: price}); + asset.write(Asset { price }); 1 } @@ -53,15 +52,12 @@ contract PriceFeed { fn get_price( asset_id: Field, ) -> Asset { - - storage.assets.at(asset_id).read() } unconstrained fn fetch_price( assetId: Field, ) -> Asset { - storage.assets.at(assetId).read() } diff --git a/yarn-project/noir-contracts/src/contracts/schnorr_account_contract/src/main.nr b/yarn-project/noir-contracts/src/contracts/schnorr_account_contract/src/main.nr index 40985f45f38b..82a6cce25d80 100644 --- a/yarn-project/noir-contracts/src/contracts/schnorr_account_contract/src/main.nr +++ b/yarn-project/noir-contracts/src/contracts/schnorr_account_contract/src/main.nr @@ -45,6 +45,7 @@ contract SchnorrAccount { signing_pub_key_y: pub Field, ) { let this = context.this_address(); + // docs:start:initialize let mut pub_key_note = PublicKeyNote::new(signing_pub_key_x, signing_pub_key_y, this); storage.signing_public_key.initialize(&mut pub_key_note, Option::none(), true); @@ -80,17 +81,22 @@ contract SchnorrAccount { // docs:start:entrypoint // Load public key from storage let storage = Storage::init(Context::private(context)); + // docs:start:get_note let public_key = storage.signing_public_key.get_note(); + // docs:end:get_note // Load auth witness let witness: [Field; 64] = get_auth_witness(message_hash); let mut signature: [u8; 64] = [0; 64]; - for i in 0..64 { signature[i] = witness[i] as u8; } + for i in 0..64 { + signature[i] = witness[i] as u8; + } // Verify signature of the payload bytes let verification = std::schnorr::verify_signature(public_key.x, public_key.y, signature, message_hash.to_be_bytes(32)); assert(verification == true); + // docs:end:entrypoint true } diff --git a/yarn-project/noir-contracts/src/contracts/schnorr_account_contract/src/public_key_note.nr b/yarn-project/noir-contracts/src/contracts/schnorr_account_contract/src/public_key_note.nr index 538eb288ae69..5547b887f5b1 100644 --- a/yarn-project/noir-contracts/src/contracts/schnorr_account_contract/src/public_key_note.nr +++ b/yarn-project/noir-contracts/src/contracts/schnorr_account_contract/src/public_key_note.nr @@ -68,12 +68,7 @@ impl PublicKeyNote { } fn deserialize(serialized_note: [Field; PUBLIC_KEY_NOTE_LEN]) -> PublicKeyNote { - PublicKeyNote { - x: serialized_note[0], - y: serialized_note[1], - owner: serialized_note[2], - header: NoteHeader::empty(), - } + PublicKeyNote { x: serialized_note[0], y: serialized_note[1], owner: serialized_note[2], header: NoteHeader::empty() } } fn serialize(note: PublicKeyNote) -> [Field; PUBLIC_KEY_NOTE_LEN] { @@ -82,7 +77,7 @@ fn serialize(note: PublicKeyNote) -> [Field; PUBLIC_KEY_NOTE_LEN] { fn compute_note_hash(note: PublicKeyNote) -> Field { // TODO(#1205) Should use a non-zero generator index. - pedersen_hash(note.serialize(),0) + pedersen_hash(note.serialize(), 0) } fn compute_nullifier(note: PublicKeyNote) -> Field { diff --git a/yarn-project/noir-contracts/src/contracts/schnorr_hardcoded_account_contract/src/main.nr b/yarn-project/noir-contracts/src/contracts/schnorr_hardcoded_account_contract/src/main.nr index bfaa0b285e49..4d6b60120997 100644 --- a/yarn-project/noir-contracts/src/contracts/schnorr_hardcoded_account_contract/src/main.nr +++ b/yarn-project/noir-contracts/src/contracts/schnorr_hardcoded_account_contract/src/main.nr @@ -52,7 +52,9 @@ contract SchnorrHardcodedAccount { // Load auth witness and format as an u8 array let witness: [Field; 64] = get_auth_witness(message_hash); let mut signature: [u8; 64] = [0; 64]; - for i in 0..64 { signature[i] = witness[i] as u8; } + for i in 0..64 { + signature[i] = witness[i] as u8; + } // Verify signature using hardcoded public key let verification = std::schnorr::verify_signature(public_key_x, public_key_y, signature, message_hash.to_be_bytes(32)); @@ -60,6 +62,5 @@ contract SchnorrHardcodedAccount { true } // docs:end:is-valid - } -// docs:end:contract \ No newline at end of file +// docs:end:contract diff --git a/yarn-project/noir-contracts/src/contracts/schnorr_single_key_account_contract/src/auth_oracle.nr b/yarn-project/noir-contracts/src/contracts/schnorr_single_key_account_contract/src/auth_oracle.nr index 2cb544a4502f..5b6b3dd7219d 100644 --- a/yarn-project/noir-contracts/src/contracts/schnorr_single_key_account_contract/src/auth_oracle.nr +++ b/yarn-project/noir-contracts/src/contracts/schnorr_single_key_account_contract/src/auth_oracle.nr @@ -24,4 +24,4 @@ impl AuthWitness { unconstrained pub fn get_auth_witness(message_hash: Field) -> AuthWitness { let witness: [Field; 67] = auth_witness::get_auth_witness(message_hash); AuthWitness::deserialize(witness) -} \ No newline at end of file +} diff --git a/yarn-project/noir-contracts/src/contracts/schnorr_single_key_account_contract/src/main.nr b/yarn-project/noir-contracts/src/contracts/schnorr_single_key_account_contract/src/main.nr index 6030f2f1251f..6ddcff3a22e9 100644 --- a/yarn-project/noir-contracts/src/contracts/schnorr_single_key_account_contract/src/main.nr +++ b/yarn-project/noir-contracts/src/contracts/schnorr_single_key_account_contract/src/main.nr @@ -49,4 +49,4 @@ contract SchnorrSingleKeyAccount { assert(recover_address(message_hash, witness) == context.this_address()); true } -} \ No newline at end of file +} diff --git a/yarn-project/noir-contracts/src/contracts/schnorr_single_key_account_contract/src/util.nr b/yarn-project/noir-contracts/src/contracts/schnorr_single_key_account_contract/src/util.nr index 3b8143735677..af629cf768ed 100644 --- a/yarn-project/noir-contracts/src/contracts/schnorr_single_key_account_contract/src/util.nr +++ b/yarn-project/noir-contracts/src/contracts/schnorr_single_key_account_contract/src/util.nr @@ -12,4 +12,4 @@ pub fn recover_address( let reproduced_address = compute_address(witness.owner.x, witness.owner.y, witness.partial_address); reproduced_address -} \ No newline at end of file +} diff --git a/yarn-project/noir-contracts/src/contracts/slow_tree_contract/src/capsule.nr b/yarn-project/noir-contracts/src/contracts/slow_tree_contract/src/capsule.nr index d47e56d47a4a..8731eca35d2a 100644 --- a/yarn-project/noir-contracts/src/contracts/slow_tree_contract/src/capsule.nr +++ b/yarn-project/noir-contracts/src/contracts/slow_tree_contract/src/capsule.nr @@ -4,4 +4,4 @@ fn pop_capsule_oracle() -> [Field; N] {} // A capsule is a "blob" of data that is passed to the contract through an oracle. unconstrained pub fn pop_capsule() -> [Field; N] { pop_capsule_oracle() -} \ No newline at end of file +} diff --git a/yarn-project/noir-contracts/src/contracts/slow_tree_contract/src/main.nr b/yarn-project/noir-contracts/src/contracts/slow_tree_contract/src/main.nr index f2345e111ac7..118b77e5670d 100644 --- a/yarn-project/noir-contracts/src/contracts/slow_tree_contract/src/main.nr +++ b/yarn-project/noir-contracts/src/contracts/slow_tree_contract/src/main.nr @@ -32,8 +32,10 @@ contract SlowTree { use crate::types::{MembershipProof, deserialize_membership_proof}; global TREE_HEIGHT: Field = 254; - global MEMBERSHIP_SIZE: Field = 256; // TREE_HEIGHT + 2 - global UPDATE_SIZE: Field = 512; // TREE_HEIGHT * 2 + 4 + // TREE_HEIGHT + 2 + global MEMBERSHIP_SIZE: Field = 256; + // TREE_HEIGHT * 2 + 4 + global UPDATE_SIZE: Field = 512; global EMPTY_ROOT: Field = 5785871043333994658400733180052743689641713274194136017445890613179954325976; @@ -84,11 +86,7 @@ contract SlowTree { let expected_root = compute_merkle_root(p.value, p.index, p.sibling_path); let selector = compute_selector("_assert_current_root(Field,Field)"); - context.call_public_function( - context.this_address(), - selector, - [context.msg_sender(), expected_root] - ); + context.call_public_function(context.this_address(), selector, [context.msg_sender(), expected_root]); p.value } @@ -118,16 +116,7 @@ contract SlowTree { let selector = compute_selector("_update(Field,Field,Field,Field,Field,Field)"); context.call_public_function( - context.this_address(), - selector, - [ - context.msg_sender(), - p.index, - p.new_value, - before_root, - after_root, - new_after_root - ] + context.this_address(), selector, [context.msg_sender(), p.index, p.new_value, before_root, after_root, new_after_root] ); } @@ -146,11 +135,7 @@ contract SlowTree { assert(current_root == before, "Before root does not match expected"); assert(after_root == after, "After root does not match expected"); - storage.trees.at(caller).update_unsafe_at( - index, - new_value, - new_root, - ); + storage.trees.at(caller).update_unsafe_at(index, new_value, new_root); } unconstrained fn un_read_leaf_at(address: Field, key: Field) -> Leaf { @@ -164,4 +149,4 @@ contract SlowTree { unconstrained fn compute_note_hash_and_nullifier(_contract_address: Field, _nonce: Field, _storage_slot: Field, _preimage: [Field; 4]) -> [Field; 4] { [0x0d, 0x0e, 0x0a, 0x0d] } -} \ No newline at end of file +} diff --git a/yarn-project/noir-contracts/src/contracts/slow_tree_contract/src/types.nr b/yarn-project/noir-contracts/src/contracts/slow_tree_contract/src/types.nr index cdef27fbbf13..0f4f5eb4119f 100644 --- a/yarn-project/noir-contracts/src/contracts/slow_tree_contract/src/types.nr +++ b/yarn-project/noir-contracts/src/contracts/slow_tree_contract/src/types.nr @@ -7,15 +7,11 @@ struct MembershipProof { } fn deserialize_membership_proof(serialized: [Field; M]) -> MembershipProof { - let mut sibling_path = [0; N]; - for i in 0..N { - sibling_path[i] = serialized[2 + i]; - } - MembershipProof { - index: serialized[0], - value: serialized[1], - sibling_path, - } + let mut sibling_path = [0; N]; + for i in 0..N { + sibling_path[i] = serialized[2 + i]; + } + MembershipProof { index: serialized[0], value: serialized[1], sibling_path } } impl MembershipProof { @@ -32,4 +28,4 @@ impl MembershipProof { fn deserialize(serialized: [Field; M]) -> Self { deserialize_membership_proof(serialized) } -} \ No newline at end of file +} diff --git a/yarn-project/noir-contracts/src/contracts/stateful_test_contract/src/main.nr b/yarn-project/noir-contracts/src/contracts/stateful_test_contract/src/main.nr index 921d11f013ed..21e60598701d 100644 --- a/yarn-project/noir-contracts/src/contracts/stateful_test_contract/src/main.nr +++ b/yarn-project/noir-contracts/src/contracts/stateful_test_contract/src/main.nr @@ -58,9 +58,8 @@ contract StatefulTest { fn create_note( owner: Field, value: Field, - ) { - - if (value != 0){ + ) { + if (value != 0) { let loc = storage.notes.at(owner); increment(loc, value, owner); } @@ -70,8 +69,7 @@ contract StatefulTest { fn destroy_and_create( recipient: Field, amount: Field, - ) { - + ) { let sender = context.msg_sender(); let sender_notes = storage.notes.at(sender); @@ -84,7 +82,6 @@ contract StatefulTest { unconstrained fn summed_values( owner: Field, ) -> Field { - let owner_balance = storage.notes.at(owner); // Return the sum of all notes in the set. diff --git a/yarn-project/noir-contracts/src/contracts/test_contract/src/interface.nr b/yarn-project/noir-contracts/src/contracts/test_contract/src/interface.nr index 1bb62e9f3f6f..a320d8d6c8fe 100644 --- a/yarn-project/noir-contracts/src/contracts/test_contract/src/interface.nr +++ b/yarn-project/noir-contracts/src/contracts/test_contract/src/interface.nr @@ -1,5 +1,4 @@ /* Autogenerated file, do not edit! */ - use dep::std; use dep::aztec::context::{ PrivateContext, PublicContext }; use dep::aztec::constants_gen::RETURN_VALUES_LENGTH; @@ -26,7 +25,6 @@ struct ManyNotesADeepStructTestCodeGenStruct { secret_hash: Field, } - // Interface for calling Test functions from a private context struct TestPrivateContextInterface { address: Field, @@ -242,9 +240,6 @@ impl TestPrivateContextInterface { } } - - - // Interface for calling Test functions from a public context struct TestPublicContextInterface { @@ -330,5 +325,4 @@ impl TestPublicContextInterface { } } - - + diff --git a/yarn-project/noir-contracts/src/contracts/test_contract/src/main.nr b/yarn-project/noir-contracts/src/contracts/test_contract/src/main.nr index 43180fa693d4..6520c906114b 100644 --- a/yarn-project/noir-contracts/src/contracts/test_contract/src/main.nr +++ b/yarn-project/noir-contracts/src/contracts/test_contract/src/main.nr @@ -4,8 +4,8 @@ contract Test { // docs:start:unencrypted_import use dep::aztec::log::emit_unencrypted_log; - // docs:end:unencrypted_import + // docs:end:unencrypted_import use dep::aztec::{ context::Context, abi, @@ -48,15 +48,16 @@ contract Test { #[aztec(private)] // docs:start:empty-constructor - fn constructor() {} - // docs:end:empty-constructor + fn constructor() +{} + // docs:end:empty-constructor #[aztec(private)] fn get_public_key( address: Field, - ) -> [Field; 2]{ + ) -> [Field; 2] { let pub_key = get_public_key_oracle(address); - + [pub_key.x, pub_key.y] } @@ -105,7 +106,7 @@ contract Test { args.push(a_deep_struct.a_note.secret_hash); for note in a_deep_struct.many_notes { args.push(note.amount); - args.push(note.secret_hash); + args.push(note.secret_hash); } let args_hash = abi::hash_args(args.storage); let mut context = PrivateContext::new(inputs, args_hash); @@ -121,10 +122,9 @@ contract Test { ) { // Create a commitment to the amount let note = DummyNote::new(amount, secret_hash); - + // Public oracle call to emit new commitment. context.message_portal(note.get_commitment()); - } // Purely exists for testing @@ -135,7 +135,7 @@ contract Test { ) { // Create a commitment to the amount let note = DummyNote::new(amount, secret_hash); - + // Public oracle call to emit new commitment. context.push_new_nullifier(note.get_commitment(), EMPTY_NULLIFIED_COMMITMENT); } @@ -160,14 +160,15 @@ contract Test { assert(context.timestamp() == time); time } - // docs:end:is-time-equal + // docs:end:is-time-equal #[aztec(public)] fn emit_unencrypted( value: Field ) -> Field { // docs:start:emit_unencrypted emit_unencrypted_log(&mut context, value); + // docs:end:emit_unencrypted 0 } @@ -181,11 +182,12 @@ contract Test { secret: Field, ) { let content_hash = get_mint_public_content_hash(to, amount, canceller); + // Consume message and emit nullifier context.consume_l1_to_l2_message(msg_key, content_hash, secret); } - #[aztec(private)] + #[aztec(private)] fn consume_mint_private_message( secret_hash_for_redeeming_minted_notes: Field, amount: Field, diff --git a/yarn-project/noir-contracts/src/contracts/token_blacklist_contract/src/interfaces.nr b/yarn-project/noir-contracts/src/contracts/token_blacklist_contract/src/interfaces.nr index d21f75b25173..a05dc34874bc 100644 --- a/yarn-project/noir-contracts/src/contracts/token_blacklist_contract/src/interfaces.nr +++ b/yarn-project/noir-contracts/src/contracts/token_blacklist_contract/src/interfaces.nr @@ -45,4 +45,4 @@ impl SlowMap { [index, new_value] ); } -} \ No newline at end of file +} diff --git a/yarn-project/noir-contracts/src/contracts/token_blacklist_contract/src/main.nr b/yarn-project/noir-contracts/src/contracts/token_blacklist_contract/src/main.nr index d30ccb605017..8b807368ca66 100644 --- a/yarn-project/noir-contracts/src/contracts/token_blacklist_contract/src/main.nr +++ b/yarn-project/noir-contracts/src/contracts/token_blacklist_contract/src/main.nr @@ -8,10 +8,8 @@ mod interfaces; // To be read as `caller` calls function at `contract` defined by `selector` with `args` // Including a nonce in the message hash ensures that the message can only be used once. // The slow updates tree are used for access control related to minters and blacklist. - // TODO's: https://github.com/AztecProtocol/aztec-packages/issues/3210 // We are currently unable to do constructor -> private calls - contract TokenBlacklist { // Libs use dep::std::option::Option; @@ -116,19 +114,14 @@ contract TokenBlacklist { //////// // Looking ugly because we cannot do constructor -> private calls - #[aztec(private)] fn init_slow_tree( user: AztecAddress ) { - let roles = UserFlags{is_admin: true, is_minter: false, is_blacklisted: false}.get_value() as Field; + let roles = UserFlags { is_admin: true, is_minter: false, is_blacklisted: false }.get_value() as Field; let slow = SlowMap::at(AztecAddress::new(storage.slow_update.get_note().value)); slow.update_at_private(&mut context, user.address, roles); - context.call_public_function( - context.this_address(), - compute_selector("_init_slow_tree((Field))"), - [context.msg_sender()], - ); + context.call_public_function(context.this_address(), compute_selector("_init_slow_tree((Field))"), [context.msg_sender()]); } #[aztec(public)] @@ -137,7 +130,6 @@ contract TokenBlacklist { } /////// - #[aztec(private)] fn update_roles( user: AztecAddress, @@ -225,7 +217,7 @@ contract TokenBlacklist { amount: Field, nonce: Field, ) -> Field { - let slow = SlowMap::at(storage.public_slow_update.read()); + let slow = SlowMap::at(storage.public_slow_update.read()); let from_roles = UserFlags::new(slow.read_at_pub(context, from.address) as u120); assert(!from_roles.is_blacklisted, "Blacklisted: Sender"); let to_roles = UserFlags::new(slow.read_at_pub(context, to.address) as u120); @@ -253,7 +245,7 @@ contract TokenBlacklist { amount: Field, nonce: Field, ) -> Field { - let slow = SlowMap::at(storage.public_slow_update.read()); + let slow = SlowMap::at(storage.public_slow_update.read()); let from_roles = UserFlags::new(slow.read_at_pub(context, from.address) as u120); assert(!from_roles.is_blacklisted, "Blacklisted: Sender"); @@ -279,18 +271,20 @@ contract TokenBlacklist { amount: Field, secret: Field, ) -> Field { - let slow = SlowMap::at(AztecAddress::new(storage.slow_update.get_note().value)); + let slow = SlowMap::at(AztecAddress::new(storage.slow_update.get_note().value)); let to_roles = UserFlags::new(slow.read_at(&mut context, to.address) as u120); assert(!to_roles.is_blacklisted, "Blacklisted: Recipient"); let pending_shields = storage.pending_shields; let secret_hash = compute_secret_hash(secret); + // Get 1 note (set_limit(1)) which has amount stored in field with index 0 (select(0, amount)) and secret_hash // stored in field with index 1 (select(1, secret_hash)). let options = NoteGetterOptions::new().select(0, amount).select(1, secret_hash).set_limit(1); let notes = pending_shields.get_notes(options); let note = notes[0].unwrap_unchecked(); - // Remove the note from the pending shields set + + // Remove the note from the pending shields set pending_shields.remove(note); // Add the token note to user's balances set @@ -388,7 +382,6 @@ contract TokenBlacklist { } /// Internal /// - #[aztec(public)] internal fn _increase_public_balance( to: AztecAddress, @@ -408,7 +401,6 @@ contract TokenBlacklist { } /// Unconstrained /// - unconstrained fn total_supply() -> u120 { storage.total_supply.read().value } @@ -427,7 +419,6 @@ contract TokenBlacklist { // Below this point is the stuff of nightmares. // This should ideally not be required. What do we do if vastly different types of preimages? - // Computes note hash and nullifier. // Note 1: Needs to be defined by every contract producing logs. // Note 2: Having it in all the contracts gives us the ability to compute the note hash and nullifier differently for different kind of notes. @@ -439,6 +430,6 @@ contract TokenBlacklist { note_utils::compute_note_hash_and_nullifier(FieldNoteMethods, note_header, preimage) } else { note_utils::compute_note_hash_and_nullifier(TokenNoteMethods, note_header, preimage) - } + } } -} \ No newline at end of file +} diff --git a/yarn-project/noir-contracts/src/contracts/token_blacklist_contract/src/types.nr b/yarn-project/noir-contracts/src/contracts/token_blacklist_contract/src/types.nr index d5747a136a10..f5a3aeaa6fdf 100644 --- a/yarn-project/noir-contracts/src/contracts/token_blacklist_contract/src/types.nr +++ b/yarn-project/noir-contracts/src/contracts/token_blacklist_contract/src/types.nr @@ -3,4 +3,4 @@ mod balance_set; mod balances_map; mod token_note; mod safe_u120_serialization; -mod roles; \ No newline at end of file +mod roles; diff --git a/yarn-project/noir-contracts/src/contracts/token_blacklist_contract/src/types/balance_set.nr b/yarn-project/noir-contracts/src/contracts/token_blacklist_contract/src/types/balance_set.nr index 37dbcd4ddbe6..5c3da5897b6a 100644 --- a/yarn-project/noir-contracts/src/contracts/token_blacklist_contract/src/types/balance_set.nr +++ b/yarn-project/noir-contracts/src/contracts/token_blacklist_contract/src/types/balance_set.nr @@ -123,4 +123,4 @@ pub fn filter_notes_min_sum(notes: [Option; MAX_READ_REQUESTS_PER_CAL } } selected -} \ No newline at end of file +} diff --git a/yarn-project/noir-contracts/src/contracts/token_blacklist_contract/src/types/roles.nr b/yarn-project/noir-contracts/src/contracts/token_blacklist_contract/src/types/roles.nr index 4412dff55926..793674e996dc 100644 --- a/yarn-project/noir-contracts/src/contracts/token_blacklist_contract/src/types/roles.nr +++ b/yarn-project/noir-contracts/src/contracts/token_blacklist_contract/src/types/roles.nr @@ -39,4 +39,4 @@ impl UserFlags { value } -} \ No newline at end of file +} diff --git a/yarn-project/noir-contracts/src/contracts/token_blacklist_contract/src/types/safe_u120_serialization.nr b/yarn-project/noir-contracts/src/contracts/token_blacklist_contract/src/types/safe_u120_serialization.nr index f4f3ef84d23e..876007184fe1 100644 --- a/yarn-project/noir-contracts/src/contracts/token_blacklist_contract/src/types/safe_u120_serialization.nr +++ b/yarn-project/noir-contracts/src/contracts/token_blacklist_contract/src/types/safe_u120_serialization.nr @@ -5,7 +5,7 @@ global SAFE_U120_SERIALIZED_LEN: Field = 1; // This is safe when reading from storage IF only correct safeu120 was written to storage fn deserializeU120(fields: [Field; SAFE_U120_SERIALIZED_LEN]) -> SafeU120 { - SafeU120{value: fields[0] as u120} + SafeU120 { value: fields[0] as u120 } } fn serializeU120(value: SafeU120) -> [Field; SAFE_U120_SERIALIZED_LEN] { @@ -15,4 +15,4 @@ fn serializeU120(value: SafeU120) -> [Field; SAFE_U120_SERIALIZED_LEN] { global SafeU120SerializationMethods = TypeSerializationInterface { deserialize: deserializeU120, serialize: serializeU120, -}; \ No newline at end of file +}; diff --git a/yarn-project/noir-contracts/src/contracts/token_blacklist_contract/src/types/token_note.nr b/yarn-project/noir-contracts/src/contracts/token_blacklist_contract/src/types/token_note.nr index 41fd41c60823..a2e68bed8d6e 100644 --- a/yarn-project/noir-contracts/src/contracts/token_blacklist_contract/src/types/token_note.nr +++ b/yarn-project/noir-contracts/src/contracts/token_blacklist_contract/src/types/token_note.nr @@ -19,7 +19,8 @@ use dep::aztec::oracle::{ use dep::safe_math::SafeU120; use dep::std::option::Option; -global TOKEN_NOTE_LEN: Field = 3; // 3 plus a header. +// 3 plus a header. +global TOKEN_NOTE_LEN: Field = 3; struct TokenNote { // the amount of tokens in the note @@ -137,4 +138,4 @@ global TokenNoteMethods = NoteInterface { get_header, set_header, broadcast, -}; \ No newline at end of file +}; diff --git a/yarn-project/noir-contracts/src/contracts/token_blacklist_contract/src/types/transparent_note.nr b/yarn-project/noir-contracts/src/contracts/token_blacklist_contract/src/types/transparent_note.nr index 12772aed42fe..c414d9092793 100644 --- a/yarn-project/noir-contracts/src/contracts/token_blacklist_contract/src/types/transparent_note.nr +++ b/yarn-project/noir-contracts/src/contracts/token_blacklist_contract/src/types/transparent_note.nr @@ -127,4 +127,4 @@ global TransparentNoteMethods = NoteInterface { set_header, broadcast, }; -// docs:end:token_types_all \ No newline at end of file +// docs:end:token_types_all diff --git a/yarn-project/noir-contracts/src/contracts/token_bridge_contract/src/main.nr b/yarn-project/noir-contracts/src/contracts/token_bridge_contract/src/main.nr index decb8cd295c1..ad7f53058d66 100644 --- a/yarn-project/noir-contracts/src/contracts/token_bridge_contract/src/main.nr +++ b/yarn-project/noir-contracts/src/contracts/token_bridge_contract/src/main.nr @@ -5,7 +5,6 @@ mod token_interface; // The bridge has a corresponding Portal contract on L1 that it is attached to // And corresponds to a Token on L2 that uses the `AuthWit` accounts pattern. // Bridge has to be set as a minter on the token before it can be used - contract TokenBridge { use dep::aztec::{ context::{Context}, @@ -17,8 +16,8 @@ contract TokenBridge { types::address::{AztecAddress, EthereumAddress}, selector::compute_selector, }; - // docs:end:token_bridge_imports + // docs:end:token_bridge_imports use dep::token_portal_content_hash_lib::{get_mint_public_content_hash, get_mint_private_content_hash, get_withdraw_content_hash}; use crate::token_interface::Token; @@ -47,9 +46,8 @@ contract TokenBridge { let selector = compute_selector("_initialize((Field))"); context.call_public_function(context.this_address(), selector, [token.address]); } - // docs:end:token_bridge_storage_and_constructor - + // docs:end:token_bridge_storage_and_constructor // docs:start:claim_public // Consumes a L1->L2 message and calls the token contract to mint the appropriate amount publicly #[aztec(public)] @@ -61,6 +59,7 @@ contract TokenBridge { secret: Field, ) -> Field { let content_hash = get_mint_public_content_hash(to.address, amount, canceller.address); + // Consume message and emit nullifier context.consume_l1_to_l2_message(msg_key, content_hash, secret); @@ -69,8 +68,8 @@ contract TokenBridge { 1 } - // docs:end:claim_public + // docs:end:claim_public // docs:start:exit_to_l1_public // Burns the appropriate amount of tokens and creates a L2 to L1 withdraw message publicly // Requires `msg.sender` to give approval to the bridge to burn tokens on their behalf using witness signatures @@ -80,7 +79,8 @@ contract TokenBridge { amount: Field, callerOnL1: EthereumAddress, // ethereum address that can call this function on the L1 portal (0x0 if anyone can call) nonce: Field, // nonce used in the approval message by `msg.sender` to let bridge burn their tokens on L2 - ) -> Field { + ) -> Field +{ // Send an L2 to L1 message let content = get_withdraw_content_hash(recipient.address, amount, callerOnL1.address); context.message_portal(content); @@ -90,6 +90,7 @@ contract TokenBridge { 1 } + // docs:end:exit_to_l1_public // docs:start:claim_private // Consumes a L1->L2 message and calls the token contract to mint the appropriate amount in private assets @@ -101,7 +102,8 @@ contract TokenBridge { canceller: EthereumAddress, msg_key: Field, // L1 to L2 message key as derived from the inbox contract secret_for_L1_to_L2_message_consumption: Field, // secret used to consume the L1 to L2 message - ) -> Field { + ) -> Field +{ // Consume L1 to L2 message and emit nullifier let content_hash = get_mint_private_content_hash(secret_hash_for_redeeming_minted_notes, amount, canceller.address); context.consume_l1_to_l2_message(msg_key, content_hash, secret_for_L1_to_L2_message_consumption); @@ -111,15 +113,13 @@ contract TokenBridge { // which then calls the public method on the token contract. // Since the secret_hash is passed, no secret is leaked. context.call_public_function( - context.this_address(), - compute_selector("_call_mint_on_token(Field,Field)"), - [amount, secret_hash_for_redeeming_minted_notes], + context.this_address(), compute_selector("_call_mint_on_token(Field,Field)"), [amount, secret_hash_for_redeeming_minted_notes] ); 1 } - // docs:end:claim_private + // docs:end:claim_private // docs:start:exit_to_l1_private // Burns the appropriate amount of tokens and creates a L2 to L1 withdraw message privately // Requires `msg.sender` (caller of the method) to give approval to the bridge to burn tokens on their behalf using witness signatures @@ -130,7 +130,8 @@ contract TokenBridge { amount: Field, callerOnL1: EthereumAddress, // ethereum address that can call this function on the L1 portal (0x0 if anyone can call) nonce: Field, // nonce used in the approval message by `msg.sender` to let bridge burn their tokens on L2 - ) -> Field { + ) -> Field +{ // Send an L2 to L1 message let content = get_withdraw_content_hash(recipient.address, amount, callerOnL1.address); context.message_portal(content); @@ -143,8 +144,8 @@ contract TokenBridge { 1 } - /// docs:end:exit_to_l1_private + /// docs:end:exit_to_l1_private // View function that is callable by other contracts. // Unconstrained can't be called by others since it isn't safe. #[aztec(public)] @@ -153,7 +154,6 @@ contract TokenBridge { } // /// Unconstrained /// - unconstrained fn token() -> Field { storage.token.read() } @@ -168,18 +168,18 @@ contract TokenBridge { // Also, note that user hashes their secret in private and only sends the hash in public // meaning only user can `redeem_shield` at a later time with their secret. #[aztec(public)] - internal fn _call_mint_on_token(amount: Field, secret_hash: Field){ + internal fn _call_mint_on_token(amount: Field, secret_hash: Field) { Token::at(storage.token.read()).mint_private(context, amount, secret_hash); } - // docs:end:call_mint_on_token + // docs:end:call_mint_on_token // docs:start:assert_token_is_same #[aztec(public)] internal fn _assert_token_is_same(token: Field) { assert(storage.token.read() == token, "Token address is not the same as seen in storage"); } - // docs:end:assert_token_is_same + // docs:end:assert_token_is_same // TODO: remove this placeholder once https://github.com/AztecProtocol/aztec-packages/issues/2918 is implemented // docs:start:compute_note_hash_and_nullifier_placeholder unconstrained fn compute_note_hash_and_nullifier(contract_address: Field, nonce: Field, storage_slot: Field, serialized_note: [Field; 0]) -> [Field; 4] { diff --git a/yarn-project/noir-contracts/src/contracts/token_bridge_contract/src/token_interface.nr b/yarn-project/noir-contracts/src/contracts/token_bridge_contract/src/token_interface.nr index 6e467647059a..b7fbd35d7cb6 100644 --- a/yarn-project/noir-contracts/src/contracts/token_bridge_contract/src/token_interface.nr +++ b/yarn-project/noir-contracts/src/contracts/token_bridge_contract/src/token_interface.nr @@ -50,4 +50,5 @@ impl Token { } // docs:end:private_burn_interface } + // docs:end:token_bridge_token_interface diff --git a/yarn-project/noir-contracts/src/contracts/token_contract/src/main.nr b/yarn-project/noir-contracts/src/contracts/token_contract/src/main.nr index b6db0a2de8c8..f3cb27e7becd 100644 --- a/yarn-project/noir-contracts/src/contracts/token_contract/src/main.nr +++ b/yarn-project/noir-contracts/src/contracts/token_contract/src/main.nr @@ -8,7 +8,6 @@ mod types; // message hash = H([caller, contract, selector, ...args]) // To be read as `caller` calls function at `contract` defined by `selector` with `args` // Including a nonce in the message hash ensures that the message can only be used once. - contract Token { // Libs use dep::std::option::Option; @@ -40,16 +39,16 @@ contract Token { assert_current_call_valid_authwit_public, }, }; - // docs:end:import_authwit + // docs:end:import_authwit use crate::types::{ transparent_note::{TransparentNote, TransparentNoteMethods, TRANSPARENT_NOTE_LEN}, token_note::{TokenNote, TokenNoteMethods, TOKEN_NOTE_LEN}, balances_map::{BalancesMap}, safe_u120_serialization::{SafeU120SerializationMethods, SAFE_U120_SERIALIZED_LEN} }; - // docs:end::imports + // docs:end::imports // docs:start:storage_struct struct Storage { // docs:start:storage_admin @@ -67,8 +66,8 @@ contract Token { // docs:end:storage_pending_shields public_balances: Map>, } - // docs:end:storage_struct + // docs:end:storage_struct // docs:start:storage_init impl Storage { fn init(context: Context) -> pub Self { @@ -118,28 +117,29 @@ contract Token { } } } - // docs:end:storage_init + // docs:end:storage_init // docs:start:constructor #[aztec(private)] fn constructor(admin: AztecAddress) { let selector = compute_selector("_initialize((Field))"); context.call_public_function(context.this_address(), selector, [admin.address]); } - // docs:end:constructor + // docs:end:constructor // docs:start:set_admin #[aztec(public)] fn set_admin( new_admin: AztecAddress, ) { assert(storage.admin.read().eq(AztecAddress::new(context.msg_sender())), "caller is not admin"); + // docs:start:write_admin storage.admin.write(new_admin); // docs:end:write_admin } - // docs:end:set_admin + // docs:end:set_admin // docs:start:set_minter #[aztec(public)] fn set_minter( @@ -148,13 +148,14 @@ contract Token { ) { // docs:start:read_admin assert(storage.admin.read().eq(AztecAddress::new(context.msg_sender())), "caller is not admin"); + // docs:end:read_admin // docs:start:write_minter storage.minters.at(minter.address).write(approve); // docs:end:write_minter } - // docs:end:set_minter + // docs:end:set_minter // docs:start:mint_public #[aztec(public)] fn mint_public( @@ -163,6 +164,7 @@ contract Token { ) -> Field { // docs:start:read_minter assert(storage.minters.at(context.msg_sender()).read(), "caller is not minter"); + // docs:end:read_minter let amount = SafeU120::new(amount); let new_balance = storage.public_balances.at(to.address).read().add(amount); @@ -172,8 +174,8 @@ contract Token { storage.total_supply.write(supply); 1 } - // docs:end:mint_public + // docs:end:mint_public // docs:start:mint_private #[aztec(public)] fn mint_private( @@ -186,13 +188,15 @@ contract Token { let supply = storage.total_supply.read().add(SafeU120::new(amount)); storage.total_supply.write(supply); + // docs:start:insert_from_public pending_shields.insert_from_public(&mut note); + // docs:end:insert_from_public 1 } - // docs:end:mint_private + // docs:end:mint_private // docs:start:shield #[aztec(public)] fn shield( @@ -218,8 +222,8 @@ contract Token { pending_shields.insert_from_public(&mut note); 1 } - // docs:end:shield + // docs:end:shield // docs:start:transfer_public #[aztec(public)] fn transfer_public( @@ -243,8 +247,8 @@ contract Token { 1 } - // docs:end:transfer_public + // docs:end:transfer_public // docs:start:burn_public #[aztec(public)] fn burn_public( @@ -258,8 +262,8 @@ contract Token { } else { assert(nonce == 0, "invalid nonce"); } - // docs:end:assert_current_call_valid_authwit_public + // docs:end:assert_current_call_valid_authwit_public let amount = SafeU120::new(amount); let from_balance = storage.public_balances.at(from.address).read().sub(amount); storage.public_balances.at(from.address).write(from_balance); @@ -269,8 +273,8 @@ contract Token { 1 } - // docs:end:burn_public + // docs:end:burn_public // docs:start:redeem_shield #[aztec(private)] fn redeem_shield( @@ -280,12 +284,14 @@ contract Token { ) -> Field { let pending_shields = storage.pending_shields; let secret_hash = compute_secret_hash(secret); + // Get 1 note (set_limit(1)) which has amount stored in field with index 0 (select(0, amount)) and secret_hash // stored in field with index 1 (select(1, secret_hash)). let options = NoteGetterOptions::new().select(0, amount).select(1, secret_hash).set_limit(1); let notes = pending_shields.get_notes(options); let note = notes[0].unwrap_unchecked(); - // Remove the note from the pending shields set + + // Remove the note from the pending shields set pending_shields.remove(note); // Add the token note to user's balances set @@ -293,8 +299,8 @@ contract Token { 1 } - // docs:end:redeem_shield + // docs:end:redeem_shield // docs:start:unshield #[aztec(private)] fn unshield( @@ -316,8 +322,8 @@ contract Token { 1 } - // docs:end:unshield + // docs:end:unshield // docs:start:transfer #[aztec(private)] fn transfer( @@ -332,18 +338,19 @@ contract Token { } else { assert(nonce == 0, "invalid nonce"); } - // docs:end:assert_current_call_valid_authwit + // docs:end:assert_current_call_valid_authwit let amount = SafeU120::new(amount); storage.balances.at(from).sub(amount); + // docs:start:increase_private_balance storage.balances.at(to).add(amount); - // docs:end:increase_private_balance + // docs:end:increase_private_balance 1 } - // docs:end:transfer + // docs:end:transfer // docs:start:burn #[aztec(private)] fn burn( @@ -364,8 +371,8 @@ contract Token { 1 } - // docs:end:burn + // docs:end:burn // docs:start:initialize #[aztec(public)] internal fn _initialize( @@ -375,10 +382,9 @@ contract Token { storage.admin.write(new_admin); storage.minters.at(new_admin.address).write(true); } - // docs:end:initialize + // docs:end:initialize /// Internal /// - // docs:start:increase_public_balance #[aztec(public)] internal fn _increase_public_balance( @@ -388,8 +394,8 @@ contract Token { let new_balance = storage.public_balances.at(to.address).read().add(SafeU120::new(amount)); storage.public_balances.at(to.address).write(new_balance); } - // docs:end:increase_public_balance + // docs:end:increase_public_balance // docs:start:reduce_total_supply #[aztec(public)] internal fn _reduce_total_supply( @@ -399,49 +405,47 @@ contract Token { let new_supply = storage.total_supply.read().sub(SafeU120::new(amount)); storage.total_supply.write(new_supply); } - // docs:end:reduce_total_supply + // docs:end:reduce_total_supply /// Unconstrained /// - // docs:start:admin unconstrained fn admin() -> Field { storage.admin.read().address } - // docs:end:admin + // docs:end:admin // docs:start:is_minter unconstrained fn is_minter( minter: AztecAddress, ) -> bool { storage.minters.at(minter.address).read() } - // docs:end:is_minter + // docs:end:is_minter // docs:start:total_supply unconstrained fn total_supply() -> u120 { storage.total_supply.read().value } - // docs:end:total_supply + // docs:end:total_supply // docs:start:balance_of_private unconstrained fn balance_of_private( owner: AztecAddress, ) -> u120 { storage.balances.at(owner).balance_of().value } - // docs:end:balance_of_private + // docs:end:balance_of_private // docs:start:balance_of_public unconstrained fn balance_of_public( owner: AztecAddress, ) -> u120 { storage.public_balances.at(owner.address).read().value } - // docs:end:balance_of_public + // docs:end:balance_of_public // Below this point is the stuff of nightmares. // This should ideally not be required. What do we do if vastly different types of serialized_notes? - // docs:start:compute_note_hash_and_nullifier // Computes note hash and nullifier. // Note 1: Needs to be defined by every contract producing logs. @@ -456,4 +460,5 @@ contract Token { } // docs:end:compute_note_hash_and_nullifier } + // docs:end:token_all diff --git a/yarn-project/noir-contracts/src/contracts/token_contract/src/types.nr b/yarn-project/noir-contracts/src/contracts/token_contract/src/types.nr index 1f4883a54c6a..e29a8151e9f3 100644 --- a/yarn-project/noir-contracts/src/contracts/token_contract/src/types.nr +++ b/yarn-project/noir-contracts/src/contracts/token_contract/src/types.nr @@ -2,4 +2,4 @@ mod transparent_note; mod balance_set; mod balances_map; mod token_note; -mod safe_u120_serialization; \ No newline at end of file +mod safe_u120_serialization; diff --git a/yarn-project/noir-contracts/src/contracts/token_contract/src/types/balance_set.nr b/yarn-project/noir-contracts/src/contracts/token_contract/src/types/balance_set.nr index 37dbcd4ddbe6..5c3da5897b6a 100644 --- a/yarn-project/noir-contracts/src/contracts/token_contract/src/types/balance_set.nr +++ b/yarn-project/noir-contracts/src/contracts/token_contract/src/types/balance_set.nr @@ -123,4 +123,4 @@ pub fn filter_notes_min_sum(notes: [Option; MAX_READ_REQUESTS_PER_CAL } } selected -} \ No newline at end of file +} diff --git a/yarn-project/noir-contracts/src/contracts/token_contract/src/types/safe_u120_serialization.nr b/yarn-project/noir-contracts/src/contracts/token_contract/src/types/safe_u120_serialization.nr index f4f3ef84d23e..876007184fe1 100644 --- a/yarn-project/noir-contracts/src/contracts/token_contract/src/types/safe_u120_serialization.nr +++ b/yarn-project/noir-contracts/src/contracts/token_contract/src/types/safe_u120_serialization.nr @@ -5,7 +5,7 @@ global SAFE_U120_SERIALIZED_LEN: Field = 1; // This is safe when reading from storage IF only correct safeu120 was written to storage fn deserializeU120(fields: [Field; SAFE_U120_SERIALIZED_LEN]) -> SafeU120 { - SafeU120{value: fields[0] as u120} + SafeU120 { value: fields[0] as u120 } } fn serializeU120(value: SafeU120) -> [Field; SAFE_U120_SERIALIZED_LEN] { @@ -15,4 +15,4 @@ fn serializeU120(value: SafeU120) -> [Field; SAFE_U120_SERIALIZED_LEN] { global SafeU120SerializationMethods = TypeSerializationInterface { deserialize: deserializeU120, serialize: serializeU120, -}; \ No newline at end of file +}; diff --git a/yarn-project/noir-contracts/src/contracts/token_contract/src/types/token_note.nr b/yarn-project/noir-contracts/src/contracts/token_contract/src/types/token_note.nr index 442b600f1ce8..300089ee7390 100644 --- a/yarn-project/noir-contracts/src/contracts/token_contract/src/types/token_note.nr +++ b/yarn-project/noir-contracts/src/contracts/token_contract/src/types/token_note.nr @@ -19,7 +19,8 @@ use dep::aztec::oracle::{ use dep::safe_math::SafeU120; use dep::std::option::Option; -global TOKEN_NOTE_LEN: Field = 3; // 3 plus a header. +// 3 plus a header. +global TOKEN_NOTE_LEN: Field = 3; struct TokenNote { // the amount of tokens in the note @@ -137,4 +138,4 @@ global TokenNoteMethods = NoteInterface { get_header, set_header, broadcast, -}; \ No newline at end of file +}; diff --git a/yarn-project/noir-contracts/src/contracts/token_contract/src/types/transparent_note.nr b/yarn-project/noir-contracts/src/contracts/token_contract/src/types/transparent_note.nr index 034b4b3390f7..25682c1e0270 100644 --- a/yarn-project/noir-contracts/src/contracts/token_contract/src/types/transparent_note.nr +++ b/yarn-project/noir-contracts/src/contracts/token_contract/src/types/transparent_note.nr @@ -127,4 +127,4 @@ global TransparentNoteMethods = NoteInterface { set_header, broadcast, }; -// docs:end:token_types_all \ No newline at end of file +// docs:end:token_types_all diff --git a/yarn-project/noir-contracts/src/contracts/uniswap_contract/src/interfaces.nr b/yarn-project/noir-contracts/src/contracts/uniswap_contract/src/interfaces.nr index aabf2735702c..f5a19fd8cefa 100644 --- a/yarn-project/noir-contracts/src/contracts/uniswap_contract/src/interfaces.nr +++ b/yarn-project/noir-contracts/src/contracts/uniswap_contract/src/interfaces.nr @@ -53,4 +53,5 @@ impl TokenBridge { ); } } + // docs:end:interfaces diff --git a/yarn-project/noir-contracts/src/contracts/uniswap_contract/src/main.nr b/yarn-project/noir-contracts/src/contracts/uniswap_contract/src/main.nr index 75ce7e78ea65..2ede7d6fded8 100644 --- a/yarn-project/noir-contracts/src/contracts/uniswap_contract/src/main.nr +++ b/yarn-project/noir-contracts/src/contracts/uniswap_contract/src/main.nr @@ -4,7 +4,7 @@ mod util; // Demonstrates how to use portal contracts to swap on L1 Uniswap with funds on L2 // Has two separate flows for private and public respectively -// Uses the token bridge contract, which tells which input token we need to talk to and handles the exit funds to L1 +// Uses the token bridge contract, which tells which input token we need to talk to and handles the exit funds to L1 contract Uniswap { use dep::aztec::{ context::{PrivateContext, PublicContext, Context}, @@ -21,7 +21,7 @@ contract Uniswap { }; use dep::authwit::auth::{IS_VALID_SELECTOR, assert_current_call_valid_authwit_public, compute_authwit_message_hash}; - + use crate::interfaces::{Token, TokenBridge}; use crate::util::{compute_swap_private_content_hash, compute_swap_public_content_hash}; @@ -47,12 +47,12 @@ contract Uniswap { } } } - + #[aztec(private)] fn constructor() {} -// docs:end:uniswap_setup -// docs:start:swap_public + // docs:end:uniswap_setup + // docs:start:swap_public #[aztec(public)] fn swap_public( sender: AztecAddress, @@ -72,8 +72,8 @@ contract Uniswap { caller_on_L1: EthereumAddress, // nonce for someone to call swap on sender's behalf nonce_for_swap_approval: Field, - ) -> Field { - + ) -> Field +{ if (sender.address != context.msg_sender()) { assert_current_call_valid_authwit_public(&mut context, sender); } @@ -81,48 +81,32 @@ contract Uniswap { let input_asset = TokenBridge::at(input_asset_bridge.address).token(context); // Transfer funds to this contract - Token::at(input_asset.address).transfer_public( - context, - sender.address, - context.this_address(), - input_amount, - nonce_for_transfer_approval, - ); + Token::at(input_asset.address).transfer_public(context, sender.address, context.this_address(), input_amount, nonce_for_transfer_approval); // Approve bridge to burn this contract's funds and exit to L1 Uniswap Portal let _void = context.call_public_function( - context.this_address(), - compute_selector("_approve_bridge_and_exit_input_asset_to_L1((Field),(Field),Field)"), - [input_asset.address, input_asset_bridge.address, input_amount], + context.this_address(), compute_selector("_approve_bridge_and_exit_input_asset_to_L1((Field),(Field),Field)"), [input_asset.address, input_asset_bridge.address, input_amount] ); // Create swap message and send to Outbox for Uniswap Portal // this ensures the integrity of what the user originally intends to do on L1. let input_asset_bridge_portal_address = get_portal_address(input_asset_bridge.address); let output_asset_bridge_portal_address = get_portal_address(output_asset_bridge.address); + // ensure portal exists - else funds might be lost assert(input_asset_bridge_portal_address != 0, "L1 portal address of input_asset's bridge is 0"); assert(output_asset_bridge_portal_address != 0, "L1 portal address of output_asset's bridge is 0"); let content_hash = compute_swap_public_content_hash( - input_asset_bridge_portal_address, - input_amount, - uniswap_fee_tier, - output_asset_bridge_portal_address, - minimum_output_amount, - recipient.address, - secret_hash_for_L1_to_l2_message, - deadline_for_L1_to_l2_message, - canceller_for_L1_to_L2_message.address, - caller_on_L1.address, + input_asset_bridge_portal_address, input_amount, uniswap_fee_tier, output_asset_bridge_portal_address, minimum_output_amount, recipient.address, secret_hash_for_L1_to_l2_message, deadline_for_L1_to_l2_message, canceller_for_L1_to_L2_message.address, caller_on_L1.address ); context.message_portal(content_hash); 1 } -// docs:end:swap_public -// docs:start:swap_private + // docs:end:swap_public + // docs:start:swap_private #[aztec(private)] fn swap_private( input_asset: AztecAddress, // since private, we pass here and later assert that this is as expected by input_bridge @@ -140,54 +124,42 @@ contract Uniswap { deadline_for_L1_to_l2_message: Field, // for when l1 uniswap portal inserts the message to consume output assets on L2 canceller_for_L1_to_L2_message: EthereumAddress, // L1 address of who can cancel the message to consume assets on L2. caller_on_L1: EthereumAddress, // ethereum address that can call this function on the L1 portal (0x0 if anyone can call) - ) -> Field { - + ) -> Field +{ // Assert that user provided token address is same as expected by token bridge. // we can't directly use `input_asset_bridge.token` because that is a public method and public can't return data to private - context.call_public_function(context.this_address(), compute_selector("_assert_token_is_same((Field),(Field))"), [input_asset.address, input_asset_bridge.address]); + context.call_public_function( + context.this_address(), compute_selector("_assert_token_is_same((Field),(Field))"), [input_asset.address, input_asset_bridge.address] + ); // Transfer funds to this contract Token::at(input_asset.address).unshield( - &mut context, - context.msg_sender(), - context.this_address(), - input_amount, - nonce_for_unshield_approval, + &mut context, context.msg_sender(), context.this_address(), input_amount, nonce_for_unshield_approval ); // Approve bridge to burn this contract's funds and exit to L1 Uniswap Portal context.call_public_function( - context.this_address(), - compute_selector("_approve_bridge_and_exit_input_asset_to_L1((Field),(Field),Field)"), - [input_asset.address, input_asset_bridge.address, input_amount], + context.this_address(), compute_selector("_approve_bridge_and_exit_input_asset_to_L1((Field),(Field),Field)"), [input_asset.address, input_asset_bridge.address, input_amount] ); // Create swap message and send to Outbox for Uniswap Portal // this ensures the integrity of what the user originally intends to do on L1. let input_asset_bridge_portal_address = get_portal_address(input_asset_bridge.address); let output_asset_bridge_portal_address = get_portal_address(output_asset_bridge.address); + // ensure portal exists - else funds might be lost assert(input_asset_bridge_portal_address != 0, "L1 portal address of input_asset's bridge is 0"); assert(output_asset_bridge_portal_address != 0, "L1 portal address of output_asset's bridge is 0"); let content_hash = compute_swap_private_content_hash( - input_asset_bridge_portal_address, - input_amount, - uniswap_fee_tier, - output_asset_bridge_portal_address, - minimum_output_amount, - secret_hash_for_redeeming_minted_notes, - secret_hash_for_L1_to_l2_message, - deadline_for_L1_to_l2_message, - canceller_for_L1_to_L2_message.address, - caller_on_L1.address, + input_asset_bridge_portal_address, input_amount, uniswap_fee_tier, output_asset_bridge_portal_address, minimum_output_amount, secret_hash_for_redeeming_minted_notes, secret_hash_for_L1_to_l2_message, deadline_for_L1_to_l2_message, canceller_for_L1_to_L2_message.address, caller_on_L1.address ); context.message_portal(content_hash); 1 } - // docs:end:swap_private + // docs:end:swap_private // docs:start:authwit_uniswap_get // Since the token bridge burns funds on behalf of this contract, this contract has to tell the token contract if the signature is valid // implementation is similar to how account contracts validate public approvals. @@ -195,14 +167,10 @@ contract Uniswap { #[aztec(public)] fn is_valid_public(message_hash: Field) -> Field { let value = storage.approved_action.at(message_hash).read(); - if (value){ - IS_VALID_SELECTOR - } else { - 0 - } + if (value) { IS_VALID_SELECTOR } else { 0 } } - // docs:end:authwit_uniswap_get + // docs:end:authwit_uniswap_get // docs:start:authwit_uniswap_set // This helper method approves the bridge to burn this contract's funds and exits the input asset to L1 // Assumes contract already has funds. @@ -226,24 +194,19 @@ contract Uniswap { // Exit to L1 Uniswap Portal ! TokenBridge::at(token_bridge.address).exit_to_l1_public( - context, - context.this_portal_address(), - amount, - context.this_portal_address(), - nonce_for_burn_approval, + context, context.this_portal_address(), amount, context.this_portal_address(), nonce_for_burn_approval ); } - // docs:end:authwit_uniswap_set + // docs:end:authwit_uniswap_set // docs:start:assert_token_is_same #[aztec(public)] internal fn _assert_token_is_same(token: AztecAddress, token_bridge: AztecAddress) { assert(token.eq(TokenBridge::at(token_bridge.address).token(context)), "input_asset address is not the same as seen in the bridge contract"); } - // docs:end:assert_token_is_same + // docs:end:assert_token_is_same // /// Unconstrained /// - // this method exists solely for e2e tests to test that nonce gets incremented each time. unconstrained fn nonce_for_burn_approval() -> Field { storage.nonce_for_burn_approval.read() @@ -253,4 +216,4 @@ contract Uniswap { unconstrained fn compute_note_hash_and_nullifier(contract_address: Field, nonce: Field, storage_slot: Field, serialized_note: [Field; 0]) -> [Field; 4] { [0, 0, 0, 0] } -} \ No newline at end of file +} diff --git a/yarn-project/noir-contracts/src/contracts/uniswap_contract/src/util.nr b/yarn-project/noir-contracts/src/contracts/uniswap_contract/src/util.nr index cc39741944b3..728155e363b8 100644 --- a/yarn-project/noir-contracts/src/contracts/uniswap_contract/src/util.nr +++ b/yarn-project/noir-contracts/src/contracts/uniswap_contract/src/util.nr @@ -15,7 +15,8 @@ pub fn compute_swap_public_content_hash( canceller_for_L1_to_L2_message: Field, caller_on_L1: Field, ) -> Field { - let mut hash_bytes: [u8; 324] = [0; 324]; // 10 fields of 32 bytes each + 4 bytes fn selector + // 10 fields of 32 bytes each + 4 bytes fn selector + let mut hash_bytes: [u8; 324] = [0; 324]; let input_token_portal_bytes = input_asset_bridge_portal_address.to_be_bytes(32); let in_amount_bytes = input_amount.to_be_bytes(32); @@ -50,8 +51,8 @@ pub fn compute_swap_public_content_hash( let content_hash = sha256_to_field(hash_bytes); content_hash } -// docs:end:uniswap_public_content_hash +// docs:end:uniswap_public_content_hash // docs:start:compute_swap_private_content_hash // This method computes the L2 to L1 message content hash for the private // refer `l1-contracts/test/portals/UniswapPortal.sol` on how L2 to L1 message is expected @@ -67,7 +68,8 @@ pub fn compute_swap_private_content_hash( canceller_for_L1_to_L2_message: Field, caller_on_L1: Field, ) -> Field { - let mut hash_bytes: [u8; 324] = [0; 324]; // 10 fields of 32 bytes each + 4 bytes fn selector + // 10 fields of 32 bytes each + 4 bytes fn selector + let mut hash_bytes: [u8; 324] = [0; 324]; let input_token_portal_bytes = input_asset_bridge_portal_address.to_be_bytes(32); let in_amount_bytes = input_amount.to_be_bytes(32); @@ -101,4 +103,4 @@ pub fn compute_swap_private_content_hash( let content_hash = sha256_to_field(hash_bytes); content_hash } -// docs:end:compute_swap_private_content_hash \ No newline at end of file +// docs:end:compute_swap_private_content_hash From 0269cfdd3ea54cca3c6ac3d191f478450cf38bdf Mon Sep 17 00:00:00 2001 From: LHerskind Date: Tue, 21 Nov 2023 14:01:56 +0000 Subject: [PATCH 3/8] chore: format --- .../src/contracts/card_game_contract/src/cards.nr | 2 +- .../src/contracts/docs_example_contract/src/types/queen.nr | 1 + .../src/contracts/lending_contract/src/interest_math.nr | 2 ++ .../noir-contracts/src/contracts/slow_tree_contract/src/main.nr | 2 ++ .../token_blacklist_contract/src/types/transparent_note.nr | 1 + .../src/contracts/token_contract/src/types/transparent_note.nr | 1 + .../noir-contracts/src/contracts/uniswap_contract/src/util.nr | 1 + 7 files changed, 9 insertions(+), 1 deletion(-) diff --git a/yarn-project/noir-contracts/src/contracts/card_game_contract/src/cards.nr b/yarn-project/noir-contracts/src/contracts/card_game_contract/src/cards.nr index 8ed77ee26e4c..e15aca12c587 100644 --- a/yarn-project/noir-contracts/src/contracts/card_game_contract/src/cards.nr +++ b/yarn-project/noir-contracts/src/contracts/card_game_contract/src/cards.nr @@ -185,7 +185,7 @@ impl Deck { } // Limited by number of write requests (max 4) -global PACK_CARDS = 3; +global PACK_CARDS = 3; pub fn get_pack_cards( seed: Field, diff --git a/yarn-project/noir-contracts/src/contracts/docs_example_contract/src/types/queen.nr b/yarn-project/noir-contracts/src/contracts/docs_example_contract/src/types/queen.nr index 76065e8de244..3475a4444e24 100644 --- a/yarn-project/noir-contracts/src/contracts/docs_example_contract/src/types/queen.nr +++ b/yarn-project/noir-contracts/src/contracts/docs_example_contract/src/types/queen.nr @@ -22,4 +22,5 @@ global QueenSerializationMethods = TypeSerializationInterface { deserialize, serialize, }; + // docs:end:state_vars-PublicStateCustomStruct diff --git a/yarn-project/noir-contracts/src/contracts/lending_contract/src/interest_math.nr b/yarn-project/noir-contracts/src/contracts/lending_contract/src/interest_math.nr index 61d5424a40c5..3da19c7c63fa 100644 --- a/yarn-project/noir-contracts/src/contracts/lending_contract/src/interest_math.nr +++ b/yarn-project/noir-contracts/src/contracts/lending_contract/src/interest_math.nr @@ -12,8 +12,10 @@ pub fn compute_multiplier( dt: SafeU120, ) -> SafeU120 { let base = SafeU120 { value: 1000000000 }; + // 1e9 let WAD = SafeU120 { value: 1000000000000000000 }; + // 1e18 let diff = WAD.div(base); let mut res = base; diff --git a/yarn-project/noir-contracts/src/contracts/slow_tree_contract/src/main.nr b/yarn-project/noir-contracts/src/contracts/slow_tree_contract/src/main.nr index 118b77e5670d..2d3fb36a57a6 100644 --- a/yarn-project/noir-contracts/src/contracts/slow_tree_contract/src/main.nr +++ b/yarn-project/noir-contracts/src/contracts/slow_tree_contract/src/main.nr @@ -32,8 +32,10 @@ contract SlowTree { use crate::types::{MembershipProof, deserialize_membership_proof}; global TREE_HEIGHT: Field = 254; + // TREE_HEIGHT + 2 global MEMBERSHIP_SIZE: Field = 256; + // TREE_HEIGHT * 2 + 4 global UPDATE_SIZE: Field = 512; diff --git a/yarn-project/noir-contracts/src/contracts/token_blacklist_contract/src/types/transparent_note.nr b/yarn-project/noir-contracts/src/contracts/token_blacklist_contract/src/types/transparent_note.nr index c414d9092793..f01e73b6562d 100644 --- a/yarn-project/noir-contracts/src/contracts/token_blacklist_contract/src/types/transparent_note.nr +++ b/yarn-project/noir-contracts/src/contracts/token_blacklist_contract/src/types/transparent_note.nr @@ -127,4 +127,5 @@ global TransparentNoteMethods = NoteInterface { set_header, broadcast, }; + // docs:end:token_types_all diff --git a/yarn-project/noir-contracts/src/contracts/token_contract/src/types/transparent_note.nr b/yarn-project/noir-contracts/src/contracts/token_contract/src/types/transparent_note.nr index 25682c1e0270..2b995ad2f9c8 100644 --- a/yarn-project/noir-contracts/src/contracts/token_contract/src/types/transparent_note.nr +++ b/yarn-project/noir-contracts/src/contracts/token_contract/src/types/transparent_note.nr @@ -127,4 +127,5 @@ global TransparentNoteMethods = NoteInterface { set_header, broadcast, }; + // docs:end:token_types_all diff --git a/yarn-project/noir-contracts/src/contracts/uniswap_contract/src/util.nr b/yarn-project/noir-contracts/src/contracts/uniswap_contract/src/util.nr index 728155e363b8..f71d78374b68 100644 --- a/yarn-project/noir-contracts/src/contracts/uniswap_contract/src/util.nr +++ b/yarn-project/noir-contracts/src/contracts/uniswap_contract/src/util.nr @@ -103,4 +103,5 @@ pub fn compute_swap_private_content_hash( let content_hash = sha256_to_field(hash_bytes); content_hash } + // docs:end:compute_swap_private_content_hash From 91f3d6cf35a700d2aa2422775b6c8f775426b7e9 Mon Sep 17 00:00:00 2001 From: LHerskind Date: Tue, 21 Nov 2023 14:02:16 +0000 Subject: [PATCH 4/8] chore: remove from formatting:fix until fixed --- yarn-project/noir-contracts/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/yarn-project/noir-contracts/package.json b/yarn-project/noir-contracts/package.json index 164939f24106..f4135a3dd646 100644 --- a/yarn-project/noir-contracts/package.json +++ b/yarn-project/noir-contracts/package.json @@ -11,7 +11,7 @@ "build:dev": "tsc -b --watch", "clean": "rm -rf ./dest .tsbuildinfo", "formatting": "run -T prettier --check ./src && run -T eslint ./src", - "formatting:fix": "run -T eslint --fix ./src && run -T prettier -w ./src && nargo fmt", + "formatting:fix": "run -T eslint --fix ./src && run -T prettier -w ./src", "test": "NODE_NO_WARNINGS=1 node --experimental-vm-modules $(yarn bin jest) --passWithNoTests", "noir:clean": "rm -rf ./src/artifacts ./src/types && mkdir -p ../aztec.js/src/artifacts/ && find ../aztec.js/src/artifacts/ -mindepth 1 -delete && rm -rf target/", "noir:build": "./src/scripts/compile.sh", From 3467d8e9e0ca7a960ab3d02d7a7e70877a146983 Mon Sep 17 00:00:00 2001 From: benesjan Date: Wed, 22 Nov 2023 07:44:24 +0000 Subject: [PATCH 5/8] Revert "chore: format" This reverts commit 0269cfdd3ea54cca3c6ac3d191f478450cf38bdf. --- .../src/contracts/card_game_contract/src/cards.nr | 2 +- .../src/contracts/docs_example_contract/src/types/queen.nr | 1 - .../src/contracts/lending_contract/src/interest_math.nr | 2 -- .../noir-contracts/src/contracts/slow_tree_contract/src/main.nr | 2 -- .../token_blacklist_contract/src/types/transparent_note.nr | 1 - .../src/contracts/token_contract/src/types/transparent_note.nr | 1 - .../noir-contracts/src/contracts/uniswap_contract/src/util.nr | 1 - 7 files changed, 1 insertion(+), 9 deletions(-) diff --git a/yarn-project/noir-contracts/src/contracts/card_game_contract/src/cards.nr b/yarn-project/noir-contracts/src/contracts/card_game_contract/src/cards.nr index e15aca12c587..8ed77ee26e4c 100644 --- a/yarn-project/noir-contracts/src/contracts/card_game_contract/src/cards.nr +++ b/yarn-project/noir-contracts/src/contracts/card_game_contract/src/cards.nr @@ -185,7 +185,7 @@ impl Deck { } // Limited by number of write requests (max 4) -global PACK_CARDS = 3; +global PACK_CARDS = 3; pub fn get_pack_cards( seed: Field, diff --git a/yarn-project/noir-contracts/src/contracts/docs_example_contract/src/types/queen.nr b/yarn-project/noir-contracts/src/contracts/docs_example_contract/src/types/queen.nr index 3475a4444e24..76065e8de244 100644 --- a/yarn-project/noir-contracts/src/contracts/docs_example_contract/src/types/queen.nr +++ b/yarn-project/noir-contracts/src/contracts/docs_example_contract/src/types/queen.nr @@ -22,5 +22,4 @@ global QueenSerializationMethods = TypeSerializationInterface { deserialize, serialize, }; - // docs:end:state_vars-PublicStateCustomStruct diff --git a/yarn-project/noir-contracts/src/contracts/lending_contract/src/interest_math.nr b/yarn-project/noir-contracts/src/contracts/lending_contract/src/interest_math.nr index 3da19c7c63fa..61d5424a40c5 100644 --- a/yarn-project/noir-contracts/src/contracts/lending_contract/src/interest_math.nr +++ b/yarn-project/noir-contracts/src/contracts/lending_contract/src/interest_math.nr @@ -12,10 +12,8 @@ pub fn compute_multiplier( dt: SafeU120, ) -> SafeU120 { let base = SafeU120 { value: 1000000000 }; - // 1e9 let WAD = SafeU120 { value: 1000000000000000000 }; - // 1e18 let diff = WAD.div(base); let mut res = base; diff --git a/yarn-project/noir-contracts/src/contracts/slow_tree_contract/src/main.nr b/yarn-project/noir-contracts/src/contracts/slow_tree_contract/src/main.nr index 2d3fb36a57a6..118b77e5670d 100644 --- a/yarn-project/noir-contracts/src/contracts/slow_tree_contract/src/main.nr +++ b/yarn-project/noir-contracts/src/contracts/slow_tree_contract/src/main.nr @@ -32,10 +32,8 @@ contract SlowTree { use crate::types::{MembershipProof, deserialize_membership_proof}; global TREE_HEIGHT: Field = 254; - // TREE_HEIGHT + 2 global MEMBERSHIP_SIZE: Field = 256; - // TREE_HEIGHT * 2 + 4 global UPDATE_SIZE: Field = 512; diff --git a/yarn-project/noir-contracts/src/contracts/token_blacklist_contract/src/types/transparent_note.nr b/yarn-project/noir-contracts/src/contracts/token_blacklist_contract/src/types/transparent_note.nr index f01e73b6562d..c414d9092793 100644 --- a/yarn-project/noir-contracts/src/contracts/token_blacklist_contract/src/types/transparent_note.nr +++ b/yarn-project/noir-contracts/src/contracts/token_blacklist_contract/src/types/transparent_note.nr @@ -127,5 +127,4 @@ global TransparentNoteMethods = NoteInterface { set_header, broadcast, }; - // docs:end:token_types_all diff --git a/yarn-project/noir-contracts/src/contracts/token_contract/src/types/transparent_note.nr b/yarn-project/noir-contracts/src/contracts/token_contract/src/types/transparent_note.nr index 2b995ad2f9c8..25682c1e0270 100644 --- a/yarn-project/noir-contracts/src/contracts/token_contract/src/types/transparent_note.nr +++ b/yarn-project/noir-contracts/src/contracts/token_contract/src/types/transparent_note.nr @@ -127,5 +127,4 @@ global TransparentNoteMethods = NoteInterface { set_header, broadcast, }; - // docs:end:token_types_all diff --git a/yarn-project/noir-contracts/src/contracts/uniswap_contract/src/util.nr b/yarn-project/noir-contracts/src/contracts/uniswap_contract/src/util.nr index f71d78374b68..728155e363b8 100644 --- a/yarn-project/noir-contracts/src/contracts/uniswap_contract/src/util.nr +++ b/yarn-project/noir-contracts/src/contracts/uniswap_contract/src/util.nr @@ -103,5 +103,4 @@ pub fn compute_swap_private_content_hash( let content_hash = sha256_to_field(hash_bytes); content_hash } - // docs:end:compute_swap_private_content_hash From 5fa96e72ac5f56e80ab43265e1a78820d1620f97 Mon Sep 17 00:00:00 2001 From: benesjan Date: Wed, 22 Nov 2023 07:44:40 +0000 Subject: [PATCH 6/8] Revert "chore: run formatting:fix" This reverts commit 21da46170725a28bfa0b9f63566849bcd7ba8226. --- .../benchmarking_contract/src/main.nr | 5 +- .../contracts/card_game_contract/src/cards.nr | 13 ++- .../contracts/card_game_contract/src/game.nr | 34 ++++--- .../contracts/card_game_contract/src/main.nr | 52 ++++++---- .../src/contracts/child_contract/src/main.nr | 11 ++- .../contracts/counter_contract/src/main.nr | 42 ++++---- .../docs_example_contract/src/actions.nr | 35 +++---- .../docs_example_contract/src/main.nr | 70 +++++++++----- .../docs_example_contract/src/options.nr | 28 ++++-- .../docs_example_contract/src/types.nr | 2 +- .../src/types/card_note.nr | 2 +- .../docs_example_contract/src/types/queen.nr | 9 +- .../easy_private_token_contract/src/main.nr | 9 +- .../src/ecdsa_public_key_note.nr | 21 ++-- .../ecdsa_account_contract/src/main.nr | 6 +- .../src/contracts/escrow_contract/src/main.nr | 10 +- .../import_test_contract/src/main.nr | 25 +++-- .../contracts/lending_contract/src/asset.nr | 8 +- .../contracts/lending_contract/src/helpers.nr | 38 ++++---- .../lending_contract/src/interest_math.nr | 16 ++-- .../lending_contract/src/interfaces.nr | 2 +- .../contracts/lending_contract/src/main.nr | 51 ++++++---- .../src/contracts/parent_contract/src/main.nr | 3 +- .../pending_commitments_contract/src/main.nr | 23 +++-- .../price_feed_contract/src/asset.nr | 4 +- .../contracts/price_feed_contract/src/main.nr | 8 +- .../schnorr_account_contract/src/main.nr | 8 +- .../src/public_key_note.nr | 9 +- .../src/main.nr | 7 +- .../src/auth_oracle.nr | 2 +- .../src/main.nr | 2 +- .../src/util.nr | 2 +- .../slow_tree_contract/src/capsule.nr | 2 +- .../contracts/slow_tree_contract/src/main.nr | 31 ++++-- .../contracts/slow_tree_contract/src/types.nr | 16 ++-- .../stateful_test_contract/src/main.nr | 9 +- .../contracts/test_contract/src/interface.nr | 8 +- .../src/contracts/test_contract/src/main.nr | 24 +++-- .../src/interfaces.nr | 2 +- .../token_blacklist_contract/src/main.nr | 29 ++++-- .../token_blacklist_contract/src/types.nr | 2 +- .../src/types/balance_set.nr | 2 +- .../src/types/roles.nr | 2 +- .../src/types/safe_u120_serialization.nr | 4 +- .../src/types/token_note.nr | 5 +- .../src/types/transparent_note.nr | 2 +- .../token_bridge_contract/src/main.nr | 34 +++---- .../src/token_interface.nr | 1 - .../src/contracts/token_contract/src/main.nr | 69 +++++++------- .../src/contracts/token_contract/src/types.nr | 2 +- .../token_contract/src/types/balance_set.nr | 2 +- .../src/types/safe_u120_serialization.nr | 4 +- .../token_contract/src/types/token_note.nr | 5 +- .../src/types/transparent_note.nr | 2 +- .../uniswap_contract/src/interfaces.nr | 1 - .../contracts/uniswap_contract/src/main.nr | 95 +++++++++++++------ .../contracts/uniswap_contract/src/util.nr | 10 +- 57 files changed, 545 insertions(+), 375 deletions(-) diff --git a/yarn-project/noir-contracts/src/contracts/benchmarking_contract/src/main.nr b/yarn-project/noir-contracts/src/contracts/benchmarking_contract/src/main.nr index b28718fe8df4..12ee0cccdcc5 100644 --- a/yarn-project/noir-contracts/src/contracts/benchmarking_contract/src/main.nr +++ b/yarn-project/noir-contracts/src/contracts/benchmarking_contract/src/main.nr @@ -3,6 +3,7 @@ // would alter the metrics we're capturing in the benchmarks, and we want to keep the // subject being tested as unmodified as possible so we can detect metric changes that // arise from code changes. + contract Benchmarking { use dep::value_note::{ utils::{increment, decrement}, @@ -49,7 +50,7 @@ contract Benchmarking { // by @rahul-kothari for a full explanation on why this is needed. #[aztec(private)] fn recreate_note(owner: Field, index: u32) { - let owner_notes = storage.notes.at(owner); + let owner_notes = storage.notes.at(owner); let getter_options = NoteGetterOptions::new().set_limit(1).set_offset(index); let notes = owner_notes.get_notes(getter_options); let note = notes[0].unwrap_unchecked(); @@ -62,7 +63,7 @@ contract Benchmarking { fn increment_balance(owner: Field, value: Field) { let current = storage.balances.at(owner).read(); storage.balances.at(owner).write(current + value); - let _callStackItem1 = context.call_public_function(context.this_address(), compute_selector("broadcast(Field)"), [owner]); + let _callStackItem1 = context.call_public_function(context.this_address(), compute_selector("broadcast(Field)"), [owner]); } // Emits a public log. diff --git a/yarn-project/noir-contracts/src/contracts/card_game_contract/src/cards.nr b/yarn-project/noir-contracts/src/contracts/card_game_contract/src/cards.nr index 8ed77ee26e4c..68c560c9de54 100644 --- a/yarn-project/noir-contracts/src/contracts/card_game_contract/src/cards.nr +++ b/yarn-project/noir-contracts/src/contracts/card_game_contract/src/cards.nr @@ -50,6 +50,7 @@ fn test_to_from_field() { assert(card.to_field() == field); } + struct CardNote { card: Card, note: ValueNote, @@ -95,7 +96,9 @@ pub fn filter_cards(notes: [Option; MAX_READ_REQUESTS_PER_CALL], d for i in 0..notes.len() { let note = notes[i]; if note.is_some() { - let card_note = CardNote::from_note(note.unwrap_unchecked()); + let card_note = CardNote::from_note( + note.unwrap_unchecked() + ); for j in 0..N { if !found[j] & (card_note.card.strength == desired_cards[j].strength) & (card_note.card.points == desired_cards[j].points) { selected[i] = note; @@ -103,11 +106,13 @@ pub fn filter_cards(notes: [Option; MAX_READ_REQUESTS_PER_CALL], d } } } + } selected } + impl Deck { pub fn new( context: Context, @@ -184,8 +189,7 @@ impl Deck { } -// Limited by number of write requests (max 4) -global PACK_CARDS = 3; +global PACK_CARDS = 3; // Limited by number of write requests (max 4) pub fn get_pack_cards( seed: Field, @@ -197,7 +201,6 @@ pub fn get_pack_cards( let random_bytes = std::hash::sha256(mix.to_le_bytes(32)); let mut cards = [Card::from_field(0); PACK_CARDS]; - // we generate PACK_CARDS cards assert((PACK_CARDS as u64) < 8, "Cannot generate more than 8 cards"); for i in 0..PACK_CARDS { @@ -215,4 +218,4 @@ pub fn compute_deck_strength(cards: [Card; N]) -> Field { cards.fold(0, |acc, card: Card| { acc + card.strength as Field }) -} +} \ No newline at end of file diff --git a/yarn-project/noir-contracts/src/contracts/card_game_contract/src/game.nr b/yarn-project/noir-contracts/src/contracts/card_game_contract/src/game.nr index c055968100e1..75be5f84979f 100644 --- a/yarn-project/noir-contracts/src/contracts/card_game_contract/src/game.nr +++ b/yarn-project/noir-contracts/src/contracts/card_game_contract/src/game.nr @@ -31,25 +31,36 @@ struct Game { global GAME_SERIALIZED_LEN: Field = 15; fn deserializeGame(fields: [Field; GAME_SERIALIZED_LEN]) -> Game { - let players = [PlayerEntry { address: fields[0], deck_strength: fields[1] as u32, points: fields[2] as u120 }, - PlayerEntry { address: fields[3], deck_strength: fields[4] as u32, points: fields[5] as u120 }]; - let rounds_cards = [Card::from_field(fields[6]), - Card::from_field(fields[7]), - Card::from_field(fields[8]), - Card::from_field(fields[9])]; - Game { + let players = [ + PlayerEntry { + address: fields[0], + deck_strength: fields[1] as u32, + points: fields[2] as u120, + }, + PlayerEntry { + address: fields[3], + deck_strength: fields[4] as u32, + points: fields[5] as u120, + }, + ]; + let rounds_cards = [ + Card::from_field(fields[6]), Card::from_field(fields[7]), + Card::from_field(fields[8]), Card::from_field(fields[9]), + ]; + Game { players, rounds_cards, started: fields[10] as bool, finished: fields[11] as bool, claimed: fields[12] as bool, current_player: fields[13] as u32, - current_round: fields[14] as u32 + current_round: fields[14] as u32, } } fn serializeGame(game: Game) -> [Field; GAME_SERIALIZED_LEN] { - [game.players[0].address, + [ + game.players[0].address, game.players[0].deck_strength as Field, game.players[0].points as Field, game.players[1].address, @@ -63,7 +74,8 @@ fn serializeGame(game: Game) -> [Field; GAME_SERIALIZED_LEN] { game.finished as Field, game.claimed as Field, game.current_player as Field, - game.current_round as Field] + game.current_round as Field, + ] } impl Game { @@ -157,4 +169,4 @@ impl Game { global GameSerializationMethods = TypeSerializationInterface { deserialize: deserializeGame, serialize: serializeGame, -}; +}; \ No newline at end of file diff --git a/yarn-project/noir-contracts/src/contracts/card_game_contract/src/main.nr b/yarn-project/noir-contracts/src/contracts/card_game_contract/src/main.nr index a9f3291ecbb4..732bf0f0c28d 100644 --- a/yarn-project/noir-contracts/src/contracts/card_game_contract/src/main.nr +++ b/yarn-project/noir-contracts/src/contracts/card_game_contract/src/main.nr @@ -11,6 +11,7 @@ contract CardGame { }, }; + use dep::std::option::Option; use dep::value_note::{ balance_utils, @@ -49,7 +50,7 @@ contract CardGame { GameSerializationMethods, GAME_SERIALIZED_LEN }; - + struct Storage { collections: Map, game_decks: Map>, @@ -108,8 +109,8 @@ contract CardGame { #[aztec(private)] fn buy_pack( seed: Field, // The randomness used to generate the cards. Passed in for now. - ) -{ + ) { + let buyer = context.msg_sender(); let mut cards = get_pack_cards(seed, buyer); @@ -121,9 +122,9 @@ contract CardGame { fn join_game( game: u32, cards_fields: [Field; 2], - ) { + ) { let cards = cards_fields.map(|card_field| Card::from_field(card_field)); - + let player = context.msg_sender(); let mut collection = storage.collections.at(player); @@ -140,19 +141,21 @@ contract CardGame { game: u32, player: Field, deck_strength: u32, - ) { + ) { + let game_storage = storage.games.at(game as Field); let mut game_data = game_storage.read(); - assert(game_data.add_player(PlayerEntry { address: player, deck_strength, points: 0 }), "Game full"); + assert(game_data.add_player(PlayerEntry {address: player, deck_strength, points: 0}), "Game full"); game_storage.write(game_data); } #[aztec(public)] - fn start_game(game: u32) { + fn start_game(game: u32) { + let game_storage = storage.games.at(game as Field); - + let mut game_data = game_storage.read(); game_data.start_game(); game_storage.write(game_data); @@ -162,7 +165,8 @@ contract CardGame { fn play_card( game: u32, card: Card, - ) { + ) { + let player = context.msg_sender(); let mut game_deck = storage.game_decks.at(game as Field).at(player); @@ -174,8 +178,9 @@ contract CardGame { #[aztec(public)] internal fn on_card_played(game: u32, player: Field, card_as_field: Field) { + let game_storage = storage.games.at(game as Field); - + let mut game_data = game_storage.read(); let card = Card::from_field(card_as_field); @@ -190,7 +195,8 @@ contract CardGame { fn claim_cards( game: u32, cards_fields: [Field; PLAYABLE_CARDS], - ) { + ) { + let player = context.msg_sender(); let cards = cards_fields.map(|card_field| Card::from_field(card_field)); @@ -198,18 +204,26 @@ contract CardGame { let _inserted_cards = collection.add_cards(cards, player); let selector = compute_selector("on_cards_claimed(u32,Field,Field)"); - context.call_public_function(context.this_address(), selector, [game as Field, player, pedersen_hash(cards_fields, 0)]); + context.call_public_function( + context.this_address(), + selector, + [game as Field, player, pedersen_hash(cards_fields,0)] + ); } #[aztec(public)] internal fn on_cards_claimed(game: u32, player: Field, cards_hash: Field) { + let game_storage = storage.games.at(game as Field); let mut game_data = game_storage.read(); - + assert(!game_data.claimed, "Already claimed"); game_data.claimed = true; - assert_eq(cards_hash, pedersen_hash(game_data.rounds_cards.map(|card: Card| card.to_field()), 0)); + assert_eq( + cards_hash, + pedersen_hash(game_data.rounds_cards.map(|card: Card| card.to_field()),0) + ); let winner = game_data.winner(); assert_eq(player, winner.address, "Not the winner"); @@ -218,20 +232,22 @@ contract CardGame { } unconstrained fn view_collection_cards(owner: Field, offset: u32) -> [Option; MAX_NOTES_PER_PAGE] { + let collection = storage.collections.at(owner); collection.view_cards(offset) - } + } unconstrained fn view_game_cards(game: u32, player: Field, offset: u32) -> [Option; MAX_NOTES_PER_PAGE] { + let game_deck = storage.game_decks.at(game as Field).at(player); game_deck.view_cards(offset) - } + } unconstrained fn view_game(game: u32) -> Game { storage.games.at(game as Field).read() - } + } // Computes note hash and nullifier. // Note 1: Needs to be defined by every contract producing logs. diff --git a/yarn-project/noir-contracts/src/contracts/child_contract/src/main.nr b/yarn-project/noir-contracts/src/contracts/child_contract/src/main.nr index 42b5ba0efe0c..f1ecd53091e7 100644 --- a/yarn-project/noir-contracts/src/contracts/child_contract/src/main.nr +++ b/yarn-project/noir-contracts/src/contracts/child_contract/src/main.nr @@ -28,7 +28,7 @@ contract Child { } #[aztec(private)] - fn constructor() {} + fn constructor() {} // Returns a sum of the input and the chain id and version of the contract in private circuit public input's return_values. #[aztec(private)] @@ -63,15 +63,17 @@ contract Child { // Sets `current_value` to `new_value` #[aztec(public)] fn pubSetValue(new_value: Field) -> Field { + storage.current_value.write(new_value); emit_unencrypted_log(&mut context, new_value); - + new_value } // Increments `current_value` by `new_value` #[aztec(public)] fn pubIncValue(new_value: Field) -> Field { + let old_value = storage.current_value.read(); storage.current_value.write(old_value + new_value); emit_unencrypted_log(&mut context, new_value); @@ -82,11 +84,12 @@ contract Child { // Increments `current_value` by `new_value`. Can only be called from this contract. #[aztec(public)] fn pubIncValueInternal(new_value: Field) -> Field { + check_sender(inputs.call_context); let old_value = storage.current_value.read(); storage.current_value.write(old_value + new_value); emit_unencrypted_log(&mut context, new_value); - + new_value } @@ -95,12 +98,14 @@ contract Child { let pubSetValueSelector = compute_selector("pubSetValue(Field)"); let _ret = context.call_public_function(context.this_address(), pubSetValueSelector, [10]); + storage.current_value.write(20); emit_unencrypted_log(&mut context, 20); } #[aztec(public)] fn setValueTwiceWithNestedLast() { + storage.current_value.write(20); emit_unencrypted_log(&mut context, 20); diff --git a/yarn-project/noir-contracts/src/contracts/counter_contract/src/main.nr b/yarn-project/noir-contracts/src/contracts/counter_contract/src/main.nr index 33ff18b0a497..18836e718270 100644 --- a/yarn-project/noir-contracts/src/contracts/counter_contract/src/main.nr +++ b/yarn-project/noir-contracts/src/contracts/counter_contract/src/main.nr @@ -1,5 +1,5 @@ contract Counter { - // docs:start:imports +// docs:start:imports use dep::aztec::{ context::{PrivateContext, Context}, note::{ @@ -16,15 +16,17 @@ contract Counter { }, }; use dep::easy_private_state::easy_private_state::EasyPrivateUint; +// docs:end:imports + +// docs:start:storage_struct - // docs:end:imports - // docs:start:storage_struct struct Storage { counters: Map, } - // docs:end:storage_struct - // docs:start:storage_init +// docs:end:storage_struct + +// docs:start:storage_init impl Storage { fn init(context: Context) -> pub Self { Storage { @@ -38,40 +40,40 @@ contract Counter { } } } +// docs:end:storage_init - // docs:end:storage_init - // docs:start:constructor +// docs:start:constructor #[aztec(private)] fn constructor(headstart: u120, owner: Field) { let counters = storage.counters; counters.at(owner).add(headstart, owner); } +// docs:end:constructor - // docs:end:constructor - // docs:start:increment +// docs:start:increment #[aztec(private)] - fn increment(owner: Field) { + fn increment(owner: Field) { let counters = storage.counters; counters.at(owner).add(1, owner); } +// docs:end:increment - // docs:end:increment - // docs:start:get_counter +// docs:start:get_counter unconstrained fn get_counter(owner: Field) -> Field { - let counters = storage.counters; - balance_utils::get_balance(counters.at(owner).set) + let counters = storage.counters; + balance_utils::get_balance(counters.at(owner).set) } +// docs:end:get_counter - // docs:end:get_counter - // docs:start:nullifier +// docs:start:nullifier unconstrained fn compute_note_hash_and_nullifier( contract_address: Field, nonce: Field, storage_slot: Field, preimage: [Field; VALUE_NOTE_LEN], ) -> [Field; 4] { - let note_header = NoteHeader::new(contract_address, nonce, storage_slot); - note_utils::compute_note_hash_and_nullifier(ValueNoteMethods, note_header, preimage) + let note_header = NoteHeader::new(contract_address, nonce, storage_slot); + note_utils::compute_note_hash_and_nullifier(ValueNoteMethods, note_header, preimage) } - // docs:end:nullifier -} +// docs:end:nullifier +} \ No newline at end of file diff --git a/yarn-project/noir-contracts/src/contracts/docs_example_contract/src/actions.nr b/yarn-project/noir-contracts/src/contracts/docs_example_contract/src/actions.nr index b4128a384508..03bd8c2c0ded 100644 --- a/yarn-project/noir-contracts/src/contracts/docs_example_contract/src/actions.nr +++ b/yarn-project/noir-contracts/src/contracts/docs_example_contract/src/actions.nr @@ -20,14 +20,14 @@ use crate::types::{ pub fn is_locked(state_var: PublicState) -> bool { state_var.read() } - // docs:end:state_vars-PublicStateRead + // docs:start:state_vars-PublicStateWrite pub fn lock(state_var: PublicState) { state_var.write(true); } - // docs:end:state_vars-PublicStateWrite + pub fn unlock(state_var: PublicState) { state_var.write(false); } @@ -36,8 +36,8 @@ pub fn unlock(state_var: PublicState) { pub fn get_current_queen(state_var: PublicState) -> Queen { state_var.read() } - // docs:end:state_vars-PublicStateReadCustom + pub fn can_replace_queen( state_var: PublicState, new_queen: Queen, @@ -50,34 +50,34 @@ pub fn can_replace_queen( pub fn replace_queen(state_var: PublicState, new_queen: Queen) { state_var.write(new_queen); } - // docs:end:state_vars-PublicStateWriteCustom + // docs:start:state_vars-PublicStateReadWriteCustom pub fn add_points_to_queen(state_var: PublicState, new_points: u8) { let mut queen = state_var.read(); queen.points += new_points; state_var.write(queen); } - // docs:end:state_vars-PublicStateReadWriteCustom + // docs:start:state_vars-SingletonInit pub fn init_legendary_card(state_var: Singleton, card: &mut CardNote) { state_var.initialize(card, Option::some(card.owner), true); } - // docs:end:state_vars-SingletonInit + // docs:start:state_vars-SingletonReplace pub fn update_legendary_card(state_var: Singleton, card: &mut CardNote) { state_var.replace(card, true); } - // docs:end:state_vars-SingletonReplace + // docs:start:state_vars-SingletonGet pub fn get_legendary_card(state_var: Singleton) -> CardNote { state_var.get_note(true) } - // docs:end:state_vars-SingletonGet + // docs:start:state_vars-ImmutableSingletonInit pub fn init_game_rules( state_var: ImmutableSingleton, @@ -85,27 +85,27 @@ pub fn init_game_rules( ) { state_var.initialize(rules, Option::none(), true); } - // docs:end:state_vars-ImmutableSingletonInit + // docs:start:state_vars-ImmutableSingletonGet pub fn is_valid_card(state_var: ImmutableSingleton, card: CardNote) -> bool { let rules = state_var.get_note(); card.points >= rules.min_points & card.points <= rules.max_points } - // docs:end:state_vars-ImmutableSingletonGet + // docs:start:state_vars-SetInsert pub fn add_new_card(state_var: Set, card: &mut CardNote) { state_var.insert(card, true); } - // docs:end:state_vars-SetInsert + // docs:start:state_vars-SetRemove pub fn remove_card(state_var: Set, card: CardNote) { state_var.remove(card); } - // docs:end:state_vars-SetRemove + // docs:start:state_vars-SetGet pub fn get_cards( state_var: Set, @@ -113,8 +113,8 @@ pub fn get_cards( ) -> [Option; MAX_READ_REQUESTS_PER_CALL] { state_var.get_notes(options) } - // docs:end:state_vars-SetGet + // docs:start:state_vars-SetView unconstrained pub fn view_cards( state_var: Set, @@ -122,14 +122,16 @@ unconstrained pub fn view_cards( ) -> [Option; MAX_NOTES_PER_PAGE] { state_var.view_notes(options) } - // docs:end:state_vars-SetView + unconstrained pub fn get_total_points( state_var: Set, account: Field, offset: u32, ) -> u8 { - let options = NoteViewerOptions::new().select(2, account).set_offset(offset); + let options = NoteViewerOptions::new() + .select(2, account) + .set_offset(offset); let mut total_points = 0; let notes = view_cards(state_var, options); for i in 0..notes.len() { @@ -151,8 +153,8 @@ pub fn add_new_profile( ) { state_var.at(account).initialize(profile, Option::some(account), true); } - // docs:end:state_vars-MapAtSingletonInit + // docs:start:state_vars-MapAtSingletonGet pub fn get_profile( state_var: Map>, @@ -160,5 +162,4 @@ pub fn get_profile( ) -> ProfileNote { state_var.at(account).get_note(true) } - // docs:end:state_vars-MapAtSingletonGet diff --git a/yarn-project/noir-contracts/src/contracts/docs_example_contract/src/main.nr b/yarn-project/noir-contracts/src/contracts/docs_example_contract/src/main.nr index 2099c2a9fe89..3930ac84f2b2 100644 --- a/yarn-project/noir-contracts/src/contracts/docs_example_contract/src/main.nr +++ b/yarn-project/noir-contracts/src/contracts/docs_example_contract/src/main.nr @@ -12,12 +12,10 @@ contract DocsExample { singleton::Singleton, }, }; - // docs:start:state_vars-PublicStateBoolImport use dep::aztec::types::type_serialization::bool_serialization::{ BoolSerializationMethods, BOOL_SERIALIZED_LEN, }; - // docs:end:state_vars-PublicStateBoolImport use crate::account_contract_interface::AccountContractInterface; use crate::actions; @@ -42,8 +40,8 @@ contract DocsExample { profiles: Map>, // docs:end:storage-map-singleton-declaration } - // docs:end:storage-struct-declaration + // docs:start:storage-declaration // docs:start:state_vars-PublicState // docs:start:state_vars-PublicStateCustomStruct @@ -81,7 +79,6 @@ contract DocsExample { } } } - // docs:end:state_vars-PublicState // docs:end:state_vars-PublicStateCustomStruct // docs:end:state_vars-Singleton @@ -89,6 +86,7 @@ contract DocsExample { // docs:end:state_vars-Set // docs:end:state_vars-MapSingleton // docs:end:storage-declaration + global REPLACE_QUEEN_FUNCTION_SELECTOR = 11111111; global GET_POINTS_OF_COMMON_CARD_FUNCTION_SELECTOR = 11111111; @@ -109,32 +107,38 @@ contract DocsExample { #[aztec(public)] fn lock() { // highlight-next-line:storage-init + storage.locked.write(true); } - // docs:end:storage-init + // docs:start:functions-OpenFunction #[aztec(public)] fn unlock() { + actions::unlock(storage.locked); } - // docs:end:functions-OpenFunction + #[aztec(public)] fn replace_queen( account: Field, points: u8, ) { - let new_queen = Queen { account, points }; + + let new_queen = Queen { account, points }; + assert(actions::can_replace_queen(storage.queen, new_queen)); - + actions::replace_queen(storage.queen, new_queen); } // docs:start:state_vars-PublicStateWriteBeforeCall #[aztec(public)] fn replace_queen_unsafe() { + + let account = context.msg_sender(); let points = actions::get_total_points(storage.cards, account, 0); @@ -143,27 +147,31 @@ contract DocsExample { assert(points > current_queen.points); AccountContractInterface::at(account).send_rewards(current_queen.points); - + let new_queen = Queen { account, points }; storage.queen.write(new_queen); } - // docs:end:state_vars-PublicStateWriteBeforeCall + // docs:start:functions-SecretFunction #[aztec(private)] fn add_common_cards(secrets: [Field; 4]) { + + for i in 0..secrets.len() as u8 { let mut card = CardNote::new(0, secrets[i], 0); actions::add_new_card(storage.cards, &mut card); } } - // docs:end:functions-SecretFunction + #[aztec(private)] fn update_legendary_card( new_points: u8, new_secret: Field, ) { + + let owner = inputs.call_context.msg_sender; let mut updated_card = CardNote::new(new_points, new_secret, owner); @@ -174,16 +182,22 @@ contract DocsExample { #[aztec(private)] fn become_queen() { + + let legendary_card = actions::get_legendary_card(storage.legendary_card); let owner = legendary_card.owner; let result = context.call_private_function( - inputs.call_context.storage_contract_address, GET_POINTS_OF_COMMON_CARD_FUNCTION_SELECTOR, [owner, 0] + inputs.call_context.storage_contract_address, + GET_POINTS_OF_COMMON_CARD_FUNCTION_SELECTOR, + [owner, 0] ); let total_points = legendary_card.points + result[0] as u8; context.call_public_function( - inputs.call_context.storage_contract_address, REPLACE_QUEEN_FUNCTION_SELECTOR, [owner, total_points as Field] + inputs.call_context.storage_contract_address, + REPLACE_QUEEN_FUNCTION_SELECTOR, + [owner, total_points as Field] ); } @@ -192,6 +206,8 @@ contract DocsExample { account: Field, offset: u32, ) { + + let mut total_points = 0; let options = create_account_card_getter_options(account, offset); let cards = actions::get_cards(storage.cards, options); @@ -208,10 +224,12 @@ contract DocsExample { // docs:start:functions-UnconstrainedFunction unconstrained fn get_total_points(account: Field) -> u8 { + actions::get_total_points(storage.cards, account, 0) } - // docs:end:functions-UnconstrainedFunction + + /// Macro equivalence section use dep::aztec::abi; use dep::aztec::abi::Hasher; @@ -223,8 +241,9 @@ contract DocsExample { fn simple_macro_example(a: Field, b: Field) -> Field { a + b } - // docs:end:simple_macro_example + + // docs:start:simple_macro_example_expanded fn simple_macro_example_expanded( // ************************************************************ @@ -241,8 +260,7 @@ contract DocsExample { // The actual return type of our circuit is the PrivateCircuitPublicInputs struct, this will be the // input to our kernel! // docs:start:context-example-return - ) -> distinct pub abi::PrivateCircuitPublicInputs -{ + ) -> distinct pub abi::PrivateCircuitPublicInputs { // docs:end:context-example-return // ************************************************************ // The hasher is a structure used to generate a hash of the circuits inputs. @@ -250,18 +268,18 @@ contract DocsExample { let mut hasher = Hasher::new(); hasher.add(a); hasher.add(b); - // docs:end:context-example-hasher + // The context object is created with the inputs and the hash of the inputs // docs:start:context-example-context let mut context = PrivateContext::new(inputs, hasher.hash()); - // docs:end:context-example-context + // docs:start:storage-example-context let mut storage = Storage::init(Context::private(&mut context)); - // docs:end:storage-example-context // ************************************************************ + // Our actual program let result = a + b; @@ -269,23 +287,27 @@ contract DocsExample { // Return values are pushed into the context // docs:start:context-example-context-return context.return_values.push(result); - // docs:end:context-example-context-return + // The context is returned to be consumed by the kernel circuit! // docs:start:context-example-finish context.finish() // docs:end:context-example-finish // ************************************************************ } - // docs:end:simple_macro_example_expanded + + // Cross chain messaging section // Demonstrates a cross chain message - // docs:start:l1_to_l2_cross_chain_message + // docs:start:l1_to_l2_cross_chain_message #[aztec(private)] - fn send_to_l1() {} + fn send_to_l1() { + + } // docs:end:l1_to_l2_cross_chain_message + // TODO: remove this placeholder once https://github.com/AztecProtocol/aztec-packages/issues/2918 is implemented unconstrained fn compute_note_hash_and_nullifier(contract_address: Field, nonce: Field, storage_slot: Field, serialized_note: [Field; 0]) -> [Field; 4] { [0, 0, 0, 0] diff --git a/yarn-project/noir-contracts/src/contracts/docs_example_contract/src/options.nr b/yarn-project/noir-contracts/src/contracts/docs_example_contract/src/options.nr index 8551f13ceb91..636a6de36093 100644 --- a/yarn-project/noir-contracts/src/contracts/docs_example_contract/src/options.nr +++ b/yarn-project/noir-contracts/src/contracts/docs_example_contract/src/options.nr @@ -8,20 +8,26 @@ pub fn create_account_card_getter_options( account_address: Field, offset: u32, ) -> NoteGetterOptions { - NoteGetterOptions::new().select(2, account_address).sort(0, SortOrder.DESC).set_offset(offset) + NoteGetterOptions::new() + .select(2, account_address) + .sort(0, SortOrder.DESC) + .set_offset(offset) } - // docs:end:state_vars-NoteGetterOptionsSelectSortOffset + // docs:start:state_vars-NoteGetterOptionsMultiSelects pub fn create_exact_card_getter_options( points: u8, secret: Field, account_address: Field, ) -> NoteGetterOptions { - NoteGetterOptions::new().select(0, points as Field).select(1, secret).select(2, account_address) + NoteGetterOptions::new() + .select(0, points as Field) + .select(1, secret) + .select(2, account_address) } - // docs:end:state_vars-NoteGetterOptionsMultiSelects + // docs:start:state_vars-OptionFilter pub fn filter_min_points( cards: [Option; MAX_READ_REQUESTS_PER_CALL], @@ -37,22 +43,26 @@ pub fn filter_min_points( } selected_cards } - // docs:end:state_vars-OptionFilter + // docs:start:state_vars-NoteGetterOptionsFilter pub fn create_account_cards_with_min_points_getter_options( account_address: Field, min_points: u8, ) -> NoteGetterOptions { - NoteGetterOptions::with_filter(filter_min_points, min_points).select(2, account_address).sort(0, SortOrder.ASC) + NoteGetterOptions::with_filter(filter_min_points, min_points) + .select(2, account_address) + .sort(0, SortOrder.ASC) } - // docs:end:state_vars-NoteGetterOptionsFilter + // docs:start:state_vars-NoteGetterOptionsPickOne pub fn create_largest_account_card_getter_options( account_address: Field, ) -> NoteGetterOptions { - NoteGetterOptions::new().select(2, account_address).sort(0, SortOrder.DESC).set_limit(1) + NoteGetterOptions::new() + .select(2, account_address) + .sort(0, SortOrder.DESC) + .set_limit(1) } - // docs:end:state_vars-NoteGetterOptionsPickOne diff --git a/yarn-project/noir-contracts/src/contracts/docs_example_contract/src/types.nr b/yarn-project/noir-contracts/src/contracts/docs_example_contract/src/types.nr index b8bf6dc7bfd8..9e0784c92cad 100644 --- a/yarn-project/noir-contracts/src/contracts/docs_example_contract/src/types.nr +++ b/yarn-project/noir-contracts/src/contracts/docs_example_contract/src/types.nr @@ -1,4 +1,4 @@ mod card_note; mod profile_note; mod queen; -mod rules_note; +mod rules_note; \ No newline at end of file diff --git a/yarn-project/noir-contracts/src/contracts/docs_example_contract/src/types/card_note.nr b/yarn-project/noir-contracts/src/contracts/docs_example_contract/src/types/card_note.nr index 5f6c6b57b260..01269b009543 100644 --- a/yarn-project/noir-contracts/src/contracts/docs_example_contract/src/types/card_note.nr +++ b/yarn-project/noir-contracts/src/contracts/docs_example_contract/src/types/card_note.nr @@ -22,8 +22,8 @@ struct CardNote { owner: Field, header: NoteHeader, } - // docs:end:state_vars-CardNote + impl CardNote { pub fn new(points: u8, secret: Field, owner: Field) -> Self { CardNote { diff --git a/yarn-project/noir-contracts/src/contracts/docs_example_contract/src/types/queen.nr b/yarn-project/noir-contracts/src/contracts/docs_example_contract/src/types/queen.nr index 76065e8de244..635205ecd6f6 100644 --- a/yarn-project/noir-contracts/src/contracts/docs_example_contract/src/types/queen.nr +++ b/yarn-project/noir-contracts/src/contracts/docs_example_contract/src/types/queen.nr @@ -5,13 +5,16 @@ struct Queen { account: Field, points: u8, } - // docs:end:state_vars-CustomStruct + // docs:start:state_vars-PublicStateCustomStruct global QUEEN_SERIALIZED_LEN: Field = 2; fn deserialize(fields: [Field; QUEEN_SERIALIZED_LEN]) -> Queen { - Queen { account: fields[0], points: fields[1] as u8 } + Queen { + account: fields[0], + points: fields[1] as u8, + } } fn serialize(queen: Queen) -> [Field; QUEEN_SERIALIZED_LEN] { @@ -22,4 +25,4 @@ global QueenSerializationMethods = TypeSerializationInterface { deserialize, serialize, }; -// docs:end:state_vars-PublicStateCustomStruct +// docs:end:state_vars-PublicStateCustomStruct \ No newline at end of file diff --git a/yarn-project/noir-contracts/src/contracts/easy_private_token_contract/src/main.nr b/yarn-project/noir-contracts/src/contracts/easy_private_token_contract/src/main.nr index 6c7f4b131b41..fc3ebaf65acc 100644 --- a/yarn-project/noir-contracts/src/contracts/easy_private_token_contract/src/main.nr +++ b/yarn-project/noir-contracts/src/contracts/easy_private_token_contract/src/main.nr @@ -38,12 +38,13 @@ contract EasyPrivateToken { /** * initialize the contract's initial state variables. - */ + */ #[aztec(private)] fn constructor( initial_supply: u120, owner: Field, ) { + let balances = storage.balances; balances.at(owner).add(initial_supply, owner); @@ -54,7 +55,8 @@ contract EasyPrivateToken { fn mint( amount: u120, owner: Field, - ) { + ) { + let balances = storage.balances; balances.at(owner).add(amount, owner); @@ -67,6 +69,7 @@ contract EasyPrivateToken { sender: Field, recipient: Field, ) { + let balances = storage.balances; balances.at(sender).sub(amount, sender); @@ -77,6 +80,7 @@ contract EasyPrivateToken { unconstrained fn getBalance( owner: Field, ) -> Field { + let balances = storage.balances; // Return the sum of all notes in the set. @@ -91,5 +95,4 @@ contract EasyPrivateToken { note_utils::compute_note_hash_and_nullifier(ValueNoteMethods, note_header, serialized_note) } } - // docs:end:easy_private_token_contract diff --git a/yarn-project/noir-contracts/src/contracts/ecdsa_account_contract/src/ecdsa_public_key_note.nr b/yarn-project/noir-contracts/src/contracts/ecdsa_account_contract/src/ecdsa_public_key_note.nr index 436199240ada..18d45ad39dd6 100644 --- a/yarn-project/noir-contracts/src/contracts/ecdsa_account_contract/src/ecdsa_public_key_note.nr +++ b/yarn-project/noir-contracts/src/contracts/ecdsa_account_contract/src/ecdsa_public_key_note.nr @@ -89,22 +89,23 @@ impl EcdsaPublicKeyNote { } fn deserialize(serialized_note: [Field; ECDSA_PUBLIC_KEY_NOTE_LEN]) -> EcdsaPublicKeyNote { - let mut x: [u8; 32] = [0; 32]; - let mut y: [u8; 32] = [0; 32]; + let mut x: [u8; 32] = [0;32]; + let mut y: [u8; 32] = [0;32]; let part_x = serialized_note[0].to_be_bytes(32); - for i in 0..31 { - x[i] = part_x[i + 1]; - } + for i in 0..31 { x[i] = part_x[i + 1]; } x[31] = serialized_note[1].to_be_bytes(32)[31]; let part_y = serialized_note[2].to_be_bytes(32); - for i in 0..31 { - y[i] = part_y[i + 1]; - } + for i in 0..31 { y[i] = part_y[i + 1]; } y[31] = serialized_note[3].to_be_bytes(32)[31]; - EcdsaPublicKeyNote { x, y, owner: serialized_note[4], header: NoteHeader::empty() } + EcdsaPublicKeyNote { + x, + y, + owner: serialized_note[4], + header: NoteHeader::empty(), + } } fn serialize(note: EcdsaPublicKeyNote) -> [Field; ECDSA_PUBLIC_KEY_NOTE_LEN] { @@ -113,7 +114,7 @@ fn serialize(note: EcdsaPublicKeyNote) -> [Field; ECDSA_PUBLIC_KEY_NOTE_LEN] { fn compute_note_hash(note: EcdsaPublicKeyNote) -> Field { // TODO(#1205) Should use a non-zero generator index. - pedersen_hash(note.serialize(), 0) + pedersen_hash(note.serialize(),0) } fn compute_nullifier(note: EcdsaPublicKeyNote) -> Field { diff --git a/yarn-project/noir-contracts/src/contracts/ecdsa_account_contract/src/main.nr b/yarn-project/noir-contracts/src/contracts/ecdsa_account_contract/src/main.nr index 84463e5dad08..4dabf31b3b65 100644 --- a/yarn-project/noir-contracts/src/contracts/ecdsa_account_contract/src/main.nr +++ b/yarn-project/noir-contracts/src/contracts/ecdsa_account_contract/src/main.nr @@ -79,13 +79,11 @@ contract EcdsaAccount { // Load public key from storage let storage = Storage::init(Context::private(context)); let public_key = storage.public_key.get_note(); - + // Load auth witness let witness: [Field; 64] = get_auth_witness(message_field); let mut signature: [u8; 64] = [0; 64]; - for i in 0..64 { - signature[i] = witness[i] as u8; - } + for i in 0..64 { signature[i] = witness[i] as u8; } // Verify payload signature using Ethereum's signing scheme // Note that noir expects the hash of the message/challenge as input to the ECDSA verification. diff --git a/yarn-project/noir-contracts/src/contracts/escrow_contract/src/main.nr b/yarn-project/noir-contracts/src/contracts/escrow_contract/src/main.nr index 04f57af2fc2b..49bedc9234e3 100644 --- a/yarn-project/noir-contracts/src/contracts/escrow_contract/src/main.nr +++ b/yarn-project/noir-contracts/src/contracts/escrow_contract/src/main.nr @@ -39,15 +39,15 @@ contract Escrow { owner: pub Field ) { let this = context.this_address(); - + // Create a new note and add it to the owners set. let mut note = AddressNote::new(owner, this); // Insert the owner into storage storage.owners.insert(&mut note, true); } - // docs:end:constructor + // Withdraws balance. Requires that msg.sender is registered as an owner. #[aztec(private)] fn withdraw( @@ -64,7 +64,11 @@ contract Escrow { assert(notes[0].is_some(), "Sender is not an owner."); let selector = compute_selector("transfer((Field),(Field),Field,Field)"); - let _callStackItem = context.call_private_function(token, selector, [this, recipient, amount, 0]); + let _callStackItem = context.call_private_function( + token, + selector, + [this, recipient, amount, 0] + ); } unconstrained fn compute_note_hash_and_nullifier(contract_address: Field, nonce: Field, storage_slot: Field, serialized_note: [Field; ADDRESS_NOTE_LEN]) -> [Field; 4] { diff --git a/yarn-project/noir-contracts/src/contracts/import_test_contract/src/main.nr b/yarn-project/noir-contracts/src/contracts/import_test_contract/src/main.nr index d94d86a25a0b..599a28218fb7 100644 --- a/yarn-project/noir-contracts/src/contracts/import_test_contract/src/main.nr +++ b/yarn-project/noir-contracts/src/contracts/import_test_contract/src/main.nr @@ -12,10 +12,11 @@ contract ImportTest { ManyNotesADeepStructTestCodeGenStruct, }; + #[aztec(private)] fn constructor( ) {} - + // Calls the testCodeGen on the Test contract at the target address // Used for testing calling a function with arguments of multiple types // See yarn-project/acir-simulator/src/client/private_execution.ts @@ -26,13 +27,21 @@ contract ImportTest { ) -> Field { let test_contract_instance = TestPrivateContextInterface::at(target); let return_values = test_contract_instance.test_code_gen( - &mut context, 1, true, 1 as u32, [1, 2], AStructTestCodeGenStruct { amount: 1, secret_hash: 2 }, ADeepStructTestCodeGenStruct { - a_field: 1, - a_bool: true, + &mut context, + 1, + true, + 1 as u32, + [1, 2], + AStructTestCodeGenStruct { amount: 1, secret_hash: 2 }, + ADeepStructTestCodeGenStruct { + a_field: 1, + a_bool: true, a_note: ANoteADeepStructTestCodeGenStruct { amount: 1, secret_hash: 2 }, - many_notes: [ManyNotesADeepStructTestCodeGenStruct { amount: 1, secret_hash: 2 }, + many_notes: [ + ManyNotesADeepStructTestCodeGenStruct { amount: 1, secret_hash: 2 }, ManyNotesADeepStructTestCodeGenStruct { amount: 1, secret_hash: 2 }, - ManyNotesADeepStructTestCodeGenStruct { amount: 1, secret_hash: 2 }] + ManyNotesADeepStructTestCodeGenStruct { amount: 1, secret_hash: 2 }, + ] } ); @@ -48,7 +57,7 @@ contract ImportTest { ) -> Field { let test_contract_instance = TestPrivateContextInterface::at(target); let return_values = test_contract_instance.get_this_address(&mut context); - + return_values[0] } @@ -72,7 +81,7 @@ contract ImportTest { ) -> Field { let test_contract_instance = TestPublicContextInterface::at(target); let ret = test_contract_instance.create_nullifier_public(context, 1, 2); - + ret[0] } } diff --git a/yarn-project/noir-contracts/src/contracts/lending_contract/src/asset.nr b/yarn-project/noir-contracts/src/contracts/lending_contract/src/asset.nr index 71446a28a060..cb8dcd90ad4f 100644 --- a/yarn-project/noir-contracts/src/contracts/lending_contract/src/asset.nr +++ b/yarn-project/noir-contracts/src/contracts/lending_contract/src/asset.nr @@ -21,15 +21,17 @@ fn deserializeAsset(fields: [Field; ASSET_SERIALIZED_LEN]) -> Asset { interest_accumulator: fields[0] as u120, last_updated_ts: fields[1] as u120, loan_to_value: fields[2] as u120, - oracle_address: fields[3] + oracle_address: fields[3], } } fn serializeAsset(asset: Asset) -> [Field; ASSET_SERIALIZED_LEN] { - [asset.interest_accumulator as Field, + [ + asset.interest_accumulator as Field, asset.last_updated_ts as Field, asset.loan_to_value as Field, - asset.oracle_address] + asset.oracle_address, + ] } impl Asset { diff --git a/yarn-project/noir-contracts/src/contracts/lending_contract/src/helpers.nr b/yarn-project/noir-contracts/src/contracts/lending_contract/src/helpers.nr index 2300631cbd02..eb20e2d5bdb8 100644 --- a/yarn-project/noir-contracts/src/contracts/lending_contract/src/helpers.nr +++ b/yarn-project/noir-contracts/src/contracts/lending_contract/src/helpers.nr @@ -11,9 +11,9 @@ pub fn compute_identifier( self: Field, ) -> Field { // EITHER secret OR on_behalf_of MUST be set. But not both - assert(!((secret == 0) as bool & (on_behalf_of == 0) as bool)); + assert (!((secret == 0) as bool & (on_behalf_of == 0) as bool)); if (secret != 0) { - pedersen_hash([self, secret], 0) + pedersen_hash([self, secret],0) } else { on_behalf_of } @@ -26,12 +26,12 @@ pub fn covered_by_collateral( increase: u120, decrease: u120, ) -> u120 { - let price_precision = SafeU120 { value: 1000000000 }; - let ltv_precision = SafeU120 { value: 10000 }; + let price_precision = SafeU120{value: 1000000000}; + let ltv_precision = SafeU120{value: 10000}; - let price = SafeU120 { value: price }; - let collateral = SafeU120 { value: collateral }.add(SafeU120 { value: increase }).sub(SafeU120 { value: decrease }); - let loan_to_value = SafeU120 { value: loan_to_value }; + let price = SafeU120{value: price}; + let collateral = SafeU120{value: collateral}.add(SafeU120{value:increase}).sub(SafeU120{value:decrease}); + let loan_to_value = SafeU120{value: loan_to_value}; let collateral_value = collateral.mul_div(price, price_precision); let debt_covered = collateral_value.mul_div(loan_to_value, ltv_precision); @@ -51,12 +51,12 @@ pub fn debt_updates( decrease: u120, ) -> DebtReturn { assert(interest_accumulator > 0); - let accumulator_precision = SafeU120 { value: 1000000000 }; + let accumulator_precision = SafeU120{value: 1000000000}; - let static_debt = SafeU120 { value: static_debt }; - let interest_accumulator = SafeU120 { value: interest_accumulator }; - let increase = SafeU120 { value: increase }; - let decrease = SafeU120 { value: decrease }; + let static_debt = SafeU120{value: static_debt}; + let interest_accumulator = SafeU120{value: interest_accumulator}; + let increase = SafeU120{value: increase}; + let decrease = SafeU120{value: decrease}; let current_debt_value = static_debt.mul_div(interest_accumulator, accumulator_precision); let new_debt_value = current_debt_value.add(increase).sub(decrease); @@ -64,7 +64,6 @@ pub fn debt_updates( // static_debt_increase = amount / accumulator // rounding up new debt. let static_debt_increase = increase.mul_div_up(accumulator_precision, interest_accumulator); - // rounding down repayment. let static_debt_decrease = decrease.mul_div(accumulator_precision, interest_accumulator); @@ -72,15 +71,18 @@ pub fn debt_updates( // if you try to repay exact due to time diff between sim and execution. let new_static_debt = static_debt.add(static_debt_increase).sub(static_debt_decrease); - DebtReturn { debt_value: new_debt_value.value, static_debt: new_static_debt.value } + DebtReturn { + debt_value: new_debt_value.value, + static_debt: new_static_debt.value, + } } pub fn debt_value( static_debt: u120, interest_accumulator: u120, ) -> u120 { - let static_debt = SafeU120 { value: static_debt }; - let accumulator_precision = SafeU120 { value: 1000000000 }; - let interest_accumulator = SafeU120 { value: interest_accumulator }; + let static_debt = SafeU120{value: static_debt}; + let accumulator_precision = SafeU120{value: 1000000000}; + let interest_accumulator = SafeU120{value: interest_accumulator}; static_debt.mul_div_up(interest_accumulator, accumulator_precision).value -} +} \ No newline at end of file diff --git a/yarn-project/noir-contracts/src/contracts/lending_contract/src/interest_math.nr b/yarn-project/noir-contracts/src/contracts/lending_contract/src/interest_math.nr index 61d5424a40c5..5b089405a3f3 100644 --- a/yarn-project/noir-contracts/src/contracts/lending_contract/src/interest_math.nr +++ b/yarn-project/noir-contracts/src/contracts/lending_contract/src/interest_math.nr @@ -11,15 +11,13 @@ pub fn compute_multiplier( rate_per_second: u120, dt: SafeU120, ) -> SafeU120 { - let base = SafeU120 { value: 1000000000 }; - // 1e9 - let WAD = SafeU120 { value: 1000000000000000000 }; - // 1e18 + let base = SafeU120{value: 1000000000}; // 1e9 + let WAD = SafeU120{value: 1000000000000000000}; // 1e18 let diff = WAD.div(base); let mut res = base; if (!dt.is_zero()) { - let exp_minus_one = SafeU120 { value: dt.value - 1 }; - let exp_minus_two = SafeU120 { value: if (dt.value > 2) { dt.value - 2 } else { 0 } }; + let exp_minus_one = SafeU120{value: dt.value - 1}; + let exp_minus_two = SafeU120 {value: if (dt.value > 2) {dt.value - 2} else { 0 }}; // if rate_per_second < sqrt(WAD), then base_power_two and base_power_three = 0 let rate = SafeU120 { value: rate_per_second }; @@ -27,8 +25,8 @@ pub fn compute_multiplier( let base_power_three = base_power_two.mul_div(rate, WAD); let temp = dt.mul(exp_minus_one); - let second_term = temp.mul(base_power_two).div(SafeU120 { value: 2 }); - let third_term = temp.mul(exp_minus_two).mul(base_power_three).div(SafeU120 { value: 6 }); + let second_term = temp.mul(base_power_two).div(SafeU120 {value: 2}); + let third_term = temp.mul(exp_minus_two).mul(base_power_three).div(SafeU120{value: 6}); // throwing away precision to keep us under u120 :sob: let offset = dt.mul(rate).add(second_term).add(third_term).div(diff); @@ -36,4 +34,4 @@ pub fn compute_multiplier( res = base.add(offset); } res -} +} \ No newline at end of file diff --git a/yarn-project/noir-contracts/src/contracts/lending_contract/src/interfaces.nr b/yarn-project/noir-contracts/src/contracts/lending_contract/src/interfaces.nr index e2377ef2f6ef..b4f0634f7234 100644 --- a/yarn-project/noir-contracts/src/contracts/lending_contract/src/interfaces.nr +++ b/yarn-project/noir-contracts/src/contracts/lending_contract/src/interfaces.nr @@ -100,4 +100,4 @@ impl Lending { oracle_address: return_values[3], } } -} +} \ No newline at end of file diff --git a/yarn-project/noir-contracts/src/contracts/lending_contract/src/main.nr b/yarn-project/noir-contracts/src/contracts/lending_contract/src/main.nr index 7685826ab81b..f9f32af3b84c 100644 --- a/yarn-project/noir-contracts/src/contracts/lending_contract/src/main.nr +++ b/yarn-project/noir-contracts/src/contracts/lending_contract/src/main.nr @@ -107,19 +107,20 @@ contract Lending { collateral_asset: Field, stable_coin: Field, ) -> Field { + let asset_loc = storage.assets.at(0); let asset = asset_loc.read(); - assert(loan_to_value as u120 <= 10000); - assert(asset.last_updated_ts == 0); - assert(asset.interest_accumulator == 0); + assert (loan_to_value as u120 <= 10000); + assert (asset.last_updated_ts == 0); + assert (asset.interest_accumulator == 0); asset_loc.write(Asset { - interest_accumulator: 1000000000, - last_updated_ts: context.timestamp() as u120, - loan_to_value: loan_to_value as u120, - oracle_address - }); + interest_accumulator: 1000000000, + last_updated_ts: context.timestamp() as u120, + loan_to_value: loan_to_value as u120, + oracle_address, + }); storage.collateral_asset.write(collateral_asset); storage.stable_coin.write(stable_coin); @@ -130,17 +131,17 @@ contract Lending { // Create a position. #[aztec(public)] fn update_accumulator() -> Asset { + + let asset_loc = storage.assets.at(0); let mut asset = asset_loc.read(); - let dt: SafeU120 = SafeU120 { value: context.timestamp() as u120 }.sub(SafeU120 { value: asset.last_updated_ts }); + let dt: SafeU120 = SafeU120{value: context.timestamp() as u120}.sub(SafeU120{value: asset.last_updated_ts}); // Only update if time has passed. if (!dt.is_zero()) { - let precision: SafeU120 = SafeU120 { value: 1000000000 }; - let rate_per_second: u120 = 1268391679; - - // 4% yearly rate / (60 * 60 * 24 * 365) + let precision: SafeU120 = SafeU120{value: 1000000000}; + let rate_per_second: u120 = 1268391679; // 4% yearly rate / (60 * 60 * 24 * 365) // if rate_per_second < sqrt(WAD) our approx is eq precision + rate * dt let multiplier = compute_multiplier(rate_per_second, dt); @@ -165,7 +166,6 @@ contract Lending { ) { let on_behalf_of = compute_identifier(secret, on_behalf_of, context.msg_sender()); let _res = Token::at(collateral_asset).unshield(&mut context, from, context.this_address(), amount, nonce); - // _deposit(on_behalf_of, amount, collateral_asset) let selector = compute_selector("_deposit(Field,Field,Field)"); let _callStackItem2 = context.call_public_function(context.this_address(), selector, [on_behalf_of, amount, collateral_asset]); @@ -181,7 +181,7 @@ contract Lending { Token::at(collateral_asset).transfer_public(context, context.msg_sender(), context.this_address(), amount, nonce); let selector = compute_selector("_deposit(Field,Field,Field)"); let return_values = context.call_public_function(context.this_address(), selector, [on_behalf_of, amount, collateral_asset]); - + return_values[0] } @@ -192,6 +192,7 @@ contract Lending { collateral_asset: Field, ) -> Field { let _asset = Lending::at(context.this_address()).update_accumulator(context); + let coll_asset = storage.collateral_asset.read(); assert(coll_asset == collateral_asset); @@ -233,6 +234,8 @@ contract Lending { ) -> Field { let asset = Lending::at(context.this_address()).update_accumulator(context); let price = PriceFeed::at(asset.oracle_address).get_price(context); + + let coll_loc = storage.collateral.at(owner); let collateral: Field = coll_loc.read(); @@ -245,7 +248,7 @@ contract Lending { let debt_covered = covered_by_collateral(price, asset.loan_to_value, collateral as u120, 0, amount as u120); let debt_returns = debt_updates(asset.interest_accumulator, static_debt as u120, 0, 0); - assert(debt_returns.debt_value < debt_covered); + assert (debt_returns.debt_value < debt_covered); coll_loc.write(collateral - amount); @@ -274,7 +277,7 @@ contract Lending { ) -> Field { let selector = compute_selector("_borrow(Field,Field,Field)"); let return_values = context.call_public_function(context.this_address(), selector, [context.msg_sender(), to, amount]); - + return_values[0] } @@ -286,6 +289,8 @@ contract Lending { ) -> Field { let asset = Lending::at(context.this_address()).update_accumulator(context); let price = PriceFeed::at(asset.oracle_address).get_price(context); + + // Fetch collateral and static_debt, compute health of current position let collateral = storage.collateral.at(owner).read() as u120; @@ -294,7 +299,7 @@ contract Lending { let debt_covered = covered_by_collateral(price, asset.loan_to_value, collateral, 0, 0); let debt_returns = debt_updates(asset.interest_accumulator, static_debt, amount as u120, 0); - assert(debt_returns.debt_value < debt_covered); + assert (debt_returns.debt_value < debt_covered); storage.static_debt.at(owner).write(debt_returns.static_debt as Field); @@ -330,7 +335,7 @@ contract Lending { Token::at(stable_coin).burn_public(context, context.msg_sender(), amount, nonce); let selector = compute_selector("_repay(Field,Field,Field)"); let return_values = context.call_public_function(context.this_address(), selector, [owner, amount, stable_coin]); - + return_values[0] } @@ -341,6 +346,7 @@ contract Lending { stable_coin: Field, ) { let asset = Lending::at(context.this_address()).update_accumulator(context); + // To ensure that private is using the correct token. assert(stable_coin == storage.stable_coin.read()); @@ -349,27 +355,30 @@ contract Lending { let debt_returns = debt_updates(asset.interest_accumulator, static_debt, 0, amount as u120); storage.static_debt.at(owner).write(debt_returns.static_debt as Field); - + 1 } unconstrained fn get_asset( assetId: Field, ) -> Asset { + storage.assets.at(assetId).read() } unconstrained fn get_position( owner: Field, ) -> Position { + let collateral = storage.collateral.at(owner).read(); let static_debt = storage.static_debt.at(owner).read(); let asset = storage.assets.at(0).read(); let debt = debt_value(static_debt as u120, asset.interest_accumulator as u120) as Field; - Position { collateral, static_debt, debt } + Position {collateral, static_debt, debt} } unconstrained fn get_assets() -> [Field; 2] { + [storage.collateral_asset.read(), storage.stable_coin.read()] } diff --git a/yarn-project/noir-contracts/src/contracts/parent_contract/src/main.nr b/yarn-project/noir-contracts/src/contracts/parent_contract/src/main.nr index 73a8aa92360c..02e893ecb4ac 100644 --- a/yarn-project/noir-contracts/src/contracts/parent_contract/src/main.nr +++ b/yarn-project/noir-contracts/src/contracts/parent_contract/src/main.nr @@ -88,7 +88,6 @@ contract Parent { ) { // Enqueue the first public call context.call_public_function(targetContract, targetSelector, [targetValue]); - // Enqueue the second public call context.call_public_function(targetContract, targetSelector, [targetValue + 1]); } @@ -114,7 +113,7 @@ contract Parent { ) { let pubEntryPointSelector = compute_selector("pubEntryPoint(Field,Field,Field)"); let thisAddress = context.this_address(); - + context.call_public_function(thisAddress, pubEntryPointSelector, [targetContract, targetSelector, targetValue]); context.call_public_function(thisAddress, pubEntryPointSelector, [targetContract, targetSelector, targetValue + 1]); diff --git a/yarn-project/noir-contracts/src/contracts/pending_commitments_contract/src/main.nr b/yarn-project/noir-contracts/src/contracts/pending_commitments_contract/src/main.nr index a63ff1193b12..7ccbc640daf3 100644 --- a/yarn-project/noir-contracts/src/contracts/pending_commitments_contract/src/main.nr +++ b/yarn-project/noir-contracts/src/contracts/pending_commitments_contract/src/main.nr @@ -41,6 +41,7 @@ contract PendingCommitments { // TODO(dbanks12): consolidate code into internal helper functions // (once Noir's support for this is more robust) + #[aztec(private)] fn constructor() {} @@ -52,6 +53,8 @@ contract PendingCommitments { amount: Field, owner: Field, ) -> Field { + + let owner_balance = storage.balances.at(owner); let mut note = ValueNote::new(amount, owner); @@ -59,7 +62,6 @@ contract PendingCommitments { owner_balance.insert(&mut note, true); let options = NoteGetterOptions::with_filter(filter_notes_min_sum, amount); - // get note inserted above let maybe_notes = owner_balance.get_notes(options); @@ -78,10 +80,11 @@ contract PendingCommitments { amount: Field, owner: Field, ) -> Field { + + let owner_balance = storage.balances.at(owner); let options = NoteGetterOptions::with_filter(filter_notes_min_sum, amount); - // get note (note inserted at bottom of function shouldn't exist yet) let maybe_notes = owner_balance.get_notes(options); @@ -108,6 +111,8 @@ contract PendingCommitments { amount: Field, owner: Field, ) { + + let owner_balance = storage.balances.at(owner); let mut note = ValueNote::new(amount, owner); @@ -121,6 +126,8 @@ contract PendingCommitments { expected_value: Field, owner: Field, ) -> Field { + + let owner_balance = storage.balances.at(owner); let options = NoteGetterOptions::new().set_limit(1); @@ -138,6 +145,8 @@ contract PendingCommitments { fn get_note_zero_balance( owner: Field, ) { + + let owner_balance = storage.balances.at(owner); let options = NoteGetterOptions::new(); @@ -160,11 +169,9 @@ contract PendingCommitments { ) { // nested call to create/insert note let _callStackItem1 = context.call_private_function(inputs.call_context.storage_contract_address, insert_fn_selector, [amount, owner]); - // nested call to read and nullify that note let _callStackItem2 = context.call_private_function(inputs.call_context.storage_contract_address, get_then_nullify_fn_selector, [amount, owner]); - - // nested call to confirm that balance is zero + // nested call to confirm that balance is zero let _callStackItem3 = context.call_private_function(inputs.call_context.storage_contract_address, get_note_zero_fn_selector, [owner]); } @@ -182,7 +189,6 @@ contract PendingCommitments { // nested call to create/insert note let _callStackItem1 = context.call_private_function(inputs.call_context.storage_contract_address, insert_fn_selector, args); let _callStackItem2 = context.call_private_function(inputs.call_context.storage_contract_address, insert_fn_selector, args); - // nested call to read and nullify that note let _callStackItem3 = context.call_private_function(inputs.call_context.storage_contract_address, get_then_nullify_fn_selector, args); let _callStackItem4 = context.call_private_function(inputs.call_context.storage_contract_address, get_then_nullify_fn_selector, args); @@ -205,7 +211,6 @@ contract PendingCommitments { // nested call to create/insert note let _callStackItem1 = context.call_private_function(inputs.call_context.storage_contract_address, insert_fn_selector, args); let _callStackItem2 = context.call_private_function(inputs.call_context.storage_contract_address, insert_fn_selector, args); - // nested call to read and nullify that note let _callStackItem3 = context.call_private_function(inputs.call_context.storage_contract_address, get_then_nullify_fn_selector, args); } @@ -226,7 +231,6 @@ contract PendingCommitments { // nested call to create/insert note let _callStackItem1 = context.call_private_function(inputs.call_context.storage_contract_address, insert_fn_selector, args); - // nested call to read and nullify that note let _callStackItem2 = context.call_private_function(inputs.call_context.storage_contract_address, get_then_nullify_fn_selector, args); let _callStackItem3 = context.call_private_function(inputs.call_context.storage_contract_address, get_then_nullify_fn_selector, args); @@ -248,6 +252,7 @@ contract PendingCommitments { // get_then_nullify_fn_selector: Field, //) { //} + // Computes note hash and nullifier. // Note 1: Needs to be defined by every contract producing logs. // Note 2: Having it in all the contracts gives us the ability to compute the note hash and nullifier differently for different kind of notes. @@ -255,4 +260,4 @@ contract PendingCommitments { let note_header = NoteHeader::new(contract_address, nonce, storage_slot); note_utils::compute_note_hash_and_nullifier(ValueNoteMethods, note_header, serialized_note) } -} +} \ No newline at end of file diff --git a/yarn-project/noir-contracts/src/contracts/price_feed_contract/src/asset.nr b/yarn-project/noir-contracts/src/contracts/price_feed_contract/src/asset.nr index 9d464eefddc2..9686d74a28dc 100644 --- a/yarn-project/noir-contracts/src/contracts/price_feed_contract/src/asset.nr +++ b/yarn-project/noir-contracts/src/contracts/price_feed_contract/src/asset.nr @@ -7,7 +7,9 @@ struct Asset { global ASSET_SERIALIZED_LEN: Field = 1; fn deserializeAsset(fields: [Field; ASSET_SERIALIZED_LEN]) -> Asset { - Asset { price: fields[0] as u120 } + Asset { + price: fields[0] as u120, + } } fn serializeAsset(asset: Asset) -> [Field; ASSET_SERIALIZED_LEN] { diff --git a/yarn-project/noir-contracts/src/contracts/price_feed_contract/src/main.nr b/yarn-project/noir-contracts/src/contracts/price_feed_contract/src/main.nr index 1cf999f2a6de..1b59c3cd5acd 100644 --- a/yarn-project/noir-contracts/src/contracts/price_feed_contract/src/main.nr +++ b/yarn-project/noir-contracts/src/contracts/price_feed_contract/src/main.nr @@ -35,15 +35,16 @@ contract PriceFeed { } #[aztec(private)] - fn constructor() {} + fn constructor(){} #[aztec(public)] fn set_price( asset_id: Field, price: u120, ) -> Field { + let asset = storage.assets.at(asset_id); - asset.write(Asset { price }); + asset.write(Asset {price: price}); 1 } @@ -52,12 +53,15 @@ contract PriceFeed { fn get_price( asset_id: Field, ) -> Asset { + + storage.assets.at(asset_id).read() } unconstrained fn fetch_price( assetId: Field, ) -> Asset { + storage.assets.at(assetId).read() } diff --git a/yarn-project/noir-contracts/src/contracts/schnorr_account_contract/src/main.nr b/yarn-project/noir-contracts/src/contracts/schnorr_account_contract/src/main.nr index 82a6cce25d80..40985f45f38b 100644 --- a/yarn-project/noir-contracts/src/contracts/schnorr_account_contract/src/main.nr +++ b/yarn-project/noir-contracts/src/contracts/schnorr_account_contract/src/main.nr @@ -45,7 +45,6 @@ contract SchnorrAccount { signing_pub_key_y: pub Field, ) { let this = context.this_address(); - // docs:start:initialize let mut pub_key_note = PublicKeyNote::new(signing_pub_key_x, signing_pub_key_y, this); storage.signing_public_key.initialize(&mut pub_key_note, Option::none(), true); @@ -81,22 +80,17 @@ contract SchnorrAccount { // docs:start:entrypoint // Load public key from storage let storage = Storage::init(Context::private(context)); - // docs:start:get_note let public_key = storage.signing_public_key.get_note(); - // docs:end:get_note // Load auth witness let witness: [Field; 64] = get_auth_witness(message_hash); let mut signature: [u8; 64] = [0; 64]; - for i in 0..64 { - signature[i] = witness[i] as u8; - } + for i in 0..64 { signature[i] = witness[i] as u8; } // Verify signature of the payload bytes let verification = std::schnorr::verify_signature(public_key.x, public_key.y, signature, message_hash.to_be_bytes(32)); assert(verification == true); - // docs:end:entrypoint true } diff --git a/yarn-project/noir-contracts/src/contracts/schnorr_account_contract/src/public_key_note.nr b/yarn-project/noir-contracts/src/contracts/schnorr_account_contract/src/public_key_note.nr index 5547b887f5b1..538eb288ae69 100644 --- a/yarn-project/noir-contracts/src/contracts/schnorr_account_contract/src/public_key_note.nr +++ b/yarn-project/noir-contracts/src/contracts/schnorr_account_contract/src/public_key_note.nr @@ -68,7 +68,12 @@ impl PublicKeyNote { } fn deserialize(serialized_note: [Field; PUBLIC_KEY_NOTE_LEN]) -> PublicKeyNote { - PublicKeyNote { x: serialized_note[0], y: serialized_note[1], owner: serialized_note[2], header: NoteHeader::empty() } + PublicKeyNote { + x: serialized_note[0], + y: serialized_note[1], + owner: serialized_note[2], + header: NoteHeader::empty(), + } } fn serialize(note: PublicKeyNote) -> [Field; PUBLIC_KEY_NOTE_LEN] { @@ -77,7 +82,7 @@ fn serialize(note: PublicKeyNote) -> [Field; PUBLIC_KEY_NOTE_LEN] { fn compute_note_hash(note: PublicKeyNote) -> Field { // TODO(#1205) Should use a non-zero generator index. - pedersen_hash(note.serialize(), 0) + pedersen_hash(note.serialize(),0) } fn compute_nullifier(note: PublicKeyNote) -> Field { diff --git a/yarn-project/noir-contracts/src/contracts/schnorr_hardcoded_account_contract/src/main.nr b/yarn-project/noir-contracts/src/contracts/schnorr_hardcoded_account_contract/src/main.nr index 4d6b60120997..bfaa0b285e49 100644 --- a/yarn-project/noir-contracts/src/contracts/schnorr_hardcoded_account_contract/src/main.nr +++ b/yarn-project/noir-contracts/src/contracts/schnorr_hardcoded_account_contract/src/main.nr @@ -52,9 +52,7 @@ contract SchnorrHardcodedAccount { // Load auth witness and format as an u8 array let witness: [Field; 64] = get_auth_witness(message_hash); let mut signature: [u8; 64] = [0; 64]; - for i in 0..64 { - signature[i] = witness[i] as u8; - } + for i in 0..64 { signature[i] = witness[i] as u8; } // Verify signature using hardcoded public key let verification = std::schnorr::verify_signature(public_key_x, public_key_y, signature, message_hash.to_be_bytes(32)); @@ -62,5 +60,6 @@ contract SchnorrHardcodedAccount { true } // docs:end:is-valid + } -// docs:end:contract +// docs:end:contract \ No newline at end of file diff --git a/yarn-project/noir-contracts/src/contracts/schnorr_single_key_account_contract/src/auth_oracle.nr b/yarn-project/noir-contracts/src/contracts/schnorr_single_key_account_contract/src/auth_oracle.nr index 5b6b3dd7219d..2cb544a4502f 100644 --- a/yarn-project/noir-contracts/src/contracts/schnorr_single_key_account_contract/src/auth_oracle.nr +++ b/yarn-project/noir-contracts/src/contracts/schnorr_single_key_account_contract/src/auth_oracle.nr @@ -24,4 +24,4 @@ impl AuthWitness { unconstrained pub fn get_auth_witness(message_hash: Field) -> AuthWitness { let witness: [Field; 67] = auth_witness::get_auth_witness(message_hash); AuthWitness::deserialize(witness) -} +} \ No newline at end of file diff --git a/yarn-project/noir-contracts/src/contracts/schnorr_single_key_account_contract/src/main.nr b/yarn-project/noir-contracts/src/contracts/schnorr_single_key_account_contract/src/main.nr index 6ddcff3a22e9..6030f2f1251f 100644 --- a/yarn-project/noir-contracts/src/contracts/schnorr_single_key_account_contract/src/main.nr +++ b/yarn-project/noir-contracts/src/contracts/schnorr_single_key_account_contract/src/main.nr @@ -49,4 +49,4 @@ contract SchnorrSingleKeyAccount { assert(recover_address(message_hash, witness) == context.this_address()); true } -} +} \ No newline at end of file diff --git a/yarn-project/noir-contracts/src/contracts/schnorr_single_key_account_contract/src/util.nr b/yarn-project/noir-contracts/src/contracts/schnorr_single_key_account_contract/src/util.nr index af629cf768ed..3b8143735677 100644 --- a/yarn-project/noir-contracts/src/contracts/schnorr_single_key_account_contract/src/util.nr +++ b/yarn-project/noir-contracts/src/contracts/schnorr_single_key_account_contract/src/util.nr @@ -12,4 +12,4 @@ pub fn recover_address( let reproduced_address = compute_address(witness.owner.x, witness.owner.y, witness.partial_address); reproduced_address -} +} \ No newline at end of file diff --git a/yarn-project/noir-contracts/src/contracts/slow_tree_contract/src/capsule.nr b/yarn-project/noir-contracts/src/contracts/slow_tree_contract/src/capsule.nr index 8731eca35d2a..d47e56d47a4a 100644 --- a/yarn-project/noir-contracts/src/contracts/slow_tree_contract/src/capsule.nr +++ b/yarn-project/noir-contracts/src/contracts/slow_tree_contract/src/capsule.nr @@ -4,4 +4,4 @@ fn pop_capsule_oracle() -> [Field; N] {} // A capsule is a "blob" of data that is passed to the contract through an oracle. unconstrained pub fn pop_capsule() -> [Field; N] { pop_capsule_oracle() -} +} \ No newline at end of file diff --git a/yarn-project/noir-contracts/src/contracts/slow_tree_contract/src/main.nr b/yarn-project/noir-contracts/src/contracts/slow_tree_contract/src/main.nr index 118b77e5670d..f2345e111ac7 100644 --- a/yarn-project/noir-contracts/src/contracts/slow_tree_contract/src/main.nr +++ b/yarn-project/noir-contracts/src/contracts/slow_tree_contract/src/main.nr @@ -32,10 +32,8 @@ contract SlowTree { use crate::types::{MembershipProof, deserialize_membership_proof}; global TREE_HEIGHT: Field = 254; - // TREE_HEIGHT + 2 - global MEMBERSHIP_SIZE: Field = 256; - // TREE_HEIGHT * 2 + 4 - global UPDATE_SIZE: Field = 512; + global MEMBERSHIP_SIZE: Field = 256; // TREE_HEIGHT + 2 + global UPDATE_SIZE: Field = 512; // TREE_HEIGHT * 2 + 4 global EMPTY_ROOT: Field = 5785871043333994658400733180052743689641713274194136017445890613179954325976; @@ -86,7 +84,11 @@ contract SlowTree { let expected_root = compute_merkle_root(p.value, p.index, p.sibling_path); let selector = compute_selector("_assert_current_root(Field,Field)"); - context.call_public_function(context.this_address(), selector, [context.msg_sender(), expected_root]); + context.call_public_function( + context.this_address(), + selector, + [context.msg_sender(), expected_root] + ); p.value } @@ -116,7 +118,16 @@ contract SlowTree { let selector = compute_selector("_update(Field,Field,Field,Field,Field,Field)"); context.call_public_function( - context.this_address(), selector, [context.msg_sender(), p.index, p.new_value, before_root, after_root, new_after_root] + context.this_address(), + selector, + [ + context.msg_sender(), + p.index, + p.new_value, + before_root, + after_root, + new_after_root + ] ); } @@ -135,7 +146,11 @@ contract SlowTree { assert(current_root == before, "Before root does not match expected"); assert(after_root == after, "After root does not match expected"); - storage.trees.at(caller).update_unsafe_at(index, new_value, new_root); + storage.trees.at(caller).update_unsafe_at( + index, + new_value, + new_root, + ); } unconstrained fn un_read_leaf_at(address: Field, key: Field) -> Leaf { @@ -149,4 +164,4 @@ contract SlowTree { unconstrained fn compute_note_hash_and_nullifier(_contract_address: Field, _nonce: Field, _storage_slot: Field, _preimage: [Field; 4]) -> [Field; 4] { [0x0d, 0x0e, 0x0a, 0x0d] } -} +} \ No newline at end of file diff --git a/yarn-project/noir-contracts/src/contracts/slow_tree_contract/src/types.nr b/yarn-project/noir-contracts/src/contracts/slow_tree_contract/src/types.nr index 0f4f5eb4119f..cdef27fbbf13 100644 --- a/yarn-project/noir-contracts/src/contracts/slow_tree_contract/src/types.nr +++ b/yarn-project/noir-contracts/src/contracts/slow_tree_contract/src/types.nr @@ -7,11 +7,15 @@ struct MembershipProof { } fn deserialize_membership_proof(serialized: [Field; M]) -> MembershipProof { - let mut sibling_path = [0; N]; - for i in 0..N { - sibling_path[i] = serialized[2 + i]; - } - MembershipProof { index: serialized[0], value: serialized[1], sibling_path } + let mut sibling_path = [0; N]; + for i in 0..N { + sibling_path[i] = serialized[2 + i]; + } + MembershipProof { + index: serialized[0], + value: serialized[1], + sibling_path, + } } impl MembershipProof { @@ -28,4 +32,4 @@ impl MembershipProof { fn deserialize(serialized: [Field; M]) -> Self { deserialize_membership_proof(serialized) } -} +} \ No newline at end of file diff --git a/yarn-project/noir-contracts/src/contracts/stateful_test_contract/src/main.nr b/yarn-project/noir-contracts/src/contracts/stateful_test_contract/src/main.nr index 21e60598701d..921d11f013ed 100644 --- a/yarn-project/noir-contracts/src/contracts/stateful_test_contract/src/main.nr +++ b/yarn-project/noir-contracts/src/contracts/stateful_test_contract/src/main.nr @@ -58,8 +58,9 @@ contract StatefulTest { fn create_note( owner: Field, value: Field, - ) { - if (value != 0) { + ) { + + if (value != 0){ let loc = storage.notes.at(owner); increment(loc, value, owner); } @@ -69,7 +70,8 @@ contract StatefulTest { fn destroy_and_create( recipient: Field, amount: Field, - ) { + ) { + let sender = context.msg_sender(); let sender_notes = storage.notes.at(sender); @@ -82,6 +84,7 @@ contract StatefulTest { unconstrained fn summed_values( owner: Field, ) -> Field { + let owner_balance = storage.notes.at(owner); // Return the sum of all notes in the set. diff --git a/yarn-project/noir-contracts/src/contracts/test_contract/src/interface.nr b/yarn-project/noir-contracts/src/contracts/test_contract/src/interface.nr index a320d8d6c8fe..1bb62e9f3f6f 100644 --- a/yarn-project/noir-contracts/src/contracts/test_contract/src/interface.nr +++ b/yarn-project/noir-contracts/src/contracts/test_contract/src/interface.nr @@ -1,4 +1,5 @@ /* Autogenerated file, do not edit! */ + use dep::std; use dep::aztec::context::{ PrivateContext, PublicContext }; use dep::aztec::constants_gen::RETURN_VALUES_LENGTH; @@ -25,6 +26,7 @@ struct ManyNotesADeepStructTestCodeGenStruct { secret_hash: Field, } + // Interface for calling Test functions from a private context struct TestPrivateContextInterface { address: Field, @@ -240,6 +242,9 @@ impl TestPrivateContextInterface { } } + + + // Interface for calling Test functions from a public context struct TestPublicContextInterface { @@ -325,4 +330,5 @@ impl TestPublicContextInterface { } } - + + diff --git a/yarn-project/noir-contracts/src/contracts/test_contract/src/main.nr b/yarn-project/noir-contracts/src/contracts/test_contract/src/main.nr index 6520c906114b..43180fa693d4 100644 --- a/yarn-project/noir-contracts/src/contracts/test_contract/src/main.nr +++ b/yarn-project/noir-contracts/src/contracts/test_contract/src/main.nr @@ -4,8 +4,8 @@ contract Test { // docs:start:unencrypted_import use dep::aztec::log::emit_unencrypted_log; - // docs:end:unencrypted_import + use dep::aztec::{ context::Context, abi, @@ -48,16 +48,15 @@ contract Test { #[aztec(private)] // docs:start:empty-constructor - fn constructor() -{} - + fn constructor() {} // docs:end:empty-constructor + #[aztec(private)] fn get_public_key( address: Field, - ) -> [Field; 2] { + ) -> [Field; 2]{ let pub_key = get_public_key_oracle(address); - + [pub_key.x, pub_key.y] } @@ -106,7 +105,7 @@ contract Test { args.push(a_deep_struct.a_note.secret_hash); for note in a_deep_struct.many_notes { args.push(note.amount); - args.push(note.secret_hash); + args.push(note.secret_hash); } let args_hash = abi::hash_args(args.storage); let mut context = PrivateContext::new(inputs, args_hash); @@ -122,9 +121,10 @@ contract Test { ) { // Create a commitment to the amount let note = DummyNote::new(amount, secret_hash); - + // Public oracle call to emit new commitment. context.message_portal(note.get_commitment()); + } // Purely exists for testing @@ -135,7 +135,7 @@ contract Test { ) { // Create a commitment to the amount let note = DummyNote::new(amount, secret_hash); - + // Public oracle call to emit new commitment. context.push_new_nullifier(note.get_commitment(), EMPTY_NULLIFIED_COMMITMENT); } @@ -160,15 +160,14 @@ contract Test { assert(context.timestamp() == time); time } - // docs:end:is-time-equal + #[aztec(public)] fn emit_unencrypted( value: Field ) -> Field { // docs:start:emit_unencrypted emit_unencrypted_log(&mut context, value); - // docs:end:emit_unencrypted 0 } @@ -182,12 +181,11 @@ contract Test { secret: Field, ) { let content_hash = get_mint_public_content_hash(to, amount, canceller); - // Consume message and emit nullifier context.consume_l1_to_l2_message(msg_key, content_hash, secret); } - #[aztec(private)] + #[aztec(private)] fn consume_mint_private_message( secret_hash_for_redeeming_minted_notes: Field, amount: Field, diff --git a/yarn-project/noir-contracts/src/contracts/token_blacklist_contract/src/interfaces.nr b/yarn-project/noir-contracts/src/contracts/token_blacklist_contract/src/interfaces.nr index a05dc34874bc..d21f75b25173 100644 --- a/yarn-project/noir-contracts/src/contracts/token_blacklist_contract/src/interfaces.nr +++ b/yarn-project/noir-contracts/src/contracts/token_blacklist_contract/src/interfaces.nr @@ -45,4 +45,4 @@ impl SlowMap { [index, new_value] ); } -} +} \ No newline at end of file diff --git a/yarn-project/noir-contracts/src/contracts/token_blacklist_contract/src/main.nr b/yarn-project/noir-contracts/src/contracts/token_blacklist_contract/src/main.nr index 8b807368ca66..d30ccb605017 100644 --- a/yarn-project/noir-contracts/src/contracts/token_blacklist_contract/src/main.nr +++ b/yarn-project/noir-contracts/src/contracts/token_blacklist_contract/src/main.nr @@ -8,8 +8,10 @@ mod interfaces; // To be read as `caller` calls function at `contract` defined by `selector` with `args` // Including a nonce in the message hash ensures that the message can only be used once. // The slow updates tree are used for access control related to minters and blacklist. + // TODO's: https://github.com/AztecProtocol/aztec-packages/issues/3210 // We are currently unable to do constructor -> private calls + contract TokenBlacklist { // Libs use dep::std::option::Option; @@ -114,14 +116,19 @@ contract TokenBlacklist { //////// // Looking ugly because we cannot do constructor -> private calls + #[aztec(private)] fn init_slow_tree( user: AztecAddress ) { - let roles = UserFlags { is_admin: true, is_minter: false, is_blacklisted: false }.get_value() as Field; + let roles = UserFlags{is_admin: true, is_minter: false, is_blacklisted: false}.get_value() as Field; let slow = SlowMap::at(AztecAddress::new(storage.slow_update.get_note().value)); slow.update_at_private(&mut context, user.address, roles); - context.call_public_function(context.this_address(), compute_selector("_init_slow_tree((Field))"), [context.msg_sender()]); + context.call_public_function( + context.this_address(), + compute_selector("_init_slow_tree((Field))"), + [context.msg_sender()], + ); } #[aztec(public)] @@ -130,6 +137,7 @@ contract TokenBlacklist { } /////// + #[aztec(private)] fn update_roles( user: AztecAddress, @@ -217,7 +225,7 @@ contract TokenBlacklist { amount: Field, nonce: Field, ) -> Field { - let slow = SlowMap::at(storage.public_slow_update.read()); + let slow = SlowMap::at(storage.public_slow_update.read()); let from_roles = UserFlags::new(slow.read_at_pub(context, from.address) as u120); assert(!from_roles.is_blacklisted, "Blacklisted: Sender"); let to_roles = UserFlags::new(slow.read_at_pub(context, to.address) as u120); @@ -245,7 +253,7 @@ contract TokenBlacklist { amount: Field, nonce: Field, ) -> Field { - let slow = SlowMap::at(storage.public_slow_update.read()); + let slow = SlowMap::at(storage.public_slow_update.read()); let from_roles = UserFlags::new(slow.read_at_pub(context, from.address) as u120); assert(!from_roles.is_blacklisted, "Blacklisted: Sender"); @@ -271,20 +279,18 @@ contract TokenBlacklist { amount: Field, secret: Field, ) -> Field { - let slow = SlowMap::at(AztecAddress::new(storage.slow_update.get_note().value)); + let slow = SlowMap::at(AztecAddress::new(storage.slow_update.get_note().value)); let to_roles = UserFlags::new(slow.read_at(&mut context, to.address) as u120); assert(!to_roles.is_blacklisted, "Blacklisted: Recipient"); let pending_shields = storage.pending_shields; let secret_hash = compute_secret_hash(secret); - // Get 1 note (set_limit(1)) which has amount stored in field with index 0 (select(0, amount)) and secret_hash // stored in field with index 1 (select(1, secret_hash)). let options = NoteGetterOptions::new().select(0, amount).select(1, secret_hash).set_limit(1); let notes = pending_shields.get_notes(options); let note = notes[0].unwrap_unchecked(); - - // Remove the note from the pending shields set + // Remove the note from the pending shields set pending_shields.remove(note); // Add the token note to user's balances set @@ -382,6 +388,7 @@ contract TokenBlacklist { } /// Internal /// + #[aztec(public)] internal fn _increase_public_balance( to: AztecAddress, @@ -401,6 +408,7 @@ contract TokenBlacklist { } /// Unconstrained /// + unconstrained fn total_supply() -> u120 { storage.total_supply.read().value } @@ -419,6 +427,7 @@ contract TokenBlacklist { // Below this point is the stuff of nightmares. // This should ideally not be required. What do we do if vastly different types of preimages? + // Computes note hash and nullifier. // Note 1: Needs to be defined by every contract producing logs. // Note 2: Having it in all the contracts gives us the ability to compute the note hash and nullifier differently for different kind of notes. @@ -430,6 +439,6 @@ contract TokenBlacklist { note_utils::compute_note_hash_and_nullifier(FieldNoteMethods, note_header, preimage) } else { note_utils::compute_note_hash_and_nullifier(TokenNoteMethods, note_header, preimage) - } + } } -} +} \ No newline at end of file diff --git a/yarn-project/noir-contracts/src/contracts/token_blacklist_contract/src/types.nr b/yarn-project/noir-contracts/src/contracts/token_blacklist_contract/src/types.nr index f5a3aeaa6fdf..d5747a136a10 100644 --- a/yarn-project/noir-contracts/src/contracts/token_blacklist_contract/src/types.nr +++ b/yarn-project/noir-contracts/src/contracts/token_blacklist_contract/src/types.nr @@ -3,4 +3,4 @@ mod balance_set; mod balances_map; mod token_note; mod safe_u120_serialization; -mod roles; +mod roles; \ No newline at end of file diff --git a/yarn-project/noir-contracts/src/contracts/token_blacklist_contract/src/types/balance_set.nr b/yarn-project/noir-contracts/src/contracts/token_blacklist_contract/src/types/balance_set.nr index 5c3da5897b6a..37dbcd4ddbe6 100644 --- a/yarn-project/noir-contracts/src/contracts/token_blacklist_contract/src/types/balance_set.nr +++ b/yarn-project/noir-contracts/src/contracts/token_blacklist_contract/src/types/balance_set.nr @@ -123,4 +123,4 @@ pub fn filter_notes_min_sum(notes: [Option; MAX_READ_REQUESTS_PER_CAL } } selected -} +} \ No newline at end of file diff --git a/yarn-project/noir-contracts/src/contracts/token_blacklist_contract/src/types/roles.nr b/yarn-project/noir-contracts/src/contracts/token_blacklist_contract/src/types/roles.nr index 793674e996dc..4412dff55926 100644 --- a/yarn-project/noir-contracts/src/contracts/token_blacklist_contract/src/types/roles.nr +++ b/yarn-project/noir-contracts/src/contracts/token_blacklist_contract/src/types/roles.nr @@ -39,4 +39,4 @@ impl UserFlags { value } -} +} \ No newline at end of file diff --git a/yarn-project/noir-contracts/src/contracts/token_blacklist_contract/src/types/safe_u120_serialization.nr b/yarn-project/noir-contracts/src/contracts/token_blacklist_contract/src/types/safe_u120_serialization.nr index 876007184fe1..f4f3ef84d23e 100644 --- a/yarn-project/noir-contracts/src/contracts/token_blacklist_contract/src/types/safe_u120_serialization.nr +++ b/yarn-project/noir-contracts/src/contracts/token_blacklist_contract/src/types/safe_u120_serialization.nr @@ -5,7 +5,7 @@ global SAFE_U120_SERIALIZED_LEN: Field = 1; // This is safe when reading from storage IF only correct safeu120 was written to storage fn deserializeU120(fields: [Field; SAFE_U120_SERIALIZED_LEN]) -> SafeU120 { - SafeU120 { value: fields[0] as u120 } + SafeU120{value: fields[0] as u120} } fn serializeU120(value: SafeU120) -> [Field; SAFE_U120_SERIALIZED_LEN] { @@ -15,4 +15,4 @@ fn serializeU120(value: SafeU120) -> [Field; SAFE_U120_SERIALIZED_LEN] { global SafeU120SerializationMethods = TypeSerializationInterface { deserialize: deserializeU120, serialize: serializeU120, -}; +}; \ No newline at end of file diff --git a/yarn-project/noir-contracts/src/contracts/token_blacklist_contract/src/types/token_note.nr b/yarn-project/noir-contracts/src/contracts/token_blacklist_contract/src/types/token_note.nr index a2e68bed8d6e..41fd41c60823 100644 --- a/yarn-project/noir-contracts/src/contracts/token_blacklist_contract/src/types/token_note.nr +++ b/yarn-project/noir-contracts/src/contracts/token_blacklist_contract/src/types/token_note.nr @@ -19,8 +19,7 @@ use dep::aztec::oracle::{ use dep::safe_math::SafeU120; use dep::std::option::Option; -// 3 plus a header. -global TOKEN_NOTE_LEN: Field = 3; +global TOKEN_NOTE_LEN: Field = 3; // 3 plus a header. struct TokenNote { // the amount of tokens in the note @@ -138,4 +137,4 @@ global TokenNoteMethods = NoteInterface { get_header, set_header, broadcast, -}; +}; \ No newline at end of file diff --git a/yarn-project/noir-contracts/src/contracts/token_blacklist_contract/src/types/transparent_note.nr b/yarn-project/noir-contracts/src/contracts/token_blacklist_contract/src/types/transparent_note.nr index c414d9092793..12772aed42fe 100644 --- a/yarn-project/noir-contracts/src/contracts/token_blacklist_contract/src/types/transparent_note.nr +++ b/yarn-project/noir-contracts/src/contracts/token_blacklist_contract/src/types/transparent_note.nr @@ -127,4 +127,4 @@ global TransparentNoteMethods = NoteInterface { set_header, broadcast, }; -// docs:end:token_types_all +// docs:end:token_types_all \ No newline at end of file diff --git a/yarn-project/noir-contracts/src/contracts/token_bridge_contract/src/main.nr b/yarn-project/noir-contracts/src/contracts/token_bridge_contract/src/main.nr index ad7f53058d66..decb8cd295c1 100644 --- a/yarn-project/noir-contracts/src/contracts/token_bridge_contract/src/main.nr +++ b/yarn-project/noir-contracts/src/contracts/token_bridge_contract/src/main.nr @@ -5,6 +5,7 @@ mod token_interface; // The bridge has a corresponding Portal contract on L1 that it is attached to // And corresponds to a Token on L2 that uses the `AuthWit` accounts pattern. // Bridge has to be set as a minter on the token before it can be used + contract TokenBridge { use dep::aztec::{ context::{Context}, @@ -16,8 +17,8 @@ contract TokenBridge { types::address::{AztecAddress, EthereumAddress}, selector::compute_selector, }; - // docs:end:token_bridge_imports + use dep::token_portal_content_hash_lib::{get_mint_public_content_hash, get_mint_private_content_hash, get_withdraw_content_hash}; use crate::token_interface::Token; @@ -46,8 +47,9 @@ contract TokenBridge { let selector = compute_selector("_initialize((Field))"); context.call_public_function(context.this_address(), selector, [token.address]); } - // docs:end:token_bridge_storage_and_constructor + + // docs:start:claim_public // Consumes a L1->L2 message and calls the token contract to mint the appropriate amount publicly #[aztec(public)] @@ -59,7 +61,6 @@ contract TokenBridge { secret: Field, ) -> Field { let content_hash = get_mint_public_content_hash(to.address, amount, canceller.address); - // Consume message and emit nullifier context.consume_l1_to_l2_message(msg_key, content_hash, secret); @@ -68,8 +69,8 @@ contract TokenBridge { 1 } - // docs:end:claim_public + // docs:start:exit_to_l1_public // Burns the appropriate amount of tokens and creates a L2 to L1 withdraw message publicly // Requires `msg.sender` to give approval to the bridge to burn tokens on their behalf using witness signatures @@ -79,8 +80,7 @@ contract TokenBridge { amount: Field, callerOnL1: EthereumAddress, // ethereum address that can call this function on the L1 portal (0x0 if anyone can call) nonce: Field, // nonce used in the approval message by `msg.sender` to let bridge burn their tokens on L2 - ) -> Field -{ + ) -> Field { // Send an L2 to L1 message let content = get_withdraw_content_hash(recipient.address, amount, callerOnL1.address); context.message_portal(content); @@ -90,7 +90,6 @@ contract TokenBridge { 1 } - // docs:end:exit_to_l1_public // docs:start:claim_private // Consumes a L1->L2 message and calls the token contract to mint the appropriate amount in private assets @@ -102,8 +101,7 @@ contract TokenBridge { canceller: EthereumAddress, msg_key: Field, // L1 to L2 message key as derived from the inbox contract secret_for_L1_to_L2_message_consumption: Field, // secret used to consume the L1 to L2 message - ) -> Field -{ + ) -> Field { // Consume L1 to L2 message and emit nullifier let content_hash = get_mint_private_content_hash(secret_hash_for_redeeming_minted_notes, amount, canceller.address); context.consume_l1_to_l2_message(msg_key, content_hash, secret_for_L1_to_L2_message_consumption); @@ -113,13 +111,15 @@ contract TokenBridge { // which then calls the public method on the token contract. // Since the secret_hash is passed, no secret is leaked. context.call_public_function( - context.this_address(), compute_selector("_call_mint_on_token(Field,Field)"), [amount, secret_hash_for_redeeming_minted_notes] + context.this_address(), + compute_selector("_call_mint_on_token(Field,Field)"), + [amount, secret_hash_for_redeeming_minted_notes], ); 1 } - // docs:end:claim_private + // docs:start:exit_to_l1_private // Burns the appropriate amount of tokens and creates a L2 to L1 withdraw message privately // Requires `msg.sender` (caller of the method) to give approval to the bridge to burn tokens on their behalf using witness signatures @@ -130,8 +130,7 @@ contract TokenBridge { amount: Field, callerOnL1: EthereumAddress, // ethereum address that can call this function on the L1 portal (0x0 if anyone can call) nonce: Field, // nonce used in the approval message by `msg.sender` to let bridge burn their tokens on L2 - ) -> Field -{ + ) -> Field { // Send an L2 to L1 message let content = get_withdraw_content_hash(recipient.address, amount, callerOnL1.address); context.message_portal(content); @@ -144,8 +143,8 @@ contract TokenBridge { 1 } - /// docs:end:exit_to_l1_private + // View function that is callable by other contracts. // Unconstrained can't be called by others since it isn't safe. #[aztec(public)] @@ -154,6 +153,7 @@ contract TokenBridge { } // /// Unconstrained /// + unconstrained fn token() -> Field { storage.token.read() } @@ -168,18 +168,18 @@ contract TokenBridge { // Also, note that user hashes their secret in private and only sends the hash in public // meaning only user can `redeem_shield` at a later time with their secret. #[aztec(public)] - internal fn _call_mint_on_token(amount: Field, secret_hash: Field) { + internal fn _call_mint_on_token(amount: Field, secret_hash: Field){ Token::at(storage.token.read()).mint_private(context, amount, secret_hash); } - // docs:end:call_mint_on_token + // docs:start:assert_token_is_same #[aztec(public)] internal fn _assert_token_is_same(token: Field) { assert(storage.token.read() == token, "Token address is not the same as seen in storage"); } - // docs:end:assert_token_is_same + // TODO: remove this placeholder once https://github.com/AztecProtocol/aztec-packages/issues/2918 is implemented // docs:start:compute_note_hash_and_nullifier_placeholder unconstrained fn compute_note_hash_and_nullifier(contract_address: Field, nonce: Field, storage_slot: Field, serialized_note: [Field; 0]) -> [Field; 4] { diff --git a/yarn-project/noir-contracts/src/contracts/token_bridge_contract/src/token_interface.nr b/yarn-project/noir-contracts/src/contracts/token_bridge_contract/src/token_interface.nr index b7fbd35d7cb6..6e467647059a 100644 --- a/yarn-project/noir-contracts/src/contracts/token_bridge_contract/src/token_interface.nr +++ b/yarn-project/noir-contracts/src/contracts/token_bridge_contract/src/token_interface.nr @@ -50,5 +50,4 @@ impl Token { } // docs:end:private_burn_interface } - // docs:end:token_bridge_token_interface diff --git a/yarn-project/noir-contracts/src/contracts/token_contract/src/main.nr b/yarn-project/noir-contracts/src/contracts/token_contract/src/main.nr index f3cb27e7becd..b6db0a2de8c8 100644 --- a/yarn-project/noir-contracts/src/contracts/token_contract/src/main.nr +++ b/yarn-project/noir-contracts/src/contracts/token_contract/src/main.nr @@ -8,6 +8,7 @@ mod types; // message hash = H([caller, contract, selector, ...args]) // To be read as `caller` calls function at `contract` defined by `selector` with `args` // Including a nonce in the message hash ensures that the message can only be used once. + contract Token { // Libs use dep::std::option::Option; @@ -39,16 +40,16 @@ contract Token { assert_current_call_valid_authwit_public, }, }; - // docs:end:import_authwit + use crate::types::{ transparent_note::{TransparentNote, TransparentNoteMethods, TRANSPARENT_NOTE_LEN}, token_note::{TokenNote, TokenNoteMethods, TOKEN_NOTE_LEN}, balances_map::{BalancesMap}, safe_u120_serialization::{SafeU120SerializationMethods, SAFE_U120_SERIALIZED_LEN} }; - // docs:end::imports + // docs:start:storage_struct struct Storage { // docs:start:storage_admin @@ -66,8 +67,8 @@ contract Token { // docs:end:storage_pending_shields public_balances: Map>, } - // docs:end:storage_struct + // docs:start:storage_init impl Storage { fn init(context: Context) -> pub Self { @@ -117,29 +118,28 @@ contract Token { } } } - // docs:end:storage_init + // docs:start:constructor #[aztec(private)] fn constructor(admin: AztecAddress) { let selector = compute_selector("_initialize((Field))"); context.call_public_function(context.this_address(), selector, [admin.address]); } - // docs:end:constructor + // docs:start:set_admin #[aztec(public)] fn set_admin( new_admin: AztecAddress, ) { assert(storage.admin.read().eq(AztecAddress::new(context.msg_sender())), "caller is not admin"); - // docs:start:write_admin storage.admin.write(new_admin); // docs:end:write_admin } - // docs:end:set_admin + // docs:start:set_minter #[aztec(public)] fn set_minter( @@ -148,14 +148,13 @@ contract Token { ) { // docs:start:read_admin assert(storage.admin.read().eq(AztecAddress::new(context.msg_sender())), "caller is not admin"); - // docs:end:read_admin // docs:start:write_minter storage.minters.at(minter.address).write(approve); // docs:end:write_minter } - // docs:end:set_minter + // docs:start:mint_public #[aztec(public)] fn mint_public( @@ -164,7 +163,6 @@ contract Token { ) -> Field { // docs:start:read_minter assert(storage.minters.at(context.msg_sender()).read(), "caller is not minter"); - // docs:end:read_minter let amount = SafeU120::new(amount); let new_balance = storage.public_balances.at(to.address).read().add(amount); @@ -174,8 +172,8 @@ contract Token { storage.total_supply.write(supply); 1 } - // docs:end:mint_public + // docs:start:mint_private #[aztec(public)] fn mint_private( @@ -188,15 +186,13 @@ contract Token { let supply = storage.total_supply.read().add(SafeU120::new(amount)); storage.total_supply.write(supply); - // docs:start:insert_from_public pending_shields.insert_from_public(&mut note); - // docs:end:insert_from_public 1 } - // docs:end:mint_private + // docs:start:shield #[aztec(public)] fn shield( @@ -222,8 +218,8 @@ contract Token { pending_shields.insert_from_public(&mut note); 1 } - // docs:end:shield + // docs:start:transfer_public #[aztec(public)] fn transfer_public( @@ -247,8 +243,8 @@ contract Token { 1 } - // docs:end:transfer_public + // docs:start:burn_public #[aztec(public)] fn burn_public( @@ -262,8 +258,8 @@ contract Token { } else { assert(nonce == 0, "invalid nonce"); } - // docs:end:assert_current_call_valid_authwit_public + let amount = SafeU120::new(amount); let from_balance = storage.public_balances.at(from.address).read().sub(amount); storage.public_balances.at(from.address).write(from_balance); @@ -273,8 +269,8 @@ contract Token { 1 } - // docs:end:burn_public + // docs:start:redeem_shield #[aztec(private)] fn redeem_shield( @@ -284,14 +280,12 @@ contract Token { ) -> Field { let pending_shields = storage.pending_shields; let secret_hash = compute_secret_hash(secret); - // Get 1 note (set_limit(1)) which has amount stored in field with index 0 (select(0, amount)) and secret_hash // stored in field with index 1 (select(1, secret_hash)). let options = NoteGetterOptions::new().select(0, amount).select(1, secret_hash).set_limit(1); let notes = pending_shields.get_notes(options); let note = notes[0].unwrap_unchecked(); - - // Remove the note from the pending shields set + // Remove the note from the pending shields set pending_shields.remove(note); // Add the token note to user's balances set @@ -299,8 +293,8 @@ contract Token { 1 } - // docs:end:redeem_shield + // docs:start:unshield #[aztec(private)] fn unshield( @@ -322,8 +316,8 @@ contract Token { 1 } - // docs:end:unshield + // docs:start:transfer #[aztec(private)] fn transfer( @@ -338,19 +332,18 @@ contract Token { } else { assert(nonce == 0, "invalid nonce"); } - // docs:end:assert_current_call_valid_authwit + let amount = SafeU120::new(amount); storage.balances.at(from).sub(amount); - // docs:start:increase_private_balance storage.balances.at(to).add(amount); - // docs:end:increase_private_balance + 1 } - // docs:end:transfer + // docs:start:burn #[aztec(private)] fn burn( @@ -371,8 +364,8 @@ contract Token { 1 } - // docs:end:burn + // docs:start:initialize #[aztec(public)] internal fn _initialize( @@ -382,9 +375,10 @@ contract Token { storage.admin.write(new_admin); storage.minters.at(new_admin.address).write(true); } - // docs:end:initialize + /// Internal /// + // docs:start:increase_public_balance #[aztec(public)] internal fn _increase_public_balance( @@ -394,8 +388,8 @@ contract Token { let new_balance = storage.public_balances.at(to.address).read().add(SafeU120::new(amount)); storage.public_balances.at(to.address).write(new_balance); } - // docs:end:increase_public_balance + // docs:start:reduce_total_supply #[aztec(public)] internal fn _reduce_total_supply( @@ -405,47 +399,49 @@ contract Token { let new_supply = storage.total_supply.read().sub(SafeU120::new(amount)); storage.total_supply.write(new_supply); } - // docs:end:reduce_total_supply + /// Unconstrained /// + // docs:start:admin unconstrained fn admin() -> Field { storage.admin.read().address } - // docs:end:admin + // docs:start:is_minter unconstrained fn is_minter( minter: AztecAddress, ) -> bool { storage.minters.at(minter.address).read() } - // docs:end:is_minter + // docs:start:total_supply unconstrained fn total_supply() -> u120 { storage.total_supply.read().value } - // docs:end:total_supply + // docs:start:balance_of_private unconstrained fn balance_of_private( owner: AztecAddress, ) -> u120 { storage.balances.at(owner).balance_of().value } - // docs:end:balance_of_private + // docs:start:balance_of_public unconstrained fn balance_of_public( owner: AztecAddress, ) -> u120 { storage.public_balances.at(owner.address).read().value } - // docs:end:balance_of_public + // Below this point is the stuff of nightmares. // This should ideally not be required. What do we do if vastly different types of serialized_notes? + // docs:start:compute_note_hash_and_nullifier // Computes note hash and nullifier. // Note 1: Needs to be defined by every contract producing logs. @@ -460,5 +456,4 @@ contract Token { } // docs:end:compute_note_hash_and_nullifier } - // docs:end:token_all diff --git a/yarn-project/noir-contracts/src/contracts/token_contract/src/types.nr b/yarn-project/noir-contracts/src/contracts/token_contract/src/types.nr index e29a8151e9f3..1f4883a54c6a 100644 --- a/yarn-project/noir-contracts/src/contracts/token_contract/src/types.nr +++ b/yarn-project/noir-contracts/src/contracts/token_contract/src/types.nr @@ -2,4 +2,4 @@ mod transparent_note; mod balance_set; mod balances_map; mod token_note; -mod safe_u120_serialization; +mod safe_u120_serialization; \ No newline at end of file diff --git a/yarn-project/noir-contracts/src/contracts/token_contract/src/types/balance_set.nr b/yarn-project/noir-contracts/src/contracts/token_contract/src/types/balance_set.nr index 5c3da5897b6a..37dbcd4ddbe6 100644 --- a/yarn-project/noir-contracts/src/contracts/token_contract/src/types/balance_set.nr +++ b/yarn-project/noir-contracts/src/contracts/token_contract/src/types/balance_set.nr @@ -123,4 +123,4 @@ pub fn filter_notes_min_sum(notes: [Option; MAX_READ_REQUESTS_PER_CAL } } selected -} +} \ No newline at end of file diff --git a/yarn-project/noir-contracts/src/contracts/token_contract/src/types/safe_u120_serialization.nr b/yarn-project/noir-contracts/src/contracts/token_contract/src/types/safe_u120_serialization.nr index 876007184fe1..f4f3ef84d23e 100644 --- a/yarn-project/noir-contracts/src/contracts/token_contract/src/types/safe_u120_serialization.nr +++ b/yarn-project/noir-contracts/src/contracts/token_contract/src/types/safe_u120_serialization.nr @@ -5,7 +5,7 @@ global SAFE_U120_SERIALIZED_LEN: Field = 1; // This is safe when reading from storage IF only correct safeu120 was written to storage fn deserializeU120(fields: [Field; SAFE_U120_SERIALIZED_LEN]) -> SafeU120 { - SafeU120 { value: fields[0] as u120 } + SafeU120{value: fields[0] as u120} } fn serializeU120(value: SafeU120) -> [Field; SAFE_U120_SERIALIZED_LEN] { @@ -15,4 +15,4 @@ fn serializeU120(value: SafeU120) -> [Field; SAFE_U120_SERIALIZED_LEN] { global SafeU120SerializationMethods = TypeSerializationInterface { deserialize: deserializeU120, serialize: serializeU120, -}; +}; \ No newline at end of file diff --git a/yarn-project/noir-contracts/src/contracts/token_contract/src/types/token_note.nr b/yarn-project/noir-contracts/src/contracts/token_contract/src/types/token_note.nr index 300089ee7390..442b600f1ce8 100644 --- a/yarn-project/noir-contracts/src/contracts/token_contract/src/types/token_note.nr +++ b/yarn-project/noir-contracts/src/contracts/token_contract/src/types/token_note.nr @@ -19,8 +19,7 @@ use dep::aztec::oracle::{ use dep::safe_math::SafeU120; use dep::std::option::Option; -// 3 plus a header. -global TOKEN_NOTE_LEN: Field = 3; +global TOKEN_NOTE_LEN: Field = 3; // 3 plus a header. struct TokenNote { // the amount of tokens in the note @@ -138,4 +137,4 @@ global TokenNoteMethods = NoteInterface { get_header, set_header, broadcast, -}; +}; \ No newline at end of file diff --git a/yarn-project/noir-contracts/src/contracts/token_contract/src/types/transparent_note.nr b/yarn-project/noir-contracts/src/contracts/token_contract/src/types/transparent_note.nr index 25682c1e0270..034b4b3390f7 100644 --- a/yarn-project/noir-contracts/src/contracts/token_contract/src/types/transparent_note.nr +++ b/yarn-project/noir-contracts/src/contracts/token_contract/src/types/transparent_note.nr @@ -127,4 +127,4 @@ global TransparentNoteMethods = NoteInterface { set_header, broadcast, }; -// docs:end:token_types_all +// docs:end:token_types_all \ No newline at end of file diff --git a/yarn-project/noir-contracts/src/contracts/uniswap_contract/src/interfaces.nr b/yarn-project/noir-contracts/src/contracts/uniswap_contract/src/interfaces.nr index f5a19fd8cefa..aabf2735702c 100644 --- a/yarn-project/noir-contracts/src/contracts/uniswap_contract/src/interfaces.nr +++ b/yarn-project/noir-contracts/src/contracts/uniswap_contract/src/interfaces.nr @@ -53,5 +53,4 @@ impl TokenBridge { ); } } - // docs:end:interfaces diff --git a/yarn-project/noir-contracts/src/contracts/uniswap_contract/src/main.nr b/yarn-project/noir-contracts/src/contracts/uniswap_contract/src/main.nr index 2ede7d6fded8..75ce7e78ea65 100644 --- a/yarn-project/noir-contracts/src/contracts/uniswap_contract/src/main.nr +++ b/yarn-project/noir-contracts/src/contracts/uniswap_contract/src/main.nr @@ -4,7 +4,7 @@ mod util; // Demonstrates how to use portal contracts to swap on L1 Uniswap with funds on L2 // Has two separate flows for private and public respectively -// Uses the token bridge contract, which tells which input token we need to talk to and handles the exit funds to L1 +// Uses the token bridge contract, which tells which input token we need to talk to and handles the exit funds to L1 contract Uniswap { use dep::aztec::{ context::{PrivateContext, PublicContext, Context}, @@ -21,7 +21,7 @@ contract Uniswap { }; use dep::authwit::auth::{IS_VALID_SELECTOR, assert_current_call_valid_authwit_public, compute_authwit_message_hash}; - + use crate::interfaces::{Token, TokenBridge}; use crate::util::{compute_swap_private_content_hash, compute_swap_public_content_hash}; @@ -47,12 +47,12 @@ contract Uniswap { } } } - + #[aztec(private)] fn constructor() {} +// docs:end:uniswap_setup - // docs:end:uniswap_setup - // docs:start:swap_public +// docs:start:swap_public #[aztec(public)] fn swap_public( sender: AztecAddress, @@ -72,8 +72,8 @@ contract Uniswap { caller_on_L1: EthereumAddress, // nonce for someone to call swap on sender's behalf nonce_for_swap_approval: Field, - ) -> Field -{ + ) -> Field { + if (sender.address != context.msg_sender()) { assert_current_call_valid_authwit_public(&mut context, sender); } @@ -81,32 +81,48 @@ contract Uniswap { let input_asset = TokenBridge::at(input_asset_bridge.address).token(context); // Transfer funds to this contract - Token::at(input_asset.address).transfer_public(context, sender.address, context.this_address(), input_amount, nonce_for_transfer_approval); + Token::at(input_asset.address).transfer_public( + context, + sender.address, + context.this_address(), + input_amount, + nonce_for_transfer_approval, + ); // Approve bridge to burn this contract's funds and exit to L1 Uniswap Portal let _void = context.call_public_function( - context.this_address(), compute_selector("_approve_bridge_and_exit_input_asset_to_L1((Field),(Field),Field)"), [input_asset.address, input_asset_bridge.address, input_amount] + context.this_address(), + compute_selector("_approve_bridge_and_exit_input_asset_to_L1((Field),(Field),Field)"), + [input_asset.address, input_asset_bridge.address, input_amount], ); // Create swap message and send to Outbox for Uniswap Portal // this ensures the integrity of what the user originally intends to do on L1. let input_asset_bridge_portal_address = get_portal_address(input_asset_bridge.address); let output_asset_bridge_portal_address = get_portal_address(output_asset_bridge.address); - // ensure portal exists - else funds might be lost assert(input_asset_bridge_portal_address != 0, "L1 portal address of input_asset's bridge is 0"); assert(output_asset_bridge_portal_address != 0, "L1 portal address of output_asset's bridge is 0"); let content_hash = compute_swap_public_content_hash( - input_asset_bridge_portal_address, input_amount, uniswap_fee_tier, output_asset_bridge_portal_address, minimum_output_amount, recipient.address, secret_hash_for_L1_to_l2_message, deadline_for_L1_to_l2_message, canceller_for_L1_to_L2_message.address, caller_on_L1.address + input_asset_bridge_portal_address, + input_amount, + uniswap_fee_tier, + output_asset_bridge_portal_address, + minimum_output_amount, + recipient.address, + secret_hash_for_L1_to_l2_message, + deadline_for_L1_to_l2_message, + canceller_for_L1_to_L2_message.address, + caller_on_L1.address, ); context.message_portal(content_hash); 1 } +// docs:end:swap_public - // docs:end:swap_public - // docs:start:swap_private +// docs:start:swap_private #[aztec(private)] fn swap_private( input_asset: AztecAddress, // since private, we pass here and later assert that this is as expected by input_bridge @@ -124,42 +140,54 @@ contract Uniswap { deadline_for_L1_to_l2_message: Field, // for when l1 uniswap portal inserts the message to consume output assets on L2 canceller_for_L1_to_L2_message: EthereumAddress, // L1 address of who can cancel the message to consume assets on L2. caller_on_L1: EthereumAddress, // ethereum address that can call this function on the L1 portal (0x0 if anyone can call) - ) -> Field -{ + ) -> Field { + // Assert that user provided token address is same as expected by token bridge. // we can't directly use `input_asset_bridge.token` because that is a public method and public can't return data to private - context.call_public_function( - context.this_address(), compute_selector("_assert_token_is_same((Field),(Field))"), [input_asset.address, input_asset_bridge.address] - ); + context.call_public_function(context.this_address(), compute_selector("_assert_token_is_same((Field),(Field))"), [input_asset.address, input_asset_bridge.address]); // Transfer funds to this contract Token::at(input_asset.address).unshield( - &mut context, context.msg_sender(), context.this_address(), input_amount, nonce_for_unshield_approval + &mut context, + context.msg_sender(), + context.this_address(), + input_amount, + nonce_for_unshield_approval, ); // Approve bridge to burn this contract's funds and exit to L1 Uniswap Portal context.call_public_function( - context.this_address(), compute_selector("_approve_bridge_and_exit_input_asset_to_L1((Field),(Field),Field)"), [input_asset.address, input_asset_bridge.address, input_amount] + context.this_address(), + compute_selector("_approve_bridge_and_exit_input_asset_to_L1((Field),(Field),Field)"), + [input_asset.address, input_asset_bridge.address, input_amount], ); // Create swap message and send to Outbox for Uniswap Portal // this ensures the integrity of what the user originally intends to do on L1. let input_asset_bridge_portal_address = get_portal_address(input_asset_bridge.address); let output_asset_bridge_portal_address = get_portal_address(output_asset_bridge.address); - // ensure portal exists - else funds might be lost assert(input_asset_bridge_portal_address != 0, "L1 portal address of input_asset's bridge is 0"); assert(output_asset_bridge_portal_address != 0, "L1 portal address of output_asset's bridge is 0"); let content_hash = compute_swap_private_content_hash( - input_asset_bridge_portal_address, input_amount, uniswap_fee_tier, output_asset_bridge_portal_address, minimum_output_amount, secret_hash_for_redeeming_minted_notes, secret_hash_for_L1_to_l2_message, deadline_for_L1_to_l2_message, canceller_for_L1_to_L2_message.address, caller_on_L1.address + input_asset_bridge_portal_address, + input_amount, + uniswap_fee_tier, + output_asset_bridge_portal_address, + minimum_output_amount, + secret_hash_for_redeeming_minted_notes, + secret_hash_for_L1_to_l2_message, + deadline_for_L1_to_l2_message, + canceller_for_L1_to_L2_message.address, + caller_on_L1.address, ); context.message_portal(content_hash); 1 } - // docs:end:swap_private + // docs:start:authwit_uniswap_get // Since the token bridge burns funds on behalf of this contract, this contract has to tell the token contract if the signature is valid // implementation is similar to how account contracts validate public approvals. @@ -167,10 +195,14 @@ contract Uniswap { #[aztec(public)] fn is_valid_public(message_hash: Field) -> Field { let value = storage.approved_action.at(message_hash).read(); - if (value) { IS_VALID_SELECTOR } else { 0 } + if (value){ + IS_VALID_SELECTOR + } else { + 0 + } } - // docs:end:authwit_uniswap_get + // docs:start:authwit_uniswap_set // This helper method approves the bridge to burn this contract's funds and exits the input asset to L1 // Assumes contract already has funds. @@ -194,19 +226,24 @@ contract Uniswap { // Exit to L1 Uniswap Portal ! TokenBridge::at(token_bridge.address).exit_to_l1_public( - context, context.this_portal_address(), amount, context.this_portal_address(), nonce_for_burn_approval + context, + context.this_portal_address(), + amount, + context.this_portal_address(), + nonce_for_burn_approval, ); } - // docs:end:authwit_uniswap_set + // docs:start:assert_token_is_same #[aztec(public)] internal fn _assert_token_is_same(token: AztecAddress, token_bridge: AztecAddress) { assert(token.eq(TokenBridge::at(token_bridge.address).token(context)), "input_asset address is not the same as seen in the bridge contract"); } - // docs:end:assert_token_is_same + // /// Unconstrained /// + // this method exists solely for e2e tests to test that nonce gets incremented each time. unconstrained fn nonce_for_burn_approval() -> Field { storage.nonce_for_burn_approval.read() @@ -216,4 +253,4 @@ contract Uniswap { unconstrained fn compute_note_hash_and_nullifier(contract_address: Field, nonce: Field, storage_slot: Field, serialized_note: [Field; 0]) -> [Field; 4] { [0, 0, 0, 0] } -} +} \ No newline at end of file diff --git a/yarn-project/noir-contracts/src/contracts/uniswap_contract/src/util.nr b/yarn-project/noir-contracts/src/contracts/uniswap_contract/src/util.nr index 728155e363b8..cc39741944b3 100644 --- a/yarn-project/noir-contracts/src/contracts/uniswap_contract/src/util.nr +++ b/yarn-project/noir-contracts/src/contracts/uniswap_contract/src/util.nr @@ -15,8 +15,7 @@ pub fn compute_swap_public_content_hash( canceller_for_L1_to_L2_message: Field, caller_on_L1: Field, ) -> Field { - // 10 fields of 32 bytes each + 4 bytes fn selector - let mut hash_bytes: [u8; 324] = [0; 324]; + let mut hash_bytes: [u8; 324] = [0; 324]; // 10 fields of 32 bytes each + 4 bytes fn selector let input_token_portal_bytes = input_asset_bridge_portal_address.to_be_bytes(32); let in_amount_bytes = input_amount.to_be_bytes(32); @@ -51,8 +50,8 @@ pub fn compute_swap_public_content_hash( let content_hash = sha256_to_field(hash_bytes); content_hash } - // docs:end:uniswap_public_content_hash + // docs:start:compute_swap_private_content_hash // This method computes the L2 to L1 message content hash for the private // refer `l1-contracts/test/portals/UniswapPortal.sol` on how L2 to L1 message is expected @@ -68,8 +67,7 @@ pub fn compute_swap_private_content_hash( canceller_for_L1_to_L2_message: Field, caller_on_L1: Field, ) -> Field { - // 10 fields of 32 bytes each + 4 bytes fn selector - let mut hash_bytes: [u8; 324] = [0; 324]; + let mut hash_bytes: [u8; 324] = [0; 324]; // 10 fields of 32 bytes each + 4 bytes fn selector let input_token_portal_bytes = input_asset_bridge_portal_address.to_be_bytes(32); let in_amount_bytes = input_amount.to_be_bytes(32); @@ -103,4 +101,4 @@ pub fn compute_swap_private_content_hash( let content_hash = sha256_to_field(hash_bytes); content_hash } -// docs:end:compute_swap_private_content_hash +// docs:end:compute_swap_private_content_hash \ No newline at end of file From 188f029301d11508902e1fa5c8e761ddf8056210 Mon Sep 17 00:00:00 2001 From: benesjan Date: Wed, 22 Nov 2023 07:47:23 +0000 Subject: [PATCH 7/8] chore: formatting noir-contracts with newest version of nargo --- .../benchmarking_contract/src/main.nr | 6 +- .../contracts/card_game_contract/src/cards.nr | 21 +-- .../contracts/card_game_contract/src/game.nr | 22 +-- .../contracts/card_game_contract/src/main.nr | 77 +++----- .../src/contracts/child_contract/src/main.nr | 25 +-- .../contracts/counter_contract/src/main.nr | 47 +++-- .../docs_example_contract/src/actions.nr | 38 +--- .../docs_example_contract/src/main.nr | 67 ++----- .../docs_example_contract/src/options.nr | 44 +---- .../docs_example_contract/src/types.nr | 2 +- .../docs_example_contract/src/types/queen.nr | 5 +- .../easy_private_token_contract/src/main.nr | 26 +-- .../src/ecdsa_public_key_note.nr | 21 +-- .../ecdsa_account_contract/src/main.nr | 18 +- .../src/contracts/escrow_contract/src/main.nr | 18 +- .../import_test_contract/src/main.nr | 35 ++-- .../contracts/lending_contract/src/asset.nr | 4 +- .../contracts/lending_contract/src/helpers.nr | 63 +++---- .../lending_contract/src/interest_math.nr | 19 +- .../lending_contract/src/interfaces.nr | 2 +- .../contracts/lending_contract/src/main.nr | 171 ++++++------------ .../src/contracts/parent_contract/src/main.nr | 73 +++----- .../pending_commitments_contract/src/main.nr | 119 ++++++------ .../price_feed_contract/src/asset.nr | 4 +- .../contracts/price_feed_contract/src/main.nr | 21 +-- .../schnorr_account_contract/src/main.nr | 21 ++- .../src/public_key_note.nr | 9 +- .../src/main.nr | 10 +- .../src/auth_oracle.nr | 2 +- .../src/main.nr | 2 +- .../src/util.nr | 12 +- .../slow_tree_contract/src/capsule.nr | 2 +- .../contracts/slow_tree_contract/src/main.nr | 43 ++--- .../contracts/slow_tree_contract/src/types.nr | 16 +- .../stateful_test_contract/src/main.nr | 19 +- .../contracts/test_contract/src/interface.nr | 9 +- .../src/contracts/test_contract/src/main.nr | 59 ++---- .../src/interfaces.nr | 2 +- .../token_blacklist_contract/src/main.nr | 110 +++-------- .../token_blacklist_contract/src/types.nr | 2 +- .../src/types/balance_set.nr | 2 +- .../src/types/roles.nr | 2 +- .../src/types/safe_u120_serialization.nr | 4 +- .../src/types/token_note.nr | 2 +- .../token_bridge_contract/src/main.nr | 31 ++-- .../src/contracts/token_contract/src/main.nr | 90 ++------- .../src/contracts/token_contract/src/types.nr | 2 +- .../token_contract/src/types/balance_set.nr | 2 +- .../src/types/safe_u120_serialization.nr | 4 +- .../token_contract/src/types/token_note.nr | 2 +- .../contracts/uniswap_contract/src/main.nr | 95 ++++------ .../contracts/uniswap_contract/src/util.nr | 4 +- 52 files changed, 510 insertions(+), 996 deletions(-) diff --git a/yarn-project/noir-contracts/src/contracts/benchmarking_contract/src/main.nr b/yarn-project/noir-contracts/src/contracts/benchmarking_contract/src/main.nr index 12ee0cccdcc5..27683d5a52db 100644 --- a/yarn-project/noir-contracts/src/contracts/benchmarking_contract/src/main.nr +++ b/yarn-project/noir-contracts/src/contracts/benchmarking_contract/src/main.nr @@ -50,7 +50,7 @@ contract Benchmarking { // by @rahul-kothari for a full explanation on why this is needed. #[aztec(private)] fn recreate_note(owner: Field, index: u32) { - let owner_notes = storage.notes.at(owner); + let owner_notes = storage.notes.at(owner); let getter_options = NoteGetterOptions::new().set_limit(1).set_offset(index); let notes = owner_notes.get_notes(getter_options); let note = notes[0].unwrap_unchecked(); @@ -63,7 +63,9 @@ contract Benchmarking { fn increment_balance(owner: Field, value: Field) { let current = storage.balances.at(owner).read(); storage.balances.at(owner).write(current + value); - let _callStackItem1 = context.call_public_function(context.this_address(), compute_selector("broadcast(Field)"), [owner]); + let _callStackItem1 = context.call_public_function(context.this_address(), + compute_selector("broadcast(Field)"), + [owner]); } // Emits a public log. diff --git a/yarn-project/noir-contracts/src/contracts/card_game_contract/src/cards.nr b/yarn-project/noir-contracts/src/contracts/card_game_contract/src/cards.nr index 68c560c9de54..f5f5636132b4 100644 --- a/yarn-project/noir-contracts/src/contracts/card_game_contract/src/cards.nr +++ b/yarn-project/noir-contracts/src/contracts/card_game_contract/src/cards.nr @@ -50,7 +50,6 @@ fn test_to_from_field() { assert(card.to_field() == field); } - struct CardNote { card: Card, note: ValueNote, @@ -96,23 +95,21 @@ pub fn filter_cards(notes: [Option; MAX_READ_REQUESTS_PER_CALL], d for i in 0..notes.len() { let note = notes[i]; if note.is_some() { - let card_note = CardNote::from_note( - note.unwrap_unchecked() - ); + let card_note = CardNote::from_note(note.unwrap_unchecked()); for j in 0..N { - if !found[j] & (card_note.card.strength == desired_cards[j].strength) & (card_note.card.points == desired_cards[j].points) { + if !found[j] + & (card_note.card.strength == desired_cards[j].strength) + & (card_note.card.points == desired_cards[j].points) { selected[i] = note; found[j] = true; } } } - } selected } - impl Deck { pub fn new( context: Context, @@ -191,10 +188,7 @@ impl Deck { global PACK_CARDS = 3; // Limited by number of write requests (max 4) -pub fn get_pack_cards( - seed: Field, - owner_address: Field -) -> [Card; PACK_CARDS] { +pub fn get_pack_cards(seed: Field, owner_address: Field) -> [Card; PACK_CARDS] { // generate pseudo randomness deterministically from 'seed' and user secret let secret = get_secret_key(owner_address); let mix = secret.high + secret.low + seed; @@ -215,7 +209,8 @@ pub fn get_pack_cards( } pub fn compute_deck_strength(cards: [Card; N]) -> Field { - cards.fold(0, |acc, card: Card| { + cards.fold(0, + |acc, card: Card| { acc + card.strength as Field }) -} \ No newline at end of file +} diff --git a/yarn-project/noir-contracts/src/contracts/card_game_contract/src/game.nr b/yarn-project/noir-contracts/src/contracts/card_game_contract/src/game.nr index 75be5f84979f..7b6255e907c2 100644 --- a/yarn-project/noir-contracts/src/contracts/card_game_contract/src/game.nr +++ b/yarn-project/noir-contracts/src/contracts/card_game_contract/src/game.nr @@ -32,29 +32,21 @@ global GAME_SERIALIZED_LEN: Field = 15; fn deserializeGame(fields: [Field; GAME_SERIALIZED_LEN]) -> Game { let players = [ - PlayerEntry { - address: fields[0], - deck_strength: fields[1] as u32, - points: fields[2] as u120, - }, - PlayerEntry { - address: fields[3], - deck_strength: fields[4] as u32, - points: fields[5] as u120, - }, + PlayerEntry { address: fields[0], deck_strength: fields[1] as u32, points: fields[2] as u120 }, + PlayerEntry { address: fields[3], deck_strength: fields[4] as u32, points: fields[5] as u120 } ]; let rounds_cards = [ Card::from_field(fields[6]), Card::from_field(fields[7]), - Card::from_field(fields[8]), Card::from_field(fields[9]), + Card::from_field(fields[8]), Card::from_field(fields[9]) ]; - Game { + Game { players, rounds_cards, started: fields[10] as bool, finished: fields[11] as bool, claimed: fields[12] as bool, current_player: fields[13] as u32, - current_round: fields[14] as u32, + current_round: fields[14] as u32 } } @@ -74,7 +66,7 @@ fn serializeGame(game: Game) -> [Field; GAME_SERIALIZED_LEN] { game.finished as Field, game.claimed as Field, game.current_player as Field, - game.current_round as Field, + game.current_round as Field ] } @@ -169,4 +161,4 @@ impl Game { global GameSerializationMethods = TypeSerializationInterface { deserialize: deserializeGame, serialize: serializeGame, -}; \ No newline at end of file +}; diff --git a/yarn-project/noir-contracts/src/contracts/card_game_contract/src/main.nr b/yarn-project/noir-contracts/src/contracts/card_game_contract/src/main.nr index 732bf0f0c28d..aa01e597e917 100644 --- a/yarn-project/noir-contracts/src/contracts/card_game_contract/src/main.nr +++ b/yarn-project/noir-contracts/src/contracts/card_game_contract/src/main.nr @@ -11,7 +11,6 @@ contract CardGame { }, }; - use dep::std::option::Option; use dep::value_note::{ balance_utils, @@ -50,7 +49,7 @@ contract CardGame { GameSerializationMethods, GAME_SERIALIZED_LEN }; - + struct Storage { collections: Map, game_decks: Map>, @@ -107,10 +106,8 @@ contract CardGame { fn constructor() {} #[aztec(private)] - fn buy_pack( - seed: Field, // The randomness used to generate the cards. Passed in for now. - ) { - + fn buy_pack(seed: Field // The randomness used to generate the cards. Passed in for now. + ) { let buyer = context.msg_sender(); let mut cards = get_pack_cards(seed, buyer); @@ -119,12 +116,9 @@ contract CardGame { } #[aztec(private)] - fn join_game( - game: u32, - cards_fields: [Field; 2], - ) { + fn join_game(game: u32, cards_fields: [Field; 2]) { let cards = cards_fields.map(|card_field| Card::from_field(card_field)); - + let player = context.msg_sender(); let mut collection = storage.collections.at(player); @@ -133,54 +127,47 @@ contract CardGame { let _added_to_game_deck = game_deck.add_cards(cards, player); let selector = compute_selector("on_game_joined(u32,Field,u32)"); let strength = compute_deck_strength(cards); - context.call_public_function(context.this_address(), selector, [game as Field, player, strength]); + context.call_public_function(context.this_address(), + selector, + [game as Field, player, strength]); } #[aztec(public)] - internal fn on_game_joined( - game: u32, - player: Field, - deck_strength: u32, - ) { - + internal fn on_game_joined(game: u32, player: Field, deck_strength: u32) { let game_storage = storage.games.at(game as Field); let mut game_data = game_storage.read(); - assert(game_data.add_player(PlayerEntry {address: player, deck_strength, points: 0}), "Game full"); + assert(game_data.add_player(PlayerEntry { address: player, deck_strength, points: 0 }), "Game full"); game_storage.write(game_data); } #[aztec(public)] - fn start_game(game: u32) { - + fn start_game(game: u32) { let game_storage = storage.games.at(game as Field); - + let mut game_data = game_storage.read(); game_data.start_game(); game_storage.write(game_data); } #[aztec(private)] - fn play_card( - game: u32, - card: Card, - ) { - + fn play_card(game: u32, card: Card) { let player = context.msg_sender(); let mut game_deck = storage.game_decks.at(game as Field).at(player); game_deck.remove_cards([card], player); let selector = compute_selector("on_card_played(u32,Field,Field)"); - context.call_public_function(context.this_address(), selector, [game as Field, player, card.to_field()]); + context.call_public_function(context.this_address(), + selector, + [game as Field, player, card.to_field()]); } #[aztec(public)] internal fn on_card_played(game: u32, player: Field, card_as_field: Field) { - let game_storage = storage.games.at(game as Field); - + let mut game_data = game_storage.read(); let card = Card::from_field(card_as_field); @@ -192,11 +179,7 @@ contract CardGame { } #[aztec(private)] - fn claim_cards( - game: u32, - cards_fields: [Field; PLAYABLE_CARDS], - ) { - + fn claim_cards(game: u32, cards_fields: [Field; PLAYABLE_CARDS]) { let player = context.msg_sender(); let cards = cards_fields.map(|card_field| Card::from_field(card_field)); @@ -204,26 +187,20 @@ contract CardGame { let _inserted_cards = collection.add_cards(cards, player); let selector = compute_selector("on_cards_claimed(u32,Field,Field)"); - context.call_public_function( - context.this_address(), - selector, - [game as Field, player, pedersen_hash(cards_fields,0)] - ); + context.call_public_function(context.this_address(), + selector, + [game as Field, player, pedersen_hash(cards_fields, 0)]); } #[aztec(public)] internal fn on_cards_claimed(game: u32, player: Field, cards_hash: Field) { - let game_storage = storage.games.at(game as Field); let mut game_data = game_storage.read(); - + assert(!game_data.claimed, "Already claimed"); game_data.claimed = true; - assert_eq( - cards_hash, - pedersen_hash(game_data.rounds_cards.map(|card: Card| card.to_field()),0) - ); + assert_eq(cards_hash, pedersen_hash(game_data.rounds_cards.map(|card: Card| card.to_field()), 0)); let winner = game_data.winner(); assert_eq(player, winner.address, "Not the winner"); @@ -232,22 +209,20 @@ contract CardGame { } unconstrained fn view_collection_cards(owner: Field, offset: u32) -> [Option; MAX_NOTES_PER_PAGE] { - let collection = storage.collections.at(owner); collection.view_cards(offset) - } + } unconstrained fn view_game_cards(game: u32, player: Field, offset: u32) -> [Option; MAX_NOTES_PER_PAGE] { - let game_deck = storage.game_decks.at(game as Field).at(player); game_deck.view_cards(offset) - } + } unconstrained fn view_game(game: u32) -> Game { storage.games.at(game as Field).read() - } + } // Computes note hash and nullifier. // Note 1: Needs to be defined by every contract producing logs. diff --git a/yarn-project/noir-contracts/src/contracts/child_contract/src/main.nr b/yarn-project/noir-contracts/src/contracts/child_contract/src/main.nr index f1ecd53091e7..c884aece9082 100644 --- a/yarn-project/noir-contracts/src/contracts/child_contract/src/main.nr +++ b/yarn-project/noir-contracts/src/contracts/child_contract/src/main.nr @@ -28,13 +28,11 @@ contract Child { } #[aztec(private)] - fn constructor() {} + fn constructor() {} // Returns a sum of the input and the chain id and version of the contract in private circuit public input's return_values. #[aztec(private)] - fn value( - input: Field, - ) -> Field { + fn value(input: Field) -> Field { input + context.chain_id() + context.version() } @@ -45,9 +43,7 @@ contract Child { // Returns a sum of the input and the chain id and version of the contract in private circuit public input's return_values. // Can only be called from this contract. #[aztec(private)] - fn valueInternal( - input: Field, - ) -> Field { + fn valueInternal(input: Field) -> Field { check_sender(inputs.call_context); input + context.chain_id() + context.version() } @@ -55,7 +51,11 @@ contract Child { // Returns base_value + chain_id + version + block_number + timestamp #[aztec(public)] fn pubGetValue(base_value: Field) -> Field { - let returnValue = base_value + context.chain_id() + context.version() + context.block_number() + context.timestamp(); + let returnValue = base_value + + context.chain_id() + + context.version() + + context.block_number() + + context.timestamp(); returnValue } @@ -63,17 +63,15 @@ contract Child { // Sets `current_value` to `new_value` #[aztec(public)] fn pubSetValue(new_value: Field) -> Field { - storage.current_value.write(new_value); emit_unencrypted_log(&mut context, new_value); - + new_value } // Increments `current_value` by `new_value` #[aztec(public)] fn pubIncValue(new_value: Field) -> Field { - let old_value = storage.current_value.read(); storage.current_value.write(old_value + new_value); emit_unencrypted_log(&mut context, new_value); @@ -84,12 +82,11 @@ contract Child { // Increments `current_value` by `new_value`. Can only be called from this contract. #[aztec(public)] fn pubIncValueInternal(new_value: Field) -> Field { - check_sender(inputs.call_context); let old_value = storage.current_value.read(); storage.current_value.write(old_value + new_value); emit_unencrypted_log(&mut context, new_value); - + new_value } @@ -98,14 +95,12 @@ contract Child { let pubSetValueSelector = compute_selector("pubSetValue(Field)"); let _ret = context.call_public_function(context.this_address(), pubSetValueSelector, [10]); - storage.current_value.write(20); emit_unencrypted_log(&mut context, 20); } #[aztec(public)] fn setValueTwiceWithNestedLast() { - storage.current_value.write(20); emit_unencrypted_log(&mut context, 20); diff --git a/yarn-project/noir-contracts/src/contracts/counter_contract/src/main.nr b/yarn-project/noir-contracts/src/contracts/counter_contract/src/main.nr index 18836e718270..e332d692bd8e 100644 --- a/yarn-project/noir-contracts/src/contracts/counter_contract/src/main.nr +++ b/yarn-project/noir-contracts/src/contracts/counter_contract/src/main.nr @@ -1,5 +1,5 @@ contract Counter { -// docs:start:imports + // docs:start:imports use dep::aztec::{ context::{PrivateContext, Context}, note::{ @@ -16,17 +16,17 @@ contract Counter { }, }; use dep::easy_private_state::easy_private_state::EasyPrivateUint; -// docs:end:imports + // docs:end:imports -// docs:start:storage_struct + // docs:start:storage_struct struct Storage { counters: Map, } -// docs:end:storage_struct + // docs:end:storage_struct -// docs:start:storage_init + // docs:start:storage_init impl Storage { fn init(context: Context) -> pub Self { Storage { @@ -40,40 +40,35 @@ contract Counter { } } } -// docs:end:storage_init + // docs:end:storage_init -// docs:start:constructor + // docs:start:constructor #[aztec(private)] fn constructor(headstart: u120, owner: Field) { let counters = storage.counters; counters.at(owner).add(headstart, owner); } -// docs:end:constructor + // docs:end:constructor -// docs:start:increment + // docs:start:increment #[aztec(private)] - fn increment(owner: Field) { + fn increment(owner: Field) { let counters = storage.counters; counters.at(owner).add(1, owner); } -// docs:end:increment + // docs:end:increment -// docs:start:get_counter + // docs:start:get_counter unconstrained fn get_counter(owner: Field) -> Field { - let counters = storage.counters; - balance_utils::get_balance(counters.at(owner).set) + let counters = storage.counters; + balance_utils::get_balance(counters.at(owner).set) } -// docs:end:get_counter + // docs:end:get_counter -// docs:start:nullifier - unconstrained fn compute_note_hash_and_nullifier( - contract_address: Field, - nonce: Field, - storage_slot: Field, - preimage: [Field; VALUE_NOTE_LEN], - ) -> [Field; 4] { - let note_header = NoteHeader::new(contract_address, nonce, storage_slot); - note_utils::compute_note_hash_and_nullifier(ValueNoteMethods, note_header, preimage) + // docs:start:nullifier + unconstrained fn compute_note_hash_and_nullifier(contract_address: Field, nonce: Field, storage_slot: Field, preimage: [Field; VALUE_NOTE_LEN]) -> [Field; 4] { + let note_header = NoteHeader::new(contract_address, nonce, storage_slot); + note_utils::compute_note_hash_and_nullifier(ValueNoteMethods, note_header, preimage) } -// docs:end:nullifier -} \ No newline at end of file + // docs:end:nullifier +} diff --git a/yarn-project/noir-contracts/src/contracts/docs_example_contract/src/actions.nr b/yarn-project/noir-contracts/src/contracts/docs_example_contract/src/actions.nr index 03bd8c2c0ded..474fb20c6fce 100644 --- a/yarn-project/noir-contracts/src/contracts/docs_example_contract/src/actions.nr +++ b/yarn-project/noir-contracts/src/contracts/docs_example_contract/src/actions.nr @@ -38,10 +38,7 @@ pub fn get_current_queen(state_var: PublicState) -> } // docs:end:state_vars-PublicStateReadCustom -pub fn can_replace_queen( - state_var: PublicState, - new_queen: Queen, -) -> bool { +pub fn can_replace_queen(state_var: PublicState, new_queen: Queen) -> bool { let current_queen = get_current_queen(state_var); new_queen.points > current_queen.points } @@ -79,10 +76,7 @@ pub fn get_legendary_card(state_var: Singleton) -> Card // docs:end:state_vars-SingletonGet // docs:start:state_vars-ImmutableSingletonInit -pub fn init_game_rules( - state_var: ImmutableSingleton, - rules: &mut RulesNote, -) { +pub fn init_game_rules(state_var: ImmutableSingleton, rules: &mut RulesNote) { state_var.initialize(rules, Option::none(), true); } // docs:end:state_vars-ImmutableSingletonInit @@ -109,29 +103,20 @@ pub fn remove_card(state_var: Set, card: CardNote) { // docs:start:state_vars-SetGet pub fn get_cards( state_var: Set, - options: NoteGetterOptions, + options: NoteGetterOptions ) -> [Option; MAX_READ_REQUESTS_PER_CALL] { state_var.get_notes(options) } // docs:end:state_vars-SetGet // docs:start:state_vars-SetView -unconstrained pub fn view_cards( - state_var: Set, - options: NoteViewerOptions, -) -> [Option; MAX_NOTES_PER_PAGE] { +unconstrained pub fn view_cards(state_var: Set, options: NoteViewerOptions) -> [Option; MAX_NOTES_PER_PAGE] { state_var.view_notes(options) } // docs:end:state_vars-SetView -unconstrained pub fn get_total_points( - state_var: Set, - account: Field, - offset: u32, -) -> u8 { - let options = NoteViewerOptions::new() - .select(2, account) - .set_offset(offset); +unconstrained pub fn get_total_points(state_var: Set, account: Field, offset: u32) -> u8 { + let options = NoteViewerOptions::new().select(2, account).set_offset(offset); let mut total_points = 0; let notes = view_cards(state_var, options); for i in 0..notes.len() { @@ -146,20 +131,13 @@ unconstrained pub fn get_total_points( } // docs:start:state_vars-MapAtSingletonInit -pub fn add_new_profile( - state_var: Map>, - account: Field, - profile: &mut ProfileNote, -) { +pub fn add_new_profile(state_var: Map>, account: Field, profile: &mut ProfileNote) { state_var.at(account).initialize(profile, Option::some(account), true); } // docs:end:state_vars-MapAtSingletonInit // docs:start:state_vars-MapAtSingletonGet -pub fn get_profile( - state_var: Map>, - account: Field, -) -> ProfileNote { +pub fn get_profile(state_var: Map>, account: Field) -> ProfileNote { state_var.at(account).get_note(true) } // docs:end:state_vars-MapAtSingletonGet diff --git a/yarn-project/noir-contracts/src/contracts/docs_example_contract/src/main.nr b/yarn-project/noir-contracts/src/contracts/docs_example_contract/src/main.nr index 3930ac84f2b2..95eb42363cb7 100644 --- a/yarn-project/noir-contracts/src/contracts/docs_example_contract/src/main.nr +++ b/yarn-project/noir-contracts/src/contracts/docs_example_contract/src/main.nr @@ -91,11 +91,7 @@ contract DocsExample { global GET_POINTS_OF_COMMON_CARD_FUNCTION_SELECTOR = 11111111; #[aztec(private)] - fn constructor( - min_points: u8, - max_points: u8, - legendary_card_secret: Field, - ) { + fn constructor(min_points: u8, max_points: u8, legendary_card_secret: Field) { let mut game_rules = RulesNote::new(min_points, max_points, Option::some(0)); actions::init_game_rules(storage.game_rules, &mut game_rules); @@ -107,7 +103,7 @@ contract DocsExample { #[aztec(public)] fn lock() { // highlight-next-line:storage-init - + storage.locked.write(true); } // docs:end:storage-init @@ -115,30 +111,22 @@ contract DocsExample { // docs:start:functions-OpenFunction #[aztec(public)] fn unlock() { - actions::unlock(storage.locked); } // docs:end:functions-OpenFunction #[aztec(public)] - fn replace_queen( - account: Field, - points: u8, - ) { - - + fn replace_queen(account: Field, points: u8) { let new_queen = Queen { account, points }; - + assert(actions::can_replace_queen(storage.queen, new_queen)); - + actions::replace_queen(storage.queen, new_queen); } // docs:start:state_vars-PublicStateWriteBeforeCall #[aztec(public)] fn replace_queen_unsafe() { - - let account = context.msg_sender(); let points = actions::get_total_points(storage.cards, account, 0); @@ -147,7 +135,7 @@ contract DocsExample { assert(points > current_queen.points); AccountContractInterface::at(account).send_rewards(current_queen.points); - + let new_queen = Queen { account, points }; storage.queen.write(new_queen); } @@ -156,8 +144,6 @@ contract DocsExample { // docs:start:functions-SecretFunction #[aztec(private)] fn add_common_cards(secrets: [Field; 4]) { - - for i in 0..secrets.len() as u8 { let mut card = CardNote::new(0, secrets[i], 0); actions::add_new_card(storage.cards, &mut card); @@ -166,12 +152,7 @@ contract DocsExample { // docs:end:functions-SecretFunction #[aztec(private)] - fn update_legendary_card( - new_points: u8, - new_secret: Field, - ) { - - + fn update_legendary_card(new_points: u8, new_secret: Field) { let owner = inputs.call_context.msg_sender; let mut updated_card = CardNote::new(new_points, new_secret, owner); @@ -182,32 +163,21 @@ contract DocsExample { #[aztec(private)] fn become_queen() { - - let legendary_card = actions::get_legendary_card(storage.legendary_card); let owner = legendary_card.owner; - let result = context.call_private_function( - inputs.call_context.storage_contract_address, + let result = context.call_private_function(inputs.call_context.storage_contract_address, GET_POINTS_OF_COMMON_CARD_FUNCTION_SELECTOR, - [owner, 0] - ); + [owner, 0]); let total_points = legendary_card.points + result[0] as u8; - context.call_public_function( - inputs.call_context.storage_contract_address, + context.call_public_function(inputs.call_context.storage_contract_address, REPLACE_QUEEN_FUNCTION_SELECTOR, - [owner, total_points as Field] - ); + [owner, total_points as Field]); } #[aztec(private)] - fn get_points_of_common_cards( - account: Field, - offset: u32, - ) { - - + fn get_points_of_common_cards(account: Field, offset: u32) { let mut total_points = 0; let options = create_account_card_getter_options(account, offset); let cards = actions::get_cards(storage.cards, options); @@ -224,12 +194,10 @@ contract DocsExample { // docs:start:functions-UnconstrainedFunction unconstrained fn get_total_points(account: Field) -> u8 { - actions::get_total_points(storage.cards, account, 0) } // docs:end:functions-UnconstrainedFunction - /// Macro equivalence section use dep::aztec::abi; use dep::aztec::abi::Hasher; @@ -243,7 +211,6 @@ contract DocsExample { } // docs:end:simple_macro_example - // docs:start:simple_macro_example_expanded fn simple_macro_example_expanded( // ************************************************************ @@ -255,9 +222,7 @@ contract DocsExample { // Our original inputs! a: Field, - b: Field - - // The actual return type of our circuit is the PrivateCircuitPublicInputs struct, this will be the + b: Field // The actual return type of our circuit is the PrivateCircuitPublicInputs struct, this will be the // input to our kernel! // docs:start:context-example-return ) -> distinct pub abi::PrivateCircuitPublicInputs { @@ -297,15 +262,11 @@ contract DocsExample { } // docs:end:simple_macro_example_expanded - // Cross chain messaging section // Demonstrates a cross chain message // docs:start:l1_to_l2_cross_chain_message #[aztec(private)] - fn send_to_l1() { - - - } + fn send_to_l1() {} // docs:end:l1_to_l2_cross_chain_message // TODO: remove this placeholder once https://github.com/AztecProtocol/aztec-packages/issues/2918 is implemented diff --git a/yarn-project/noir-contracts/src/contracts/docs_example_contract/src/options.nr b/yarn-project/noir-contracts/src/contracts/docs_example_contract/src/options.nr index 636a6de36093..c225942b9fb3 100644 --- a/yarn-project/noir-contracts/src/contracts/docs_example_contract/src/options.nr +++ b/yarn-project/noir-contracts/src/contracts/docs_example_contract/src/options.nr @@ -4,35 +4,19 @@ use dep::aztec::note::note_getter_options::{NoteGetterOptions, Sort, SortOrder}; use dep::std::option::Option; // docs:start:state_vars-NoteGetterOptionsSelectSortOffset -pub fn create_account_card_getter_options( - account_address: Field, - offset: u32, -) -> NoteGetterOptions { - NoteGetterOptions::new() - .select(2, account_address) - .sort(0, SortOrder.DESC) - .set_offset(offset) +pub fn create_account_card_getter_options(account_address: Field, offset: u32) -> NoteGetterOptions { + NoteGetterOptions::new().select(2, account_address).sort(0, SortOrder.DESC).set_offset(offset) } // docs:end:state_vars-NoteGetterOptionsSelectSortOffset // docs:start:state_vars-NoteGetterOptionsMultiSelects -pub fn create_exact_card_getter_options( - points: u8, - secret: Field, - account_address: Field, -) -> NoteGetterOptions { - NoteGetterOptions::new() - .select(0, points as Field) - .select(1, secret) - .select(2, account_address) +pub fn create_exact_card_getter_options(points: u8, secret: Field, account_address: Field) -> NoteGetterOptions { + NoteGetterOptions::new().select(0, points as Field).select(1, secret).select(2, account_address) } // docs:end:state_vars-NoteGetterOptionsMultiSelects // docs:start:state_vars-OptionFilter -pub fn filter_min_points( - cards: [Option; MAX_READ_REQUESTS_PER_CALL], - min_points: u8, -) -> [Option; MAX_READ_REQUESTS_PER_CALL] { +pub fn filter_min_points(cards: [Option; MAX_READ_REQUESTS_PER_CALL], min_points: u8) -> [Option; MAX_READ_REQUESTS_PER_CALL] { let mut selected_cards = [Option::none(); MAX_READ_REQUESTS_PER_CALL]; let mut num_selected = 0; for i in 0..cards.len() { @@ -46,23 +30,13 @@ pub fn filter_min_points( // docs:end:state_vars-OptionFilter // docs:start:state_vars-NoteGetterOptionsFilter -pub fn create_account_cards_with_min_points_getter_options( - account_address: Field, - min_points: u8, -) -> NoteGetterOptions { - NoteGetterOptions::with_filter(filter_min_points, min_points) - .select(2, account_address) - .sort(0, SortOrder.ASC) +pub fn create_account_cards_with_min_points_getter_options(account_address: Field, min_points: u8) -> NoteGetterOptions { + NoteGetterOptions::with_filter(filter_min_points, min_points).select(2, account_address).sort(0, SortOrder.ASC) } // docs:end:state_vars-NoteGetterOptionsFilter // docs:start:state_vars-NoteGetterOptionsPickOne -pub fn create_largest_account_card_getter_options( - account_address: Field, -) -> NoteGetterOptions { - NoteGetterOptions::new() - .select(2, account_address) - .sort(0, SortOrder.DESC) - .set_limit(1) +pub fn create_largest_account_card_getter_options(account_address: Field) -> NoteGetterOptions { + NoteGetterOptions::new().select(2, account_address).sort(0, SortOrder.DESC).set_limit(1) } // docs:end:state_vars-NoteGetterOptionsPickOne diff --git a/yarn-project/noir-contracts/src/contracts/docs_example_contract/src/types.nr b/yarn-project/noir-contracts/src/contracts/docs_example_contract/src/types.nr index 9e0784c92cad..b8bf6dc7bfd8 100644 --- a/yarn-project/noir-contracts/src/contracts/docs_example_contract/src/types.nr +++ b/yarn-project/noir-contracts/src/contracts/docs_example_contract/src/types.nr @@ -1,4 +1,4 @@ mod card_note; mod profile_note; mod queen; -mod rules_note; \ No newline at end of file +mod rules_note; diff --git a/yarn-project/noir-contracts/src/contracts/docs_example_contract/src/types/queen.nr b/yarn-project/noir-contracts/src/contracts/docs_example_contract/src/types/queen.nr index 635205ecd6f6..488ee5f52bc1 100644 --- a/yarn-project/noir-contracts/src/contracts/docs_example_contract/src/types/queen.nr +++ b/yarn-project/noir-contracts/src/contracts/docs_example_contract/src/types/queen.nr @@ -11,10 +11,7 @@ struct Queen { global QUEEN_SERIALIZED_LEN: Field = 2; fn deserialize(fields: [Field; QUEEN_SERIALIZED_LEN]) -> Queen { - Queen { - account: fields[0], - points: fields[1] as u8, - } + Queen { account: fields[0], points: fields[1] as u8 } } fn serialize(queen: Queen) -> [Field; QUEEN_SERIALIZED_LEN] { diff --git a/yarn-project/noir-contracts/src/contracts/easy_private_token_contract/src/main.nr b/yarn-project/noir-contracts/src/contracts/easy_private_token_contract/src/main.nr index fc3ebaf65acc..859d6859bf7c 100644 --- a/yarn-project/noir-contracts/src/contracts/easy_private_token_contract/src/main.nr +++ b/yarn-project/noir-contracts/src/contracts/easy_private_token_contract/src/main.nr @@ -38,13 +38,9 @@ contract EasyPrivateToken { /** * initialize the contract's initial state variables. - */ + */ #[aztec(private)] - fn constructor( - initial_supply: u120, - owner: Field, - ) { - + fn constructor(initial_supply: u120, owner: Field) { let balances = storage.balances; balances.at(owner).add(initial_supply, owner); @@ -52,11 +48,7 @@ contract EasyPrivateToken { // Mints `amount` of tokens to `owner`. #[aztec(private)] - fn mint( - amount: u120, - owner: Field, - ) { - + fn mint(amount: u120, owner: Field) { let balances = storage.balances; balances.at(owner).add(amount, owner); @@ -64,12 +56,7 @@ contract EasyPrivateToken { // Transfers `amount` of tokens from `sender` to a `recipient`. #[aztec(private)] - fn transfer( - amount: u120, - sender: Field, - recipient: Field, - ) { - + fn transfer(amount: u120, sender: Field, recipient: Field) { let balances = storage.balances; balances.at(sender).sub(amount, sender); @@ -77,10 +64,7 @@ contract EasyPrivateToken { } // Helper function to get the balance of a user ("unconstrained" is a Noir alternative of Solidity's "view" function). - unconstrained fn getBalance( - owner: Field, - ) -> Field { - + unconstrained fn getBalance(owner: Field) -> Field { let balances = storage.balances; // Return the sum of all notes in the set. diff --git a/yarn-project/noir-contracts/src/contracts/ecdsa_account_contract/src/ecdsa_public_key_note.nr b/yarn-project/noir-contracts/src/contracts/ecdsa_account_contract/src/ecdsa_public_key_note.nr index 18d45ad39dd6..436199240ada 100644 --- a/yarn-project/noir-contracts/src/contracts/ecdsa_account_contract/src/ecdsa_public_key_note.nr +++ b/yarn-project/noir-contracts/src/contracts/ecdsa_account_contract/src/ecdsa_public_key_note.nr @@ -89,23 +89,22 @@ impl EcdsaPublicKeyNote { } fn deserialize(serialized_note: [Field; ECDSA_PUBLIC_KEY_NOTE_LEN]) -> EcdsaPublicKeyNote { - let mut x: [u8; 32] = [0;32]; - let mut y: [u8; 32] = [0;32]; + let mut x: [u8; 32] = [0; 32]; + let mut y: [u8; 32] = [0; 32]; let part_x = serialized_note[0].to_be_bytes(32); - for i in 0..31 { x[i] = part_x[i + 1]; } + for i in 0..31 { + x[i] = part_x[i + 1]; + } x[31] = serialized_note[1].to_be_bytes(32)[31]; let part_y = serialized_note[2].to_be_bytes(32); - for i in 0..31 { y[i] = part_y[i + 1]; } + for i in 0..31 { + y[i] = part_y[i + 1]; + } y[31] = serialized_note[3].to_be_bytes(32)[31]; - EcdsaPublicKeyNote { - x, - y, - owner: serialized_note[4], - header: NoteHeader::empty(), - } + EcdsaPublicKeyNote { x, y, owner: serialized_note[4], header: NoteHeader::empty() } } fn serialize(note: EcdsaPublicKeyNote) -> [Field; ECDSA_PUBLIC_KEY_NOTE_LEN] { @@ -114,7 +113,7 @@ fn serialize(note: EcdsaPublicKeyNote) -> [Field; ECDSA_PUBLIC_KEY_NOTE_LEN] { fn compute_note_hash(note: EcdsaPublicKeyNote) -> Field { // TODO(#1205) Should use a non-zero generator index. - pedersen_hash(note.serialize(),0) + pedersen_hash(note.serialize(), 0) } fn compute_nullifier(note: EcdsaPublicKeyNote) -> Field { diff --git a/yarn-project/noir-contracts/src/contracts/ecdsa_account_contract/src/main.nr b/yarn-project/noir-contracts/src/contracts/ecdsa_account_contract/src/main.nr index 4dabf31b3b65..7706217e639b 100644 --- a/yarn-project/noir-contracts/src/contracts/ecdsa_account_contract/src/main.nr +++ b/yarn-project/noir-contracts/src/contracts/ecdsa_account_contract/src/main.nr @@ -41,10 +41,7 @@ contract EcdsaAccount { // Creates a new account out of an ECDSA public key to use for signature verification #[aztec(private)] - fn constructor( - signing_pub_key_x: pub [u8;32], - signing_pub_key_y: pub [u8;32], - ) { + fn constructor(signing_pub_key_x: pub [u8;32], signing_pub_key_y: pub [u8;32]) { let this = context.this_address(); let mut pub_key_note = EcdsaPublicKeyNote::new(signing_pub_key_x, signing_pub_key_y, this); storage.public_key.initialize(&mut pub_key_note, Option::none(), true); @@ -79,11 +76,13 @@ contract EcdsaAccount { // Load public key from storage let storage = Storage::init(Context::private(context)); let public_key = storage.public_key.get_note(); - + // Load auth witness let witness: [Field; 64] = get_auth_witness(message_field); let mut signature: [u8; 64] = [0; 64]; - for i in 0..64 { signature[i] = witness[i] as u8; } + for i in 0..64 { + signature[i] = witness[i] as u8; + } // Verify payload signature using Ethereum's signing scheme // Note that noir expects the hash of the message/challenge as input to the ECDSA verification. @@ -97,7 +96,12 @@ contract EcdsaAccount { // Computes note hash and nullifier. // Note 1: Needs to be defined by every contract producing logs. // Note 2: Having it in all the contracts gives us the ability to compute the note hash and nullifier differently for different kind of notes. - unconstrained fn compute_note_hash_and_nullifier(contract_address: Field, nonce: Field, storage_slot: Field, serialized_note: [Field; ECDSA_PUBLIC_KEY_NOTE_LEN]) -> [Field; 4] { + unconstrained fn compute_note_hash_and_nullifier( + contract_address: Field, + nonce: Field, + storage_slot: Field, + serialized_note: [Field; ECDSA_PUBLIC_KEY_NOTE_LEN] + ) -> [Field; 4] { assert(storage_slot == 1); let note_header = NoteHeader::new(contract_address, nonce, storage_slot); note_utils::compute_note_hash_and_nullifier(EcdsaPublicKeyNoteInterface, note_header, serialized_note) diff --git a/yarn-project/noir-contracts/src/contracts/escrow_contract/src/main.nr b/yarn-project/noir-contracts/src/contracts/escrow_contract/src/main.nr index 49bedc9234e3..befda6263730 100644 --- a/yarn-project/noir-contracts/src/contracts/escrow_contract/src/main.nr +++ b/yarn-project/noir-contracts/src/contracts/escrow_contract/src/main.nr @@ -35,11 +35,9 @@ contract Escrow { // Creates a new instance // docs:start:constructor #[aztec(private)] - fn constructor( - owner: pub Field - ) { + fn constructor(owner: pub Field) { let this = context.this_address(); - + // Create a new note and add it to the owners set. let mut note = AddressNote::new(owner, this); @@ -50,11 +48,7 @@ contract Escrow { // Withdraws balance. Requires that msg.sender is registered as an owner. #[aztec(private)] - fn withdraw( - token: Field, - amount: Field, - recipient: Field, - ) { + fn withdraw(token: Field, amount: Field, recipient: Field) { let this = context.this_address(); let sender = context.msg_sender(); @@ -64,11 +58,7 @@ contract Escrow { assert(notes[0].is_some(), "Sender is not an owner."); let selector = compute_selector("transfer((Field),(Field),Field,Field)"); - let _callStackItem = context.call_private_function( - token, - selector, - [this, recipient, amount, 0] - ); + let _callStackItem = context.call_private_function(token, selector, [this, recipient, amount, 0]); } unconstrained fn compute_note_hash_and_nullifier(contract_address: Field, nonce: Field, storage_slot: Field, serialized_note: [Field; ADDRESS_NOTE_LEN]) -> [Field; 4] { diff --git a/yarn-project/noir-contracts/src/contracts/import_test_contract/src/main.nr b/yarn-project/noir-contracts/src/contracts/import_test_contract/src/main.nr index 599a28218fb7..abf55cd9ba6e 100644 --- a/yarn-project/noir-contracts/src/contracts/import_test_contract/src/main.nr +++ b/yarn-project/noir-contracts/src/contracts/import_test_contract/src/main.nr @@ -12,38 +12,33 @@ contract ImportTest { ManyNotesADeepStructTestCodeGenStruct, }; - #[aztec(private)] fn constructor( ) {} - + // Calls the testCodeGen on the Test contract at the target address // Used for testing calling a function with arguments of multiple types // See yarn-project/acir-simulator/src/client/private_execution.ts // See yarn-project/end-to-end/src/e2e_nested_contract.test.ts #[aztec(private)] - fn main( - target: Field - ) -> Field { + fn main(target: Field) -> Field { let test_contract_instance = TestPrivateContextInterface::at(target); - let return_values = test_contract_instance.test_code_gen( - &mut context, + let return_values = test_contract_instance.test_code_gen(&mut context, 1, true, 1 as u32, [1, 2], AStructTestCodeGenStruct { amount: 1, secret_hash: 2 }, ADeepStructTestCodeGenStruct { - a_field: 1, - a_bool: true, + a_field: 1, + a_bool: true, a_note: ANoteADeepStructTestCodeGenStruct { amount: 1, secret_hash: 2 }, many_notes: [ ManyNotesADeepStructTestCodeGenStruct { amount: 1, secret_hash: 2 }, ManyNotesADeepStructTestCodeGenStruct { amount: 1, secret_hash: 2 }, - ManyNotesADeepStructTestCodeGenStruct { amount: 1, secret_hash: 2 }, + ManyNotesADeepStructTestCodeGenStruct { amount: 1, secret_hash: 2 } ] - } - ); + }); return_values[0] } @@ -52,12 +47,10 @@ contract ImportTest { // Used for testing calling a function with no arguments // See yarn-project/end-to-end/src/e2e_nested_contract.test.ts #[aztec(private)] - fn callNoArgs( - target: Field - ) -> Field { + fn callNoArgs(target: Field) -> Field { let test_contract_instance = TestPrivateContextInterface::at(target); let return_values = test_contract_instance.get_this_address(&mut context); - + return_values[0] } @@ -65,9 +58,7 @@ contract ImportTest { // Used for testing calling an open function // See yarn-project/end-to-end/src/e2e_nested_contract.test.ts #[aztec(private)] - fn callOpenFn( - target: Field, - ) { + fn callOpenFn(target: Field) { let test_contract_instance = TestPrivateContextInterface::at(target); test_contract_instance.create_nullifier_public(&mut context, 1, 2); } @@ -76,12 +67,10 @@ contract ImportTest { // Used for testing calling an open function from another open function // See yarn-project/end-to-end/src/e2e_nested_contract.test.ts #[aztec(public)] - fn pubCallOpenFn( - target: Field, - ) -> Field { + fn pubCallOpenFn(target: Field) -> Field { let test_contract_instance = TestPublicContextInterface::at(target); let ret = test_contract_instance.create_nullifier_public(context, 1, 2); - + ret[0] } } diff --git a/yarn-project/noir-contracts/src/contracts/lending_contract/src/asset.nr b/yarn-project/noir-contracts/src/contracts/lending_contract/src/asset.nr index cb8dcd90ad4f..e4158fda7f22 100644 --- a/yarn-project/noir-contracts/src/contracts/lending_contract/src/asset.nr +++ b/yarn-project/noir-contracts/src/contracts/lending_contract/src/asset.nr @@ -21,7 +21,7 @@ fn deserializeAsset(fields: [Field; ASSET_SERIALIZED_LEN]) -> Asset { interest_accumulator: fields[0] as u120, last_updated_ts: fields[1] as u120, loan_to_value: fields[2] as u120, - oracle_address: fields[3], + oracle_address: fields[3] } } @@ -30,7 +30,7 @@ fn serializeAsset(asset: Asset) -> [Field; ASSET_SERIALIZED_LEN] { asset.interest_accumulator as Field, asset.last_updated_ts as Field, asset.loan_to_value as Field, - asset.oracle_address, + asset.oracle_address ] } diff --git a/yarn-project/noir-contracts/src/contracts/lending_contract/src/helpers.nr b/yarn-project/noir-contracts/src/contracts/lending_contract/src/helpers.nr index eb20e2d5bdb8..26592ff6d669 100644 --- a/yarn-project/noir-contracts/src/contracts/lending_contract/src/helpers.nr +++ b/yarn-project/noir-contracts/src/contracts/lending_contract/src/helpers.nr @@ -5,33 +5,23 @@ use dep::aztec::hash::pedersen_hash; // Utility used to easily get a "id" for a private user that sits in the same // "space" as the public users. // It help us to have a single mapping for collateral that have both public and private users. -pub fn compute_identifier( - secret: Field, - on_behalf_of: Field, - self: Field, -) -> Field { +pub fn compute_identifier(secret: Field, on_behalf_of: Field, self: Field) -> Field { // EITHER secret OR on_behalf_of MUST be set. But not both - assert (!((secret == 0) as bool & (on_behalf_of == 0) as bool)); + assert(!((secret == 0) as bool & (on_behalf_of == 0) as bool)); if (secret != 0) { - pedersen_hash([self, secret],0) + pedersen_hash([self, secret], 0) } else { on_behalf_of } } -pub fn covered_by_collateral( - price: u120, - loan_to_value: u120, - collateral: u120, - increase: u120, - decrease: u120, -) -> u120 { - let price_precision = SafeU120{value: 1000000000}; - let ltv_precision = SafeU120{value: 10000}; +pub fn covered_by_collateral(price: u120, loan_to_value: u120, collateral: u120, increase: u120, decrease: u120) -> u120 { + let price_precision = SafeU120 { value: 1000000000 }; + let ltv_precision = SafeU120 { value: 10000 }; - let price = SafeU120{value: price}; - let collateral = SafeU120{value: collateral}.add(SafeU120{value:increase}).sub(SafeU120{value:decrease}); - let loan_to_value = SafeU120{value: loan_to_value}; + let price = SafeU120 { value: price }; + let collateral = SafeU120 { value: collateral }.add(SafeU120 { value: increase }).sub(SafeU120 { value: decrease }); + let loan_to_value = SafeU120 { value: loan_to_value }; let collateral_value = collateral.mul_div(price, price_precision); let debt_covered = collateral_value.mul_div(loan_to_value, ltv_precision); @@ -44,19 +34,14 @@ struct DebtReturn { static_debt: u120, } -pub fn debt_updates( - interest_accumulator: u120, - static_debt: u120, - increase: u120, - decrease: u120, -) -> DebtReturn { +pub fn debt_updates(interest_accumulator: u120, static_debt: u120, increase: u120, decrease: u120) -> DebtReturn { assert(interest_accumulator > 0); - let accumulator_precision = SafeU120{value: 1000000000}; + let accumulator_precision = SafeU120 { value: 1000000000 }; - let static_debt = SafeU120{value: static_debt}; - let interest_accumulator = SafeU120{value: interest_accumulator}; - let increase = SafeU120{value: increase}; - let decrease = SafeU120{value: decrease}; + let static_debt = SafeU120 { value: static_debt }; + let interest_accumulator = SafeU120 { value: interest_accumulator }; + let increase = SafeU120 { value: increase }; + let decrease = SafeU120 { value: decrease }; let current_debt_value = static_debt.mul_div(interest_accumulator, accumulator_precision); let new_debt_value = current_debt_value.add(increase).sub(decrease); @@ -71,18 +56,12 @@ pub fn debt_updates( // if you try to repay exact due to time diff between sim and execution. let new_static_debt = static_debt.add(static_debt_increase).sub(static_debt_decrease); - DebtReturn { - debt_value: new_debt_value.value, - static_debt: new_static_debt.value, - } + DebtReturn { debt_value: new_debt_value.value, static_debt: new_static_debt.value } } -pub fn debt_value( - static_debt: u120, - interest_accumulator: u120, -) -> u120 { - let static_debt = SafeU120{value: static_debt}; - let accumulator_precision = SafeU120{value: 1000000000}; - let interest_accumulator = SafeU120{value: interest_accumulator}; +pub fn debt_value(static_debt: u120, interest_accumulator: u120) -> u120 { + let static_debt = SafeU120 { value: static_debt }; + let accumulator_precision = SafeU120 { value: 1000000000 }; + let interest_accumulator = SafeU120 { value: interest_accumulator }; static_debt.mul_div_up(interest_accumulator, accumulator_precision).value -} \ No newline at end of file +} diff --git a/yarn-project/noir-contracts/src/contracts/lending_contract/src/interest_math.nr b/yarn-project/noir-contracts/src/contracts/lending_contract/src/interest_math.nr index 5b089405a3f3..9f9d3c518fbe 100644 --- a/yarn-project/noir-contracts/src/contracts/lending_contract/src/interest_math.nr +++ b/yarn-project/noir-contracts/src/contracts/lending_contract/src/interest_math.nr @@ -7,17 +7,14 @@ use dep::safe_math::SafeU120; // dividing with 31536000 (seconds per year). // rate must be measured with higher precision than 10^9. // we use e18, and rates >= 4% yearly. Otherwise need more precision -pub fn compute_multiplier( - rate_per_second: u120, - dt: SafeU120, -) -> SafeU120 { - let base = SafeU120{value: 1000000000}; // 1e9 - let WAD = SafeU120{value: 1000000000000000000}; // 1e18 +pub fn compute_multiplier(rate_per_second: u120, dt: SafeU120) -> SafeU120 { + let base = SafeU120 { value: 1000000000 }; // 1e9 + let WAD = SafeU120 { value: 1000000000000000000 }; // 1e18 let diff = WAD.div(base); let mut res = base; if (!dt.is_zero()) { - let exp_minus_one = SafeU120{value: dt.value - 1}; - let exp_minus_two = SafeU120 {value: if (dt.value > 2) {dt.value - 2} else { 0 }}; + let exp_minus_one = SafeU120 { value: dt.value - 1 }; + let exp_minus_two = SafeU120 { value: if (dt.value > 2) { dt.value - 2 } else { 0 } }; // if rate_per_second < sqrt(WAD), then base_power_two and base_power_three = 0 let rate = SafeU120 { value: rate_per_second }; @@ -25,8 +22,8 @@ pub fn compute_multiplier( let base_power_three = base_power_two.mul_div(rate, WAD); let temp = dt.mul(exp_minus_one); - let second_term = temp.mul(base_power_two).div(SafeU120 {value: 2}); - let third_term = temp.mul(exp_minus_two).mul(base_power_three).div(SafeU120{value: 6}); + let second_term = temp.mul(base_power_two).div(SafeU120 { value: 2 }); + let third_term = temp.mul(exp_minus_two).mul(base_power_three).div(SafeU120 { value: 6 }); // throwing away precision to keep us under u120 :sob: let offset = dt.mul(rate).add(second_term).add(third_term).div(diff); @@ -34,4 +31,4 @@ pub fn compute_multiplier( res = base.add(offset); } res -} \ No newline at end of file +} diff --git a/yarn-project/noir-contracts/src/contracts/lending_contract/src/interfaces.nr b/yarn-project/noir-contracts/src/contracts/lending_contract/src/interfaces.nr index b4f0634f7234..e2377ef2f6ef 100644 --- a/yarn-project/noir-contracts/src/contracts/lending_contract/src/interfaces.nr +++ b/yarn-project/noir-contracts/src/contracts/lending_contract/src/interfaces.nr @@ -100,4 +100,4 @@ impl Lending { oracle_address: return_values[3], } } -} \ No newline at end of file +} diff --git a/yarn-project/noir-contracts/src/contracts/lending_contract/src/main.nr b/yarn-project/noir-contracts/src/contracts/lending_contract/src/main.nr index f9f32af3b84c..adca6f6adc54 100644 --- a/yarn-project/noir-contracts/src/contracts/lending_contract/src/main.nr +++ b/yarn-project/noir-contracts/src/contracts/lending_contract/src/main.nr @@ -101,26 +101,20 @@ contract Lending { ) {} #[aztec(public)] - fn init( - oracle_address: Field, - loan_to_value: Field, - collateral_asset: Field, - stable_coin: Field, - ) -> Field { - + fn init(oracle_address: Field, loan_to_value: Field, collateral_asset: Field, stable_coin: Field) -> Field { let asset_loc = storage.assets.at(0); let asset = asset_loc.read(); - assert (loan_to_value as u120 <= 10000); - assert (asset.last_updated_ts == 0); - assert (asset.interest_accumulator == 0); + assert(loan_to_value as u120 <= 10000); + assert(asset.last_updated_ts == 0); + assert(asset.interest_accumulator == 0); asset_loc.write(Asset { - interest_accumulator: 1000000000, - last_updated_ts: context.timestamp() as u120, - loan_to_value: loan_to_value as u120, - oracle_address, - }); + interest_accumulator: 1000000000, + last_updated_ts: context.timestamp() as u120, + loan_to_value: loan_to_value as u120, + oracle_address + }); storage.collateral_asset.write(collateral_asset); storage.stable_coin.write(stable_coin); @@ -131,16 +125,14 @@ contract Lending { // Create a position. #[aztec(public)] fn update_accumulator() -> Asset { - - let asset_loc = storage.assets.at(0); let mut asset = asset_loc.read(); - let dt: SafeU120 = SafeU120{value: context.timestamp() as u120}.sub(SafeU120{value: asset.last_updated_ts}); + let dt: SafeU120 = SafeU120 { value: context.timestamp() as u120 }.sub(SafeU120 { value: asset.last_updated_ts }); // Only update if time has passed. if (!dt.is_zero()) { - let precision: SafeU120 = SafeU120{value: 1000000000}; + let precision: SafeU120 = SafeU120 { value: 1000000000 }; let rate_per_second: u120 = 1268391679; // 4% yearly rate / (60 * 60 * 24 * 365) // if rate_per_second < sqrt(WAD) our approx is eq precision + rate * dt let multiplier = compute_multiplier(rate_per_second, dt); @@ -156,43 +148,34 @@ contract Lending { } #[aztec(private)] - fn deposit_private( - from: Field, - amount: Field, - nonce: Field, - secret: Field, - on_behalf_of: Field, - collateral_asset: Field, - ) { + fn deposit_private(from: Field, amount: Field, nonce: Field, secret: Field, on_behalf_of: Field, collateral_asset: Field) { let on_behalf_of = compute_identifier(secret, on_behalf_of, context.msg_sender()); let _res = Token::at(collateral_asset).unshield(&mut context, from, context.this_address(), amount, nonce); // _deposit(on_behalf_of, amount, collateral_asset) let selector = compute_selector("_deposit(Field,Field,Field)"); - let _callStackItem2 = context.call_public_function(context.this_address(), selector, [on_behalf_of, amount, collateral_asset]); + let _callStackItem2 = context.call_public_function(context.this_address(), + selector, + [on_behalf_of, amount, collateral_asset]); } #[aztec(public)] - fn deposit_public( - amount: Field, - nonce: Field, - on_behalf_of: Field, - collateral_asset: Field, - ) -> Field { - Token::at(collateral_asset).transfer_public(context, context.msg_sender(), context.this_address(), amount, nonce); + fn deposit_public(amount: Field, nonce: Field, on_behalf_of: Field, collateral_asset: Field) -> Field { + Token::at(collateral_asset).transfer_public(context, + context.msg_sender(), + context.this_address(), + amount, + nonce); let selector = compute_selector("_deposit(Field,Field,Field)"); - let return_values = context.call_public_function(context.this_address(), selector, [on_behalf_of, amount, collateral_asset]); - + let return_values = context.call_public_function(context.this_address(), + selector, + [on_behalf_of, amount, collateral_asset]); + return_values[0] } #[aztec(public)] - internal fn _deposit( - owner: Field, - amount: Field, - collateral_asset: Field, - ) -> Field { + internal fn _deposit(owner: Field, amount: Field, collateral_asset: Field) -> Field { let _asset = Lending::at(context.this_address()).update_accumulator(context); - let coll_asset = storage.collateral_asset.read(); assert(coll_asset == collateral_asset); @@ -205,37 +188,26 @@ contract Lending { } #[aztec(private)] - fn withdraw_private( - secret: Field, - to: Field, - amount: Field - ) { + fn withdraw_private(secret: Field, to: Field, amount: Field) { let on_behalf_of = compute_identifier(secret, 0, context.msg_sender()); let selector = compute_selector("_withdraw(Field,Field,Field)"); let _callStackItem = context.call_public_function(context.this_address(), selector, [on_behalf_of, to, amount]); } #[aztec(public)] - fn withdraw_public( - to: Field, - amount: Field, - ) -> Field { + fn withdraw_public(to: Field, amount: Field) -> Field { let selector = compute_selector("_withdraw(Field,Field,Field)"); - let return_values = context.call_public_function(context.this_address(), selector, [context.msg_sender(), to, amount]); + let return_values = context.call_public_function(context.this_address(), + selector, + [context.msg_sender(), to, amount]); return_values[0] } #[aztec(public)] - internal fn _withdraw( - owner: Field, - recipient: Field, - amount: Field - ) -> Field { + internal fn _withdraw(owner: Field, recipient: Field, amount: Field) -> Field { let asset = Lending::at(context.this_address()).update_accumulator(context); let price = PriceFeed::at(asset.oracle_address).get_price(context); - - let coll_loc = storage.collateral.at(owner); let collateral: Field = coll_loc.read(); @@ -245,10 +217,14 @@ contract Lending { // debt_covered will revert if decrease would leave insufficient collateral to cover debt. // or trying to remove more collateral than available - let debt_covered = covered_by_collateral(price, asset.loan_to_value, collateral as u120, 0, amount as u120); + let debt_covered = covered_by_collateral(price, + asset.loan_to_value, + collateral as u120, + 0, + amount as u120); let debt_returns = debt_updates(asset.interest_accumulator, static_debt as u120, 0, 0); - assert (debt_returns.debt_value < debt_covered); + assert(debt_returns.debt_value < debt_covered); coll_loc.write(collateral - amount); @@ -260,37 +236,26 @@ contract Lending { } #[aztec(private)] - fn borrow_private( - secret: Field, - to: Field, - amount: Field - ) { + fn borrow_private(secret: Field, to: Field, amount: Field) { let on_behalf_of = compute_identifier(secret, 0, context.msg_sender()); let selector = compute_selector("_borrow(Field,Field,Field)"); let _callStackItem = context.call_public_function(context.this_address(), selector, [on_behalf_of, to, amount]); } #[aztec(public)] - fn borrow_public( - to: Field, - amount: Field - ) -> Field { + fn borrow_public(to: Field, amount: Field) -> Field { let selector = compute_selector("_borrow(Field,Field,Field)"); - let return_values = context.call_public_function(context.this_address(), selector, [context.msg_sender(), to, amount]); - + let return_values = context.call_public_function(context.this_address(), + selector, + [context.msg_sender(), to, amount]); + return_values[0] } #[aztec(public)] - internal fn _borrow( - owner: Field, - to: Field, - amount: Field - ) -> Field { + internal fn _borrow(owner: Field, to: Field, amount: Field) -> Field { let asset = Lending::at(context.this_address()).update_accumulator(context); let price = PriceFeed::at(asset.oracle_address).get_price(context); - - // Fetch collateral and static_debt, compute health of current position let collateral = storage.collateral.at(owner).read() as u120; @@ -299,7 +264,7 @@ contract Lending { let debt_covered = covered_by_collateral(price, asset.loan_to_value, collateral, 0, 0); let debt_returns = debt_updates(asset.interest_accumulator, static_debt, amount as u120, 0); - assert (debt_returns.debt_value < debt_covered); + assert(debt_returns.debt_value < debt_covered); storage.static_debt.at(owner).write(debt_returns.static_debt as Field); @@ -311,42 +276,27 @@ contract Lending { } #[aztec(private)] - fn repay_private( - from: Field, - amount: Field, - nonce: Field, - secret: Field, - on_behalf_of: Field, - stable_coin: Field, - ) { + fn repay_private(from: Field, amount: Field, nonce: Field, secret: Field, on_behalf_of: Field, stable_coin: Field) { let on_behalf_of = compute_identifier(secret, on_behalf_of, context.msg_sender()); let _res = Token::at(stable_coin).burn(&mut context, from, amount, nonce); let selector = compute_selector("_repay(Field,Field,Field)"); - let _callStackItem = context.call_public_function(context.this_address(), selector, [on_behalf_of, amount, stable_coin]); + let _callStackItem = context.call_public_function(context.this_address(), + selector, + [on_behalf_of, amount, stable_coin]); } #[aztec(public)] - fn repay_public( - amount: Field, - nonce: Field, - owner: Field, - stable_coin: Field, - ) -> Field { + fn repay_public(amount: Field, nonce: Field, owner: Field, stable_coin: Field) -> Field { Token::at(stable_coin).burn_public(context, context.msg_sender(), amount, nonce); let selector = compute_selector("_repay(Field,Field,Field)"); let return_values = context.call_public_function(context.this_address(), selector, [owner, amount, stable_coin]); - + return_values[0] } #[aztec(public)] - internal fn _repay( - owner: Field, - amount: Field, - stable_coin: Field, - ) { + internal fn _repay(owner: Field, amount: Field, stable_coin: Field) { let asset = Lending::at(context.this_address()).update_accumulator(context); - // To ensure that private is using the correct token. assert(stable_coin == storage.stable_coin.read()); @@ -355,30 +305,23 @@ contract Lending { let debt_returns = debt_updates(asset.interest_accumulator, static_debt, 0, amount as u120); storage.static_debt.at(owner).write(debt_returns.static_debt as Field); - + 1 } - unconstrained fn get_asset( - assetId: Field, - ) -> Asset { - + unconstrained fn get_asset(assetId: Field) -> Asset { storage.assets.at(assetId).read() } - unconstrained fn get_position( - owner: Field, - ) -> Position { - + unconstrained fn get_position(owner: Field) -> Position { let collateral = storage.collateral.at(owner).read(); let static_debt = storage.static_debt.at(owner).read(); let asset = storage.assets.at(0).read(); let debt = debt_value(static_debt as u120, asset.interest_accumulator as u120) as Field; - Position {collateral, static_debt, debt} + Position { collateral, static_debt, debt } } unconstrained fn get_assets() -> [Field; 2] { - [storage.collateral_asset.read(), storage.stable_coin.read()] } diff --git a/yarn-project/noir-contracts/src/contracts/parent_contract/src/main.nr b/yarn-project/noir-contracts/src/contracts/parent_contract/src/main.nr index 02e893ecb4ac..9560223aff54 100644 --- a/yarn-project/noir-contracts/src/contracts/parent_contract/src/main.nr +++ b/yarn-project/noir-contracts/src/contracts/parent_contract/src/main.nr @@ -7,10 +7,7 @@ contract Parent { // Private function to call another private function in the targetContract using the provided selector #[aztec(private)] - fn entryPoint( - targetContract: Field, - targetSelector: Field, - ) -> Field { + fn entryPoint(targetContract: Field, targetSelector: Field) -> Field { // Call the target private function let return_values = context.call_private_function(targetContract, targetSelector, [0]); @@ -20,11 +17,7 @@ contract Parent { // Public function to directly call another public function to the targetContract using the selector and value provided #[aztec(public)] - fn pubEntryPoint( - targetContract: Field, - targetSelector: Field, - initValue: Field - ) -> Field { + fn pubEntryPoint(targetContract: Field, targetSelector: Field, initValue: Field) -> Field { let return_values = context.call_public_function(targetContract, targetSelector, [initValue]); return_values[0] @@ -32,11 +25,7 @@ contract Parent { // Same as pubEntryPoint, but calls the target contract twice, using the return value from the first invocation as the argument for the second. #[aztec(public)] - fn pubEntryPointTwice( - targetContract: Field, - targetSelector: Field, - initValue: Field - ) -> Field { + fn pubEntryPointTwice(targetContract: Field, targetSelector: Field, initValue: Field) -> Field { let returnValue = context.call_public_function(targetContract, targetSelector, [initValue])[0]; let return_values = context.call_public_function(targetContract, targetSelector, [returnValue]); @@ -45,11 +34,7 @@ contract Parent { // Private function to enqueue a call to the targetContract address using the selector and argument provided #[aztec(private)] - fn enqueueCallToChild( - targetContract: Field, - targetSelector: Field, - targetValue: Field, - ) { + fn enqueueCallToChild(targetContract: Field, targetSelector: Field, targetValue: Field) { context.call_public_function(targetContract, targetSelector, [targetValue]); } @@ -57,12 +42,11 @@ contract Parent { // - one through a nested call to enqueueCallToChild with value 10, // - followed by one issued directly from this function with value 20. #[aztec(private)] - fn enqueueCallsToChildWithNestedFirst( - targetContract: Field, - targetSelector: Field, - ) { + fn enqueueCallsToChildWithNestedFirst(targetContract: Field, targetSelector: Field) { let enqueueCallToChildSelector = compute_selector("enqueueCallToChild(Field,Field,Field)"); - let _ret = context.call_private_function(context.this_address(), enqueueCallToChildSelector, [targetContract, targetSelector, 10]); + let _ret = context.call_private_function(context.this_address(), + enqueueCallToChildSelector, + [targetContract, targetSelector, 10]); context.call_public_function(targetContract, targetSelector, [20]); } @@ -70,22 +54,17 @@ contract Parent { // - one issued directly from this function with value 20, // - followed by one through a nested call to enqueueCallToChild with value 10. #[aztec(private)] - fn enqueueCallsToChildWithNestedLast( - targetContract: Field, - targetSelector: Field, - ) { + fn enqueueCallsToChildWithNestedLast(targetContract: Field, targetSelector: Field) { context.call_public_function(targetContract, targetSelector, [20]); let enqueueCallToChildSelector = compute_selector("enqueueCallToChild(Field,Field,Field)"); - let _ret = context.call_private_function(context.this_address(), enqueueCallToChildSelector, [targetContract, targetSelector, 10]); + let _ret = context.call_private_function(context.this_address(), + enqueueCallToChildSelector, + [targetContract, targetSelector, 10]); } // Private function to enqueue a call to the targetContract address using the selector and argument provided #[aztec(private)] - fn enqueueCallToChildTwice( - targetContract: Field, - targetSelector: Field, - targetValue: Field, - ) { + fn enqueueCallToChildTwice(targetContract: Field, targetSelector: Field, targetValue: Field) { // Enqueue the first public call context.call_public_function(targetContract, targetSelector, [targetValue]); // Enqueue the second public call @@ -94,28 +73,26 @@ contract Parent { // Private function to enqueue a call to the pubEntryPoint function of this same contract, passing the target arguments provided #[aztec(private)] - fn enqueueCallToPubEntryPoint( - targetContract: Field, - targetSelector: Field, - targetValue: Field, - ) { + fn enqueueCallToPubEntryPoint(targetContract: Field, targetSelector: Field, targetValue: Field) { let pubEntryPointSelector = compute_selector("pubEntryPoint(Field,Field,Field)"); let thisAddress = context.this_address(); - let _void = context.call_public_function(thisAddress, pubEntryPointSelector, [targetContract, targetSelector, targetValue]); + let _void = context.call_public_function(thisAddress, + pubEntryPointSelector, + [targetContract, targetSelector, targetValue]); } // Private function to enqueue two calls to the pubEntryPoint function of this same contract, passing the target arguments provided #[aztec(private)] - fn enqueueCallsToPubEntryPoint( - targetContract: Field, - targetSelector: Field, - targetValue: Field, - ) { + fn enqueueCallsToPubEntryPoint(targetContract: Field, targetSelector: Field, targetValue: Field) { let pubEntryPointSelector = compute_selector("pubEntryPoint(Field,Field,Field)"); let thisAddress = context.this_address(); - - context.call_public_function(thisAddress, pubEntryPointSelector, [targetContract, targetSelector, targetValue]); - context.call_public_function(thisAddress, pubEntryPointSelector, [targetContract, targetSelector, targetValue + 1]); + context.call_public_function(thisAddress, + pubEntryPointSelector, + [targetContract, targetSelector, targetValue]); + + context.call_public_function(thisAddress, + pubEntryPointSelector, + [targetContract, targetSelector, targetValue + 1]); } } diff --git a/yarn-project/noir-contracts/src/contracts/pending_commitments_contract/src/main.nr b/yarn-project/noir-contracts/src/contracts/pending_commitments_contract/src/main.nr index 7ccbc640daf3..c07f02136d17 100644 --- a/yarn-project/noir-contracts/src/contracts/pending_commitments_contract/src/main.nr +++ b/yarn-project/noir-contracts/src/contracts/pending_commitments_contract/src/main.nr @@ -49,12 +49,7 @@ contract PendingCommitments { // getting / reading that note all in the same contract function // Realistic way to describe this test is "Mint note A, then burn note A in the same transaction" #[aztec(private)] - fn test_insert_then_get_then_nullify_flat( - amount: Field, - owner: Field, - ) -> Field { - - + fn test_insert_then_get_then_nullify_flat(amount: Field, owner: Field) -> Field { let owner_balance = storage.balances.at(owner); let mut note = ValueNote::new(amount, owner); @@ -76,12 +71,7 @@ contract PendingCommitments { // Confirm cannot access commitments inserted later in same function #[aztec(private)] - fn test_bad_get_then_insert_flat( - amount: Field, - owner: Field, - ) -> Field { - - + fn test_bad_get_then_insert_flat(amount: Field, owner: Field) -> Field { let owner_balance = storage.balances.at(owner); let options = NoteGetterOptions::with_filter(filter_notes_min_sum, amount); @@ -100,19 +90,11 @@ contract PendingCommitments { // Dummy nested/inner function (to pass a function which does nothing) #[aztec(private)] - fn dummy( - amount: Field, - owner: Field, - ) {} + fn dummy(amount: Field, owner: Field) {} // Nested/inner function to create and insert a note #[aztec(private)] - fn insert_note( - amount: Field, - owner: Field, - ) { - - + fn insert_note(amount: Field, owner: Field) { let owner_balance = storage.balances.at(owner); let mut note = ValueNote::new(amount, owner); @@ -122,12 +104,7 @@ contract PendingCommitments { // Nested/inner function to get a note and confirm it matches the expected value #[aztec(private)] - fn get_then_nullify_note( - expected_value: Field, - owner: Field, - ) -> Field { - - + fn get_then_nullify_note(expected_value: Field, owner: Field) -> Field { let owner_balance = storage.balances.at(owner); let options = NoteGetterOptions::new().set_limit(1); @@ -142,11 +119,7 @@ contract PendingCommitments { // Nested/inner function to get a note and confirms that none is returned #[aztec(private)] - fn get_note_zero_balance( - owner: Field, - ) { - - + fn get_note_zero_balance(owner: Field) { let owner_balance = storage.balances.at(owner); let options = NoteGetterOptions::new(); @@ -165,33 +138,42 @@ contract PendingCommitments { owner: Field, insert_fn_selector: Field, get_then_nullify_fn_selector: Field, - get_note_zero_fn_selector: Field, + get_note_zero_fn_selector: Field ) { // nested call to create/insert note - let _callStackItem1 = context.call_private_function(inputs.call_context.storage_contract_address, insert_fn_selector, [amount, owner]); + let _callStackItem1 = context.call_private_function(inputs.call_context.storage_contract_address, + insert_fn_selector, + [amount, owner]); // nested call to read and nullify that note - let _callStackItem2 = context.call_private_function(inputs.call_context.storage_contract_address, get_then_nullify_fn_selector, [amount, owner]); - // nested call to confirm that balance is zero - let _callStackItem3 = context.call_private_function(inputs.call_context.storage_contract_address, get_note_zero_fn_selector, [owner]); + let _callStackItem2 = context.call_private_function(inputs.call_context.storage_contract_address, + get_then_nullify_fn_selector, + [amount, owner]); + // nested call to confirm that balance is zero + let _callStackItem3 = context.call_private_function(inputs.call_context.storage_contract_address, + get_note_zero_fn_selector, + [owner]); } // same test as above, but insert 2, get 2, nullify 2 #[aztec(private)] - fn test_insert2_then_get2_then_nullify2_all_in_nested_calls( - amount: Field, - owner: Field, - insert_fn_selector: Field, - get_then_nullify_fn_selector: Field, - ) { + fn test_insert2_then_get2_then_nullify2_all_in_nested_calls(amount: Field, owner: Field, insert_fn_selector: Field, get_then_nullify_fn_selector: Field) { // args for nested calls let args = [amount, owner]; // nested call to create/insert note - let _callStackItem1 = context.call_private_function(inputs.call_context.storage_contract_address, insert_fn_selector, args); - let _callStackItem2 = context.call_private_function(inputs.call_context.storage_contract_address, insert_fn_selector, args); + let _callStackItem1 = context.call_private_function(inputs.call_context.storage_contract_address, + insert_fn_selector, + args); + let _callStackItem2 = context.call_private_function(inputs.call_context.storage_contract_address, + insert_fn_selector, + args); // nested call to read and nullify that note - let _callStackItem3 = context.call_private_function(inputs.call_context.storage_contract_address, get_then_nullify_fn_selector, args); - let _callStackItem4 = context.call_private_function(inputs.call_context.storage_contract_address, get_then_nullify_fn_selector, args); + let _callStackItem3 = context.call_private_function(inputs.call_context.storage_contract_address, + get_then_nullify_fn_selector, + args); + let _callStackItem4 = context.call_private_function(inputs.call_context.storage_contract_address, + get_then_nullify_fn_selector, + args); // nested call to confirm that balance is zero // TODO(dbanks12): once > 4 nested calls is supported, can confirm 0 balance: //let _callStackItem5 = context.call_private_function(inputs.call_context.storage_contract_address, get_note_zero_fn_selector, [owner]); @@ -199,20 +181,21 @@ contract PendingCommitments { // same test as above, but insert 2, get 1, nullify 1 #[aztec(private)] - fn test_insert2_then_get2_then_nullify1_all_in_nested_calls( - amount: Field, - owner: Field, - insert_fn_selector: Field, - get_then_nullify_fn_selector: Field, - ) { + fn test_insert2_then_get2_then_nullify1_all_in_nested_calls(amount: Field, owner: Field, insert_fn_selector: Field, get_then_nullify_fn_selector: Field) { // args for nested calls let args = [amount, owner]; // nested call to create/insert note - let _callStackItem1 = context.call_private_function(inputs.call_context.storage_contract_address, insert_fn_selector, args); - let _callStackItem2 = context.call_private_function(inputs.call_context.storage_contract_address, insert_fn_selector, args); + let _callStackItem1 = context.call_private_function(inputs.call_context.storage_contract_address, + insert_fn_selector, + args); + let _callStackItem2 = context.call_private_function(inputs.call_context.storage_contract_address, + insert_fn_selector, + args); // nested call to read and nullify that note - let _callStackItem3 = context.call_private_function(inputs.call_context.storage_contract_address, get_then_nullify_fn_selector, args); + let _callStackItem3 = context.call_private_function(inputs.call_context.storage_contract_address, + get_then_nullify_fn_selector, + args); } // insert 1 note, then get 2 notes (one pending, one persistent) and nullify both. @@ -224,18 +207,26 @@ contract PendingCommitments { owner: Field, insert_fn_selector: Field, get_then_nullify_fn_selector: Field, - get_note_zero_fn_selector: Field, + get_note_zero_fn_selector: Field ) { // args for nested calls let args = [amount, owner]; // nested call to create/insert note - let _callStackItem1 = context.call_private_function(inputs.call_context.storage_contract_address, insert_fn_selector, args); + let _callStackItem1 = context.call_private_function(inputs.call_context.storage_contract_address, + insert_fn_selector, + args); // nested call to read and nullify that note - let _callStackItem2 = context.call_private_function(inputs.call_context.storage_contract_address, get_then_nullify_fn_selector, args); - let _callStackItem3 = context.call_private_function(inputs.call_context.storage_contract_address, get_then_nullify_fn_selector, args); - - let _callStackItem4 = context.call_private_function(inputs.call_context.storage_contract_address, get_note_zero_fn_selector, [owner]); + let _callStackItem2 = context.call_private_function(inputs.call_context.storage_contract_address, + get_then_nullify_fn_selector, + args); + let _callStackItem3 = context.call_private_function(inputs.call_context.storage_contract_address, + get_then_nullify_fn_selector, + args); + + let _callStackItem4 = context.call_private_function(inputs.call_context.storage_contract_address, + get_note_zero_fn_selector, + [owner]); } // Confirm cannot get/read a pending commitment in a nested call @@ -260,4 +251,4 @@ contract PendingCommitments { let note_header = NoteHeader::new(contract_address, nonce, storage_slot); note_utils::compute_note_hash_and_nullifier(ValueNoteMethods, note_header, serialized_note) } -} \ No newline at end of file +} diff --git a/yarn-project/noir-contracts/src/contracts/price_feed_contract/src/asset.nr b/yarn-project/noir-contracts/src/contracts/price_feed_contract/src/asset.nr index 9686d74a28dc..9d464eefddc2 100644 --- a/yarn-project/noir-contracts/src/contracts/price_feed_contract/src/asset.nr +++ b/yarn-project/noir-contracts/src/contracts/price_feed_contract/src/asset.nr @@ -7,9 +7,7 @@ struct Asset { global ASSET_SERIALIZED_LEN: Field = 1; fn deserializeAsset(fields: [Field; ASSET_SERIALIZED_LEN]) -> Asset { - Asset { - price: fields[0] as u120, - } + Asset { price: fields[0] as u120 } } fn serializeAsset(asset: Asset) -> [Field; ASSET_SERIALIZED_LEN] { diff --git a/yarn-project/noir-contracts/src/contracts/price_feed_contract/src/main.nr b/yarn-project/noir-contracts/src/contracts/price_feed_contract/src/main.nr index 1b59c3cd5acd..b4a2e6461bc1 100644 --- a/yarn-project/noir-contracts/src/contracts/price_feed_contract/src/main.nr +++ b/yarn-project/noir-contracts/src/contracts/price_feed_contract/src/main.nr @@ -35,33 +35,22 @@ contract PriceFeed { } #[aztec(private)] - fn constructor(){} + fn constructor() {} #[aztec(public)] - fn set_price( - asset_id: Field, - price: u120, - ) -> Field { - + fn set_price(asset_id: Field, price: u120) -> Field { let asset = storage.assets.at(asset_id); - asset.write(Asset {price: price}); + asset.write(Asset { price }); 1 } #[aztec(public)] - fn get_price( - asset_id: Field, - ) -> Asset { - - + fn get_price(asset_id: Field) -> Asset { storage.assets.at(asset_id).read() } - unconstrained fn fetch_price( - assetId: Field, - ) -> Asset { - + unconstrained fn fetch_price(assetId: Field) -> Asset { storage.assets.at(assetId).read() } diff --git a/yarn-project/noir-contracts/src/contracts/schnorr_account_contract/src/main.nr b/yarn-project/noir-contracts/src/contracts/schnorr_account_contract/src/main.nr index 40985f45f38b..345130722475 100644 --- a/yarn-project/noir-contracts/src/contracts/schnorr_account_contract/src/main.nr +++ b/yarn-project/noir-contracts/src/contracts/schnorr_account_contract/src/main.nr @@ -40,10 +40,7 @@ contract SchnorrAccount { // Constructs the contract #[aztec(private)] - fn constructor( - signing_pub_key_x: pub Field, - signing_pub_key_y: pub Field, - ) { + fn constructor(signing_pub_key_x: pub Field, signing_pub_key_y: pub Field) { let this = context.this_address(); // docs:start:initialize let mut pub_key_note = PublicKeyNote::new(signing_pub_key_x, signing_pub_key_y, this); @@ -86,10 +83,15 @@ contract SchnorrAccount { // Load auth witness let witness: [Field; 64] = get_auth_witness(message_hash); let mut signature: [u8; 64] = [0; 64]; - for i in 0..64 { signature[i] = witness[i] as u8; } + for i in 0..64 { + signature[i] = witness[i] as u8; + } // Verify signature of the payload bytes - let verification = std::schnorr::verify_signature(public_key.x, public_key.y, signature, message_hash.to_be_bytes(32)); + let verification = std::schnorr::verify_signature(public_key.x, + public_key.y, + signature, + message_hash.to_be_bytes(32)); assert(verification == true); // docs:end:entrypoint true @@ -98,7 +100,12 @@ contract SchnorrAccount { // Computes notes hash and nullifier. // Note 1: Needs to be defined by every contract producing logs. // Note 2: Having it in all the contracts gives us the ability to compute the note hash and nullifier differently for different kind of notes. - unconstrained fn compute_note_hash_and_nullifier(contract_address: Field, nonce: Field, storage_slot: Field, serialized_note: [Field; PUBLIC_KEY_NOTE_LEN]) -> [Field; 4] { + unconstrained fn compute_note_hash_and_nullifier( + contract_address: Field, + nonce: Field, + storage_slot: Field, + serialized_note: [Field; PUBLIC_KEY_NOTE_LEN] + ) -> [Field; 4] { assert(storage_slot == 1); let note_header = NoteHeader::new(contract_address, nonce, storage_slot); note_utils::compute_note_hash_and_nullifier(PublicKeyNoteMethods, note_header, serialized_note) diff --git a/yarn-project/noir-contracts/src/contracts/schnorr_account_contract/src/public_key_note.nr b/yarn-project/noir-contracts/src/contracts/schnorr_account_contract/src/public_key_note.nr index 538eb288ae69..5547b887f5b1 100644 --- a/yarn-project/noir-contracts/src/contracts/schnorr_account_contract/src/public_key_note.nr +++ b/yarn-project/noir-contracts/src/contracts/schnorr_account_contract/src/public_key_note.nr @@ -68,12 +68,7 @@ impl PublicKeyNote { } fn deserialize(serialized_note: [Field; PUBLIC_KEY_NOTE_LEN]) -> PublicKeyNote { - PublicKeyNote { - x: serialized_note[0], - y: serialized_note[1], - owner: serialized_note[2], - header: NoteHeader::empty(), - } + PublicKeyNote { x: serialized_note[0], y: serialized_note[1], owner: serialized_note[2], header: NoteHeader::empty() } } fn serialize(note: PublicKeyNote) -> [Field; PUBLIC_KEY_NOTE_LEN] { @@ -82,7 +77,7 @@ fn serialize(note: PublicKeyNote) -> [Field; PUBLIC_KEY_NOTE_LEN] { fn compute_note_hash(note: PublicKeyNote) -> Field { // TODO(#1205) Should use a non-zero generator index. - pedersen_hash(note.serialize(),0) + pedersen_hash(note.serialize(), 0) } fn compute_nullifier(note: PublicKeyNote) -> Field { diff --git a/yarn-project/noir-contracts/src/contracts/schnorr_hardcoded_account_contract/src/main.nr b/yarn-project/noir-contracts/src/contracts/schnorr_hardcoded_account_contract/src/main.nr index bfaa0b285e49..69b6ef6b5b69 100644 --- a/yarn-project/noir-contracts/src/contracts/schnorr_hardcoded_account_contract/src/main.nr +++ b/yarn-project/noir-contracts/src/contracts/schnorr_hardcoded_account_contract/src/main.nr @@ -52,14 +52,18 @@ contract SchnorrHardcodedAccount { // Load auth witness and format as an u8 array let witness: [Field; 64] = get_auth_witness(message_hash); let mut signature: [u8; 64] = [0; 64]; - for i in 0..64 { signature[i] = witness[i] as u8; } + for i in 0..64 { + signature[i] = witness[i] as u8; + } // Verify signature using hardcoded public key - let verification = std::schnorr::verify_signature(public_key_x, public_key_y, signature, message_hash.to_be_bytes(32)); + let verification = std::schnorr::verify_signature(public_key_x, + public_key_y, + signature, + message_hash.to_be_bytes(32)); assert(verification == true); true } // docs:end:is-valid - } // docs:end:contract \ No newline at end of file diff --git a/yarn-project/noir-contracts/src/contracts/schnorr_single_key_account_contract/src/auth_oracle.nr b/yarn-project/noir-contracts/src/contracts/schnorr_single_key_account_contract/src/auth_oracle.nr index 2cb544a4502f..5b6b3dd7219d 100644 --- a/yarn-project/noir-contracts/src/contracts/schnorr_single_key_account_contract/src/auth_oracle.nr +++ b/yarn-project/noir-contracts/src/contracts/schnorr_single_key_account_contract/src/auth_oracle.nr @@ -24,4 +24,4 @@ impl AuthWitness { unconstrained pub fn get_auth_witness(message_hash: Field) -> AuthWitness { let witness: [Field; 67] = auth_witness::get_auth_witness(message_hash); AuthWitness::deserialize(witness) -} \ No newline at end of file +} diff --git a/yarn-project/noir-contracts/src/contracts/schnorr_single_key_account_contract/src/main.nr b/yarn-project/noir-contracts/src/contracts/schnorr_single_key_account_contract/src/main.nr index 6030f2f1251f..6ddcff3a22e9 100644 --- a/yarn-project/noir-contracts/src/contracts/schnorr_single_key_account_contract/src/main.nr +++ b/yarn-project/noir-contracts/src/contracts/schnorr_single_key_account_contract/src/main.nr @@ -49,4 +49,4 @@ contract SchnorrSingleKeyAccount { assert(recover_address(message_hash, witness) == context.this_address()); true } -} \ No newline at end of file +} diff --git a/yarn-project/noir-contracts/src/contracts/schnorr_single_key_account_contract/src/util.nr b/yarn-project/noir-contracts/src/contracts/schnorr_single_key_account_contract/src/util.nr index 3b8143735677..db5384cb7c53 100644 --- a/yarn-project/noir-contracts/src/contracts/schnorr_single_key_account_contract/src/util.nr +++ b/yarn-project/noir-contracts/src/contracts/schnorr_single_key_account_contract/src/util.nr @@ -2,14 +2,14 @@ use dep::std::{schnorr::verify_signature}; use dep::aztec::address::compute_address; use crate::auth_oracle::{AuthWitness}; -pub fn recover_address( - message_hash: Field, - witness: AuthWitness, -) -> Field { +pub fn recover_address(message_hash: Field, witness: AuthWitness) -> Field { let message_bytes = message_hash.to_be_bytes(32); - let verification = verify_signature(witness.owner.x, witness.owner.y, witness.signature, message_bytes); + let verification = verify_signature(witness.owner.x, + witness.owner.y, + witness.signature, + message_bytes); assert(verification == true); let reproduced_address = compute_address(witness.owner.x, witness.owner.y, witness.partial_address); reproduced_address -} \ No newline at end of file +} diff --git a/yarn-project/noir-contracts/src/contracts/slow_tree_contract/src/capsule.nr b/yarn-project/noir-contracts/src/contracts/slow_tree_contract/src/capsule.nr index d47e56d47a4a..8731eca35d2a 100644 --- a/yarn-project/noir-contracts/src/contracts/slow_tree_contract/src/capsule.nr +++ b/yarn-project/noir-contracts/src/contracts/slow_tree_contract/src/capsule.nr @@ -4,4 +4,4 @@ fn pop_capsule_oracle() -> [Field; N] {} // A capsule is a "blob" of data that is passed to the contract through an oracle. unconstrained pub fn pop_capsule() -> [Field; N] { pop_capsule_oracle() -} \ No newline at end of file +} diff --git a/yarn-project/noir-contracts/src/contracts/slow_tree_contract/src/main.nr b/yarn-project/noir-contracts/src/contracts/slow_tree_contract/src/main.nr index f2345e111ac7..0af6f5565a27 100644 --- a/yarn-project/noir-contracts/src/contracts/slow_tree_contract/src/main.nr +++ b/yarn-project/noir-contracts/src/contracts/slow_tree_contract/src/main.nr @@ -84,11 +84,9 @@ contract SlowTree { let expected_root = compute_merkle_root(p.value, p.index, p.sibling_path); let selector = compute_selector("_assert_current_root(Field,Field)"); - context.call_public_function( - context.this_address(), - selector, - [context.msg_sender(), expected_root] - ); + context.call_public_function(context.this_address(), + selector, + [context.msg_sender(), expected_root]); p.value } @@ -117,40 +115,27 @@ contract SlowTree { let new_after_root = compute_merkle_root(p.new_value, p.index, p.after.sibling_path); let selector = compute_selector("_update(Field,Field,Field,Field,Field,Field)"); - context.call_public_function( - context.this_address(), - selector, + context.call_public_function(context.this_address(), + selector, [ - context.msg_sender(), - p.index, - p.new_value, - before_root, - after_root, + context.msg_sender(), + p.index, + p.new_value, + before_root, + after_root, new_after_root - ] - ); + ]); } #[aztec(public)] - internal fn _update( - caller: Field, - index: Field, - new_value: Field, - before: Field, - after: Field, - new_root: Field - ) { + internal fn _update(caller: Field, index: Field, new_value: Field, before: Field, after: Field, new_root: Field) { let current_root = storage.trees.at(caller).current_root(); let after_root = storage.trees.at(caller).read_root().after; assert(current_root == before, "Before root does not match expected"); assert(after_root == after, "After root does not match expected"); - storage.trees.at(caller).update_unsafe_at( - index, - new_value, - new_root, - ); + storage.trees.at(caller).update_unsafe_at(index, new_value, new_root); } unconstrained fn un_read_leaf_at(address: Field, key: Field) -> Leaf { @@ -164,4 +149,4 @@ contract SlowTree { unconstrained fn compute_note_hash_and_nullifier(_contract_address: Field, _nonce: Field, _storage_slot: Field, _preimage: [Field; 4]) -> [Field; 4] { [0x0d, 0x0e, 0x0a, 0x0d] } -} \ No newline at end of file +} diff --git a/yarn-project/noir-contracts/src/contracts/slow_tree_contract/src/types.nr b/yarn-project/noir-contracts/src/contracts/slow_tree_contract/src/types.nr index cdef27fbbf13..0f4f5eb4119f 100644 --- a/yarn-project/noir-contracts/src/contracts/slow_tree_contract/src/types.nr +++ b/yarn-project/noir-contracts/src/contracts/slow_tree_contract/src/types.nr @@ -7,15 +7,11 @@ struct MembershipProof { } fn deserialize_membership_proof(serialized: [Field; M]) -> MembershipProof { - let mut sibling_path = [0; N]; - for i in 0..N { - sibling_path[i] = serialized[2 + i]; - } - MembershipProof { - index: serialized[0], - value: serialized[1], - sibling_path, - } + let mut sibling_path = [0; N]; + for i in 0..N { + sibling_path[i] = serialized[2 + i]; + } + MembershipProof { index: serialized[0], value: serialized[1], sibling_path } } impl MembershipProof { @@ -32,4 +28,4 @@ impl MembershipProof { fn deserialize(serialized: [Field; M]) -> Self { deserialize_membership_proof(serialized) } -} \ No newline at end of file +} diff --git a/yarn-project/noir-contracts/src/contracts/stateful_test_contract/src/main.nr b/yarn-project/noir-contracts/src/contracts/stateful_test_contract/src/main.nr index 921d11f013ed..491f8ff494a0 100644 --- a/yarn-project/noir-contracts/src/contracts/stateful_test_contract/src/main.nr +++ b/yarn-project/noir-contracts/src/contracts/stateful_test_contract/src/main.nr @@ -55,23 +55,15 @@ contract StatefulTest { } #[aztec(private)] - fn create_note( - owner: Field, - value: Field, - ) { - - if (value != 0){ + fn create_note(owner: Field, value: Field) { + if (value != 0) { let loc = storage.notes.at(owner); increment(loc, value, owner); } } #[aztec(private)] - fn destroy_and_create( - recipient: Field, - amount: Field, - ) { - + fn destroy_and_create(recipient: Field, amount: Field) { let sender = context.msg_sender(); let sender_notes = storage.notes.at(sender); @@ -81,10 +73,7 @@ contract StatefulTest { increment(recipient_notes, amount, recipient); } - unconstrained fn summed_values( - owner: Field, - ) -> Field { - + unconstrained fn summed_values(owner: Field) -> Field { let owner_balance = storage.notes.at(owner); // Return the sum of all notes in the set. diff --git a/yarn-project/noir-contracts/src/contracts/test_contract/src/interface.nr b/yarn-project/noir-contracts/src/contracts/test_contract/src/interface.nr index 1bb62e9f3f6f..65cf52e96b5b 100644 --- a/yarn-project/noir-contracts/src/contracts/test_contract/src/interface.nr +++ b/yarn-project/noir-contracts/src/contracts/test_contract/src/interface.nr @@ -1,5 +1,5 @@ /* Autogenerated file, do not edit! */ - + use dep::std; use dep::aztec::context::{ PrivateContext, PublicContext }; use dep::aztec::constants_gen::RETURN_VALUES_LENGTH; @@ -26,7 +26,6 @@ struct ManyNotesADeepStructTestCodeGenStruct { secret_hash: Field, } - // Interface for calling Test functions from a private context struct TestPrivateContextInterface { address: Field, @@ -242,9 +241,6 @@ impl TestPrivateContextInterface { } } - - - // Interface for calling Test functions from a public context struct TestPublicContextInterface { @@ -330,5 +326,4 @@ impl TestPublicContextInterface { } } - - + diff --git a/yarn-project/noir-contracts/src/contracts/test_contract/src/main.nr b/yarn-project/noir-contracts/src/contracts/test_contract/src/main.nr index 43180fa693d4..186b9220cfbb 100644 --- a/yarn-project/noir-contracts/src/contracts/test_contract/src/main.nr +++ b/yarn-project/noir-contracts/src/contracts/test_contract/src/main.nr @@ -52,19 +52,15 @@ contract Test { // docs:end:empty-constructor #[aztec(private)] - fn get_public_key( - address: Field, - ) -> [Field; 2]{ + fn get_public_key(address: Field) -> [Field; 2] { let pub_key = get_public_key_oracle(address); - + [pub_key.x, pub_key.y] } // Get the portal contract address through an oracle call #[aztec(private)] - fn get_portal_contract_address( - aztec_address: Field - ) -> Field { + fn get_portal_contract_address(aztec_address: Field) -> Field { get_portal_address(aztec_address) } @@ -90,7 +86,7 @@ contract Test { a_number: u32, an_array: [Field; 2], a_struct: DummyNote, - a_deep_struct: DeepStruct, + a_deep_struct: DeepStruct ) -> distinct pub abi::PrivateCircuitPublicInputs { let mut args: BoundedVec = BoundedVec::new(0); args.push(a_field); @@ -105,7 +101,7 @@ contract Test { args.push(a_deep_struct.a_note.secret_hash); for note in a_deep_struct.many_notes { args.push(note.amount); - args.push(note.secret_hash); + args.push(note.secret_hash); } let args_hash = abi::hash_args(args.storage); let mut context = PrivateContext::new(inputs, args_hash); @@ -115,27 +111,20 @@ contract Test { // Purely exists for testing #[aztec(public)] - fn create_l2_to_l1_message_public( - amount: Field, - secret_hash: Field, - ) { + fn create_l2_to_l1_message_public(amount: Field, secret_hash: Field) { // Create a commitment to the amount let note = DummyNote::new(amount, secret_hash); - + // Public oracle call to emit new commitment. context.message_portal(note.get_commitment()); - } // Purely exists for testing #[aztec(public)] - fn create_nullifier_public( - amount: Field, - secret_hash: Field, - ) { + fn create_nullifier_public(amount: Field, secret_hash: Field) { // Create a commitment to the amount let note = DummyNote::new(amount, secret_hash); - + // Public oracle call to emit new commitment. context.push_new_nullifier(note.get_commitment(), EMPTY_NULLIFIED_COMMITMENT); } @@ -154,18 +143,14 @@ contract Test { // docs:start:is-time-equal #[aztec(public)] - fn is_time_equal( - time: Field, - ) -> Field { + fn is_time_equal(time: Field) -> Field { assert(context.timestamp() == time); time } // docs:end:is-time-equal #[aztec(public)] - fn emit_unencrypted( - value: Field - ) -> Field { + fn emit_unencrypted(value: Field) -> Field { // docs:start:emit_unencrypted emit_unencrypted_log(&mut context, value); // docs:end:emit_unencrypted @@ -173,25 +158,19 @@ contract Test { } #[aztec(public)] - fn consume_mint_public_message( - to: Field, - amount: Field, - canceller: Field, - msg_key: Field, - secret: Field, - ) { + fn consume_mint_public_message(to: Field, amount: Field, canceller: Field, msg_key: Field, secret: Field) { let content_hash = get_mint_public_content_hash(to, amount, canceller); // Consume message and emit nullifier context.consume_l1_to_l2_message(msg_key, content_hash, secret); } - #[aztec(private)] + #[aztec(private)] fn consume_mint_private_message( - secret_hash_for_redeeming_minted_notes: Field, + secret_hash_for_redeeming_minted_notes: Field, amount: Field, canceller: Field, msg_key: Field, - secret_for_L1_to_L2_message_consumption: Field, + secret_for_L1_to_L2_message_consumption: Field ) { // Consume L1 to L2 message and emit nullifier let content_hash = get_mint_private_content_hash(secret_hash_for_redeeming_minted_notes, amount, canceller); @@ -199,9 +178,7 @@ contract Test { } #[aztec(private)] - fn set_constant( - value: Field, - ) { + fn set_constant(value: Field) { let mut note = FieldNote::new(value); storage.example_constant.initialize(&mut note, Option::none(), false); } @@ -212,9 +189,7 @@ contract Test { } // Purely exists for testing - unconstrained fn get_random( - kindaSeed: Field - ) -> Field { + unconstrained fn get_random(kindaSeed: Field) -> Field { kindaSeed * rand() } diff --git a/yarn-project/noir-contracts/src/contracts/token_blacklist_contract/src/interfaces.nr b/yarn-project/noir-contracts/src/contracts/token_blacklist_contract/src/interfaces.nr index d21f75b25173..a05dc34874bc 100644 --- a/yarn-project/noir-contracts/src/contracts/token_blacklist_contract/src/interfaces.nr +++ b/yarn-project/noir-contracts/src/contracts/token_blacklist_contract/src/interfaces.nr @@ -45,4 +45,4 @@ impl SlowMap { [index, new_value] ); } -} \ No newline at end of file +} diff --git a/yarn-project/noir-contracts/src/contracts/token_blacklist_contract/src/main.nr b/yarn-project/noir-contracts/src/contracts/token_blacklist_contract/src/main.nr index d30ccb605017..8e51623b8548 100644 --- a/yarn-project/noir-contracts/src/contracts/token_blacklist_contract/src/main.nr +++ b/yarn-project/noir-contracts/src/contracts/token_blacklist_contract/src/main.nr @@ -107,8 +107,9 @@ contract TokenBlacklist { storage.slow_update.initialize(&mut slow_note, Option::none(), false); let selector = compute_selector("_initialize((Field),(Field))"); - context.call_public_function(context.this_address(), selector, [admin.address, slow_updates_contract.address]); - + context.call_public_function(context.this_address(), + selector, + [admin.address, slow_updates_contract.address]); // We cannot do the following atm // let roles = UserFlags{is_admin: true, is_minter: false, is_blacklisted: false}.get_value() as Field; // SlowMap::at(slow_updates_contract).update_at_private(&mut context, admin.address, roles); @@ -118,17 +119,13 @@ contract TokenBlacklist { // Looking ugly because we cannot do constructor -> private calls #[aztec(private)] - fn init_slow_tree( - user: AztecAddress - ) { - let roles = UserFlags{is_admin: true, is_minter: false, is_blacklisted: false}.get_value() as Field; + fn init_slow_tree(user: AztecAddress) { + let roles = UserFlags { is_admin: true, is_minter: false, is_blacklisted: false }.get_value() as Field; let slow = SlowMap::at(AztecAddress::new(storage.slow_update.get_note().value)); slow.update_at_private(&mut context, user.address, roles); - context.call_public_function( - context.this_address(), + context.call_public_function(context.this_address(), compute_selector("_init_slow_tree((Field))"), - [context.msg_sender()], - ); + [context.msg_sender()]); } #[aztec(public)] @@ -139,10 +136,7 @@ contract TokenBlacklist { /////// #[aztec(private)] - fn update_roles( - user: AztecAddress, - roles: Field, - ) { + fn update_roles(user: AztecAddress, roles: Field) { let slow = SlowMap::at(AztecAddress::new(storage.slow_update.get_note().value)); let caller_roles = UserFlags::new(slow.read_at(&mut context, context.msg_sender()) as u120); assert(caller_roles.is_admin, "caller is not admin"); @@ -151,10 +145,7 @@ contract TokenBlacklist { } #[aztec(public)] - fn mint_public( - to: AztecAddress, - amount: Field, - ) -> Field { + fn mint_public(to: AztecAddress, amount: Field) -> Field { let slow = SlowMap::at(storage.public_slow_update.read()); let to_roles = UserFlags::new(slow.read_at_pub(context, to.address) as u120); assert(!to_roles.is_blacklisted, "Blacklisted: Recipient"); @@ -172,10 +163,7 @@ contract TokenBlacklist { } #[aztec(public)] - fn mint_private( - amount: Field, - secret_hash: Field, - ) -> Field { + fn mint_private(amount: Field, secret_hash: Field) -> Field { let slow = SlowMap::at(storage.public_slow_update.read()); let caller_roles = UserFlags::new(slow.read_at_pub(context, context.msg_sender()) as u120); assert(caller_roles.is_minter, "caller is not minter"); @@ -190,12 +178,7 @@ contract TokenBlacklist { } #[aztec(public)] - fn shield( - from: AztecAddress, - amount: Field, - secret_hash: Field, - nonce: Field, - ) -> Field { + fn shield(from: AztecAddress, amount: Field, secret_hash: Field, nonce: Field) -> Field { let slow = SlowMap::at(storage.public_slow_update.read()); let from_roles = UserFlags::new(slow.read_at_pub(context, from.address) as u120); assert(!from_roles.is_blacklisted, "Blacklisted: Sender"); @@ -219,13 +202,8 @@ contract TokenBlacklist { } #[aztec(public)] - fn transfer_public( - from: AztecAddress, - to: AztecAddress, - amount: Field, - nonce: Field, - ) -> Field { - let slow = SlowMap::at(storage.public_slow_update.read()); + fn transfer_public(from: AztecAddress, to: AztecAddress, amount: Field, nonce: Field) -> Field { + let slow = SlowMap::at(storage.public_slow_update.read()); let from_roles = UserFlags::new(slow.read_at_pub(context, from.address) as u120); assert(!from_roles.is_blacklisted, "Blacklisted: Sender"); let to_roles = UserFlags::new(slow.read_at_pub(context, to.address) as u120); @@ -248,12 +226,8 @@ contract TokenBlacklist { } #[aztec(public)] - fn burn_public( - from: AztecAddress, - amount: Field, - nonce: Field, - ) -> Field { - let slow = SlowMap::at(storage.public_slow_update.read()); + fn burn_public(from: AztecAddress, amount: Field, nonce: Field) -> Field { + let slow = SlowMap::at(storage.public_slow_update.read()); let from_roles = UserFlags::new(slow.read_at_pub(context, from.address) as u120); assert(!from_roles.is_blacklisted, "Blacklisted: Sender"); @@ -274,12 +248,8 @@ contract TokenBlacklist { } #[aztec(private)] - fn redeem_shield( - to: AztecAddress, - amount: Field, - secret: Field, - ) -> Field { - let slow = SlowMap::at(AztecAddress::new(storage.slow_update.get_note().value)); + fn redeem_shield(to: AztecAddress, amount: Field, secret: Field) -> Field { + let slow = SlowMap::at(AztecAddress::new(storage.slow_update.get_note().value)); let to_roles = UserFlags::new(slow.read_at(&mut context, to.address) as u120); assert(!to_roles.is_blacklisted, "Blacklisted: Recipient"); @@ -300,12 +270,7 @@ contract TokenBlacklist { } #[aztec(private)] - fn unshield( - from: AztecAddress, - to: AztecAddress, - amount: Field, - nonce: Field, - ) -> Field { + fn unshield(from: AztecAddress, to: AztecAddress, amount: Field, nonce: Field) -> Field { let slow = SlowMap::at(AztecAddress::new(storage.slow_update.get_note().value)); let from_roles = UserFlags::new(slow.read_at(&mut context, from.address) as u120); assert(!from_roles.is_blacklisted, "Blacklisted: Sender"); @@ -327,12 +292,7 @@ contract TokenBlacklist { } #[aztec(private)] - fn transfer( - from: AztecAddress, - to: AztecAddress, - amount: Field, - nonce: Field, - ) -> Field { + fn transfer(from: AztecAddress, to: AztecAddress, amount: Field, nonce: Field) -> Field { let slow = SlowMap::at(AztecAddress::new(storage.slow_update.get_note().value)); let from_roles = UserFlags::new(slow.read_at(&mut context, from.address) as u120); assert(!from_roles.is_blacklisted, "Blacklisted: Sender"); @@ -353,11 +313,7 @@ contract TokenBlacklist { } #[aztec(private)] - fn burn( - from: AztecAddress, - amount: Field, - nonce: Field, - ) -> Field { + fn burn(from: AztecAddress, amount: Field, nonce: Field) -> Field { let slow = SlowMap::at(AztecAddress::new(storage.slow_update.get_note().value)); let from_roles = UserFlags::new(slow.read_at(&mut context, from.address) as u120); assert(!from_roles.is_blacklisted, "Blacklisted: Sender"); @@ -377,10 +333,7 @@ contract TokenBlacklist { } #[aztec(public)] - internal fn _initialize( - new_admin: AztecAddress, - slow_updates_contract: AztecAddress - ) { + internal fn _initialize(new_admin: AztecAddress, slow_updates_contract: AztecAddress) { assert(new_admin.address != 0, "invalid admin"); storage.admin.write(new_admin); storage.public_slow_update.write(slow_updates_contract); @@ -390,18 +343,13 @@ contract TokenBlacklist { /// Internal /// #[aztec(public)] - internal fn _increase_public_balance( - to: AztecAddress, - amount: Field, - ) { + internal fn _increase_public_balance(to: AztecAddress, amount: Field) { let new_balance = storage.public_balances.at(to.address).read().add(SafeU120::new(amount)); storage.public_balances.at(to.address).write(new_balance); } #[aztec(public)] - internal fn _reduce_total_supply( - amount: Field, - ) { + internal fn _reduce_total_supply(amount: Field) { // Only to be called from burn. let new_supply = storage.total_supply.read().sub(SafeU120::new(amount)); storage.total_supply.write(new_supply); @@ -413,15 +361,11 @@ contract TokenBlacklist { storage.total_supply.read().value } - unconstrained fn balance_of_private( - owner: AztecAddress, - ) -> u120 { + unconstrained fn balance_of_private(owner: AztecAddress) -> u120 { storage.balances.at(owner).balance_of().value } - unconstrained fn balance_of_public( - owner: AztecAddress, - ) -> u120 { + unconstrained fn balance_of_public(owner: AztecAddress) -> u120 { storage.public_balances.at(owner.address).read().value } @@ -439,6 +383,6 @@ contract TokenBlacklist { note_utils::compute_note_hash_and_nullifier(FieldNoteMethods, note_header, preimage) } else { note_utils::compute_note_hash_and_nullifier(TokenNoteMethods, note_header, preimage) - } + } } -} \ No newline at end of file +} diff --git a/yarn-project/noir-contracts/src/contracts/token_blacklist_contract/src/types.nr b/yarn-project/noir-contracts/src/contracts/token_blacklist_contract/src/types.nr index d5747a136a10..f5a3aeaa6fdf 100644 --- a/yarn-project/noir-contracts/src/contracts/token_blacklist_contract/src/types.nr +++ b/yarn-project/noir-contracts/src/contracts/token_blacklist_contract/src/types.nr @@ -3,4 +3,4 @@ mod balance_set; mod balances_map; mod token_note; mod safe_u120_serialization; -mod roles; \ No newline at end of file +mod roles; diff --git a/yarn-project/noir-contracts/src/contracts/token_blacklist_contract/src/types/balance_set.nr b/yarn-project/noir-contracts/src/contracts/token_blacklist_contract/src/types/balance_set.nr index 37dbcd4ddbe6..5c3da5897b6a 100644 --- a/yarn-project/noir-contracts/src/contracts/token_blacklist_contract/src/types/balance_set.nr +++ b/yarn-project/noir-contracts/src/contracts/token_blacklist_contract/src/types/balance_set.nr @@ -123,4 +123,4 @@ pub fn filter_notes_min_sum(notes: [Option; MAX_READ_REQUESTS_PER_CAL } } selected -} \ No newline at end of file +} diff --git a/yarn-project/noir-contracts/src/contracts/token_blacklist_contract/src/types/roles.nr b/yarn-project/noir-contracts/src/contracts/token_blacklist_contract/src/types/roles.nr index 4412dff55926..793674e996dc 100644 --- a/yarn-project/noir-contracts/src/contracts/token_blacklist_contract/src/types/roles.nr +++ b/yarn-project/noir-contracts/src/contracts/token_blacklist_contract/src/types/roles.nr @@ -39,4 +39,4 @@ impl UserFlags { value } -} \ No newline at end of file +} diff --git a/yarn-project/noir-contracts/src/contracts/token_blacklist_contract/src/types/safe_u120_serialization.nr b/yarn-project/noir-contracts/src/contracts/token_blacklist_contract/src/types/safe_u120_serialization.nr index f4f3ef84d23e..876007184fe1 100644 --- a/yarn-project/noir-contracts/src/contracts/token_blacklist_contract/src/types/safe_u120_serialization.nr +++ b/yarn-project/noir-contracts/src/contracts/token_blacklist_contract/src/types/safe_u120_serialization.nr @@ -5,7 +5,7 @@ global SAFE_U120_SERIALIZED_LEN: Field = 1; // This is safe when reading from storage IF only correct safeu120 was written to storage fn deserializeU120(fields: [Field; SAFE_U120_SERIALIZED_LEN]) -> SafeU120 { - SafeU120{value: fields[0] as u120} + SafeU120 { value: fields[0] as u120 } } fn serializeU120(value: SafeU120) -> [Field; SAFE_U120_SERIALIZED_LEN] { @@ -15,4 +15,4 @@ fn serializeU120(value: SafeU120) -> [Field; SAFE_U120_SERIALIZED_LEN] { global SafeU120SerializationMethods = TypeSerializationInterface { deserialize: deserializeU120, serialize: serializeU120, -}; \ No newline at end of file +}; diff --git a/yarn-project/noir-contracts/src/contracts/token_blacklist_contract/src/types/token_note.nr b/yarn-project/noir-contracts/src/contracts/token_blacklist_contract/src/types/token_note.nr index 41fd41c60823..978676cc22e6 100644 --- a/yarn-project/noir-contracts/src/contracts/token_blacklist_contract/src/types/token_note.nr +++ b/yarn-project/noir-contracts/src/contracts/token_blacklist_contract/src/types/token_note.nr @@ -137,4 +137,4 @@ global TokenNoteMethods = NoteInterface { get_header, set_header, broadcast, -}; \ No newline at end of file +}; diff --git a/yarn-project/noir-contracts/src/contracts/token_bridge_contract/src/main.nr b/yarn-project/noir-contracts/src/contracts/token_bridge_contract/src/main.nr index decb8cd295c1..4fb1553eefe0 100644 --- a/yarn-project/noir-contracts/src/contracts/token_bridge_contract/src/main.nr +++ b/yarn-project/noir-contracts/src/contracts/token_bridge_contract/src/main.nr @@ -49,17 +49,10 @@ contract TokenBridge { } // docs:end:token_bridge_storage_and_constructor - // docs:start:claim_public // Consumes a L1->L2 message and calls the token contract to mint the appropriate amount publicly #[aztec(public)] - fn claim_public( - to: AztecAddress, - amount: Field, - canceller: EthereumAddress, - msg_key: Field, - secret: Field, - ) -> Field { + fn claim_public(to: AztecAddress, amount: Field, canceller: EthereumAddress, msg_key: Field, secret: Field) -> Field { let content_hash = get_mint_public_content_hash(to.address, amount, canceller.address); // Consume message and emit nullifier context.consume_l1_to_l2_message(msg_key, content_hash, secret); @@ -79,7 +72,7 @@ contract TokenBridge { recipient: EthereumAddress, // ethereum address to withdraw to amount: Field, callerOnL1: EthereumAddress, // ethereum address that can call this function on the L1 portal (0x0 if anyone can call) - nonce: Field, // nonce used in the approval message by `msg.sender` to let bridge burn their tokens on L2 + nonce: Field // nonce used in the approval message by `msg.sender` to let bridge burn their tokens on L2 ) -> Field { // Send an L2 to L1 message let content = get_withdraw_content_hash(recipient.address, amount, callerOnL1.address); @@ -100,21 +93,21 @@ contract TokenBridge { amount: Field, canceller: EthereumAddress, msg_key: Field, // L1 to L2 message key as derived from the inbox contract - secret_for_L1_to_L2_message_consumption: Field, // secret used to consume the L1 to L2 message + secret_for_L1_to_L2_message_consumption: Field // secret used to consume the L1 to L2 message ) -> Field { // Consume L1 to L2 message and emit nullifier - let content_hash = get_mint_private_content_hash(secret_hash_for_redeeming_minted_notes, amount, canceller.address); + let content_hash = get_mint_private_content_hash(secret_hash_for_redeeming_minted_notes, + amount, + canceller.address); context.consume_l1_to_l2_message(msg_key, content_hash, secret_for_L1_to_L2_message_consumption); // Mint tokens on L2 // `mint_private` on token is public. So we call an internal public function // which then calls the public method on the token contract. // Since the secret_hash is passed, no secret is leaked. - context.call_public_function( - context.this_address(), + context.call_public_function(context.this_address(), compute_selector("_call_mint_on_token(Field,Field)"), - [amount, secret_hash_for_redeeming_minted_notes], - ); + [amount, secret_hash_for_redeeming_minted_notes]); 1 } @@ -129,14 +122,16 @@ contract TokenBridge { recipient: EthereumAddress, // ethereum address to withdraw to amount: Field, callerOnL1: EthereumAddress, // ethereum address that can call this function on the L1 portal (0x0 if anyone can call) - nonce: Field, // nonce used in the approval message by `msg.sender` to let bridge burn their tokens on L2 + nonce: Field // nonce used in the approval message by `msg.sender` to let bridge burn their tokens on L2 ) -> Field { // Send an L2 to L1 message let content = get_withdraw_content_hash(recipient.address, amount, callerOnL1.address); context.message_portal(content); // Assert that user provided token address is same as seen in storage. - context.call_public_function(context.this_address(), compute_selector("_assert_token_is_same(Field)"), [token.address]); + context.call_public_function(context.this_address(), + compute_selector("_assert_token_is_same(Field)"), + [token.address]); // Burn tokens Token::at(token.address).burn(&mut context, context.msg_sender(), amount, nonce); @@ -168,7 +163,7 @@ contract TokenBridge { // Also, note that user hashes their secret in private and only sends the hash in public // meaning only user can `redeem_shield` at a later time with their secret. #[aztec(public)] - internal fn _call_mint_on_token(amount: Field, secret_hash: Field){ + internal fn _call_mint_on_token(amount: Field, secret_hash: Field) { Token::at(storage.token.read()).mint_private(context, amount, secret_hash); } // docs:end:call_mint_on_token diff --git a/yarn-project/noir-contracts/src/contracts/token_contract/src/main.nr b/yarn-project/noir-contracts/src/contracts/token_contract/src/main.nr index b6db0a2de8c8..6eb7c6cd9062 100644 --- a/yarn-project/noir-contracts/src/contracts/token_contract/src/main.nr +++ b/yarn-project/noir-contracts/src/contracts/token_contract/src/main.nr @@ -130,9 +130,7 @@ contract Token { // docs:start:set_admin #[aztec(public)] - fn set_admin( - new_admin: AztecAddress, - ) { + fn set_admin(new_admin: AztecAddress) { assert(storage.admin.read().eq(AztecAddress::new(context.msg_sender())), "caller is not admin"); // docs:start:write_admin storage.admin.write(new_admin); @@ -142,10 +140,7 @@ contract Token { // docs:start:set_minter #[aztec(public)] - fn set_minter( - minter: AztecAddress, - approve: bool, - ) { + fn set_minter(minter: AztecAddress, approve: bool) { // docs:start:read_admin assert(storage.admin.read().eq(AztecAddress::new(context.msg_sender())), "caller is not admin"); // docs:end:read_admin @@ -157,10 +152,7 @@ contract Token { // docs:start:mint_public #[aztec(public)] - fn mint_public( - to: AztecAddress, - amount: Field, - ) -> Field { + fn mint_public(to: AztecAddress, amount: Field) -> Field { // docs:start:read_minter assert(storage.minters.at(context.msg_sender()).read(), "caller is not minter"); // docs:end:read_minter @@ -176,10 +168,7 @@ contract Token { // docs:start:mint_private #[aztec(public)] - fn mint_private( - amount: Field, - secret_hash: Field, - ) -> Field { + fn mint_private(amount: Field, secret_hash: Field) -> Field { assert(storage.minters.at(context.msg_sender()).read(), "caller is not minter"); let pending_shields = storage.pending_shields; let mut note = TransparentNote::new(amount, secret_hash); @@ -195,12 +184,7 @@ contract Token { // docs:start:shield #[aztec(public)] - fn shield( - from: AztecAddress, - amount: Field, - secret_hash: Field, - nonce: Field, - ) -> Field { + fn shield(from: AztecAddress, amount: Field, secret_hash: Field, nonce: Field) -> Field { if (from.address != context.msg_sender()) { // The redeem is only spendable once, so we need to ensure that you cannot insert multiple shields from the same message. assert_current_call_valid_authwit_public(&mut context, from); @@ -222,12 +206,7 @@ contract Token { // docs:start:transfer_public #[aztec(public)] - fn transfer_public( - from: AztecAddress, - to: AztecAddress, - amount: Field, - nonce: Field, - ) -> Field { + fn transfer_public(from: AztecAddress, to: AztecAddress, amount: Field, nonce: Field) -> Field { if (from.address != context.msg_sender()) { assert_current_call_valid_authwit_public(&mut context, from); } else { @@ -247,11 +226,7 @@ contract Token { // docs:start:burn_public #[aztec(public)] - fn burn_public( - from: AztecAddress, - amount: Field, - nonce: Field, - ) -> Field { + fn burn_public(from: AztecAddress, amount: Field, nonce: Field) -> Field { // docs:start:assert_current_call_valid_authwit_public if (from.address != context.msg_sender()) { assert_current_call_valid_authwit_public(&mut context, from); @@ -273,11 +248,7 @@ contract Token { // docs:start:redeem_shield #[aztec(private)] - fn redeem_shield( - to: AztecAddress, - amount: Field, - secret: Field, - ) -> Field { + fn redeem_shield(to: AztecAddress, amount: Field, secret: Field) -> Field { let pending_shields = storage.pending_shields; let secret_hash = compute_secret_hash(secret); // Get 1 note (set_limit(1)) which has amount stored in field with index 0 (select(0, amount)) and secret_hash @@ -297,12 +268,7 @@ contract Token { // docs:start:unshield #[aztec(private)] - fn unshield( - from: AztecAddress, - to: AztecAddress, - amount: Field, - nonce: Field, - ) -> Field { + fn unshield(from: AztecAddress, to: AztecAddress, amount: Field, nonce: Field) -> Field { if (from.address != context.msg_sender()) { assert_current_call_valid_authwit(&mut context, from); } else { @@ -320,12 +286,7 @@ contract Token { // docs:start:transfer #[aztec(private)] - fn transfer( - from: AztecAddress, - to: AztecAddress, - amount: Field, - nonce: Field, - ) -> Field { + fn transfer(from: AztecAddress, to: AztecAddress, amount: Field, nonce: Field) -> Field { // docs:start:assert_current_call_valid_authwit if (from.address != context.msg_sender()) { assert_current_call_valid_authwit(&mut context, from); @@ -346,11 +307,7 @@ contract Token { // docs:start:burn #[aztec(private)] - fn burn( - from: AztecAddress, - amount: Field, - nonce: Field, - ) -> Field { + fn burn(from: AztecAddress, amount: Field, nonce: Field) -> Field { if (from.address != context.msg_sender()) { assert_current_call_valid_authwit(&mut context, from); } else { @@ -368,9 +325,7 @@ contract Token { // docs:start:initialize #[aztec(public)] - internal fn _initialize( - new_admin: AztecAddress, - ) { + internal fn _initialize(new_admin: AztecAddress) { assert(new_admin.address != 0, "invalid admin"); storage.admin.write(new_admin); storage.minters.at(new_admin.address).write(true); @@ -381,10 +336,7 @@ contract Token { // docs:start:increase_public_balance #[aztec(public)] - internal fn _increase_public_balance( - to: AztecAddress, - amount: Field, - ) { + internal fn _increase_public_balance(to: AztecAddress, amount: Field) { let new_balance = storage.public_balances.at(to.address).read().add(SafeU120::new(amount)); storage.public_balances.at(to.address).write(new_balance); } @@ -392,9 +344,7 @@ contract Token { // docs:start:reduce_total_supply #[aztec(public)] - internal fn _reduce_total_supply( - amount: Field, - ) { + internal fn _reduce_total_supply(amount: Field) { // Only to be called from burn. let new_supply = storage.total_supply.read().sub(SafeU120::new(amount)); storage.total_supply.write(new_supply); @@ -410,9 +360,7 @@ contract Token { // docs:end:admin // docs:start:is_minter - unconstrained fn is_minter( - minter: AztecAddress, - ) -> bool { + unconstrained fn is_minter(minter: AztecAddress) -> bool { storage.minters.at(minter.address).read() } // docs:end:is_minter @@ -424,17 +372,13 @@ contract Token { // docs:end:total_supply // docs:start:balance_of_private - unconstrained fn balance_of_private( - owner: AztecAddress, - ) -> u120 { + unconstrained fn balance_of_private(owner: AztecAddress) -> u120 { storage.balances.at(owner).balance_of().value } // docs:end:balance_of_private // docs:start:balance_of_public - unconstrained fn balance_of_public( - owner: AztecAddress, - ) -> u120 { + unconstrained fn balance_of_public(owner: AztecAddress) -> u120 { storage.public_balances.at(owner.address).read().value } // docs:end:balance_of_public diff --git a/yarn-project/noir-contracts/src/contracts/token_contract/src/types.nr b/yarn-project/noir-contracts/src/contracts/token_contract/src/types.nr index 1f4883a54c6a..e29a8151e9f3 100644 --- a/yarn-project/noir-contracts/src/contracts/token_contract/src/types.nr +++ b/yarn-project/noir-contracts/src/contracts/token_contract/src/types.nr @@ -2,4 +2,4 @@ mod transparent_note; mod balance_set; mod balances_map; mod token_note; -mod safe_u120_serialization; \ No newline at end of file +mod safe_u120_serialization; diff --git a/yarn-project/noir-contracts/src/contracts/token_contract/src/types/balance_set.nr b/yarn-project/noir-contracts/src/contracts/token_contract/src/types/balance_set.nr index 37dbcd4ddbe6..5c3da5897b6a 100644 --- a/yarn-project/noir-contracts/src/contracts/token_contract/src/types/balance_set.nr +++ b/yarn-project/noir-contracts/src/contracts/token_contract/src/types/balance_set.nr @@ -123,4 +123,4 @@ pub fn filter_notes_min_sum(notes: [Option; MAX_READ_REQUESTS_PER_CAL } } selected -} \ No newline at end of file +} diff --git a/yarn-project/noir-contracts/src/contracts/token_contract/src/types/safe_u120_serialization.nr b/yarn-project/noir-contracts/src/contracts/token_contract/src/types/safe_u120_serialization.nr index f4f3ef84d23e..876007184fe1 100644 --- a/yarn-project/noir-contracts/src/contracts/token_contract/src/types/safe_u120_serialization.nr +++ b/yarn-project/noir-contracts/src/contracts/token_contract/src/types/safe_u120_serialization.nr @@ -5,7 +5,7 @@ global SAFE_U120_SERIALIZED_LEN: Field = 1; // This is safe when reading from storage IF only correct safeu120 was written to storage fn deserializeU120(fields: [Field; SAFE_U120_SERIALIZED_LEN]) -> SafeU120 { - SafeU120{value: fields[0] as u120} + SafeU120 { value: fields[0] as u120 } } fn serializeU120(value: SafeU120) -> [Field; SAFE_U120_SERIALIZED_LEN] { @@ -15,4 +15,4 @@ fn serializeU120(value: SafeU120) -> [Field; SAFE_U120_SERIALIZED_LEN] { global SafeU120SerializationMethods = TypeSerializationInterface { deserialize: deserializeU120, serialize: serializeU120, -}; \ No newline at end of file +}; diff --git a/yarn-project/noir-contracts/src/contracts/token_contract/src/types/token_note.nr b/yarn-project/noir-contracts/src/contracts/token_contract/src/types/token_note.nr index 442b600f1ce8..cc366cc22774 100644 --- a/yarn-project/noir-contracts/src/contracts/token_contract/src/types/token_note.nr +++ b/yarn-project/noir-contracts/src/contracts/token_contract/src/types/token_note.nr @@ -137,4 +137,4 @@ global TokenNoteMethods = NoteInterface { get_header, set_header, broadcast, -}; \ No newline at end of file +}; diff --git a/yarn-project/noir-contracts/src/contracts/uniswap_contract/src/main.nr b/yarn-project/noir-contracts/src/contracts/uniswap_contract/src/main.nr index 75ce7e78ea65..1e332adcd705 100644 --- a/yarn-project/noir-contracts/src/contracts/uniswap_contract/src/main.nr +++ b/yarn-project/noir-contracts/src/contracts/uniswap_contract/src/main.nr @@ -21,7 +21,7 @@ contract Uniswap { }; use dep::authwit::auth::{IS_VALID_SELECTOR, assert_current_call_valid_authwit_public, compute_authwit_message_hash}; - + use crate::interfaces::{Token, TokenBridge}; use crate::util::{compute_swap_private_content_hash, compute_swap_public_content_hash}; @@ -47,16 +47,16 @@ contract Uniswap { } } } - + #[aztec(private)] fn constructor() {} -// docs:end:uniswap_setup + // docs:end:uniswap_setup -// docs:start:swap_public + // docs:start:swap_public #[aztec(public)] fn swap_public( sender: AztecAddress, - input_asset_bridge: AztecAddress, + input_asset_bridge: AztecAddress, input_amount: Field, output_asset_bridge: AztecAddress, // params for using the transfer approval @@ -71,9 +71,8 @@ contract Uniswap { canceller_for_L1_to_L2_message: EthereumAddress, caller_on_L1: EthereumAddress, // nonce for someone to call swap on sender's behalf - nonce_for_swap_approval: Field, + nonce_for_swap_approval: Field ) -> Field { - if (sender.address != context.msg_sender()) { assert_current_call_valid_authwit_public(&mut context, sender); } @@ -81,20 +80,16 @@ contract Uniswap { let input_asset = TokenBridge::at(input_asset_bridge.address).token(context); // Transfer funds to this contract - Token::at(input_asset.address).transfer_public( - context, + Token::at(input_asset.address).transfer_public(context, sender.address, context.this_address(), input_amount, - nonce_for_transfer_approval, - ); + nonce_for_transfer_approval); // Approve bridge to burn this contract's funds and exit to L1 Uniswap Portal - let _void = context.call_public_function( - context.this_address(), - compute_selector("_approve_bridge_and_exit_input_asset_to_L1((Field),(Field),Field)"), - [input_asset.address, input_asset_bridge.address, input_amount], - ); + let _void = context.call_public_function(context.this_address(), + compute_selector("_approve_bridge_and_exit_input_asset_to_L1((Field),(Field),Field)"), + [input_asset.address, input_asset_bridge.address, input_amount]); // Create swap message and send to Outbox for Uniswap Portal // this ensures the integrity of what the user originally intends to do on L1. @@ -104,8 +99,7 @@ contract Uniswap { assert(input_asset_bridge_portal_address != 0, "L1 portal address of input_asset's bridge is 0"); assert(output_asset_bridge_portal_address != 0, "L1 portal address of output_asset's bridge is 0"); - let content_hash = compute_swap_public_content_hash( - input_asset_bridge_portal_address, + let content_hash = compute_swap_public_content_hash(input_asset_bridge_portal_address, input_amount, uniswap_fee_tier, output_asset_bridge_portal_address, @@ -114,53 +108,49 @@ contract Uniswap { secret_hash_for_L1_to_l2_message, deadline_for_L1_to_l2_message, canceller_for_L1_to_L2_message.address, - caller_on_L1.address, - ); + caller_on_L1.address); context.message_portal(content_hash); 1 } -// docs:end:swap_public + // docs:end:swap_public -// docs:start:swap_private + // docs:start:swap_private #[aztec(private)] fn swap_private( input_asset: AztecAddress, // since private, we pass here and later assert that this is as expected by input_bridge - input_asset_bridge: AztecAddress, + input_asset_bridge: AztecAddress, input_amount: Field, output_asset_bridge: AztecAddress, // params for using the unshield approval nonce_for_unshield_approval: Field, // params for the swap - uniswap_fee_tier: Field, // which uniswap tier to use (eg 3000 for 0.3% fee) + uniswap_fee_tier: Field,// which uniswap tier to use (eg 3000 for 0.3% fee) minimum_output_amount: Field, // minimum output amount to receive (slippage protection for the swap) // params for the depositing output_asset back to Aztec - secret_hash_for_redeeming_minted_notes: Field, // secret hash used to redeem minted notes at a later time. This enables anyone to call this function and mint tokens to a user on their behalf + secret_hash_for_redeeming_minted_notes: Field,// secret hash used to redeem minted notes at a later time. This enables anyone to call this function and mint tokens to a user on their behalf secret_hash_for_L1_to_l2_message: Field, // for when l1 uniswap portal inserts the message to consume output assets on L2 deadline_for_L1_to_l2_message: Field, // for when l1 uniswap portal inserts the message to consume output assets on L2 canceller_for_L1_to_L2_message: EthereumAddress, // L1 address of who can cancel the message to consume assets on L2. - caller_on_L1: EthereumAddress, // ethereum address that can call this function on the L1 portal (0x0 if anyone can call) + caller_on_L1: EthereumAddress // ethereum address that can call this function on the L1 portal (0x0 if anyone can call) ) -> Field { - // Assert that user provided token address is same as expected by token bridge. // we can't directly use `input_asset_bridge.token` because that is a public method and public can't return data to private - context.call_public_function(context.this_address(), compute_selector("_assert_token_is_same((Field),(Field))"), [input_asset.address, input_asset_bridge.address]); + context.call_public_function(context.this_address(), + compute_selector("_assert_token_is_same((Field),(Field))"), + [input_asset.address, input_asset_bridge.address]); // Transfer funds to this contract - Token::at(input_asset.address).unshield( - &mut context, + Token::at(input_asset.address).unshield(&mut context, context.msg_sender(), context.this_address(), input_amount, - nonce_for_unshield_approval, - ); + nonce_for_unshield_approval); // Approve bridge to burn this contract's funds and exit to L1 Uniswap Portal - context.call_public_function( - context.this_address(), - compute_selector("_approve_bridge_and_exit_input_asset_to_L1((Field),(Field),Field)"), - [input_asset.address, input_asset_bridge.address, input_amount], - ); + context.call_public_function(context.this_address(), + compute_selector("_approve_bridge_and_exit_input_asset_to_L1((Field),(Field),Field)"), + [input_asset.address, input_asset_bridge.address, input_amount]); // Create swap message and send to Outbox for Uniswap Portal // this ensures the integrity of what the user originally intends to do on L1. @@ -170,8 +160,7 @@ contract Uniswap { assert(input_asset_bridge_portal_address != 0, "L1 portal address of input_asset's bridge is 0"); assert(output_asset_bridge_portal_address != 0, "L1 portal address of output_asset's bridge is 0"); - let content_hash = compute_swap_private_content_hash( - input_asset_bridge_portal_address, + let content_hash = compute_swap_private_content_hash(input_asset_bridge_portal_address, input_amount, uniswap_fee_tier, output_asset_bridge_portal_address, @@ -180,8 +169,7 @@ contract Uniswap { secret_hash_for_L1_to_l2_message, deadline_for_L1_to_l2_message, canceller_for_L1_to_L2_message.address, - caller_on_L1.address, - ); + caller_on_L1.address); context.message_portal(content_hash); 1 @@ -195,11 +183,7 @@ contract Uniswap { #[aztec(public)] fn is_valid_public(message_hash: Field) -> Field { let value = storage.approved_action.at(message_hash).read(); - if (value){ - IS_VALID_SELECTOR - } else { - 0 - } + if (value) { IS_VALID_SELECTOR } else { 0 } } // docs:end:authwit_uniswap_get @@ -210,28 +194,25 @@ contract Uniswap { // Note that private can't read public return values so created an internal public that handles everything // this method is used for both private and public swaps. #[aztec(public)] - internal fn _approve_bridge_and_exit_input_asset_to_L1( - token: AztecAddress, - token_bridge: AztecAddress, - amount: Field, - ) { + internal fn _approve_bridge_and_exit_input_asset_to_L1(token: AztecAddress, token_bridge: AztecAddress, amount: Field) { // approve bridge to burn this contract's funds (required when exiting on L1, as it burns funds on L2): let nonce_for_burn_approval = storage.nonce_for_burn_approval.read(); let selector = compute_selector("burn_public((Field),Field,Field)"); - let message_hash = compute_authwit_message_hash(token_bridge, token, selector, [context.this_address(), amount, nonce_for_burn_approval]); + let message_hash = compute_authwit_message_hash(token_bridge, + token, + selector, + [context.this_address(), amount, nonce_for_burn_approval]); storage.approved_action.at(message_hash).write(true); // increment nonce_for_burn_approval so it won't be used again storage.nonce_for_burn_approval.write(nonce_for_burn_approval + 1); // Exit to L1 Uniswap Portal ! - TokenBridge::at(token_bridge.address).exit_to_l1_public( - context, + TokenBridge::at(token_bridge.address).exit_to_l1_public(context, context.this_portal_address(), amount, context.this_portal_address(), - nonce_for_burn_approval, - ); + nonce_for_burn_approval); } // docs:end:authwit_uniswap_set @@ -253,4 +234,4 @@ contract Uniswap { unconstrained fn compute_note_hash_and_nullifier(contract_address: Field, nonce: Field, storage_slot: Field, serialized_note: [Field; 0]) -> [Field; 4] { [0, 0, 0, 0] } -} \ No newline at end of file +} diff --git a/yarn-project/noir-contracts/src/contracts/uniswap_contract/src/util.nr b/yarn-project/noir-contracts/src/contracts/uniswap_contract/src/util.nr index cc39741944b3..163f8056a107 100644 --- a/yarn-project/noir-contracts/src/contracts/uniswap_contract/src/util.nr +++ b/yarn-project/noir-contracts/src/contracts/uniswap_contract/src/util.nr @@ -13,7 +13,7 @@ pub fn compute_swap_public_content_hash( secret_hash_for_L1_to_l2_message: Field, deadline_for_L1_to_l2_message: Field, canceller_for_L1_to_L2_message: Field, - caller_on_L1: Field, + caller_on_L1: Field ) -> Field { let mut hash_bytes: [u8; 324] = [0; 324]; // 10 fields of 32 bytes each + 4 bytes fn selector @@ -65,7 +65,7 @@ pub fn compute_swap_private_content_hash( secret_hash_for_L1_to_l2_message: Field, deadline_for_L1_to_l2_message: Field, canceller_for_L1_to_L2_message: Field, - caller_on_L1: Field, + caller_on_L1: Field ) -> Field { let mut hash_bytes: [u8; 324] = [0; 324]; // 10 fields of 32 bytes each + 4 bytes fn selector From ef3a6ba70ce73719df38c76e12816c960f28b564 Mon Sep 17 00:00:00 2001 From: benesjan Date: Wed, 22 Nov 2023 07:49:56 +0000 Subject: [PATCH 8/8] chore: formatting aztec-nr --- .../aztec-nr/address-note/src/address_note.nr | 2 +- yarn-project/aztec-nr/address-note/src/lib.nr | 2 +- yarn-project/aztec-nr/authwit/src/account.nr | 2 +- yarn-project/aztec-nr/authwit/src/auth.nr | 44 ++++++------- .../aztec-nr/authwit/src/auth_witness.nr | 2 +- .../aztec-nr/authwit/src/entrypoint.nr | 4 +- yarn-project/aztec-nr/authwit/src/lib.nr | 2 +- yarn-project/aztec-nr/aztec/src/abi.nr | 1 - yarn-project/aztec-nr/aztec/src/address.nr | 5 +- yarn-project/aztec-nr/aztec/src/context.nr | 2 +- yarn-project/aztec-nr/aztec/src/hash.nr | 34 +++++----- yarn-project/aztec-nr/aztec/src/lib.nr | 2 +- yarn-project/aztec-nr/aztec/src/log.nr | 12 +--- yarn-project/aztec-nr/aztec/src/messaging.nr | 6 +- .../messaging/l1_to_l2_message_getter_data.nr | 12 ++-- yarn-project/aztec-nr/aztec/src/note.nr | 2 +- .../aztec-nr/aztec/src/note/lifecycle.nr | 12 ++-- .../aztec-nr/aztec/src/note/note_getter.nr | 64 ++++++------------- .../aztec-nr/aztec/src/note/note_header.nr | 2 +- yarn-project/aztec-nr/aztec/src/note/utils.nr | 27 ++------ .../aztec/src/oracle/call_private_function.nr | 20 ++---- .../aztec-nr/aztec/src/oracle/context.nr | 2 +- .../aztec/src/oracle/create_commitment.nr | 1 - .../oracle/enqueue_public_function_call.nr | 20 ++---- .../aztec/src/oracle/get_l1_to_l2_message.nr | 3 +- .../aztec/src/oracle/get_public_key.nr | 20 +++--- .../aztec/src/oracle/get_secret_key.nr | 5 +- .../aztec-nr/aztec/src/oracle/logs.nr | 25 ++------ .../aztec-nr/aztec/src/oracle/notes.nr | 59 ++++++++--------- .../aztec-nr/aztec/src/oracle/public_call.nr | 18 +----- .../aztec-nr/aztec/src/oracle/rand.nr | 2 - .../aztec-nr/aztec/src/oracle/storage.nr | 25 ++------ .../aztec/src/private_call_stack_item.nr | 2 +- yarn-project/aztec-nr/aztec/src/selector.nr | 4 +- yarn-project/aztec-nr/aztec/src/state_vars.nr | 2 +- .../aztec/src/state_vars/singleton.nr | 11 +--- yarn-project/aztec-nr/aztec/src/types.nr | 2 +- .../aztec-nr/aztec/src/types/address.nr | 2 +- .../aztec-nr/aztec/src/types/point.nr | 7 +- .../aztec_address_serialization.nr | 2 +- .../type_serialization/bool_serialization.nr | 2 +- .../type_serialization/u32_serialization.nr | 2 +- yarn-project/aztec-nr/aztec/src/types/vec.nr | 3 +- yarn-project/aztec-nr/aztec/src/utils.nr | 8 +-- .../aztec-nr/easy-private-state/src/lib.nr | 2 +- .../aztec-nr/field-note/src/field_note.nr | 2 +- yarn-project/aztec-nr/field-note/src/lib.nr | 2 +- yarn-project/aztec-nr/safe-math/src/lib.nr | 2 +- .../aztec-nr/safe-math/src/safe_u120.nr | 3 - .../aztec-nr/slow-updates-tree/src/lib.nr | 2 +- .../slow-updates-tree/src/slow_map.nr | 14 ++-- .../aztec-nr/value-note/src/balance_utils.nr | 2 +- .../aztec-nr/value-note/src/filter.nr | 2 +- yarn-project/aztec-nr/value-note/src/lib.nr | 2 +- yarn-project/aztec-nr/value-note/src/utils.nr | 26 ++------ 55 files changed, 189 insertions(+), 356 deletions(-) diff --git a/yarn-project/aztec-nr/address-note/src/address_note.nr b/yarn-project/aztec-nr/address-note/src/address_note.nr index 6259cd92f744..90d62ea87603 100644 --- a/yarn-project/aztec-nr/address-note/src/address_note.nr +++ b/yarn-project/aztec-nr/address-note/src/address_note.nr @@ -89,7 +89,7 @@ fn deserialize(serialized_note: [Field; ADDRESS_NOTE_LEN]) -> AddressNote { AddressNote::deserialize(serialized_note) } -fn serialize(note: AddressNote) -> [Field; ADDRESS_NOTE_LEN]{ +fn serialize(note: AddressNote) -> [Field; ADDRESS_NOTE_LEN] { note.serialize() } diff --git a/yarn-project/aztec-nr/address-note/src/lib.nr b/yarn-project/aztec-nr/address-note/src/lib.nr index f016584e48cf..5a96025fa251 100644 --- a/yarn-project/aztec-nr/address-note/src/lib.nr +++ b/yarn-project/aztec-nr/address-note/src/lib.nr @@ -1 +1 @@ -mod address_note; \ No newline at end of file +mod address_note; diff --git a/yarn-project/aztec-nr/authwit/src/account.nr b/yarn-project/aztec-nr/authwit/src/account.nr index d2f541c5dff2..7a79d089f685 100644 --- a/yarn-project/aztec-nr/authwit/src/account.nr +++ b/yarn-project/aztec-nr/authwit/src/account.nr @@ -66,4 +66,4 @@ impl AccountActions { pub fn internal_set_is_valid_storage(self, message_hash: Field, value: bool) { self.approved_action.at(message_hash).write(value); } -} \ No newline at end of file +} diff --git a/yarn-project/aztec-nr/authwit/src/auth.nr b/yarn-project/aztec-nr/authwit/src/auth.nr index 7094fae9c53f..619523308324 100644 --- a/yarn-project/aztec-nr/authwit/src/auth.nr +++ b/yarn-project/aztec-nr/authwit/src/auth.nr @@ -14,54 +14,46 @@ global IS_VALID_PUBLIC_SELECTOR = 0xf3661153; // docs:start:assert_valid_authwit // Assert that `on_behalf_of` have authorized `message_hash` with a valid authentication witness pub fn assert_valid_authwit(context: &mut PrivateContext, on_behalf_of: AztecAddress, message_hash: Field) { - let result = context.call_private_function(on_behalf_of.address, IS_VALID_SELECTOR, [message_hash])[0]; - context.push_new_nullifier(message_hash, EMPTY_NULLIFIED_COMMITMENT); - assert(result == IS_VALID_SELECTOR, "Message not authorized by account"); + let result = context.call_private_function(on_behalf_of.address, IS_VALID_SELECTOR, [message_hash])[0]; + context.push_new_nullifier(message_hash, EMPTY_NULLIFIED_COMMITMENT); + assert(result == IS_VALID_SELECTOR, "Message not authorized by account"); } // docs:end:assert_valid_authwit // docs:start:assert_current_call_valid_authwit // Assert that `on_behalf_of` have authorized the current call with a valid authentication witness pub fn assert_current_call_valid_authwit(context: &mut PrivateContext, on_behalf_of: AztecAddress) { - // message_hash = H(caller, contract_this, selector, args_hash) - let message_hash = pedersen_hash( - [context.msg_sender(), context.this_address(), context.selector(), context.args_hash], - GENERATOR_INDEX__SIGNATURE_PAYLOAD - ); - assert_valid_authwit(context, on_behalf_of, message_hash); + // message_hash = H(caller, contract_this, selector, args_hash) + let message_hash = pedersen_hash([context.msg_sender(), context.this_address(), context.selector(), context.args_hash], + GENERATOR_INDEX__SIGNATURE_PAYLOAD); + assert_valid_authwit(context, on_behalf_of, message_hash); } // docs:end:assert_current_call_valid_authwit // docs:start:assert_valid_authwit_public // Assert that `on_behalf_of` have authorized `message_hash` in a public context pub fn assert_valid_authwit_public(context: &mut PublicContext, on_behalf_of: AztecAddress, message_hash: Field) { - let result = context.call_public_function(on_behalf_of.address, IS_VALID_PUBLIC_SELECTOR, [message_hash])[0]; - context.push_new_nullifier(message_hash, EMPTY_NULLIFIED_COMMITMENT); - assert(result == IS_VALID_SELECTOR, "Message not authorized by account"); + let result = context.call_public_function(on_behalf_of.address, IS_VALID_PUBLIC_SELECTOR, [message_hash])[0]; + context.push_new_nullifier(message_hash, EMPTY_NULLIFIED_COMMITMENT); + assert(result == IS_VALID_SELECTOR, "Message not authorized by account"); } // docs:end:assert_valid_authwit_public // docs:start:assert_current_call_valid_authwit_public // Assert that `on_behalf_of` have authorized the current call in a public context pub fn assert_current_call_valid_authwit_public(context: &mut PublicContext, on_behalf_of: AztecAddress) { - // message_hash = H(caller, contract_this, selector, args_hash) - let message_hash = pedersen_hash( - [context.msg_sender(), context.this_address(), context.selector(), context.args_hash], - GENERATOR_INDEX__SIGNATURE_PAYLOAD - ); - assert_valid_authwit_public(context, on_behalf_of, message_hash); + // message_hash = H(caller, contract_this, selector, args_hash) + let message_hash = pedersen_hash([context.msg_sender(), context.this_address(), context.selector(), context.args_hash], + GENERATOR_INDEX__SIGNATURE_PAYLOAD); + assert_valid_authwit_public(context, on_behalf_of, message_hash); } // docs:end:assert_current_call_valid_authwit_public // docs:start:compute_authwit_message_hash // Compute the message hash to be used by an authentication witness -pub fn compute_authwit_message_hash( - caller: AztecAddress, - target: AztecAddress, - selector: Field, - args: [Field; N] -) -> Field { - let args_hash = hash_args(args); - pedersen_hash([caller.address, target.address, selector, args_hash], GENERATOR_INDEX__SIGNATURE_PAYLOAD) +pub fn compute_authwit_message_hash(caller: AztecAddress, target: AztecAddress, selector: Field, args: [Field; N]) -> Field { + let args_hash = hash_args(args); + pedersen_hash([caller.address, target.address, selector, args_hash], + GENERATOR_INDEX__SIGNATURE_PAYLOAD) } // docs:end:compute_authwit_message_hash \ No newline at end of file diff --git a/yarn-project/aztec-nr/authwit/src/auth_witness.nr b/yarn-project/aztec-nr/authwit/src/auth_witness.nr index 7ef0577f28ee..e51567a618dc 100644 --- a/yarn-project/aztec-nr/authwit/src/auth_witness.nr +++ b/yarn-project/aztec-nr/authwit/src/auth_witness.nr @@ -3,4 +3,4 @@ fn get_auth_witness_oracle(_message_hash: Field) -> [Field; N] {} unconstrained pub fn get_auth_witness(message_hash: Field) -> [Field; N] { get_auth_witness_oracle(message_hash) -} \ No newline at end of file +} diff --git a/yarn-project/aztec-nr/authwit/src/entrypoint.nr b/yarn-project/aztec-nr/authwit/src/entrypoint.nr index 4d97421f2b84..227be7d17fc8 100644 --- a/yarn-project/aztec-nr/authwit/src/entrypoint.nr +++ b/yarn-project/aztec-nr/authwit/src/entrypoint.nr @@ -3,7 +3,7 @@ use dep::aztec::types::vec::BoundedVec; use dep::aztec::hash::pedersen_hash; use dep::aztec::context::PrivateContext; use dep::aztec::private_call_stack_item::PrivateCallStackItem; -use dep::aztec::public_call_stack_item::PublicCallStackItem; +use dep::aztec::public_call_stack_item::PublicCallStackItem; use dep::aztec::constants_gen::GENERATOR_INDEX__SIGNATURE_PAYLOAD; global ACCOUNT_MAX_CALLS: Field = 4; @@ -105,4 +105,4 @@ impl EntrypointPayload { } } // docs:end:entrypoint-execute-calls -} \ No newline at end of file +} diff --git a/yarn-project/aztec-nr/authwit/src/lib.nr b/yarn-project/aztec-nr/authwit/src/lib.nr index ec0b92394044..e56460fd7019 100644 --- a/yarn-project/aztec-nr/authwit/src/lib.nr +++ b/yarn-project/aztec-nr/authwit/src/lib.nr @@ -1,4 +1,4 @@ mod account; mod auth_witness; mod auth; -mod entrypoint; \ No newline at end of file +mod entrypoint; diff --git a/yarn-project/aztec-nr/aztec/src/abi.nr b/yarn-project/aztec-nr/aztec/src/abi.nr index 314e5b3fe7ea..541dc73cf3af 100644 --- a/yarn-project/aztec-nr/aztec/src/abi.nr +++ b/yarn-project/aztec-nr/aztec/src/abi.nr @@ -302,7 +302,6 @@ impl ContractStorageUpdateRequest { } } - struct PublicCircuitPublicInputs { call_context: CallContext, args_hash: Field, diff --git a/yarn-project/aztec-nr/aztec/src/address.nr b/yarn-project/aztec-nr/aztec/src/address.nr index 162949df4832..f1f4224513c2 100644 --- a/yarn-project/aztec-nr/aztec/src/address.nr +++ b/yarn-project/aztec-nr/aztec/src/address.nr @@ -2,5 +2,6 @@ use crate::constants_gen::GENERATOR_INDEX__CONTRACT_ADDRESS; use crate::hash::pedersen_hash; pub fn compute_address(pub_key_x: Field, pub_key_y: Field, partial_address: Field) -> Field { - pedersen_hash([pub_key_x, pub_key_y, partial_address], GENERATOR_INDEX__CONTRACT_ADDRESS) -} \ No newline at end of file + pedersen_hash([pub_key_x, pub_key_y, partial_address], + GENERATOR_INDEX__CONTRACT_ADDRESS) +} diff --git a/yarn-project/aztec-nr/aztec/src/context.nr b/yarn-project/aztec-nr/aztec/src/context.nr index 7926e159a3df..a2f34867c6cb 100644 --- a/yarn-project/aztec-nr/aztec/src/context.nr +++ b/yarn-project/aztec-nr/aztec/src/context.nr @@ -616,4 +616,4 @@ impl Context { private: Option::none() } } -} \ No newline at end of file +} diff --git a/yarn-project/aztec-nr/aztec/src/hash.nr b/yarn-project/aztec-nr/aztec/src/hash.nr index 7e3d00716055..f8d3abb51aa3 100644 --- a/yarn-project/aztec-nr/aztec/src/hash.nr +++ b/yarn-project/aztec-nr/aztec/src/hash.nr @@ -5,30 +5,30 @@ use crate::constants_gen::{ }; pub fn sha256_to_field(bytes_to_hash: [u8; N]) -> Field { - let sha256_hashed = sha256(bytes_to_hash); + let sha256_hashed = sha256(bytes_to_hash); - // Convert it to a field element - let mut v = 1; - let mut high = 0 as Field; - let mut low = 0 as Field; + // Convert it to a field element + let mut v = 1; + let mut high = 0 as Field; + let mut low = 0 as Field; - for i in 0..16 { - high = high + (sha256_hashed[15 - i] as Field) * v; - low = low + (sha256_hashed[16 + 15 - i] as Field) * v; - v = v * 256; - } + for i in 0..16 { + high = high + (sha256_hashed[15 - i] as Field) * v; + low = low + (sha256_hashed[16 + 15 - i] as Field) * v; + v = v * 256; + } - // Abuse that a % p + b % p = (a + b) % p and that low < p - let hash_in_a_field = low + high * v; + // Abuse that a % p + b % p = (a + b) % p and that low < p + let hash_in_a_field = low + high * v; - hash_in_a_field + hash_in_a_field } pub fn compute_secret_hash(secret: Field) -> Field { - // TODO(#1205) This is probably not the right index to use - pedersen_hash([secret], GENERATOR_INDEX__L1_TO_L2_MESSAGE_SECRET) + // TODO(#1205) This is probably not the right index to use + pedersen_hash([secret], GENERATOR_INDEX__L1_TO_L2_MESSAGE_SECRET) } pub fn pedersen_hash(inputs: [Field; N], hash_index: u32) -> Field { - pedersen_hash_with_separator(inputs, hash_index) -} \ No newline at end of file + pedersen_hash_with_separator(inputs, hash_index) +} diff --git a/yarn-project/aztec-nr/aztec/src/lib.nr b/yarn-project/aztec-nr/aztec/src/lib.nr index 10330e9c1d08..d1080f9056f5 100644 --- a/yarn-project/aztec-nr/aztec/src/lib.nr +++ b/yarn-project/aztec-nr/aztec/src/lib.nr @@ -12,4 +12,4 @@ mod public_call_stack_item; mod selector; mod state_vars; mod types; -mod utils; \ No newline at end of file +mod utils; diff --git a/yarn-project/aztec-nr/aztec/src/log.nr b/yarn-project/aztec-nr/aztec/src/log.nr index d38775dcb728..35bc5ee690c5 100644 --- a/yarn-project/aztec-nr/aztec/src/log.nr +++ b/yarn-project/aztec-nr/aztec/src/log.nr @@ -7,16 +7,13 @@ pub fn emit_encrypted_log( contract_address: Field, storage_slot: Field, encryption_pub_key: Point, - log: [Field; N], + log: [Field; N] ) { let _ = oracle::logs::emit_encrypted_log(contract_address, storage_slot, encryption_pub_key, log); context.accumulate_encrypted_logs(log); } -pub fn emit_unencrypted_log( - context: &mut PublicContext, - log: T, -) { +pub fn emit_unencrypted_log(context: &mut PublicContext, log: T) { let contract_address = context.this_address(); let event_selector = 5; // TODO: compute actual event selector. let _ = oracle::logs::emit_unencrypted_log(contract_address, event_selector, log); @@ -27,10 +24,7 @@ pub fn emit_unencrypted_log( // --> might be a better approach to force devs to make a public function call that emits the log if needed then // it would be less easy to accidentally leak information. // If we decide to keep this function around would make sense to wait for traits and then merge it with emit_unencrypted_log. -pub fn emit_unencrypted_log_from_private( - context: &mut PrivateContext, - log: T, -) { +pub fn emit_unencrypted_log_from_private(context: &mut PrivateContext, log: T) { let contract_address = context.this_address(); let event_selector = 5; // TODO: compute actual event selector. let _ = oracle::logs::emit_unencrypted_log(contract_address, event_selector, log); diff --git a/yarn-project/aztec-nr/aztec/src/messaging.nr b/yarn-project/aztec-nr/aztec/src/messaging.nr index 7e7aeae4500b..185733de9a87 100644 --- a/yarn-project/aztec-nr/aztec/src/messaging.nr +++ b/yarn-project/aztec-nr/aztec/src/messaging.nr @@ -6,10 +6,8 @@ use l1_to_l2_message_getter_data::make_l1_to_l2_message_getter_data; use crate::abi::PublicContextInputs; use crate::oracle::get_l1_to_l2_message::get_l1_to_l2_message_call; - // Returns the nullifier for the message -pub fn process_l1_to_l2_message(l1_to_l2_root: Field, storage_contract_address: Field, msg_key: Field, content: Field, secret: Field) -> Field{ - +pub fn process_l1_to_l2_message(l1_to_l2_root: Field, storage_contract_address: Field, msg_key: Field, content: Field, secret: Field) -> Field { let returned_message = get_l1_to_l2_message_call(msg_key); let l1_to_l2_message_data = make_l1_to_l2_message_getter_data(returned_message, 0, secret); @@ -27,4 +25,4 @@ pub fn process_l1_to_l2_message(l1_to_l2_root: Field, storage_contract_address: // Compute Nullifier l1_to_l2_message_data.message.compute_nullifier() -} \ No newline at end of file +} diff --git a/yarn-project/aztec-nr/aztec/src/messaging/l1_to_l2_message_getter_data.nr b/yarn-project/aztec-nr/aztec/src/messaging/l1_to_l2_message_getter_data.nr index c8bd586e0539..396d758006a4 100644 --- a/yarn-project/aztec-nr/aztec/src/messaging/l1_to_l2_message_getter_data.nr +++ b/yarn-project/aztec-nr/aztec/src/messaging/l1_to_l2_message_getter_data.nr @@ -18,9 +18,13 @@ pub fn l1_to_l2_message_getter_len() -> Field { pub fn make_l1_to_l2_message_getter_data(fields: [Field; N], start: Field, secret: Field) -> L1ToL2MessageGetterData { L1ToL2MessageGetterData { - message: L1ToL2Message::deserialize(arr_copy_slice(fields, [0; L1_TO_L2_MESSAGE_LENGTH], start), secret, fields[start + L1_TO_L2_MESSAGE_LENGTH]), + message: L1ToL2Message::deserialize(arr_copy_slice(fields, [0; L1_TO_L2_MESSAGE_LENGTH], start), + secret, + fields[start + L1_TO_L2_MESSAGE_LENGTH]), leaf_index: fields[start + L1_TO_L2_MESSAGE_LENGTH], - sibling_path: arr_copy_slice(fields, [0; L1_TO_L2_MSG_TREE_HEIGHT], L1_TO_L2_MESSAGE_LENGTH + 1), - root: fields[start + L1_TO_L2_MESSAGE_LENGTH + L1_TO_L2_MSG_TREE_HEIGHT + 1], + sibling_path: arr_copy_slice(fields, + [0; L1_TO_L2_MSG_TREE_HEIGHT], + L1_TO_L2_MESSAGE_LENGTH + 1), + root: fields[start + L1_TO_L2_MESSAGE_LENGTH + L1_TO_L2_MSG_TREE_HEIGHT + 1] } -} \ No newline at end of file +} diff --git a/yarn-project/aztec-nr/aztec/src/note.nr b/yarn-project/aztec-nr/aztec/src/note.nr index d76f70906894..5df51e71dd4b 100644 --- a/yarn-project/aztec-nr/aztec/src/note.nr +++ b/yarn-project/aztec-nr/aztec/src/note.nr @@ -5,4 +5,4 @@ mod note_hash; mod note_header; mod note_interface; mod note_viewer_options; -mod utils; \ No newline at end of file +mod utils; diff --git a/yarn-project/aztec-nr/aztec/src/note/lifecycle.nr b/yarn-project/aztec-nr/aztec/src/note/lifecycle.nr index 2930c4430f72..f44d8ab31ec1 100644 --- a/yarn-project/aztec-nr/aztec/src/note/lifecycle.nr +++ b/yarn-project/aztec-nr/aztec/src/note/lifecycle.nr @@ -16,7 +16,7 @@ pub fn create_note( storage_slot: Field, note: &mut Note, note_interface: NoteInterface, - broadcast: bool, + broadcast: bool ) { let contract_address = (*context).this_address(); @@ -41,7 +41,7 @@ pub fn create_note_hash_from_public( context: &mut PublicContext, storage_slot: Field, note: &mut Note, - note_interface: NoteInterface, + note_interface: NoteInterface ) { let contract_address = (*context).this_address(); @@ -53,11 +53,7 @@ pub fn create_note_hash_from_public( context.push_new_note_hash(inner_note_hash); } -pub fn destroy_note( - context: &mut PrivateContext, - note: Note, - note_interface: NoteInterface, -) { +pub fn destroy_note(context: &mut PrivateContext, note: Note, note_interface: NoteInterface) { let mut nullifier = 0; let mut nullified_commitment: Field = EMPTY_NULLIFIED_COMMITMENT; let compute_nullifier = note_interface.compute_nullifier; @@ -78,4 +74,4 @@ pub fn destroy_note( assert(notify_nullified_note(nullifier, nullified_commitment) == 0); context.push_new_nullifier(nullifier, nullified_commitment) -} \ No newline at end of file +} diff --git a/yarn-project/aztec-nr/aztec/src/note/note_getter.nr b/yarn-project/aztec-nr/aztec/src/note/note_getter.nr index 1ed8b14830df..1e5131a22ae2 100644 --- a/yarn-project/aztec-nr/aztec/src/note/note_getter.nr +++ b/yarn-project/aztec-nr/aztec/src/note/note_getter.nr @@ -16,12 +16,7 @@ use crate::note::{ use crate::oracle; use crate::types::vec::BoundedVec; -fn check_note_header( - context: PrivateContext, - storage_slot: Field, - note_interface: NoteInterface, - note: Note, -) { +fn check_note_header(context: PrivateContext, storage_slot: Field, note_interface: NoteInterface, note: Note) { let get_header = note_interface.get_header; let header = get_header(note); let contract_address = context.this_address(); @@ -29,10 +24,7 @@ fn check_note_header( assert(header.storage_slot == storage_slot); } -fn check_note_fields( - fields: [Field; N], - selects: BoundedVec, N>, -) { +fn check_note_fields(fields: [Field; N], selects: BoundedVec, N>) { for i in 0..selects.len { let select = selects.get_unchecked(i).unwrap_unchecked(); assert(fields[select.field_index] == select.value, "Mismatch return note field."); @@ -52,11 +44,7 @@ fn check_notes_order(fields_0: [Field; N], fields_1: [Field; N], sorts: Bound } } -pub fn get_note( - context: &mut PrivateContext, - storage_slot: Field, - note_interface: NoteInterface, -) -> Note { +pub fn get_note(context: &mut PrivateContext, storage_slot: Field, note_interface: NoteInterface) -> Note { let note = get_note_internal(storage_slot, note_interface); check_note_header(*context, storage_slot, note_interface, note); @@ -71,7 +59,7 @@ pub fn get_notes( context: &mut PrivateContext, storage_slot: Field, note_interface: NoteInterface, - options: NoteGetterOptions, + options: NoteGetterOptions ) -> [Option; MAX_READ_REQUESTS_PER_CALL] { let opt_notes = get_notes_internal(storage_slot, note_interface, options); let mut num_notes = 0; @@ -96,21 +84,17 @@ pub fn get_notes( num_notes += 1; }; - }; + } if options.limit != 0 { assert(num_notes <= options.limit, "Invalid number of return notes."); } opt_notes } -unconstrained fn get_note_internal( - storage_slot: Field, - note_interface: NoteInterface, -) -> Note { +unconstrained fn get_note_internal(storage_slot: Field, note_interface: NoteInterface) -> Note { let placeholder_note = [Option::none()]; let placeholder_fields = [0; GET_NOTE_ORACLE_RETURN_LENGTH]; - oracle::notes::get_notes( - storage_slot, + oracle::notes::get_notes(storage_slot, note_interface, 0, [], @@ -120,20 +104,18 @@ unconstrained fn get_note_internal( 1, // limit 0, // offset placeholder_note, - placeholder_fields, - )[0].unwrap() // Notice: we don't allow dummies to be returned from get_note (singular). + placeholder_fields)[0].unwrap() // Notice: we don't allow dummies to be returned from get_note (singular). } unconstrained fn get_notes_internal( storage_slot: Field, note_interface: NoteInterface, - options: NoteGetterOptions, + options: NoteGetterOptions ) -> [Option; MAX_READ_REQUESTS_PER_CALL] { let (num_selects, select_by, select_values, sort_by, sort_order) = flatten_options(options.selects, options.sorts); let placeholder_opt_notes = [Option::none(); MAX_READ_REQUESTS_PER_CALL]; let placeholder_fields = [0; GET_NOTES_ORACLE_RETURN_LENGTH]; - let opt_notes = oracle::notes::get_notes( - storage_slot, + let opt_notes = oracle::notes::get_notes(storage_slot, note_interface, num_selects, select_by, @@ -143,24 +125,18 @@ unconstrained fn get_notes_internal( options.limit, options.offset, placeholder_opt_notes, - placeholder_fields, - ); + placeholder_fields); let filter = options.filter; let filter_args = options.filter_args; filter(opt_notes, filter_args) } -unconstrained pub fn view_notes( - storage_slot: Field, - note_interface: NoteInterface, - options: NoteViewerOptions, -) -> [Option; MAX_NOTES_PER_PAGE] { +unconstrained pub fn view_notes(storage_slot: Field, note_interface: NoteInterface, options: NoteViewerOptions) -> [Option; MAX_NOTES_PER_PAGE] { let (num_selects, select_by, select_values, sort_by, sort_order) = flatten_options(options.selects, options.sorts); let placeholder_opt_notes = [Option::none(); MAX_NOTES_PER_PAGE]; let placeholder_fields = [0; VIEW_NOTE_ORACLE_RETURN_LENGTH]; - oracle::notes::get_notes( - storage_slot, + oracle::notes::get_notes(storage_slot, note_interface, num_selects, select_by, @@ -170,14 +146,10 @@ unconstrained pub fn view_notes( options.limit, options.offset, placeholder_opt_notes, - placeholder_fields, - ) + placeholder_fields) } -unconstrained fn flatten_options( - selects: BoundedVec, N>, - sorts: BoundedVec, N>, -) -> (u8, [u8; N], [Field; N], [u8; N], [u2; N]) { +unconstrained fn flatten_options(selects: BoundedVec, N>, sorts: BoundedVec, N>) -> (u8, [u8; N], [Field; N], [u8; N], [u2; N]) { let mut num_selects = 0; let mut select_by = [0; N]; let mut select_values = [0; N]; @@ -188,7 +160,7 @@ unconstrained fn flatten_options( select_values[num_selects] = select.unwrap_unchecked().value; num_selects += 1; }; - }; + } let mut sort_by = [0; N]; let mut sort_order = [0; N]; @@ -198,7 +170,7 @@ unconstrained fn flatten_options( sort_by[i] = sort.unwrap_unchecked().field_index; sort_order[i] = sort.unwrap_unchecked().order; }; - }; + } (num_selects, select_by, select_values, sort_by, sort_order) -} \ No newline at end of file +} diff --git a/yarn-project/aztec-nr/aztec/src/note/note_header.nr b/yarn-project/aztec-nr/aztec/src/note/note_header.nr index 6f82cebf1498..454506384013 100644 --- a/yarn-project/aztec-nr/aztec/src/note/note_header.nr +++ b/yarn-project/aztec-nr/aztec/src/note/note_header.nr @@ -15,4 +15,4 @@ impl NoteHeader { pub fn empty() -> Self { NoteHeader { contract_address: 0, nonce: 0, storage_slot: 0, is_transient: false } } -} \ No newline at end of file +} diff --git a/yarn-project/aztec-nr/aztec/src/note/utils.nr b/yarn-project/aztec-nr/aztec/src/note/utils.nr index 74d006c0a18c..bce81ff225e1 100644 --- a/yarn-project/aztec-nr/aztec/src/note/utils.nr +++ b/yarn-project/aztec-nr/aztec/src/note/utils.nr @@ -5,10 +5,7 @@ use crate::note::{ }; use crate::utils::arr_copy_slice; -pub fn compute_inner_note_hash( - note_interface: NoteInterface, - note: Note, -) -> Field { +pub fn compute_inner_note_hash(note_interface: NoteInterface, note: Note) -> Field { let get_header = note_interface.get_header; let header = get_header(note); @@ -18,10 +15,7 @@ pub fn compute_inner_note_hash( compute_inner_hash(header.storage_slot, note_hash) } -pub fn compute_siloed_note_hash( - note_interface: NoteInterface, - note_with_header: Note, -) -> Field { +pub fn compute_siloed_note_hash(note_interface: NoteInterface, note_with_header: Note) -> Field { let get_header = note_interface.get_header; let header = get_header(note_with_header); @@ -30,10 +24,7 @@ pub fn compute_siloed_note_hash( compute_siloed_hash(header.contract_address, inner_note_hash) } -pub fn compute_unique_siloed_note_hash( - note_interface: NoteInterface, - note_with_header: Note, -) -> Field { +pub fn compute_unique_siloed_note_hash(note_interface: NoteInterface, note_with_header: Note) -> Field { let get_header = note_interface.get_header; let header = get_header(note_with_header); @@ -42,10 +33,7 @@ pub fn compute_unique_siloed_note_hash( compute_unique_hash(header.nonce, siloed_note_hash) } -pub fn compute_note_hash_for_read_or_nullify( - note_interface: NoteInterface, - note_with_header: Note, -) -> Field { +pub fn compute_note_hash_for_read_or_nullify(note_interface: NoteInterface, note_with_header: Note) -> Field { let get_header = note_interface.get_header; let header = get_header(note_with_header); @@ -63,14 +51,9 @@ pub fn compute_note_hash_for_read_or_nullify( // data tree, so the kernel can just perform a membership check directly on this hash/leaf. compute_unique_siloed_note_hash(note_interface, note_with_header) } - } -pub fn compute_note_hash_and_nullifier( - note_interface: NoteInterface, - note_header: NoteHeader, - serialized_note: [Field; S], -) -> [Field; 4] { +pub fn compute_note_hash_and_nullifier(note_interface: NoteInterface, note_header: NoteHeader, serialized_note: [Field; S]) -> [Field; 4] { let deserialize = note_interface.deserialize; let set_header = note_interface.set_header; let mut note = deserialize(arr_copy_slice(serialized_note, [0; N], 0)); diff --git a/yarn-project/aztec-nr/aztec/src/oracle/call_private_function.nr b/yarn-project/aztec-nr/aztec/src/oracle/call_private_function.nr index 13a9e5f24c50..a5ab1eb95f37 100644 --- a/yarn-project/aztec-nr/aztec/src/oracle/call_private_function.nr +++ b/yarn-project/aztec-nr/aztec/src/oracle/call_private_function.nr @@ -1,20 +1,8 @@ use crate::constants_gen::CALL_PRIVATE_FUNCTION_RETURN_SIZE; #[oracle(callPrivateFunction)] -fn call_private_function_oracle( - _contract_address: Field, - _function_selector: Field, - _args_hash: Field -) -> [Field; CALL_PRIVATE_FUNCTION_RETURN_SIZE] {} +fn call_private_function_oracle(_contract_address: Field, _function_selector: Field, _args_hash: Field) -> [Field; CALL_PRIVATE_FUNCTION_RETURN_SIZE] {} -unconstrained pub fn call_private_function_internal( - contract_address: Field, - function_selector: Field, - args_hash: Field -) -> [Field; CALL_PRIVATE_FUNCTION_RETURN_SIZE] { - call_private_function_oracle( - contract_address, - function_selector, - args_hash, - ) -} \ No newline at end of file +unconstrained pub fn call_private_function_internal(contract_address: Field, function_selector: Field, args_hash: Field) -> [Field; CALL_PRIVATE_FUNCTION_RETURN_SIZE] { + call_private_function_oracle(contract_address, function_selector, args_hash) +} diff --git a/yarn-project/aztec-nr/aztec/src/oracle/context.nr b/yarn-project/aztec-nr/aztec/src/oracle/context.nr index 8200f9fe18a4..5895ec261873 100644 --- a/yarn-project/aztec-nr/aztec/src/oracle/context.nr +++ b/yarn-project/aztec-nr/aztec/src/oracle/context.nr @@ -4,4 +4,4 @@ fn _get_portal_address(_contract_address: Field) -> Field {} unconstrained pub fn get_portal_address(contract_address: Field) -> Field { let portal_address = _get_portal_address(contract_address); portal_address -} \ No newline at end of file +} diff --git a/yarn-project/aztec-nr/aztec/src/oracle/create_commitment.nr b/yarn-project/aztec-nr/aztec/src/oracle/create_commitment.nr index 4f9b99cf716a..62c848c1d714 100644 --- a/yarn-project/aztec-nr/aztec/src/oracle/create_commitment.nr +++ b/yarn-project/aztec-nr/aztec/src/oracle/create_commitment.nr @@ -1,4 +1,3 @@ - #[oracle(createCommitment)] fn create_commitment_oracle(_commitment: Field) -> Field {} diff --git a/yarn-project/aztec-nr/aztec/src/oracle/enqueue_public_function_call.nr b/yarn-project/aztec-nr/aztec/src/oracle/enqueue_public_function_call.nr index 17ea7f2f67b4..9d6e1cf80e7a 100644 --- a/yarn-project/aztec-nr/aztec/src/oracle/enqueue_public_function_call.nr +++ b/yarn-project/aztec-nr/aztec/src/oracle/enqueue_public_function_call.nr @@ -7,20 +7,8 @@ global ENQUEUE_PUBLIC_FUNCTION_CALL_RETURN_SIZE: Field = 13; #[oracle(enqueuePublicFunctionCall)] -fn enqueue_public_function_call_oracle( - _contract_address: Field, - _function_selector: Field, - _args_hash: Field, -) -> [Field; ENQUEUE_PUBLIC_FUNCTION_CALL_RETURN_SIZE] {} +fn enqueue_public_function_call_oracle(_contract_address: Field, _function_selector: Field, _args_hash: Field) -> [Field; ENQUEUE_PUBLIC_FUNCTION_CALL_RETURN_SIZE] {} -unconstrained pub fn enqueue_public_function_call_internal( - contract_address: Field, - function_selector: Field, - args_hash: Field -) -> [Field; ENQUEUE_PUBLIC_FUNCTION_CALL_RETURN_SIZE] { - enqueue_public_function_call_oracle( - contract_address, - function_selector, - args_hash, - ) -} \ No newline at end of file +unconstrained pub fn enqueue_public_function_call_internal(contract_address: Field, function_selector: Field, args_hash: Field) -> [Field; ENQUEUE_PUBLIC_FUNCTION_CALL_RETURN_SIZE] { + enqueue_public_function_call_oracle(contract_address, function_selector, args_hash) +} diff --git a/yarn-project/aztec-nr/aztec/src/oracle/get_l1_to_l2_message.nr b/yarn-project/aztec-nr/aztec/src/oracle/get_l1_to_l2_message.nr index 32a1f0e719d5..358511db4028 100644 --- a/yarn-project/aztec-nr/aztec/src/oracle/get_l1_to_l2_message.nr +++ b/yarn-project/aztec-nr/aztec/src/oracle/get_l1_to_l2_message.nr @@ -1,4 +1,3 @@ - use crate::constants_gen::L1_TO_L2_MESSAGE_ORACLE_CALL_LENGTH; // Checks if a msg is within the l1ToL2Msg tree @@ -7,4 +6,4 @@ fn get_l1_to_l2_msg_oracle(_msg_key: Field) -> [Field; L1_TO_L2_MESSAGE_ORACLE_C unconstrained pub fn get_l1_to_l2_message_call(msg_key: Field) -> [Field; L1_TO_L2_MESSAGE_ORACLE_CALL_LENGTH] { get_l1_to_l2_msg_oracle(msg_key) -} \ No newline at end of file +} diff --git a/yarn-project/aztec-nr/aztec/src/oracle/get_public_key.nr b/yarn-project/aztec-nr/aztec/src/oracle/get_public_key.nr index 5afaa258a217..e2e1684e36f5 100644 --- a/yarn-project/aztec-nr/aztec/src/oracle/get_public_key.nr +++ b/yarn-project/aztec-nr/aztec/src/oracle/get_public_key.nr @@ -5,17 +5,17 @@ use crate::address::compute_address; fn get_public_key_and_partial_address_oracle(_address: Field) -> [Field; 3] {} unconstrained fn get_public_key_and_partial_address_internal(address: Field) -> [Field; 3] { - get_public_key_and_partial_address_oracle(address) + get_public_key_and_partial_address_oracle(address) } pub fn get_public_key(address: Field) -> Point { - let result = get_public_key_and_partial_address_internal(address); - let pub_key_x = result[0]; - let pub_key_y = result[1]; - let partial_address = result[2]; - - let calculated_address = compute_address(pub_key_x, pub_key_y, partial_address); - assert(calculated_address == address); - - Point::new(pub_key_x, pub_key_y) + let result = get_public_key_and_partial_address_internal(address); + let pub_key_x = result[0]; + let pub_key_y = result[1]; + let partial_address = result[2]; + + let calculated_address = compute_address(pub_key_x, pub_key_y, partial_address); + assert(calculated_address == address); + + Point::new(pub_key_x, pub_key_y) } diff --git a/yarn-project/aztec-nr/aztec/src/oracle/get_secret_key.nr b/yarn-project/aztec-nr/aztec/src/oracle/get_secret_key.nr index 4ec21bcf5e82..fb7de3e56edd 100644 --- a/yarn-project/aztec-nr/aztec/src/oracle/get_secret_key.nr +++ b/yarn-project/aztec-nr/aztec/src/oracle/get_secret_key.nr @@ -2,10 +2,7 @@ use crate::oracle::get_public_key::get_public_key; use crate::types::point::Point; #[oracle(getSecretKey)] -fn get_secret_key_oracle( - _owner: Point, -) -> [Field; dep::std::grumpkin_scalar::GRUMPKIN_SCALAR_SERIALIZED_LEN] { -} +fn get_secret_key_oracle(_owner: Point) -> [Field; dep::std::grumpkin_scalar::GRUMPKIN_SCALAR_SERIALIZED_LEN] {} unconstrained fn get_secret_key_internal(owner_public_key: Point) -> dep::std::grumpkin_scalar::GrumpkinScalar { dep::std::grumpkin_scalar::deserialize_grumpkin_scalar(get_secret_key_oracle(owner_public_key)) diff --git a/yarn-project/aztec-nr/aztec/src/oracle/logs.nr b/yarn-project/aztec-nr/aztec/src/oracle/logs.nr index bc658e67bddb..caab7b2a13c9 100644 --- a/yarn-project/aztec-nr/aztec/src/oracle/logs.nr +++ b/yarn-project/aztec-nr/aztec/src/oracle/logs.nr @@ -3,31 +3,16 @@ use crate::constants_gen::NUM_FIELDS_PER_SHA256; // TODO: Should take encrypted data. #[oracle(emitEncryptedLog)] -fn emit_encrypted_log_oracle( - _contract_address: Field, - _storage_slot: Field, - _encryption_pub_key: Point, - _preimage: [Field; N], -) -> Field {} +fn emit_encrypted_log_oracle(_contract_address: Field, _storage_slot: Field, _encryption_pub_key: Point, _preimage: [Field; N]) -> Field {} -unconstrained pub fn emit_encrypted_log( - contract_address: Field, - storage_slot: Field, - encryption_pub_key: Point, - preimage: [Field; N], -) -> [Field; NUM_FIELDS_PER_SHA256] { - [emit_encrypted_log_oracle( - contract_address, - storage_slot, - encryption_pub_key, - preimage, - ), 0] +unconstrained pub fn emit_encrypted_log(contract_address: Field, storage_slot: Field, encryption_pub_key: Point, preimage: [Field; N]) -> [Field; NUM_FIELDS_PER_SHA256] { + [emit_encrypted_log_oracle(contract_address, storage_slot, encryption_pub_key, preimage), 0] } #[oracle(emitUnencryptedLog)] -fn emit_unencrypted_log_oracle(_contract_address: Field, _event_selector: Field, _message: T) -> Field {} +fn emit_unencrypted_log_oracle(_contract_address: Field, _event_selector: Field, _message: T) -> Field {} unconstrained pub fn emit_unencrypted_log(contract_address: Field, event_selector: Field, message: T) -> [Field; NUM_FIELDS_PER_SHA256] { // https://github.com/AztecProtocol/aztec-packages/issues/885 [emit_unencrypted_log_oracle(contract_address, event_selector, message), 0] -} \ No newline at end of file +} diff --git a/yarn-project/aztec-nr/aztec/src/oracle/notes.nr b/yarn-project/aztec-nr/aztec/src/oracle/notes.nr index c9e61ee28a2f..e3790168cd9b 100644 --- a/yarn-project/aztec-nr/aztec/src/oracle/notes.nr +++ b/yarn-project/aztec-nr/aztec/src/oracle/notes.nr @@ -6,30 +6,16 @@ use crate::note::{ use crate::utils::arr_copy_slice; #[oracle(notifyCreatedNote)] -fn notify_created_note_oracle( - _storage_slot: Field, - _serialized_note: [Field; N], - _inner_note_hash: Field, -) -> Field {} +fn notify_created_note_oracle(_storage_slot: Field, _serialized_note: [Field; N], _inner_note_hash: Field) -> Field {} -unconstrained pub fn notify_created_note( - storage_slot: Field, - serialized_note: [Field; N], - inner_note_hash: Field, -) -> Field { +unconstrained pub fn notify_created_note(storage_slot: Field, serialized_note: [Field; N], inner_note_hash: Field) -> Field { notify_created_note_oracle(storage_slot, serialized_note, inner_note_hash) } #[oracle(notifyNullifiedNote)] -fn notify_nullified_note_oracle( - _nullifier: Field, - _inner_note_hash: Field, -) -> Field {} +fn notify_nullified_note_oracle(_nullifier: Field, _inner_note_hash: Field) -> Field {} -unconstrained pub fn notify_nullified_note( - nullifier: Field, - inner_note_hash: Field, -) -> Field { +unconstrained pub fn notify_nullified_note(nullifier: Field, inner_note_hash: Field) -> Field { notify_nullified_note_oracle(nullifier, inner_note_hash) } @@ -44,7 +30,7 @@ fn get_notes_oracle( _limit: u32, _offset: u32, _return_size: u32, - _placeholder_fields: [Field; S], + _placeholder_fields: [Field; S] ) -> [Field; S] {} unconstrained fn get_notes_oracle_wrapper( @@ -56,10 +42,19 @@ unconstrained fn get_notes_oracle_wrapper( sort_order: [u2; N], limit: u32, offset: u32, - mut placeholder_fields: [Field; S], -)-> [Field; S] { + mut placeholder_fields: [Field; S] +) -> [Field; S] { let return_size = placeholder_fields.len() as u32; - get_notes_oracle(storage_slot, num_selects, select_by, select_values, sort_by, sort_order, limit, offset, return_size, placeholder_fields) + get_notes_oracle(storage_slot, + num_selects, + select_by, + select_values, + sort_by, + sort_order, + limit, + offset, + return_size, + placeholder_fields) } unconstrained pub fn get_notes( @@ -73,9 +68,17 @@ unconstrained pub fn get_notes( limit: u32, offset: u32, mut placeholder_opt_notes: [Option; S], // TODO: Remove it and use `limit` to initialize the note array. - placeholder_fields: [Field; NS], // TODO: Remove it and use `limit` to initialize the note array. + placeholder_fields: [Field; NS] // TODO: Remove it and use `limit` to initialize the note array. ) -> [Option; S] { - let fields = get_notes_oracle_wrapper(storage_slot, num_selects, select_by, select_values, sort_by, sort_order, limit, offset, placeholder_fields); + let fields = get_notes_oracle_wrapper(storage_slot, + num_selects, + select_by, + select_values, + sort_by, + sort_order, + limit, + offset, + placeholder_fields); let num_notes = fields[0] as u32; let contract_address = fields[1]; let deserialize = note_interface.deserialize; @@ -94,15 +97,13 @@ unconstrained pub fn get_notes( set_header(&mut note, header); placeholder_opt_notes[i] = Option::some(note); }; - }; + } placeholder_opt_notes } #[oracle(checkNullifierExists)] -fn check_nullifier_exists_oracle( - _inner_nullifier: Field, -) -> Field {} +fn check_nullifier_exists_oracle(_inner_nullifier: Field) -> Field {} unconstrained pub fn check_nullifier_exists(inner_nullifier: Field) -> bool { check_nullifier_exists_oracle(inner_nullifier) == 1 -} \ No newline at end of file +} diff --git a/yarn-project/aztec-nr/aztec/src/oracle/public_call.nr b/yarn-project/aztec-nr/aztec/src/oracle/public_call.nr index a2caf7ef23f7..cda65354018a 100644 --- a/yarn-project/aztec-nr/aztec/src/oracle/public_call.nr +++ b/yarn-project/aztec-nr/aztec/src/oracle/public_call.nr @@ -1,20 +1,8 @@ use crate::constants_gen::RETURN_VALUES_LENGTH; #[oracle(callPublicFunction)] -fn call_public_function_oracle( - _contract_address: Field, - _function_selector: Field, - _args_hash: Field -) -> [Field; RETURN_VALUES_LENGTH] {} +fn call_public_function_oracle(_contract_address: Field, _function_selector: Field, _args_hash: Field) -> [Field; RETURN_VALUES_LENGTH] {} -unconstrained pub fn call_public_function_internal( - contract_address: Field, - function_selector: Field, - args_hash: Field -) -> [Field; RETURN_VALUES_LENGTH] { - call_public_function_oracle( - contract_address, - function_selector, - args_hash, - ) +unconstrained pub fn call_public_function_internal(contract_address: Field, function_selector: Field, args_hash: Field) -> [Field; RETURN_VALUES_LENGTH] { + call_public_function_oracle(contract_address, function_selector, args_hash) } diff --git a/yarn-project/aztec-nr/aztec/src/oracle/rand.nr b/yarn-project/aztec-nr/aztec/src/oracle/rand.nr index b21f6ad93afe..0d417e694222 100644 --- a/yarn-project/aztec-nr/aztec/src/oracle/rand.nr +++ b/yarn-project/aztec-nr/aztec/src/oracle/rand.nr @@ -1,5 +1,3 @@ - - #[oracle(getRandomField)] fn rand_oracle() -> Field {} diff --git a/yarn-project/aztec-nr/aztec/src/oracle/storage.nr b/yarn-project/aztec-nr/aztec/src/oracle/storage.nr index 0b5d96997d20..b2c2c434c1fc 100644 --- a/yarn-project/aztec-nr/aztec/src/oracle/storage.nr +++ b/yarn-project/aztec-nr/aztec/src/oracle/storage.nr @@ -1,32 +1,19 @@ - #[oracle(storageRead)] -fn storage_read_oracle( - _storage_slot: Field, - _number_of_elements: Field, -) -> [Field; N] {} +fn storage_read_oracle(_storage_slot: Field, _number_of_elements: Field) -> [Field; N] {} -unconstrained fn storage_read_oracle_wrapper(_storage_slot: Field)-> [Field; N] { +unconstrained fn storage_read_oracle_wrapper(_storage_slot: Field) -> [Field; N] { storage_read_oracle(_storage_slot, N) } -pub fn storage_read( - storage_slot: Field, - deserialize: fn ([Field; N]) -> T, -) -> T { +pub fn storage_read(storage_slot: Field, deserialize: fn ([Field; N]) -> T) -> T { let fields = storage_read_oracle_wrapper(storage_slot); deserialize(fields) } #[oracle(storageWrite)] -fn storage_write_oracle( - _storage_slot: Field, - _values: [Field; N], -) -> [Field; N] {} +fn storage_write_oracle(_storage_slot: Field, _values: [Field; N]) -> [Field; N] {} // TODO: Remove return value. -unconstrained pub fn storage_write( - storage_slot: Field, - fields: [Field; N] -) { +unconstrained pub fn storage_write(storage_slot: Field, fields: [Field; N]) { let _hash = storage_write_oracle(storage_slot, fields); -} \ No newline at end of file +} diff --git a/yarn-project/aztec-nr/aztec/src/private_call_stack_item.nr b/yarn-project/aztec-nr/aztec/src/private_call_stack_item.nr index 0900e601d27a..9742106c1526 100644 --- a/yarn-project/aztec-nr/aztec/src/private_call_stack_item.nr +++ b/yarn-project/aztec-nr/aztec/src/private_call_stack_item.nr @@ -18,4 +18,4 @@ impl PrivateCallStackItem { self.public_inputs.hash(), ], GENERATOR_INDEX__CALL_STACK_ITEM) } -} \ No newline at end of file +} diff --git a/yarn-project/aztec-nr/aztec/src/selector.nr b/yarn-project/aztec-nr/aztec/src/selector.nr index 9f5d368e5d7c..6b81188571d4 100644 --- a/yarn-project/aztec-nr/aztec/src/selector.nr +++ b/yarn-project/aztec-nr/aztec/src/selector.nr @@ -5,11 +5,11 @@ global SELECTOR_SIZE = 4; pub fn compute_selector(signature: str) -> Field { let bytes = signature.as_bytes(); let hash = dep::std::hash::keccak256(bytes, bytes.len() as u32); - + let mut selector_be_bytes = [0; SELECTOR_SIZE]; for i in 0..SELECTOR_SIZE { selector_be_bytes[i] = hash[i]; } field_from_bytes(selector_be_bytes, true) -} \ No newline at end of file +} diff --git a/yarn-project/aztec-nr/aztec/src/state_vars.nr b/yarn-project/aztec-nr/aztec/src/state_vars.nr index b35df0399d1f..e1e813891ffb 100644 --- a/yarn-project/aztec-nr/aztec/src/state_vars.nr +++ b/yarn-project/aztec-nr/aztec/src/state_vars.nr @@ -2,4 +2,4 @@ mod immutable_singleton; mod map; mod public_state; mod set; -mod singleton; \ No newline at end of file +mod singleton; diff --git a/yarn-project/aztec-nr/aztec/src/state_vars/singleton.nr b/yarn-project/aztec-nr/aztec/src/state_vars/singleton.nr index 2ec2979bc593..9f64faf3c829 100644 --- a/yarn-project/aztec-nr/aztec/src/state_vars/singleton.nr +++ b/yarn-project/aztec-nr/aztec/src/state_vars/singleton.nr @@ -16,15 +16,10 @@ use crate::hash::pedersen_hash; pub fn compute_singleton_initialization_nullifier(storage_slot: Field, owner: Option) -> Field { if owner.is_some() { let secret = get_secret_key(owner.unwrap_unchecked()); - pedersen_hash( - [storage_slot, secret.low, secret.high], - GENERATOR_INDEX__INITIALIZATION_NULLIFIER, - ) + pedersen_hash([storage_slot, secret.low, secret.high], + GENERATOR_INDEX__INITIALIZATION_NULLIFIER) } else { - pedersen_hash( - [storage_slot], - GENERATOR_INDEX__INITIALIZATION_NULLIFIER, - ) + pedersen_hash([storage_slot], GENERATOR_INDEX__INITIALIZATION_NULLIFIER) } } diff --git a/yarn-project/aztec-nr/aztec/src/types.nr b/yarn-project/aztec-nr/aztec/src/types.nr index a93267973be8..07b38d9b9881 100644 --- a/yarn-project/aztec-nr/aztec/src/types.nr +++ b/yarn-project/aztec-nr/aztec/src/types.nr @@ -1,4 +1,4 @@ mod address; mod point; mod vec; // This can/should be moved out into an official noir library -mod type_serialization; \ No newline at end of file +mod type_serialization; diff --git a/yarn-project/aztec-nr/aztec/src/types/address.nr b/yarn-project/aztec-nr/aztec/src/types/address.nr index c238b4919509..c0654e55de09 100644 --- a/yarn-project/aztec-nr/aztec/src/types/address.nr +++ b/yarn-project/aztec-nr/aztec/src/types/address.nr @@ -50,4 +50,4 @@ impl EthereumAddress { address: fields[0] } } -} \ No newline at end of file +} diff --git a/yarn-project/aztec-nr/aztec/src/types/point.nr b/yarn-project/aztec-nr/aztec/src/types/point.nr index 5a51780a81b4..f50be1fe2bbf 100644 --- a/yarn-project/aztec-nr/aztec/src/types/point.nr +++ b/yarn-project/aztec-nr/aztec/src/types/point.nr @@ -14,10 +14,7 @@ impl Point { global POINT_SERIALIZED_LEN: Field = 2; fn deserializePoint(fields: [Field; POINT_SERIALIZED_LEN]) -> Point { - Point { - x: fields[0], - y: fields[1], - } + Point { x: fields[0], y: fields[1] } } fn serializePoint(point: Point) -> [Field; POINT_SERIALIZED_LEN] { @@ -27,4 +24,4 @@ fn serializePoint(point: Point) -> [Field; POINT_SERIALIZED_LEN] { global PointSerializationMethods = TypeSerializationInterface { deserialize: deserializePoint, serialize: serializePoint, -}; \ No newline at end of file +}; diff --git a/yarn-project/aztec-nr/aztec/src/types/type_serialization/aztec_address_serialization.nr b/yarn-project/aztec-nr/aztec/src/types/type_serialization/aztec_address_serialization.nr index 8ce68ec513f6..2e53171542dd 100644 --- a/yarn-project/aztec-nr/aztec/src/types/type_serialization/aztec_address_serialization.nr +++ b/yarn-project/aztec-nr/aztec/src/types/type_serialization/aztec_address_serialization.nr @@ -14,4 +14,4 @@ fn serialize(value: AztecAddress) -> [Field; AZTEC_ADDRESS_SERIALIZED_LEN] { global AztecAddressSerializationMethods = TypeSerializationInterface { deserialize, serialize, -}; \ No newline at end of file +}; diff --git a/yarn-project/aztec-nr/aztec/src/types/type_serialization/bool_serialization.nr b/yarn-project/aztec-nr/aztec/src/types/type_serialization/bool_serialization.nr index ac9829ecfb0a..255f519234cb 100644 --- a/yarn-project/aztec-nr/aztec/src/types/type_serialization/bool_serialization.nr +++ b/yarn-project/aztec-nr/aztec/src/types/type_serialization/bool_serialization.nr @@ -13,4 +13,4 @@ fn serializeBool(value: bool) -> [Field; BOOL_SERIALIZED_LEN] { global BoolSerializationMethods = TypeSerializationInterface { deserialize: deserializeBool, serialize: serializeBool, -}; \ No newline at end of file +}; diff --git a/yarn-project/aztec-nr/aztec/src/types/type_serialization/u32_serialization.nr b/yarn-project/aztec-nr/aztec/src/types/type_serialization/u32_serialization.nr index e04cf948a53c..2517532b4203 100644 --- a/yarn-project/aztec-nr/aztec/src/types/type_serialization/u32_serialization.nr +++ b/yarn-project/aztec-nr/aztec/src/types/type_serialization/u32_serialization.nr @@ -13,4 +13,4 @@ fn serializeU32(value: u32) -> [Field; U32_SERIALIZED_LEN] { global U32SerializationMethods = TypeSerializationInterface { deserialize: deserializeU32, serialize: serializeU32, -}; \ No newline at end of file +}; diff --git a/yarn-project/aztec-nr/aztec/src/types/vec.nr b/yarn-project/aztec-nr/aztec/src/types/vec.nr index 4851a1200c3d..135bbbd53c33 100644 --- a/yarn-project/aztec-nr/aztec/src/types/vec.nr +++ b/yarn-project/aztec-nr/aztec/src/types/vec.nr @@ -1,4 +1,3 @@ - struct BoundedVec { storage: [T; MaxLen], len: Field, @@ -124,4 +123,4 @@ fn test_vec_any_not_default() { let mut vec: BoundedVec = BoundedVec::new(default_value); vec.push_array([2, 4]); assert(vec.any(|v| v == default_value) == false); -} \ No newline at end of file +} diff --git a/yarn-project/aztec-nr/aztec/src/utils.nr b/yarn-project/aztec-nr/aztec/src/utils.nr index c80e360de564..205b19fd49a3 100644 --- a/yarn-project/aztec-nr/aztec/src/utils.nr +++ b/yarn-project/aztec-nr/aztec/src/utils.nr @@ -1,8 +1,4 @@ -pub fn arr_copy_slice( - src: [T; N], - mut dst: [T; M], - offset: Field, -) -> [T; M] { +pub fn arr_copy_slice(src: [T; N], mut dst: [T; M], offset: Field) -> [T; M] { for i in 0..dst.len() { dst[i] = src[i + offset]; } @@ -23,4 +19,4 @@ pub fn field_from_bytes(bytes: [u8; N], big_endian: bool) -> Field { } as_field -} \ No newline at end of file +} diff --git a/yarn-project/aztec-nr/easy-private-state/src/lib.nr b/yarn-project/aztec-nr/easy-private-state/src/lib.nr index 5a483393d841..2a29ab851396 100644 --- a/yarn-project/aztec-nr/easy-private-state/src/lib.nr +++ b/yarn-project/aztec-nr/easy-private-state/src/lib.nr @@ -1 +1 @@ -mod easy_private_state; \ No newline at end of file +mod easy_private_state; diff --git a/yarn-project/aztec-nr/field-note/src/field_note.nr b/yarn-project/aztec-nr/field-note/src/field_note.nr index da8f7d286eb0..6e0e133476c3 100644 --- a/yarn-project/aztec-nr/field-note/src/field_note.nr +++ b/yarn-project/aztec-nr/field-note/src/field_note.nr @@ -55,7 +55,7 @@ fn deserialize(serialized_note: [Field; FIELD_NOTE_LEN]) -> FieldNote { FieldNote::deserialize(serialized_note) } -fn serialize(note: FieldNote) -> [Field; FIELD_NOTE_LEN]{ +fn serialize(note: FieldNote) -> [Field; FIELD_NOTE_LEN] { note.serialize() } diff --git a/yarn-project/aztec-nr/field-note/src/lib.nr b/yarn-project/aztec-nr/field-note/src/lib.nr index 2625d3a22777..71523fc462b1 100644 --- a/yarn-project/aztec-nr/field-note/src/lib.nr +++ b/yarn-project/aztec-nr/field-note/src/lib.nr @@ -1 +1 @@ -mod field_note; \ No newline at end of file +mod field_note; diff --git a/yarn-project/aztec-nr/safe-math/src/lib.nr b/yarn-project/aztec-nr/safe-math/src/lib.nr index f8f829b67e39..7e29a39a85e1 100644 --- a/yarn-project/aztec-nr/safe-math/src/lib.nr +++ b/yarn-project/aztec-nr/safe-math/src/lib.nr @@ -1,3 +1,3 @@ mod safe_u120; -use crate::safe_u120::SafeU120; \ No newline at end of file +use crate::safe_u120::SafeU120; diff --git a/yarn-project/aztec-nr/safe-math/src/safe_u120.nr b/yarn-project/aztec-nr/safe-math/src/safe_u120.nr index b7ebfa2de829..8412f45a43a7 100644 --- a/yarn-project/aztec-nr/safe-math/src/safe_u120.nr +++ b/yarn-project/aztec-nr/safe-math/src/safe_u120.nr @@ -163,7 +163,6 @@ fn test_lt() { assert(b.lt(a) == false); } - #[test] fn test_le() { let a = SafeU120::new(2); @@ -182,7 +181,6 @@ fn test_gt() { assert(a.gt(b) == false); } - #[test] fn test_ge() { let a = SafeU120::new(2); @@ -302,7 +300,6 @@ fn test_mul_div_up_non_rounding() { assert(d.value == 9); } - #[test(should_fail)] fn test_mul_div_up_ghost_overflow() { let a = SafeU120::max(); diff --git a/yarn-project/aztec-nr/slow-updates-tree/src/lib.nr b/yarn-project/aztec-nr/slow-updates-tree/src/lib.nr index 9e861a906072..72a8c1ad19f7 100644 --- a/yarn-project/aztec-nr/slow-updates-tree/src/lib.nr +++ b/yarn-project/aztec-nr/slow-updates-tree/src/lib.nr @@ -1 +1 @@ -mod slow_map; \ No newline at end of file +mod slow_map; diff --git a/yarn-project/aztec-nr/slow-updates-tree/src/slow_map.nr b/yarn-project/aztec-nr/slow-updates-tree/src/slow_map.nr index f0a626ef4367..f36d9f795932 100644 --- a/yarn-project/aztec-nr/slow-updates-tree/src/slow_map.nr +++ b/yarn-project/aztec-nr/slow-updates-tree/src/slow_map.nr @@ -10,7 +10,7 @@ use dep::std::option::Option; global EPOCH_LENGTH: u120 = 100; fn compute_next_change(time: Field) -> Field { - (((time as u120 / EPOCH_LENGTH + 1) * EPOCH_LENGTH)) as Field + ((time as u120 / EPOCH_LENGTH + 1) * EPOCH_LENGTH) as Field } // A leaf in the tree. @@ -21,15 +21,11 @@ struct Leaf { } fn serialize_leaf(leaf: Leaf) -> [Field; 3] { - [leaf.next_change, leaf.before, leaf.after] + [leaf.next_change, leaf.before, leaf.after] } fn deserialize_leaf(serialized: [Field; 3]) -> Leaf { - Leaf { - next_change: serialized[0], - before: serialized[1], - after: serialized[2], - } + Leaf { next_change: serialized[0], before: serialized[1], after: serialized[2] } } impl Leaf { @@ -58,7 +54,7 @@ struct SlowUpdateProof { } pub fn deserialize_slow_update_proof(serialized: [Field; M]) -> SlowUpdateProof { - SlowUpdateProof::deserialize(serialized) + SlowUpdateProof::deserialize(serialized) } impl SlowUpdateProof { @@ -273,4 +269,4 @@ impl SlowMap { }; current } -*/ \ No newline at end of file +*/ diff --git a/yarn-project/aztec-nr/value-note/src/balance_utils.nr b/yarn-project/aztec-nr/value-note/src/balance_utils.nr index eedefb3c27ee..cd577b97af7c 100644 --- a/yarn-project/aztec-nr/value-note/src/balance_utils.nr +++ b/yarn-project/aztec-nr/value-note/src/balance_utils.nr @@ -26,4 +26,4 @@ unconstrained pub fn get_balance_with_offset(set: Set } balance -} \ No newline at end of file +} diff --git a/yarn-project/aztec-nr/value-note/src/filter.nr b/yarn-project/aztec-nr/value-note/src/filter.nr index 05424756218f..8657358cf100 100644 --- a/yarn-project/aztec-nr/value-note/src/filter.nr +++ b/yarn-project/aztec-nr/value-note/src/filter.nr @@ -13,4 +13,4 @@ pub fn filter_notes_min_sum(notes: [Option; MAX_READ_REQUESTS_PER_CAL } } selected -} \ No newline at end of file +} diff --git a/yarn-project/aztec-nr/value-note/src/lib.nr b/yarn-project/aztec-nr/value-note/src/lib.nr index 83b1454e9b75..c48740b98d2a 100644 --- a/yarn-project/aztec-nr/value-note/src/lib.nr +++ b/yarn-project/aztec-nr/value-note/src/lib.nr @@ -1,4 +1,4 @@ mod balance_utils; mod filter; mod utils; -mod value_note; \ No newline at end of file +mod value_note; diff --git a/yarn-project/aztec-nr/value-note/src/utils.nr b/yarn-project/aztec-nr/value-note/src/utils.nr index f5abca9ffcc7..5751bba16f1b 100644 --- a/yarn-project/aztec-nr/value-note/src/utils.nr +++ b/yarn-project/aztec-nr/value-note/src/utils.nr @@ -16,11 +16,7 @@ pub fn create_note_getter_options_for_decreasing_balance(amount: Field) -> NoteG // Creates a new note for the recipient. // Inserts it to the recipient's set of notes. -pub fn increment( - balance: Set, - amount: Field, - recipient: Field, -) { +pub fn increment(balance: Set, amount: Field, recipient: Field) { let mut note = ValueNote::new(amount, recipient); // Insert the new note to the owner's set of notes and emit the log if value is non-zero. balance.insert(&mut note, amount != 0); @@ -30,11 +26,7 @@ pub fn increment( // Remove those notes. // If the value of the removed notes exceeds the requested `amount`, create a new note containing the excess value, so that exactly `amount` is removed. // Fail if the sum of the selected notes is less than the amount. -pub fn decrement( - balance: Set, - amount: Field, - owner: Field, -) { +pub fn decrement(balance: Set, amount: Field, owner: Field) { let sum = decrement_by_at_most(balance, amount, owner); assert(sum == amount, "Balance too low"); } @@ -47,11 +39,7 @@ pub fn decrement( // equal `amount`. // // It returns the decremented amount, which should be less than or equal to max_amount. -pub fn decrement_by_at_most( - balance: Set, - max_amount: Field, - owner: Field, -) -> Field { +pub fn decrement_by_at_most(balance: Set, max_amount: Field, owner: Field) -> Field { let options = create_note_getter_options_for_decreasing_balance(max_amount); let opt_notes = balance.get_notes(options); @@ -75,16 +63,12 @@ pub fn decrement_by_at_most( // Removes the note from the owner's set of notes. // Returns the value of the destroyed note. -pub fn destroy_note( - balance: Set, - owner: Field, - note: ValueNote, -) -> Field { +pub fn destroy_note(balance: Set, owner: Field, note: ValueNote) -> Field { // Ensure the note is actually owned by the owner (to prevent user from generating a valid proof while // spending someone else's notes). assert(note.owner == owner); balance.remove(note); - + note.value }