From 3a8e7026ea10aa8564bdcc127efd4213ebd526de Mon Sep 17 00:00:00 2001 From: Maddiaa <47148561+Maddiaa0@users.noreply.github.com> Date: Fri, 1 Sep 2023 17:08:21 +0100 Subject: [PATCH] feat(Aztec.nr): Kernel return types abstraction (#1924) --- .../src/contracts/child_contract/src/main.nr | 29 ++++++----- .../ecdsa_account_contract/src/main.nr | 1 + .../src/main.nr | 2 +- .../import_test_contract/src/main.nr | 14 +++--- .../contracts/lending_contract/src/main.nr | 50 ++++++++++--------- .../contracts/lending_contract/src/storage.nr | 3 +- .../multi_transfer_contract/src/main.nr | 8 ++- .../native_token_contract/src/main.nr | 15 +++--- .../non_native_token_contract/src/main.nr | 4 +- .../src/contracts/parent_contract/src/main.nr | 13 +++-- .../pending_commitments_contract/src/main.nr | 18 +++---- .../contracts/price_feed_contract/src/main.nr | 9 ++-- .../price_feed_contract/src/storage.nr | 2 +- .../public_token_contract/src/main.nr | 8 +-- .../src/contracts/test_contract/src/main.nr | 24 ++++----- .../contracts/uniswap_contract/src/main.nr | 7 ++- 16 files changed, 107 insertions(+), 100 deletions(-) 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 b85733f8c69..b24547a87cb 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 @@ -12,8 +12,8 @@ contract Child { #[aztec(private)] fn value( input: Field, - ) { - context.return_values.push(input + context.chain_id() + context.version()); + ) -> Field { + input + context.chain_id() + context.version() } // Returns a sum of the input and the chain id and version of the contract in private circuit public input's return_values. @@ -21,47 +21,50 @@ contract Child { #[aztec(private)] fn valueInternal( input: Field, - ) { + ) -> Field { assert(inputs.call_context.msg_sender == inputs.call_context.storage_contract_address); - context.return_values.push(input + context.chain_id() + context.version()); + input + context.chain_id() + context.version() } // Returns base_value + 42. #[aztec(public)] - fn pubGetValue(base_value: Field) { + fn pubGetValue(base_value: Field) -> Field { let returnValue = base_value + context.chain_id() + context.version() + context.block_number() + context.timestamp(); - context.return_values.push(returnValue); + returnValue } // Sets `current_value` to `new_value` #[aztec(public)] - fn pubSetValue(new_value: Field) { + fn pubSetValue(new_value: Field) -> Field { let storage = Storage::init(); storage.current_value.write(new_value); let _hash = emit_unencrypted_log(new_value); - context.return_values.push(new_value); + + new_value } // Increments `current_value` by `new_value` #[aztec(public)] - fn pubIncValue(new_value: Field) { + fn pubIncValue(new_value: Field) -> Field { let storage = Storage::init(); let old_value = storage.current_value.read(); storage.current_value.write(old_value + new_value); let _hash = emit_unencrypted_log(new_value); - context.return_values.push(new_value); + + new_value } // Increments `current_value` by `new_value`. Can only be called from this contract. - #[aztec(public)] - fn pubIncValueInternal(new_value: Field) { + #[aztec(public)] + fn pubIncValueInternal(new_value: Field) -> Field { let storage = Storage::init(); assert(inputs.call_context.msg_sender == inputs.call_context.storage_contract_address); let old_value = storage.current_value.read(); storage.current_value.write(old_value + new_value); let _hash = emit_unencrypted_log(new_value); - context.return_values.push(new_value); + + new_value } #[aztec(public)] 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 b245de94164..3aa9c926717 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 @@ -52,6 +52,7 @@ contract EcdsaAccount { payload.execute_calls(&mut context); } + // Creates a new account out of an ECDSA public key to use for signature verification #[aztec(private)] fn constructor( diff --git a/yarn-project/noir-contracts/src/contracts/example_public_state_increment_BROKE/src/main.nr b/yarn-project/noir-contracts/src/contracts/example_public_state_increment_BROKE/src/main.nr index b8437caf205..59487731894 100644 --- a/yarn-project/noir-contracts/src/contracts/example_public_state_increment_BROKE/src/main.nr +++ b/yarn-project/noir-contracts/src/contracts/example_public_state_increment_BROKE/src/main.nr @@ -28,7 +28,7 @@ contract ExamplePublicStateIncrement { // a = 100; #[aztec(public)] - open internal fn initialise_a() { + internal fn initialise_a() { let storage = Storage::init(); storage.a.write(100); } 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 aed708884b9..4e2ff6b772b 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 @@ -24,7 +24,7 @@ contract ImportTest { #[aztec(private)] fn main( target: Field - ) { + ) -> Field { let test_contract_instance = TestPrivateContextInterface::at(target); let return_values = test_contract_instance.testCodeGen( &mut context, @@ -45,7 +45,7 @@ contract ImportTest { } ); - context.return_values.push(return_values[0]); + return_values[0] } // Calls the getThisAddress on the Test contract at the target address @@ -54,10 +54,11 @@ contract ImportTest { #[aztec(private)] fn callNoArgs( target: Field - ) { + ) -> Field { let test_contract_instance = TestPrivateContextInterface::at(target); let return_values = test_contract_instance.getThisAddress(&mut context); - context.return_values.push(return_values[0]); + + return_values[0] } // Calls the createNullifierPublic on the Test contract at the target address @@ -77,10 +78,11 @@ contract ImportTest { #[aztec(public)] fn pubCallOpenFn( target: Field, - ) { + ) -> Field { let test_contract_instance = TestPublicContextInterface::at(target); let ret = test_contract_instance.createNullifierPublic(context, 1, 2); - context.return_values.push(ret[0]); + + ret[0] } } 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 c691af2d6b2..ea9e737a2b6 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 @@ -35,7 +35,7 @@ contract Lending { loan_to_value: Field, collateral_asset: Field, stable_coin: Field, - ) { + ) -> Field { let storage = Storage::init(); let asset_loc = storage.assets.at(0); let asset = asset_loc.read(); @@ -54,13 +54,13 @@ contract Lending { storage.collateral_asset.write(collateral_asset); storage.stable_coin.write(stable_coin); - context.return_values.push(1); + 1 } // Create a position. // keccak256("update_accumulator()") >> 224 -> 0x1873b536 #[aztec(public)] - fn update_accumulator() { + fn update_accumulator() -> Asset { let storage = Storage::init(); let asset_loc = storage.assets.at(0); @@ -82,7 +82,7 @@ contract Lending { asset_loc.write(asset); } - context.return_values.push_array(asset.serialise()); + asset } // This don't need to be on behalf of self. We should be able to repay on behalf of someone else. @@ -105,19 +105,20 @@ contract Lending { owner: Field, amount: Field, collateral_asset: Field, - ) { + ) -> Field { Token::at(collateral_asset).transfer_from_pub(context, context.msg_sender(), context.this_address(), amount); let return_values = context.call_public_function(context.this_address(), 0x08506e50, [owner, amount, collateral_asset]); - context.return_values.push(return_values[0]); + + return_values[0] } #[aztec(public)] // keccak256("_deposit(field,field,field)") >> 224 -> 0x08506e50 - open internal fn _deposit( + internal fn _deposit( owner: Field, amount: Field, collateral_asset: Field, - ) { + ) -> Field { let _asset = Lending::at(context.this_address()).update_accumulator(context); let storage = Storage::init(); @@ -128,7 +129,7 @@ contract Lending { let collateral = coll_loc.read(); coll_loc.write(collateral + amount); - context.return_values.push(1); + 1 } #[aztec(private)] @@ -145,19 +146,20 @@ contract Lending { fn withdraw_public( to: Field, amount: Field, - ) { + ) -> Field { // _withdraw(msg.sender, to, amount); let return_values = context.call_public_function(context.this_address(), 0x5af6f634, [context.msg_sender(), to, amount]); - context.return_values.push(return_values[0]); + + return_values[0] } // keccak256("_withdraw(field,field,field)") >> 224 -> 0x5af6f634 #[aztec(public)] - open internal fn _withdraw( + 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); @@ -182,7 +184,7 @@ contract Lending { let collateral_asset = storage.collateral_asset.read(); Token::at(collateral_asset).transfer_pub(context, recipient, amount); - context.return_values.push(1); + 1 } #[aztec(private)] @@ -200,19 +202,20 @@ contract Lending { fn borrow_public( to: Field, amount: Field - ) { + ) -> Field { // _borrow(msg.sender, to, amount) let return_values = context.call_public_function(context.this_address(), 0xceffa31a, [context.msg_sender(), to, amount]); - context.return_values.push(return_values[0]); + + return_values[0] } // keccak256("_borrow(field,field,field)") >> 224 -> 0xceffa31a #[aztec(public)] - open internal fn _borrow( + 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); @@ -233,7 +236,7 @@ contract Lending { let stable_coin = storage.stable_coin.read(); Token::at(stable_coin).owner_mint_pub(context, to, amount); - context.return_values.push(1); + 1 } #[aztec(private)] @@ -254,16 +257,17 @@ contract Lending { owner: Field, amount: Field, stable_coin: Field, - ) { + ) -> Field { // Should probably just burn the tokens actually :thinking: Token::at(stable_coin).transfer_from_pub(context, context.msg_sender(), context.this_address(), amount); let return_values = context.call_public_function(context.this_address(), 0xfa94ab54, [owner, amount, stable_coin]); - context.return_values.push(return_values[0]); + + return_values[0] } // keccak256("_repay(field,field,field)") >> 224 -> 0xfa94ab54 #[aztec(public)] - open internal fn _repay( + internal fn _repay( owner: Field, amount: Field, stable_coin: Field, @@ -279,7 +283,7 @@ contract Lending { storage.static_debt.at(owner).write(debt_returns.static_debt as Field); - context.return_values.push(1); + 1 } unconstrained fn get_asset( diff --git a/yarn-project/noir-contracts/src/contracts/lending_contract/src/storage.nr b/yarn-project/noir-contracts/src/contracts/lending_contract/src/storage.nr index f2f20197258..ed6de6e197d 100644 --- a/yarn-project/noir-contracts/src/contracts/lending_contract/src/storage.nr +++ b/yarn-project/noir-contracts/src/contracts/lending_contract/src/storage.nr @@ -34,7 +34,8 @@ fn serialiseAsset(asset: Asset) -> [Field; ASSET_SERIALISED_LEN] { } impl Asset { - fn serialise (self: Self) -> [Field; ASSET_SERIALISED_LEN] { + // TODO(Maddiaa): Rename all serialise -> serialize + fn serialize (self: Self) -> [Field; ASSET_SERIALISED_LEN] { serialiseAsset(self) } } diff --git a/yarn-project/noir-contracts/src/contracts/multi_transfer_contract/src/main.nr b/yarn-project/noir-contracts/src/contracts/multi_transfer_contract/src/main.nr index 819682fafc2..2e9bf850ddb 100644 --- a/yarn-project/noir-contracts/src/contracts/multi_transfer_contract/src/main.nr +++ b/yarn-project/noir-contracts/src/contracts/multi_transfer_contract/src/main.nr @@ -30,7 +30,7 @@ contract MultiTransfer { owner: Field, // Owner of the asset batch_transfer_selector: Field, // Function selector for transfer note_offsets: [Field; 4], // Offsets from which 4 notes of the owner would be read. - ) { + ) -> [Field; 4] { // First batch transfer call let return_values_1 = context.call_private_function(asset, batch_transfer_selector, [ owner, @@ -43,7 +43,6 @@ contract MultiTransfer { note_offsets[0], ]); let result1 = return_values_1[0]; - context.return_values.push(result1); // Second batch transfer call let return_values_2 = context.call_private_function(asset, batch_transfer_selector, [ @@ -57,7 +56,6 @@ contract MultiTransfer { note_offsets[1], ]); let result2 = return_values_2[0]; - context.return_values.push(result2); // Third batch transfer call let return_values_3 = context.call_private_function(asset, batch_transfer_selector, [ @@ -71,7 +69,6 @@ contract MultiTransfer { note_offsets[2], ]); let result3 = return_values_3[0]; - context.return_values.push(result3); // Fourth batch transfer call let return_values_4 = context.call_private_function(asset, batch_transfer_selector, [ @@ -85,6 +82,7 @@ contract MultiTransfer { note_offsets[3], ]); let result4 = return_values_4[0]; - context.return_values.push(result4); + + [result1, result2, result3, result4] } } \ No newline at end of file diff --git a/yarn-project/noir-contracts/src/contracts/native_token_contract/src/main.nr b/yarn-project/noir-contracts/src/contracts/native_token_contract/src/main.nr index 8c83cd114f7..0691ad024c4 100644 --- a/yarn-project/noir-contracts/src/contracts/native_token_contract/src/main.nr +++ b/yarn-project/noir-contracts/src/contracts/native_token_contract/src/main.nr @@ -49,12 +49,13 @@ contract NativeToken { fn owner_mint_pub( to: Field, amount: Field, - ) { + ) -> Field { let storage = Storage::init(); let new_balance = storage.public_balances.at(to).read() + amount; storage.public_balances.at(to).write(new_balance); storage.total_supply.write(storage.total_supply.read() + amount); - context.return_values.push(1); + + 1 } // uint256(keccak256("owner_mint_priv(field,field)")) >> 224 -> 3157518188 @@ -62,7 +63,7 @@ contract NativeToken { fn owner_mint_priv( amount: Field, secret_hash: Field, - ) { + ) -> Field { let storage = Storage::init(); let pending_shields = storage.pending_shields; @@ -71,7 +72,7 @@ contract NativeToken { storage.total_supply.write(storage.total_supply.read() + amount); - context.return_values.push(1); + 1 } // Mint Private Function @@ -130,7 +131,7 @@ contract NativeToken { msg_key: Field, secret: Field, canceller: Field, - ) { + ) -> Field { let storage = Storage::init(); let public_balances = storage.public_balances; @@ -145,7 +146,7 @@ contract NativeToken { recipient_balance.write(new_balance); // Push the return value into the context - context.return_values.push(new_balance); + new_balance } // Withdraws using user's public balance. @@ -327,7 +328,7 @@ contract NativeToken { } #[aztec(public)] - open internal fn addUnshieldedBalance( + internal fn addUnshieldedBalance( amount: Field, to: Field, ) { diff --git a/yarn-project/noir-contracts/src/contracts/non_native_token_contract/src/main.nr b/yarn-project/noir-contracts/src/contracts/non_native_token_contract/src/main.nr index c7dcc9557d7..62a58eb527f 100644 --- a/yarn-project/noir-contracts/src/contracts/non_native_token_contract/src/main.nr +++ b/yarn-project/noir-contracts/src/contracts/non_native_token_contract/src/main.nr @@ -107,7 +107,7 @@ contract NonNativeToken { msg_key: Field, secret: Field, canceller: Field, - ) { + ) -> Field { let storage = Storage::init(); let public_balances = storage.public_balances; @@ -122,7 +122,7 @@ contract NonNativeToken { recipient_balance.write(new_balance); // Push the return value into the context - context.return_values.push(new_balance); + new_balance } 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 7350735a8b6..99458ff1014 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 @@ -9,13 +9,12 @@ contract Parent { fn entryPoint( targetContract: Field, targetSelector: Field, - ) { + ) -> Field { // Call the target private function let return_values = context.call_private_function(targetContract, targetSelector, [0]); // Copy the return value from the call to this function's return values - let result = return_values[0]; - context.return_values.push(result); + return_values[0] } // Public function to directly call another public function to the targetContract using the selector and value provided @@ -24,10 +23,10 @@ contract Parent { targetContract: Field, targetSelector: Field, initValue: Field - ) { + ) -> Field { let return_values = context.call_public_function(targetContract, targetSelector, [initValue]); - context.return_values.push(return_values[0]); + return_values[0] } // Same as pubEntryPoint, but calls the target contract twice, using the return value from the first invocation as the argument for the second. @@ -36,11 +35,11 @@ contract Parent { 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]); - context.return_values.push(return_values[0]); + return_values[0] } // Private function to enqueue a call to the targetContract address using the selector and argument provided 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 e6e02be89ab..1f4bdfe2858 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 @@ -36,7 +36,7 @@ contract PendingCommitments { fn test_insert_then_get_then_nullify_flat( amount: Field, owner: Field, - ) { + ) -> Field { let storage = Storage::init(); let owner_balance = storage.balances.at(owner); @@ -60,9 +60,9 @@ contract PendingCommitments { assert(note.value == note0.value); assert(maybe_notes[1].is_none()); - context.return_values.push(note0.value); - owner_balance.remove(&mut context, note0); + + note0.value } // Confirm cannot access commitments inserted later in same function @@ -70,7 +70,7 @@ contract PendingCommitments { fn test_bad_get_then_insert_flat( amount: Field, owner: Field, - ) { + ) -> Field { let storage = Storage::init(); let owner_balance = storage.balances.at(owner); @@ -82,8 +82,6 @@ contract PendingCommitments { assert(maybe_notes[0].is_none()); assert(maybe_notes[1].is_none()); - context.return_values.push(0); - // Insert note and emit encrypted note preimage via oracle call let mut note = ValueNote::new(amount, owner); owner_balance.insert(&mut context, &mut note); @@ -94,6 +92,8 @@ contract PendingCommitments { get_public_key(owner), note.serialise(), ); + + 0 } // Dumy nested/inner function (to pass a function which does nothing) @@ -130,7 +130,7 @@ contract PendingCommitments { fn get_then_nullify_note( expected_value: Field, owner: Field, - ){ + ) -> Field { let storage = Storage::init(); let owner_balance = storage.balances.at(owner); @@ -140,9 +140,9 @@ contract PendingCommitments { assert(expected_value == note.value); - context.return_values.push(expected_value); - owner_balance.remove(&mut context, note); + + expected_value } // Nested/inner function to get a note and confirms that none is returned 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 b98d959bdc0..bdfd8c18bd5 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 @@ -10,20 +10,21 @@ contract PriceFeed { fn set_price( asset_id: Field, price: u120, - ) { + ) -> Field { let storage = Storage::init(); let asset = storage.assets.at(asset_id); asset.write(Asset {price: price}); - context.return_values.push(1); + 1 } #[aztec(public)] fn get_price( asset_id: Field, - ) { + ) -> Asset { let storage = Storage::init(); - context.return_values.push_array(storage.assets.at(asset_id).read().serialise()); + + storage.assets.at(asset_id).read() } unconstrained fn fetch_price( diff --git a/yarn-project/noir-contracts/src/contracts/price_feed_contract/src/storage.nr b/yarn-project/noir-contracts/src/contracts/price_feed_contract/src/storage.nr index 5ba6c683310..e930883578a 100644 --- a/yarn-project/noir-contracts/src/contracts/price_feed_contract/src/storage.nr +++ b/yarn-project/noir-contracts/src/contracts/price_feed_contract/src/storage.nr @@ -22,7 +22,7 @@ fn serialiseAsset(asset: Asset) -> [Field; ASSET_SERIALISED_LEN] { } impl Asset { - fn serialise(self: Self) -> [Field; ASSET_SERIALISED_LEN] { + fn serialize(self: Self) -> [Field; ASSET_SERIALISED_LEN] { serialiseAsset(self) } } diff --git a/yarn-project/noir-contracts/src/contracts/public_token_contract/src/main.nr b/yarn-project/noir-contracts/src/contracts/public_token_contract/src/main.nr index 282fd6323cc..8ce73385688 100644 --- a/yarn-project/noir-contracts/src/contracts/public_token_contract/src/main.nr +++ b/yarn-project/noir-contracts/src/contracts/public_token_contract/src/main.nr @@ -17,7 +17,7 @@ contract PublicToken { fn mint( amount: Field, recipient: Field, - ) { + ) -> Field { let storage = Storage::init(); let recipient_balance = storage.balances.at(recipient); @@ -28,7 +28,7 @@ contract PublicToken { // docs:end:unencrypted_log recipient_balance.write(new_amount); - context.return_values.push(new_amount); + new_amount } // Transfers `amount` of tokens from `msg_sender` to `recipient`. @@ -36,7 +36,7 @@ contract PublicToken { fn transfer( amount: Field, recipient: Field, - ) { + ) -> Field { let storage = Storage::init(); let sender = context.msg_sender(); @@ -60,7 +60,7 @@ contract PublicToken { // TODO: Revert if there is not enough balance return_value = current_recipient_balance; } - context.return_values.push(return_value); + return_value } unconstrained fn publicBalanceOf( 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 079c2872148..0c3573009af 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 @@ -19,32 +19,30 @@ contract Test { #[aztec(private)] fn getPublicKey( address: Field, - ) { + ) -> [Field; 2]{ let pub_key = get_public_key(address); - context.return_values.push_array([pub_key.x, pub_key.y]); + + [pub_key.x, pub_key.y] } // Get the portal contract address through an oracle call #[aztec(private)] fn getPortalContractAddress( aztec_address: Field - ) { - let portal_address = get_portal_address(aztec_address); - context.return_values.push_array([portal_address]); + ) -> Field { + get_portal_address(aztec_address) } // Get the address of the l1 portal for this contract (taken from the input context) #[aztec(private)] - fn getThisPortalAddress() { - let this_portal_address = context.this_portal_address(); - context.return_values.push_array([this_portal_address]); + fn getThisPortalAddress() -> Field { + context.this_portal_address() } // Get the address of this contract (taken from the input context) #[aztec(private)] - fn getThisAddress() { - let this_address = context.this_address(); - context.return_values.push_array([this_address]); + fn getThisAddress() -> Field { + context.this_address() } // Test codegen for noir interfaces @@ -110,10 +108,10 @@ contract Test { #[aztec(public)] fn isTimeEqual( time: Field, - ) { + ) -> Field { assert(context.timestamp() == time); - context.return_values.push(time); + time } // Purely exists for testing 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 9a88cb4c221..13ab9d48489 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 @@ -33,7 +33,7 @@ contract Uniswap { deadlineForL1ToL2Message: Field, // for when l1 uniswap portal inserts the message to consume output assets on L2 cancellerForL1ToL2Message: Field, // L1 address of who can cancel the message to consume assets on L2. callerOnL1: Field, // ethereum address that can call this function on the L1 portal (0x0 if anyone can call) - ) { + ) -> Field { // Get portal addresses let l1UniswapPortal = context.this_portal_address(); let inputAssetPortalAddress = get_portal_address(inputAsset); @@ -49,9 +49,6 @@ contract Uniswap { l1UniswapPortal, ]); - let result = return_values[0]; - context.return_values.push(result); - // Send the swap message to L1 portal let content_hash = _compute_swap_content_hash( inputAssetPortalAddress, @@ -66,6 +63,8 @@ contract Uniswap { callerOnL1, ); context.message_portal(content_hash); + + return_values[0] } // refer `l1-contracts/test/portals/UniswapPortal.sol` on how L2 to L1 message is expected