diff --git a/yarn-project/aztec.js/src/abis/schnorr_auth_witness_account_contract.json b/yarn-project/aztec.js/src/abis/schnorr_auth_witness_account_contract.json index d41c3f3bed4..2dfffd4df77 100644 --- a/yarn-project/aztec.js/src/abis/schnorr_auth_witness_account_contract.json +++ b/yarn-project/aztec.js/src/abis/schnorr_auth_witness_account_contract.json @@ -1,6 +1,23 @@ { "name": "SchnorrAuthWitnessAccount", "functions": [ + { + "name": "_inner_is_valid", + "functionType": "secret", + "isInternal": false, + "parameters": [ + { + "name": "address", + "type": { + "kind": "field" + }, + "visibility": "private" + } + ], + "returnTypes": [], + "bytecode": "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", + "verificationKey": "0000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f" + }, { "name": "constructor", "functionType": "secret", @@ -63,7 +80,7 @@ } ], "returnTypes": [], - "bytecode": "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", + "bytecode": "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", "verificationKey": "0000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f" }, { @@ -80,7 +97,7 @@ } ], "returnTypes": [], - "bytecode": "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", + "bytecode": "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", "verificationKey": "0000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f" } ] diff --git a/yarn-project/end-to-end/src/e2e_lending_contract.test.ts b/yarn-project/end-to-end/src/e2e_lending_contract.test.ts index f1b45235e95..499b7497ac3 100644 --- a/yarn-project/end-to-end/src/e2e_lending_contract.test.ts +++ b/yarn-project/end-to-end/src/e2e_lending_contract.test.ts @@ -10,7 +10,7 @@ import { Fr, computeMessageSecretHash, } from '@aztec/aztec.js'; -import { CircuitsWasm, CompleteAddress, GeneratorIndex, PrivateKey } from '@aztec/circuits.js'; +import { CircuitsWasm, CompleteAddress, FunctionSelector, GeneratorIndex, PrivateKey } from '@aztec/circuits.js'; import { pedersenPlookupCommitInputs, pedersenPlookupCompressWithHashIndex } from '@aztec/circuits.js/barretenberg'; import { DebugLogger } from '@aztec/foundation/log'; import { LendingContract, NativeTokenContract, PriceFeedContract } from '@aztec/noir-contracts/types'; @@ -359,7 +359,7 @@ describe('e2e_lending_contract', () => { const depositAmount = 420n; const messageHash = await hashPayload([ - new Fr(0x90785014), + FunctionSelector.fromSignature('unshieldTokens(Field,Field,Field)').toField(), recipientFull.address.toField(), lendingContract.address.toField(), new Fr(depositAmount), @@ -392,7 +392,7 @@ describe('e2e_lending_contract', () => { { const depositAmount = 421n; const messageHash = await hashPayload([ - new Fr(0x90785014), + FunctionSelector.fromSignature('unshieldTokens(Field,Field,Field)').toField(), recipientFull.address.toField(), lendingContract.address.toField(), new Fr(depositAmount), @@ -505,7 +505,7 @@ describe('e2e_lending_contract', () => { { const repayAmount = 20n; const messageHash = await hashPayload([ - new Fr(0x90785014), + FunctionSelector.fromSignature('unshieldTokens(Field,Field,Field)').toField(), recipientFull.address.toField(), lendingContract.address.toField(), new Fr(repayAmount), @@ -540,7 +540,7 @@ describe('e2e_lending_contract', () => { { const repayAmount = 21n; const messageHash = await hashPayload([ - new Fr(0x90785014), + FunctionSelector.fromSignature('unshieldTokens(Field,Field,Field)').toField(), recipientFull.address.toField(), lendingContract.address.toField(), new Fr(repayAmount), 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 1eed378d482..97f064e5ec8 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 @@ -309,17 +309,16 @@ contract NativeToken { // We can do a simple nullifier to handle that in here. Spends only 32 bytes onchain. // @todo @LHerskind Is to be solved as part of https://github.com/AztecProtocol/aztec-packages/issues/1743 let message_field: Field = std::hash::pedersen_with_separator([ - 0x90785014, + compute_selector("unshieldTokens(Field,Field,Field)"), from, to, amount ], GENERATOR_INDEX__SIGNATURE_PAYLOAD )[0]; - - let _callStackItem0 = context.call_private_function(from, 0x29d25ca9, [message_field]); - // Ensure that we retrieved the magic number (selector of is_valid function), otherwise revert. - assert(_callStackItem0[0] == 0x29d25ca9); + let is_valid_selector = compute_selector("is_valid(Field)"); + let _callStackItem0 = context.call_private_function(from, is_valid_selector, [message_field]); + assert(_callStackItem0[0] == is_valid_selector); } // Reduce user balance diff --git a/yarn-project/noir-contracts/src/contracts/private_token_airdrop_contract/src/interface.nr b/yarn-project/noir-contracts/src/contracts/private_token_airdrop_contract/src/interface.nr index 6c8a95fb33a..975acddead8 100644 --- a/yarn-project/noir-contracts/src/contracts/private_token_airdrop_contract/src/interface.nr +++ b/yarn-project/noir-contracts/src/contracts/private_token_airdrop_contract/src/interface.nr @@ -36,7 +36,7 @@ impl PrivateTokenAirdropPrivateContextInterface { serialised_args[6] = recipients[2]; serialised_args[7] = spend_note_offset as Field; - context.call_private_function(self.address, 0xbf748730, serialised_args) + context.call_private_function(self.address, 0x88bd156f, serialised_args) } @@ -50,7 +50,7 @@ impl PrivateTokenAirdropPrivateContextInterface { serialised_args[0] = amount; serialised_args[1] = owner; - context.call_private_function(self.address, 0xa4fa3a6f, serialised_args) + context.call_private_function(self.address, 0x7ecb218a, serialised_args) } @@ -66,7 +66,7 @@ impl PrivateTokenAirdropPrivateContextInterface { serialised_args[1] = secret; serialised_args[2] = owner; - context.call_private_function(self.address, 0xd68b55c1, serialised_args) + context.call_private_function(self.address, 0x9f7bacc8, serialised_args) } @@ -82,7 +82,7 @@ impl PrivateTokenAirdropPrivateContextInterface { serialised_args[2] = secrets[0]; serialised_args[3] = secrets[1]; - context.call_private_function(self.address, 0x720f5cc9, serialised_args) + context.call_private_function(self.address, 0xcaf1f505, serialised_args) } @@ -96,7 +96,7 @@ impl PrivateTokenAirdropPrivateContextInterface { serialised_args[0] = amount; serialised_args[1] = owner; - context.call_private_function(self.address, 0x1535439c, serialised_args) + context.call_private_function(self.address, 0x1dc9c3c0, serialised_args) } @@ -110,7 +110,7 @@ impl PrivateTokenAirdropPrivateContextInterface { serialised_args[0] = amount; serialised_args[1] = recipient; - context.call_private_function(self.address, 0xc0888d22, serialised_args) + context.call_private_function(self.address, 0x61dd7032, serialised_args) } } diff --git a/yarn-project/noir-contracts/src/contracts/private_token_contract/src/interface.nr b/yarn-project/noir-contracts/src/contracts/private_token_contract/src/interface.nr index 1eee266adcb..c308d2e8886 100644 --- a/yarn-project/noir-contracts/src/contracts/private_token_contract/src/interface.nr +++ b/yarn-project/noir-contracts/src/contracts/private_token_contract/src/interface.nr @@ -28,7 +28,7 @@ impl PrivateTokenPrivateContextInterface { serialised_args[0] = amount; serialised_args[1] = owner; - context.call_private_function(self.address, 0x1535439c, serialised_args) + context.call_private_function(self.address, 0x1dc9c3c0, serialised_args) } @@ -42,7 +42,7 @@ impl PrivateTokenPrivateContextInterface { serialised_args[0] = amount; serialised_args[1] = recipient; - context.call_private_function(self.address, 0xc0888d22, serialised_args) + context.call_private_function(self.address, 0x61dd7032, serialised_args) } } diff --git a/yarn-project/noir-contracts/src/contracts/schnorr_auth_witness_account_contract/src/main.nr b/yarn-project/noir-contracts/src/contracts/schnorr_auth_witness_account_contract/src/main.nr index 9da0f00b1e3..65f70607ba0 100644 --- a/yarn-project/noir-contracts/src/contracts/schnorr_auth_witness_account_contract/src/main.nr +++ b/yarn-project/noir-contracts/src/contracts/schnorr_auth_witness_account_contract/src/main.nr @@ -19,18 +19,23 @@ contract SchnorrAuthWitnessAccount { payload.serialize(), GENERATOR_INDEX__SIGNATURE_PAYLOAD )[0]; - let witness = get_auth_witness(message_hash); - assert(recover_address(message_hash, witness) == context.this_address()); + _inner_is_valid(message_hash, context.this_address()); payload.execute_calls(&mut context); } - // keccak256("is_valid(field)") >> 224 -> 0x29d25ca9 #[aztec(private)] fn is_valid( message_hash: Field ) -> Field { + _inner_is_valid(message_hash, context.this_address()); + 0xe86ab4ff + } + + fn _inner_is_valid( + message_hash: Field, + address: Field, + ) { let witness = get_auth_witness(message_hash); - assert(recover_address(message_hash, witness) == context.this_address()); - 0x29d25ca9 + assert(recover_address(message_hash, witness) == address, "Invalid signature"); } } \ No newline at end of file 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 6d03ba23bd0..7ccee2964e7 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 @@ -49,7 +49,7 @@ impl TestPrivateContextInterface { serialised_args[0] = amount; serialised_args[1] = secretHash; - context.call_public_function(self.address, 0xbac98727, serialised_args) + context.call_public_function(self.address, 0x1c031d17, serialised_args) } @@ -63,7 +63,7 @@ impl TestPrivateContextInterface { serialised_args[0] = amount; serialised_args[1] = secretHash; - context.call_public_function(self.address, 0x42040a24, serialised_args) + context.call_public_function(self.address, 0x0217ef40, serialised_args) } @@ -75,7 +75,7 @@ impl TestPrivateContextInterface { let mut serialised_args = [0; 1]; serialised_args[0] = aztec_address; - context.call_private_function(self.address, 0xaf15a45f, serialised_args) + context.call_private_function(self.address, 0xe5df1726, serialised_args) } @@ -87,7 +87,7 @@ impl TestPrivateContextInterface { let mut serialised_args = [0; 1]; serialised_args[0] = address; - context.call_private_function(self.address, 0x88f0753b, serialised_args) + context.call_private_function(self.address, 0x553aaad4, serialised_args) } @@ -119,7 +119,7 @@ impl TestPrivateContextInterface { let mut serialised_args = [0; 1]; serialised_args[0] = time; - context.call_public_function(self.address, 0xfff6026c, serialised_args) + context.call_public_function(self.address, 0x57587e4d, serialised_args) } @@ -152,7 +152,7 @@ impl TestPrivateContextInterface { serialised_args[15] = aDeepStruct.manyNotes[2].amount; serialised_args[16] = aDeepStruct.manyNotes[2].secretHash; - context.call_private_function(self.address, 0x81d7c118, serialised_args) + context.call_private_function(self.address, 0x7c97ca29, serialised_args) } } @@ -182,7 +182,7 @@ impl TestPublicContextInterface { serialised_args[0] = amount; serialised_args[1] = secretHash; - context.call_public_function(self.address, 0xbac98727, serialised_args) + context.call_public_function(self.address, 0x1c031d17, serialised_args) } @@ -196,7 +196,7 @@ impl TestPublicContextInterface { serialised_args[0] = amount; serialised_args[1] = secretHash; - context.call_public_function(self.address, 0x42040a24, serialised_args) + context.call_public_function(self.address, 0x0217ef40, serialised_args) } @@ -208,7 +208,7 @@ impl TestPublicContextInterface { let mut serialised_args = [0; 1]; serialised_args[0] = time; - context.call_public_function(self.address, 0xfff6026c, serialised_args) + context.call_public_function(self.address, 0x57587e4d, serialised_args) } }