diff --git a/yarn-project/acir-simulator/src/acvm/acvm.ts b/yarn-project/acir-simulator/src/acvm/acvm.ts index 93ee8fb04f24..60abc085d9bc 100644 --- a/yarn-project/acir-simulator/src/acvm/acvm.ts +++ b/yarn-project/acir-simulator/src/acvm/acvm.ts @@ -30,7 +30,7 @@ export const ONE_ACVM_FIELD: ACVMField = `0x${'00'.repeat(Fr.SIZE_IN_BYTES - 1)} */ type ORACLE_NAMES = | 'packArguments' - | 'getEip1271Witness' + | 'getAuthWitness' | 'getSecretKey' | 'getNote' | 'getNotes' diff --git a/yarn-project/acir-simulator/src/client/db_oracle.ts b/yarn-project/acir-simulator/src/client/db_oracle.ts index f8c75dc7d545..75cfc9dd79d3 100644 --- a/yarn-project/acir-simulator/src/client/db_oracle.ts +++ b/yarn-project/acir-simulator/src/client/db_oracle.ts @@ -93,7 +93,7 @@ export interface DBOracle extends CommitmentsDB { * @param message_hash - The message hash. * @returns A Promise that resolves to an array of field elements representing the eip-1271 witness. */ - getEip1271Witness(message_hash: Fr): Promise; + getAuthWitness(message_hash: Fr): Promise; /** * Retrieve the secret key associated with a specific public key. diff --git a/yarn-project/acir-simulator/src/client/private_execution.ts b/yarn-project/acir-simulator/src/client/private_execution.ts index afeb1ad97eba..5d55c4e795a9 100644 --- a/yarn-project/acir-simulator/src/client/private_execution.ts +++ b/yarn-project/acir-simulator/src/client/private_execution.ts @@ -77,8 +77,8 @@ export class PrivateFunctionExecution { packArguments: async args => { return toACVMField(await this.context.packedArgsCache.pack(args.map(fromACVMField))); }, - getEip1271Witness: async ([messageHash]) => { - return (await this.context.db.getEip1271Witness(fromACVMField(messageHash))).map(toACVMField); + getAuthWitness: async ([messageHash]) => { + return (await this.context.db.getAuthWitness(fromACVMField(messageHash))).map(toACVMField); }, getSecretKey: ([ownerX], [ownerY]) => this.context.getSecretKey(this.contractAddress, ownerX, ownerY), getPublicKey: async ([acvmAddress]) => { diff --git a/yarn-project/aztec-rpc/src/aztec_rpc_server/aztec_rpc_server.ts b/yarn-project/aztec-rpc/src/aztec_rpc_server/aztec_rpc_server.ts index dc920656f5ca..dc19f79e34c5 100644 --- a/yarn-project/aztec-rpc/src/aztec_rpc_server/aztec_rpc_server.ts +++ b/yarn-project/aztec-rpc/src/aztec_rpc_server/aztec_rpc_server.ts @@ -75,8 +75,8 @@ export class AztecRPCServer implements AztecRPC { this.clientInfo = `${name.split('/')[name.split('/').length - 1]}@${version}`; } - public async addEip1271Witness(messageHash: Fr, witness: Fr[]) { - await this.db.addEip1271Witness(messageHash, witness); + public async addAuthWitness(messageHash: Fr, witness: Fr[]) { + await this.db.addAuthWitness(messageHash, witness); return Promise.resolve(); } diff --git a/yarn-project/aztec-rpc/src/database/database.ts b/yarn-project/aztec-rpc/src/database/database.ts index 95e5bcc2a4fb..0809cf7e0e21 100644 --- a/yarn-project/aztec-rpc/src/database/database.ts +++ b/yarn-project/aztec-rpc/src/database/database.ts @@ -11,18 +11,18 @@ import { NoteSpendingInfoDao } from './note_spending_info_dao.js'; */ export interface Database extends ContractDatabase { /** - * Add a eip1271 witness to the database. + * Add a auth witness to the database. * @param messageHash - The message hash. - * @param witness - An array of field elements representing the eip1271 witness. + * @param witness - An array of field elements representing the auth witness. */ - addEip1271Witness(messageHash: Fr, witness: Fr[]): Promise; + addAuthWitness(messageHash: Fr, witness: Fr[]): Promise; /** - * Fetching the eip1271 witness for a given message hash. + * Fetching the auth witness for a given message hash. * @param messageHash - The message hash. - * @returns A Promise that resolves to an array of field elements representing the eip1271 witness. + * @returns A Promise that resolves to an array of field elements representing the auth witness. */ - getEip1271Witness(messageHash: Fr): Promise; + getAuthWitness(messageHash: Fr): Promise; /** * Get auxiliary transaction data based on contract address and storage slot. diff --git a/yarn-project/aztec-rpc/src/database/memory_db.ts b/yarn-project/aztec-rpc/src/database/memory_db.ts index 98f85bdd6a3c..208096fd1067 100644 --- a/yarn-project/aztec-rpc/src/database/memory_db.ts +++ b/yarn-project/aztec-rpc/src/database/memory_db.ts @@ -19,29 +19,29 @@ export class MemoryDB extends MemoryContractDatabase implements Database { private treeRoots: Record | undefined; private globalVariablesHash: Fr | undefined; private addresses: CompleteAddress[] = []; - private eip1271Witnesses: Record = {}; + private authWitnesses: Record = {}; constructor(logSuffix?: string) { super(createDebugLogger(logSuffix ? 'aztec:memory_db_' + logSuffix : 'aztec:memory_db')); } /** - * Add a eip1271 witness to the database. + * Add a auth witness to the database. * @param messageHash - The message hash. - * @param witness - An array of field elements representing the eip1271 witness. + * @param witness - An array of field elements representing the auth witness. */ - public addEip1271Witness(messageHash: Fr, witness: Fr[]): Promise { - this.eip1271Witnesses[messageHash.toString()] = witness; + public addAuthWitness(messageHash: Fr, witness: Fr[]): Promise { + this.authWitnesses[messageHash.toString()] = witness; return Promise.resolve(); } /** - * Fetching the eip1271 witness for a given message hash. + * Fetching the auth witness for a given message hash. * @param messageHash - The message hash. - * @returns A Promise that resolves to an array of field elements representing the eip1271 witness. + * @returns A Promise that resolves to an array of field elements representing the auth witness. */ - public getEip1271Witness(messageHash: Fr): Promise { - return Promise.resolve(this.eip1271Witnesses[messageHash.toString()]); + public getAuthWitness(messageHash: Fr): Promise { + return Promise.resolve(this.authWitnesses[messageHash.toString()]); } public addNoteSpendingInfo(noteSpendingInfoDao: NoteSpendingInfoDao) { diff --git a/yarn-project/aztec-rpc/src/simulator_oracle/index.ts b/yarn-project/aztec-rpc/src/simulator_oracle/index.ts index bd5f44af0711..08f613978e00 100644 --- a/yarn-project/aztec-rpc/src/simulator_oracle/index.ts +++ b/yarn-project/aztec-rpc/src/simulator_oracle/index.ts @@ -46,9 +46,9 @@ export class SimulatorOracle implements DBOracle { return completeAddress; } - async getEip1271Witness(messageHash: Fr): Promise { - const witness = await this.db.getEip1271Witness(messageHash); - if (!witness) throw new Error(`Unknown eip1271 witness for message hash ${messageHash.toString()}`); + async getAuthWitness(messageHash: Fr): Promise { + const witness = await this.db.getAuthWitness(messageHash); + if (!witness) throw new Error(`Unknown auth witness for message hash ${messageHash.toString()}`); return witness; } 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 new file mode 100644 index 000000000000..08ce925b5319 --- /dev/null +++ b/yarn-project/aztec.js/src/abis/schnorr_auth_witness_account_contract.json @@ -0,0 +1,87 @@ +{ + "name": "SchnorrAuthWitnessAccount", + "functions": [ + { + "name": "constructor", + "functionType": "secret", + "isInternal": false, + "parameters": [], + "returnTypes": [], + "bytecode": "H4sIAAAAAAAA/9Xc12/aUBzFcZIm6d4le+8dG9tg05Wme++9Ehro3u3/H44CEsprTh6+V7LAL+h8GPYdv8v/XC5XyW23tvrRXj86Gs+b5507zrsaz1tb83y18RgFxTiulgrVMAo3gkJWSZMgTirFNEzDJE02C2kUVdM4LWWVrBRkYRxVw1qSRbVgu3W3vFawy7aXOXsgOXshOfsgOfshOQcgOQchOYcgOYchOUcgOUchOccgOcchOScgOSchOacgOachOWcgOWchOecgOechORcgORchOZcgOZchOVcgOQNIzhCSswDJGUFyxpCcCSRnEZKzBMmZQnJmkJzlPcrZviNnsLsWthnNZyHmdqP5HMS8z2g+DzF3GM0XIOZOo/kixNxlNK9CzN1G8yWIucdoXoOYe43myxBzn9F8BWLuN5qvQswDRvM1iHnQaL4OMQ8ZzTcg5mGj+SbEPGI034KYR43m2xDzmNF8B2IeN5rvQswTRvM9iHnSaL4PMU8ZzQ8g5mmj+SHEPGM0P4KYZ43mxxDznNH8BGKeN5qfQswLRvMziHnRaH4OMS8ZzS8g5mWj+SXEvGI0v4KYA6P5NcQcGs1vIOaC0fwWYo6M5ncQc2w0v4eYE6N5HWIuGs0bEHPJaK5AzKnR/AFizozmTYi5bDRXIeb9RnMNYj5gNH+EmA8azZ8g5kNG82eI+bDR/AViPmI0f4WYjxrN3yDmY0bzd4j5uNH8A2I+YTT/hJhPGs2/IOZTRvNviPm00fwHYj5jNP+FmPNG8z+jOd94neb/9GlPlPYIac+M9pBoPKjxkcYL6j+rP6n+lfobuv/qfqTrs65X+v3q+6zPN9/yXpYbj9oLp71h2iulvUPNvTTaa7FWP1SLr9p01Wqrdlm1vKptVa2nah9VC6jaONWKqXZKtUSqrVGtiWovVIugtXmtVWvtVmuZWtvTWpfWfrQWorUBzZVr7lhzqev1Q3NtmnvSXIzmJjRW19hVYzmNbdTXV99XfUH1jdRX0L1T9xJdW3Wt0W9P30V9NlvHjzLRIFEAAA==", + "verificationKey": "0000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f" + }, + { + "name": "entrypoint", + "functionType": "secret", + "isInternal": false, + "parameters": [ + { + "name": "payload", + "type": { + "kind": "struct", + "path": "aztec::entrypoint::EntrypointPayload", + "fields": [ + { + "name": "flattened_args_hashes", + "type": { + "kind": "array", + "length": 4, + "type": { + "kind": "field" + } + } + }, + { + "name": "flattened_selectors", + "type": { + "kind": "array", + "length": 4, + "type": { + "kind": "field" + } + } + }, + { + "name": "flattened_targets", + "type": { + "kind": "array", + "length": 4, + "type": { + "kind": "field" + } + } + }, + { + "name": "nonce", + "type": { + "kind": "field" + } + } + ] + }, + "visibility": "public" + } + ], + "returnTypes": [], + "bytecode": "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", + "verificationKey": "0000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f" + }, + { + "name": "is_valid", + "functionType": "secret", + "isInternal": false, + "parameters": [ + { + "name": "message_hash", + "type": { + "kind": "field" + }, + "visibility": "private" + } + ], + "returnTypes": [], + "bytecode": "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", + "verificationKey": "0000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f" + } + ] +} diff --git a/yarn-project/aztec.js/src/abis/schnorr_eip_1271_account_contract.json b/yarn-project/aztec.js/src/abis/schnorr_eip_1271_account_contract.json deleted file mode 100644 index 5f18a57c199a..000000000000 --- a/yarn-project/aztec.js/src/abis/schnorr_eip_1271_account_contract.json +++ /dev/null @@ -1,87 +0,0 @@ -{ - "name": "SchnorrEip1271Account", - "functions": [ - { - "name": "constructor", - "functionType": "secret", - "isInternal": false, - "parameters": [], - "returnTypes": [], - "bytecode": "H4sIAAAAAAAA/9Xc12/aUBzFcZIm6d4le+8dG9tg05Wme++9Ehro3u3/H44CEsprTh6+V7LAL+h8GPYdv8v/XC5XyW23tvrRXj86Gs+b5507zrsaz1tb83y18RgFxTiulgrVMAo3gkJWSZMgTirFNEzDJE02C2kUVdM4LWWVrBRkYRxVw1qSRbVgu3W3vFawy7aXOXsgOXshOfsgOfshOQcgOQchOYcgOYchOUcgOUchOccgOcchOScgOSchOacgOachOWcgOWchOecgOechORcgORchOZcgOZchOVcgOQNIzhCSswDJGUFyxpCcCSRnEZKzBMmZQnJmkJzlPcrZviNnsLsWthnNZyHmdqP5HMS8z2g+DzF3GM0XIOZOo/kixNxlNK9CzN1G8yWIucdoXoOYe43myxBzn9F8BWLuN5qvQswDRvM1iHnQaL4OMQ8ZzTcg5mGj+SbEPGI034KYR43m2xDzmNF8B2IeN5rvQswTRvM9iHnSaL4PMU8ZzQ8g5mmj+SHEPGM0P4KYZ43mxxDznNH8BGKeN5qfQswLRvMziHnRaH4OMS8ZzS8g5mWj+SXEvGI0v4KYA6P5NcQcGs1vIOaC0fwWYo6M5ncQc2w0v4eYE6N5HWIuGs0bEHPJaK5AzKnR/AFizozmTYi5bDRXIeb9RnMNYj5gNH+EmA8azZ8g5kNG82eI+bDR/AViPmI0f4WYjxrN3yDmY0bzd4j5uNH8A2I+YTT/hJhPGs2/IOZTRvNviPm00fwHYj5jNP+FmPNG8z+jOd94neb/9GlPlPYIac+M9pBoPKjxkcYL6j+rP6n+lfobuv/qfqTrs65X+v3q+6zPN9/yXpYbj9oLp71h2iulvUPNvTTaa7FWP1SLr9p01Wqrdlm1vKptVa2nah9VC6jaONWKqXZKtUSqrVGtiWovVIugtXmtVWvtVmuZWtvTWpfWfrQWorUBzZVr7lhzqev1Q3NtmnvSXIzmJjRW19hVYzmNbdTXV99XfUH1jdRX0L1T9xJdW3Wt0W9P30V9NlvHjzLRIFEAAA==", - "verificationKey": "0000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f" - }, - { - "name": "entrypoint", - "functionType": "secret", - "isInternal": false, - "parameters": [ - { - "name": "payload", - "type": { - "kind": "struct", - "path": "aztec::entrypoint::EntrypointPayload", - "fields": [ - { - "name": "flattened_args_hashes", - "type": { - "kind": "array", - "length": 4, - "type": { - "kind": "field" - } - } - }, - { - "name": "flattened_selectors", - "type": { - "kind": "array", - "length": 4, - "type": { - "kind": "field" - } - } - }, - { - "name": "flattened_targets", - "type": { - "kind": "array", - "length": 4, - "type": { - "kind": "field" - } - } - }, - { - "name": "nonce", - "type": { - "kind": "field" - } - } - ] - }, - "visibility": "public" - } - ], - "returnTypes": [], - "bytecode": "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", - "verificationKey": "0000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f" - }, - { - "name": "is_valid", - "functionType": "secret", - "isInternal": false, - "parameters": [ - { - "name": "message_hash", - "type": { - "kind": "field" - }, - "visibility": "private" - } - ], - "returnTypes": [], - "bytecode": "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", - "verificationKey": "0000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f" - } - ] -} diff --git a/yarn-project/aztec.js/src/account/contract/eip_1271_account_contract.ts b/yarn-project/aztec.js/src/account/contract/auth_witness_account_contract.ts similarity index 70% rename from yarn-project/aztec.js/src/account/contract/eip_1271_account_contract.ts rename to yarn-project/aztec.js/src/account/contract/auth_witness_account_contract.ts index d36467a02aa8..134c58082b84 100644 --- a/yarn-project/aztec.js/src/account/contract/eip_1271_account_contract.ts +++ b/yarn-project/aztec.js/src/account/contract/auth_witness_account_contract.ts @@ -2,8 +2,8 @@ import { Schnorr } from '@aztec/circuits.js/barretenberg'; import { ContractAbi } from '@aztec/foundation/abi'; import { CompleteAddress, NodeInfo, PrivateKey } from '@aztec/types'; -import Eip1271AccountContractAbi from '../../abis/schnorr_eip_1271_account_contract.json' assert { type: 'json' }; -import { Eip1271AccountEntrypoint } from '../entrypoint/eip_1271_account_entrypoint.js'; +import AuthWitnessAccountContractAbi from '../../abis/schnorr_auth_witness_account_contract.json' assert { type: 'json' }; +import { AuthWitnessAccountEntrypoint } from '../entrypoint/auth_witness_account_entrypoint.js'; import { AccountContract } from './index.js'; /** @@ -11,7 +11,7 @@ import { AccountContract } from './index.js'; * the note encryption key, relying on a single private key for both encryption and authentication. * Extended to pull verification data from the oracle instead of passed as arguments. */ -export class Eip1271AccountContract implements AccountContract { +export class AuthWitnessAccountContract implements AccountContract { constructor(private encryptionPrivateKey: PrivateKey) {} public getDeploymentArgs() { @@ -19,7 +19,7 @@ export class Eip1271AccountContract implements AccountContract { } public async getEntrypoint({ address, partialAddress }: CompleteAddress, { chainId, version }: NodeInfo) { - return new Eip1271AccountEntrypoint( + return new AuthWitnessAccountEntrypoint( address, partialAddress, this.encryptionPrivateKey, @@ -30,6 +30,6 @@ export class Eip1271AccountContract implements AccountContract { } public getContractAbi(): ContractAbi { - return Eip1271AccountContractAbi as unknown as ContractAbi; + return AuthWitnessAccountContractAbi as unknown as ContractAbi; } } diff --git a/yarn-project/aztec.js/src/account/contract/index.ts b/yarn-project/aztec.js/src/account/contract/index.ts index d21343d85723..31a661a0f268 100644 --- a/yarn-project/aztec.js/src/account/contract/index.ts +++ b/yarn-project/aztec.js/src/account/contract/index.ts @@ -6,7 +6,7 @@ import { Entrypoint } from '../index.js'; export * from './ecdsa_account_contract.js'; export * from './schnorr_account_contract.js'; export * from './single_key_account_contract.js'; -export * from './eip_1271_account_contract.js'; +export * from './auth_witness_account_contract.js'; // docs:start:account-contract-interface /** diff --git a/yarn-project/aztec.js/src/account/entrypoint/eip_1271_account_entrypoint.ts b/yarn-project/aztec.js/src/account/entrypoint/auth_witness_account_entrypoint.ts similarity index 82% rename from yarn-project/aztec.js/src/account/entrypoint/eip_1271_account_entrypoint.ts rename to yarn-project/aztec.js/src/account/entrypoint/auth_witness_account_entrypoint.ts index f298f5c7c793..c4a6f4915f25 100644 --- a/yarn-project/aztec.js/src/account/entrypoint/eip_1271_account_entrypoint.ts +++ b/yarn-project/aztec.js/src/account/entrypoint/auth_witness_account_entrypoint.ts @@ -3,7 +3,7 @@ import { Signer } from '@aztec/circuits.js/barretenberg'; import { ContractAbi, FunctionAbi, encodeArguments } from '@aztec/foundation/abi'; import { FunctionCall, PackedArguments, TxExecutionRequest } from '@aztec/types'; -import SchnorrEip1271AccountContractAbi from '../../abis/schnorr_eip_1271_account_contract.json' assert { type: 'json' }; +import SchnorrAuthWitnessAccountContractAbi from '../../abis/schnorr_auth_witness_account_contract.json' assert { type: 'json' }; import { generatePublicKey } from '../../index.js'; import { DEFAULT_CHAIN_ID, DEFAULT_VERSION } from '../../utils/defaults.js'; import { buildPayload, hashPayload } from './entrypoint_payload.js'; @@ -15,7 +15,7 @@ import { CreateTxRequestOpts, Entrypoint } from './index.js'; * secure and should not be used in real use cases. * The entrypoint is extended to support signing and creating eip1271-like witnesses. */ -export class Eip1271AccountEntrypoint implements Entrypoint { +export class AuthWitnessAccountEntrypoint implements Entrypoint { constructor( private address: AztecAddress, private partialAddress: PartialAddress, @@ -35,12 +35,12 @@ export class Eip1271AccountEntrypoint implements Entrypoint { } /** - * Creates an eip1271 witness for the given message. In this case, witness is the public key, the signature + * Creates an AuthWitness witness for the given message. In this case, witness is the public key, the signature * and the partial address, to be used for verification. * @param message - The message hash to sign. * @returns [publicKey, signature, partialAddress] as Fr[]. */ - async createEip1271Witness(message: Buffer): Promise { + async createAuthWitness(message: Buffer): Promise { const signature = this.sign(message); const publicKey = await generatePublicKey(this.privateKey); @@ -53,11 +53,11 @@ export class Eip1271AccountEntrypoint implements Entrypoint { } /** - * Returns the transaction request and the eip1271 witness for the given function calls. + * Returns the transaction request and the auth witness for the given function calls. * Returning the witness here as a nonce is generated in the buildPayload action. * @param executions - The function calls to execute * @param opts - The options - * @returns The TxRequest, the eip1271 witness to insert in db and the message signed + * @returns The TxRequest, the auth witness to insert in db and the message signed */ async createTxExecutionRequestWithWitness( executions: FunctionCall[], @@ -65,7 +65,7 @@ export class Eip1271AccountEntrypoint implements Entrypoint { ): Promise<{ /** The transaction request */ txRequest: TxExecutionRequest; - /** The eip1271 witness */ + /** The auth witness */ witness: Fr[]; /** The message signed */ message: Buffer; @@ -76,7 +76,7 @@ export class Eip1271AccountEntrypoint implements Entrypoint { const { payload, packedArguments: callsPackedArguments } = await buildPayload(executions); const message = await hashPayload(payload); - const witness = await this.createEip1271Witness(message); + const witness = await this.createAuthWitness(message); const args = [payload]; const abi = this.getEntrypointAbi(); @@ -97,7 +97,9 @@ export class Eip1271AccountEntrypoint implements Entrypoint { } private getEntrypointAbi(): FunctionAbi { - const abi = (SchnorrEip1271AccountContractAbi as any as ContractAbi).functions.find(f => f.name === 'entrypoint'); + const abi = (SchnorrAuthWitnessAccountContractAbi as any as ContractAbi).functions.find( + f => f.name === 'entrypoint', + ); if (!abi) throw new Error(`Entrypoint abi for account contract not found`); return abi; } diff --git a/yarn-project/aztec.js/src/account/entrypoint/index.ts b/yarn-project/aztec.js/src/account/entrypoint/index.ts index 44e6f5ebd9a5..bd38032d4283 100644 --- a/yarn-project/aztec.js/src/account/entrypoint/index.ts +++ b/yarn-project/aztec.js/src/account/entrypoint/index.ts @@ -6,7 +6,7 @@ export * from './entrypoint_payload.js'; export * from './entrypoint_utils.js'; export * from './single_key_account_entrypoint.js'; export * from './stored_key_account_entrypoint.js'; -export * from './eip_1271_account_entrypoint.js'; +export * from './auth_witness_account_entrypoint.js'; /** Options for creating a tx request out of a set of function calls. */ export type CreateTxRequestOpts = { diff --git a/yarn-project/aztec.js/src/aztec_rpc_client/wallet.ts b/yarn-project/aztec.js/src/aztec_rpc_client/wallet.ts index d107e437e816..4734b0b04574 100644 --- a/yarn-project/aztec.js/src/aztec_rpc_client/wallet.ts +++ b/yarn-project/aztec.js/src/aztec_rpc_client/wallet.ts @@ -15,7 +15,7 @@ import { TxReceipt, } from '@aztec/types'; -import { CreateTxRequestOpts, Eip1271AccountEntrypoint, Entrypoint } from '../account/entrypoint/index.js'; +import { AuthWitnessAccountEntrypoint, CreateTxRequestOpts, Entrypoint } from '../account/entrypoint/index.js'; import { CompleteAddress } from '../index.js'; /** @@ -94,8 +94,8 @@ export abstract class BaseWallet implements Wallet { getSyncStatus(): Promise { return this.rpc.getSyncStatus(); } - addEip1271Witness(messageHash: Fr, witness: Fr[]) { - return this.rpc.addEip1271Witness(messageHash, witness); + addAuthWitness(messageHash: Fr, witness: Fr[]) { + return this.rpc.addAuthWitness(messageHash, witness); } } @@ -112,17 +112,17 @@ export class EntrypointWallet extends BaseWallet { } /** - * A wallet implementation supporting EIP1271. + * A wallet implementation supporting auth witnesses. * This wallet inserts eip1271-like witnesses into the RPC, which are then fetched using an oracle * to provide authentication data to the contract during execution. */ -export class EipEntrypointWallet extends BaseWallet { - constructor(rpc: AztecRPC, protected accountImpl: Eip1271AccountEntrypoint) { +export class AuthWitnessEntrypointWallet extends BaseWallet { + constructor(rpc: AztecRPC, protected accountImpl: AuthWitnessAccountEntrypoint) { super(rpc); } /** - * Create a transaction request and add the eip1271 witness to the RPC. + * Create a transaction request and add the auth witness to the RPC. * Note: When used in simulations, the witness that is inserted could be used later by attacker with * access to the RPC. * Meaning that if you were to use someone elses rpc with db you could send these transactions. @@ -140,7 +140,7 @@ export class EipEntrypointWallet extends BaseWallet { executions, opts, ); - await this.rpc.addEip1271Witness(Fr.fromBuffer(message), witness); + await this.rpc.addAuthWitness(Fr.fromBuffer(message), witness); return txRequest; } @@ -154,9 +154,9 @@ export class EipEntrypointWallet extends BaseWallet { * approvals . * @param messageHash - The message hash to sign */ - async signAndAddEip1271Witness(messageHash: Buffer): Promise { - const witness = await this.accountImpl.createEip1271Witness(messageHash); - await this.rpc.addEip1271Witness(Fr.fromBuffer(messageHash), witness); + async signAndAddAuthWitness(messageHash: Buffer): Promise { + const witness = await this.accountImpl.createAuthWitness(messageHash); + await this.rpc.addAuthWitness(Fr.fromBuffer(messageHash), witness); return Promise.resolve(); } } diff --git a/yarn-project/end-to-end/src/e2e_account_contracts.test.ts b/yarn-project/end-to-end/src/e2e_account_contracts.test.ts index 34cdf4619a78..66ec2a087151 100644 --- a/yarn-project/end-to-end/src/e2e_account_contracts.test.ts +++ b/yarn-project/end-to-end/src/e2e_account_contracts.test.ts @@ -2,11 +2,11 @@ import { AztecRPCServer } from '@aztec/aztec-rpc'; import { Account, AccountContract, + AuthWitnessAccountContract, + AuthWitnessAccountEntrypoint, + AuthWitnessEntrypointWallet, AztecRPC, EcdsaAccountContract, - Eip1271AccountContract, - Eip1271AccountEntrypoint, - EipEntrypointWallet, Fr, SchnorrAccountContract, SingleKeyAccountContract, @@ -115,7 +115,7 @@ describe('e2e_account_contracts', () => { describe('eip single-key account', () => { itShouldBehaveLikeAnAccountContract( - (encryptionKey: PrivateKey) => new Eip1271AccountContract(encryptionKey), + (encryptionKey: PrivateKey) => new AuthWitnessAccountContract(encryptionKey), async ( rpc: AztecRPC, encryptionPrivateKey: PrivateKey, @@ -127,8 +127,8 @@ describe('e2e_account_contracts', () => { const tx = await account.deploy(); await tx.wait(); } - const entryPoint = (await account.getEntrypoint()) as unknown as Eip1271AccountEntrypoint; - const wallet = new EipEntrypointWallet(rpc, entryPoint); + const entryPoint = (await account.getEntrypoint()) as unknown as AuthWitnessAccountEntrypoint; + const wallet = new AuthWitnessEntrypointWallet(rpc, entryPoint); return { account, wallet }; }, ); 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 b3b3aa73b450..6be903cef13c 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 @@ -2,11 +2,11 @@ import { AztecNodeService } from '@aztec/aztec-node'; import { AztecRPCServer } from '@aztec/aztec-rpc'; import { Account, + AuthWitnessAccountContract, + AuthWitnessAccountEntrypoint, + AuthWitnessEntrypointWallet, AztecAddress, CheatCodes, - Eip1271AccountContract, - Eip1271AccountEntrypoint, - EipEntrypointWallet, Fr, computeMessageSecretHash, } from '@aztec/aztec.js'; @@ -21,7 +21,7 @@ import { setup } from './fixtures/utils.js'; describe('e2e_lending_contract', () => { let aztecNode: AztecNodeService | undefined; let aztecRpcServer: AztecRPC; - let wallet: EipEntrypointWallet; + let wallet: AuthWitnessEntrypointWallet; let accounts: CompleteAddress[]; let logger: DebugLogger; @@ -83,13 +83,13 @@ describe('e2e_lending_contract', () => { ({ aztecNode, aztecRpcServer, logger, cheatCodes: cc } = await setup()); const privateKey = PrivateKey.random(); - const account = new Account(aztecRpcServer, privateKey, new Eip1271AccountContract(privateKey)); - const entryPoint = (await account.getEntrypoint()) as unknown as Eip1271AccountEntrypoint; + const account = new Account(aztecRpcServer, privateKey, new AuthWitnessAccountContract(privateKey)); + const entryPoint = (await account.getEntrypoint()) as unknown as AuthWitnessAccountEntrypoint; const deployTx = await account.deploy(); await deployTx.wait({ interval: 0.1 }); - wallet = new EipEntrypointWallet(aztecRpcServer, entryPoint); + wallet = new AuthWitnessEntrypointWallet(aztecRpcServer, entryPoint); accounts = await wallet.getAccounts(); }, 100_000); @@ -285,7 +285,7 @@ describe('e2e_lending_contract', () => { } it('Full lending run-through', async () => { - // Gotta use the actual eip1271 account here and not the standard wallet. + // Gotta use the actual auth witness account here and not the standard wallet. const recipientFull = accounts[1]; const recipient = recipientFull.address; @@ -364,7 +364,7 @@ describe('e2e_lending_contract', () => { lendingContract.address.toField(), new Fr(depositAmount), ]); - await wallet.signAndAddEip1271Witness(messageHash); + await wallet.signAndAddAuthWitness(messageHash); await lendingSim.progressTime(10); lendingSim.deposit(await lendingAccount.key(), depositAmount); @@ -397,7 +397,7 @@ describe('e2e_lending_contract', () => { lendingContract.address.toField(), new Fr(depositAmount), ]); - await wallet.signAndAddEip1271Witness(messageHash); + await wallet.signAndAddAuthWitness(messageHash); await lendingSim.progressTime(10); lendingSim.deposit(recipient.toField(), depositAmount); @@ -510,7 +510,7 @@ describe('e2e_lending_contract', () => { lendingContract.address.toField(), new Fr(repayAmount), ]); - await wallet.signAndAddEip1271Witness(messageHash); + await wallet.signAndAddAuthWitness(messageHash); await lendingSim.progressTime(10); lendingSim.repay(await lendingAccount.key(), await lendingAccount.key(), repayAmount); @@ -545,7 +545,7 @@ describe('e2e_lending_contract', () => { lendingContract.address.toField(), new Fr(repayAmount), ]); - await wallet.signAndAddEip1271Witness(messageHash); + await wallet.signAndAddAuthWitness(messageHash); await lendingSim.progressTime(10); lendingSim.repay(await lendingAccount.key(), lendingAccount.address.toField(), repayAmount); diff --git a/yarn-project/noir-contracts/src/contracts/schnorr_eip_1271_account_contract/Nargo.toml b/yarn-project/noir-contracts/src/contracts/schnorr_auth_witness_account_contract/Nargo.toml similarity index 74% rename from yarn-project/noir-contracts/src/contracts/schnorr_eip_1271_account_contract/Nargo.toml rename to yarn-project/noir-contracts/src/contracts/schnorr_auth_witness_account_contract/Nargo.toml index bde5d1ec684a..922b93267d0f 100644 --- a/yarn-project/noir-contracts/src/contracts/schnorr_eip_1271_account_contract/Nargo.toml +++ b/yarn-project/noir-contracts/src/contracts/schnorr_auth_witness_account_contract/Nargo.toml @@ -1,5 +1,5 @@ [package] -name = "schnorr_eip_1271_account_contract" +name = "schnorr_auth_witness_account_contract" authors = [""] compiler_version = "0.1" type = "contract" diff --git a/yarn-project/noir-contracts/src/contracts/schnorr_eip_1271_account_contract/src/eip_oracle.nr b/yarn-project/noir-contracts/src/contracts/schnorr_auth_witness_account_contract/src/auth_oracle.nr similarity index 59% rename from yarn-project/noir-contracts/src/contracts/schnorr_eip_1271_account_contract/src/eip_oracle.nr rename to yarn-project/noir-contracts/src/contracts/schnorr_auth_witness_account_contract/src/auth_oracle.nr index 9f9efed0d910..bff7d071b23d 100644 --- a/yarn-project/noir-contracts/src/contracts/schnorr_eip_1271_account_contract/src/eip_oracle.nr +++ b/yarn-project/noir-contracts/src/contracts/schnorr_auth_witness_account_contract/src/auth_oracle.nr @@ -1,15 +1,15 @@ use dep::aztec::types::point::Point; -#[oracle(getEip1271Witness)] -fn get_eip_1271_witness_oracle(_message_hash: Field) -> [Field; 67] {} +#[oracle(getAuthWitness)] +fn get_auth_witness_oracle(_message_hash: Field) -> [Field; 67] {} -struct Eip1271Witness { +struct AuthWitness { owner: Point, signature: [u8; 64], partial_address: Field, } -impl Eip1271Witness { +impl AuthWitness { fn deserialize(values: [Field; 67]) -> Self { let mut signature = [0; 64]; for i in 0..64 { @@ -23,6 +23,6 @@ impl Eip1271Witness { } } -unconstrained fn get_eip_1271_witness(message_hash: Field) -> Eip1271Witness { - Eip1271Witness::deserialize(get_eip_1271_witness_oracle(message_hash)) +unconstrained fn get_auth_witness(message_hash: Field) -> AuthWitness { + AuthWitness::deserialize(get_auth_witness_oracle(message_hash)) } \ No newline at end of file diff --git a/yarn-project/noir-contracts/src/contracts/schnorr_eip_1271_account_contract/src/main.nr b/yarn-project/noir-contracts/src/contracts/schnorr_auth_witness_account_contract/src/main.nr similarity index 64% rename from yarn-project/noir-contracts/src/contracts/schnorr_eip_1271_account_contract/src/main.nr rename to yarn-project/noir-contracts/src/contracts/schnorr_auth_witness_account_contract/src/main.nr index 724f399187ed..9da0f00b1e3c 100644 --- a/yarn-project/noir-contracts/src/contracts/schnorr_eip_1271_account_contract/src/main.nr +++ b/yarn-project/noir-contracts/src/contracts/schnorr_auth_witness_account_contract/src/main.nr @@ -1,12 +1,12 @@ mod util; -mod eip_oracle; +mod auth_oracle; -contract SchnorrEip1271Account { +contract SchnorrAuthWitnessAccount { use dep::std::hash::pedersen_with_separator; use dep::aztec::entrypoint::EntrypointPayload; use dep::aztec::constants_gen::GENERATOR_INDEX__SIGNATURE_PAYLOAD; use crate::util::recover_address; - use crate::eip_oracle::get_eip_1271_witness; + use crate::auth_oracle::get_auth_witness; #[aztec(private)] fn constructor() {} @@ -19,8 +19,8 @@ contract SchnorrEip1271Account { payload.serialize(), GENERATOR_INDEX__SIGNATURE_PAYLOAD )[0]; - let eip_witness = get_eip_1271_witness(message_hash); - assert(recover_address(message_hash, eip_witness) == context.this_address()); + let witness = get_auth_witness(message_hash); + assert(recover_address(message_hash, witness) == context.this_address()); payload.execute_calls(&mut context); } @@ -29,8 +29,8 @@ contract SchnorrEip1271Account { fn is_valid( message_hash: Field ) -> Field { - let eip_witness = get_eip_1271_witness(message_hash); - assert(recover_address(message_hash, eip_witness) == context.this_address()); + let witness = get_auth_witness(message_hash); + assert(recover_address(message_hash, witness) == context.this_address()); 0x29d25ca9 } } \ No newline at end of file diff --git a/yarn-project/noir-contracts/src/contracts/schnorr_eip_1271_account_contract/src/util.nr b/yarn-project/noir-contracts/src/contracts/schnorr_auth_witness_account_contract/src/util.nr similarity index 89% rename from yarn-project/noir-contracts/src/contracts/schnorr_eip_1271_account_contract/src/util.nr rename to yarn-project/noir-contracts/src/contracts/schnorr_auth_witness_account_contract/src/util.nr index 25081a53c52a..7445008aa2b7 100644 --- a/yarn-project/noir-contracts/src/contracts/schnorr_eip_1271_account_contract/src/util.nr +++ b/yarn-project/noir-contracts/src/contracts/schnorr_auth_witness_account_contract/src/util.nr @@ -1,12 +1,12 @@ -mod eip_oracle; +mod auth_oracle; use dep::std::{schnorr::verify_signature, hash::pedersen_with_separator}; use dep::aztec::constants_gen::GENERATOR_INDEX__CONTRACT_ADDRESS; -use crate::eip_oracle::{Eip1271Witness}; +use crate::auth_oracle::{AuthWitness}; fn recover_address( message_hash: Field, - witness: Eip1271Witness, + witness: AuthWitness, ) -> Field { let message_bytes_slice = message_hash.to_be_bytes(32); let mut message_bytes: [u8; 32] = [0; 32]; diff --git a/yarn-project/noir-contracts/src/scripts/copy_output.ts b/yarn-project/noir-contracts/src/scripts/copy_output.ts index 392fc94165b2..69846b59908a 100644 --- a/yarn-project/noir-contracts/src/scripts/copy_output.ts +++ b/yarn-project/noir-contracts/src/scripts/copy_output.ts @@ -20,7 +20,7 @@ const PROJECT_CONTRACTS = [ { name: 'SchnorrSingleKeyAccount', target: '../aztec.js/src/abis/', exclude: [] }, { name: 'SchnorrAccount', target: '../aztec.js/src/abis/', exclude: [] }, { name: 'EcdsaAccount', target: '../aztec.js/src/abis/', exclude: [] }, - { name: 'SchnorrEip1271Account', target: '../aztec.js/src/abis/', exclude: [] }, + { name: 'SchnorrAuthWitnessAccount', target: '../aztec.js/src/abis/', exclude: [] }, ]; const INTERFACE_CONTRACTS = ['private_token', 'private_token_airdrop', 'test']; diff --git a/yarn-project/types/src/interfaces/aztec_rpc.ts b/yarn-project/types/src/interfaces/aztec_rpc.ts index 0db76dc79f0c..b67ba94f11c8 100644 --- a/yarn-project/types/src/interfaces/aztec_rpc.ts +++ b/yarn-project/types/src/interfaces/aztec_rpc.ts @@ -73,7 +73,7 @@ export interface AztecRPC { * @param messageHash - The message hash to insert witness at * @param witness - The witness to insert */ - addEip1271Witness(messageHash: Fr, witness: Fr[]): Promise; + addAuthWitness(messageHash: Fr, witness: Fr[]): Promise; /** * Registers an account in the Aztec RPC server.