From cb25bc9b679e7d559357a7ed9be5c8cf4ebc69d3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Bene=C5=A1?= Date: Fri, 15 Sep 2023 04:51:08 -0400 Subject: [PATCH] feat: constraining note owner (#1896) Fixes #1817 --- .../src/client/client_execution_context.ts | 2 +- .../src/client/private_execution.test.ts | 59 ++++++++----------- .../acir-simulator/src/client/simulator.ts | 4 +- .../aztec/src/oracle/get_secret_key.nr | 34 +++++++---- yarn-project/aztec-nr/aztec/src/types.nr | 1 - .../aztec/src/types/grumpkin_scalar.nr | 31 ---------- .../aztec-nr/value-note/src/value_note.nr | 2 +- .../src/abis/ecdsa_account_contract.json | 2 +- .../src/abis/schnorr_account_contract.json | 2 +- .../src/ecdsa_public_key_note.nr | 3 +- .../escrow_contract/src/address_note.nr | 5 +- .../src/address_note.nr | 3 +- .../src/public_key_note.nr | 5 +- 13 files changed, 57 insertions(+), 96 deletions(-) delete mode 100644 yarn-project/aztec-nr/aztec/src/types/grumpkin_scalar.nr diff --git a/yarn-project/acir-simulator/src/client/client_execution_context.ts b/yarn-project/acir-simulator/src/client/client_execution_context.ts index 5dc9ff7d549..e185fd4425e 100644 --- a/yarn-project/acir-simulator/src/client/client_execution_context.ts +++ b/yarn-project/acir-simulator/src/client/client_execution_context.ts @@ -111,7 +111,7 @@ export class ClientTxExecutionContext { contractAddress, new Point(fromACVMField(ownerX), fromACVMField(ownerY)), ); - return [toACVMField(secretKey.high), toACVMField(secretKey.low)]; + return [toACVMField(secretKey.low), toACVMField(secretKey.high)]; } /** diff --git a/yarn-project/acir-simulator/src/client/private_execution.test.ts b/yarn-project/acir-simulator/src/client/private_execution.test.ts index 3ba37e9f200..f2f2e71777d 100644 --- a/yarn-project/acir-simulator/src/client/private_execution.test.ts +++ b/yarn-project/acir-simulator/src/client/private_execution.test.ts @@ -10,6 +10,7 @@ import { MAX_NEW_COMMITMENTS_PER_CALL, PRIVATE_DATA_TREE_HEIGHT, PublicCallRequest, + PublicKey, TxContext, } from '@aztec/circuits.js'; import { @@ -66,6 +67,11 @@ describe('Private Execution test suite', () => { const defaultContractAddress = AztecAddress.random(); const ownerPk = GrumpkinScalar.fromString('2dcc5485a58316776299be08c78fa3788a1a7961ae30dc747fb1be17692a8d32'); + const recipientPk = GrumpkinScalar.fromString('0c9ed344548e8f9ba8aa3c9f8651eaa2853130f6c1e9c050ccf198f7ea18a7ec'); + let owner: AztecAddress; + let recipient: AztecAddress; + let ownerCompleteAddress: CompleteAddress; + let recipientCompleteAddress: CompleteAddress; const treeHeights: { [name: string]: number } = { privateData: PRIVATE_DATA_TREE_HEIGHT, @@ -142,11 +148,21 @@ describe('Private Execution test suite', () => { beforeAll(async () => { circuitsWasm = await CircuitsWasm.get(); logger = createDebugLogger('aztec:test:private_execution'); + + ownerCompleteAddress = await CompleteAddress.fromPrivateKeyAndPartialAddress(ownerPk, Fr.random()); + recipientCompleteAddress = await CompleteAddress.fromPrivateKeyAndPartialAddress(recipientPk, Fr.random()); + + owner = ownerCompleteAddress.address; + recipient = recipientCompleteAddress.address; }); beforeEach(() => { oracle = mock(); - oracle.getSecretKey.mockResolvedValue(ownerPk); + oracle.getSecretKey.mockImplementation((contractAddress: AztecAddress, pubKey: PublicKey) => { + if (pubKey.equals(ownerCompleteAddress.publicKey)) return Promise.resolve(ownerPk); + if (pubKey.equals(recipientCompleteAddress.publicKey)) return Promise.resolve(recipientPk); + throw new Error(`Unknown address ${pubKey}`); + }); oracle.getHistoricBlockData.mockResolvedValue(blockData); acirSimulator = new AcirSimulator(oracle); @@ -167,10 +183,7 @@ describe('Private Execution test suite', () => { describe('private token airdrop contract', () => { const contractAddress = defaultContractAddress; - const recipientPk = GrumpkinScalar.fromString('0c9ed344548e8f9ba8aa3c9f8651eaa2853130f6c1e9c050ccf198f7ea18a7ec'); const mockFirstNullifier = new Fr(1111); - let owner: AztecAddress; - let recipient: AztecAddress; let currentNoteIndex = 0n; const buildNote = (amount: bigint, owner: AztecAddress, storageSlot = Fr.random()) => { @@ -197,13 +210,7 @@ describe('Private Execution test suite', () => { }; }; - beforeEach(async () => { - const ownerCompleteAddress = await CompleteAddress.fromPrivateKeyAndPartialAddress(ownerPk, Fr.random()); - const recipientCompleteAddress = await CompleteAddress.fromPrivateKeyAndPartialAddress(recipientPk, Fr.random()); - - owner = ownerCompleteAddress.address; - recipient = recipientCompleteAddress.address; - + beforeEach(() => { oracle.getCompleteAddress.mockImplementation((address: AztecAddress) => { if (address.equals(owner)) return Promise.resolve(ownerCompleteAddress); if (address.equals(recipient)) return Promise.resolve(recipientCompleteAddress); @@ -236,8 +243,8 @@ describe('Private Execution test suite', () => { const innerNullifier = Fr.fromBuffer( pedersenPlookupCommitInputs(circuitsWasm, [ uniqueSiloedNoteHash.toBuffer(), - ownerPk.high.toBuffer(), ownerPk.low.toBuffer(), + ownerPk.high.toBuffer(), ]), ); @@ -395,10 +402,7 @@ describe('Private Execution test suite', () => { describe('private token contract', () => { const contractAddress = defaultContractAddress; - const recipientPk = GrumpkinScalar.fromString('0c9ed344548e8f9ba8aa3c9f8651eaa2853130f6c1e9c050ccf198f7ea18a7ec'); const mockFirstNullifier = new Fr(1111); - let owner: AztecAddress; - let recipient: AztecAddress; let currentNoteIndex = 0n; const buildNote = (amount: bigint, owner: AztecAddress, storageSlot = Fr.random()) => { @@ -425,13 +429,7 @@ describe('Private Execution test suite', () => { }; }; - beforeEach(async () => { - const ownerCompleteAddress = await CompleteAddress.fromPrivateKeyAndPartialAddress(ownerPk, Fr.random()); - const recipientCompleteAddress = await CompleteAddress.fromPrivateKeyAndPartialAddress(recipientPk, Fr.random()); - - owner = ownerCompleteAddress.address; - recipient = recipientCompleteAddress.address; - + beforeEach(() => { oracle.getCompleteAddress.mockImplementation((address: AztecAddress) => { if (address.equals(owner)) return Promise.resolve(ownerCompleteAddress); if (address.equals(recipient)) return Promise.resolve(recipientCompleteAddress); @@ -464,8 +462,8 @@ describe('Private Execution test suite', () => { const innerNullifier = Fr.fromBuffer( pedersenPlookupCommitInputs(circuitsWasm, [ uniqueSiloedNoteHash.toBuffer(), - ownerPk.high.toBuffer(), ownerPk.low.toBuffer(), + ownerPk.high.toBuffer(), ]), ); @@ -681,13 +679,8 @@ describe('Private Execution test suite', () => { describe('consuming messages', () => { const contractAddress = defaultContractAddress; - const recipientPk = GrumpkinScalar.fromString('0c9ed344548e8f9ba8aa3c9f8651eaa2853130f6c1e9c050ccf198f7ea18a7ec'); - let recipient: AztecAddress; - - beforeEach(async () => { - const recipientCompleteAddress = await CompleteAddress.fromPrivateKeyAndPartialAddress(recipientPk, Fr.random()); - recipient = recipientCompleteAddress.address; + beforeEach(() => { oracle.getCompleteAddress.mockImplementation((address: AztecAddress) => { if (address.equals(recipient)) return Promise.resolve(recipientCompleteAddress); throw new Error(`Unknown address ${address}`); @@ -809,13 +802,7 @@ describe('Private Execution test suite', () => { }); describe('pending commitments contract', () => { - let owner: AztecAddress; - - beforeEach(async () => { - const ownerCompleteAddress = await CompleteAddress.fromPrivateKeyAndPartialAddress(ownerPk, Fr.random()); - - owner = ownerCompleteAddress.address; - + beforeEach(() => { oracle.getCompleteAddress.mockImplementation((address: AztecAddress) => { if (address.equals(owner)) return Promise.resolve(ownerCompleteAddress); throw new Error(`Unknown address ${address}`); diff --git a/yarn-project/acir-simulator/src/client/simulator.ts b/yarn-project/acir-simulator/src/client/simulator.ts index 4326437987e..2f98e90e41e 100644 --- a/yarn-project/acir-simulator/src/client/simulator.ts +++ b/yarn-project/acir-simulator/src/client/simulator.ts @@ -68,7 +68,9 @@ export class AcirSimulator { } if (request.origin !== contractAddress) { - this.log.warn('Request origin does not match contract address in simulation'); + this.log.warn( + `Request origin does not match contract address in simulation. Request origin: ${request.origin}, contract address: ${contractAddress}`, + ); } const curve = await Grumpkin.new(); diff --git a/yarn-project/aztec-nr/aztec/src/oracle/get_secret_key.nr b/yarn-project/aztec-nr/aztec/src/oracle/get_secret_key.nr index 87f36f61920..2ffa3ece98a 100644 --- a/yarn-project/aztec-nr/aztec/src/oracle/get_secret_key.nr +++ b/yarn-project/aztec-nr/aztec/src/oracle/get_secret_key.nr @@ -1,17 +1,25 @@ -use crate::types::{ - point::Point, - grumpkin_scalar::{ - GRUMPKIN_SCALAR_SERIALISED_LEN, - GrumpkinScalar, - deserialise_grumpkin_scalar, - }, -}; use crate::oracle::get_public_key::get_public_key; +use crate::types::point::Point; #[oracle(getSecretKey)] -fn get_secret_key_oracle(_owner: Point) -> [Field; GRUMPKIN_SCALAR_SERIALISED_LEN] {} +fn get_secret_key_oracle( + _owner: Point, +) -> [Field; dep::std::grumpkin_scalar::GRUMPKIN_SCALAR_SERIALIZED_LEN] { +} -unconstrained fn get_secret_key(owner: Field) -> GrumpkinScalar { - let owner_nullifying_public_key = get_public_key(owner); - deserialise_grumpkin_scalar(get_secret_key_oracle(owner_nullifying_public_key)) -} \ No newline at end of file +unconstrained fn get_secret_key_internal(owner_public_key: Point) -> dep::std::grumpkin_scalar::GrumpkinScalar { + dep::std::grumpkin_scalar::deserialize_grumpkin_scalar(get_secret_key_oracle(owner_public_key)) +} + +fn get_secret_key(owner: Field) -> dep::std::grumpkin_scalar::GrumpkinScalar { + let owner_public_key = get_public_key(owner); + let secret = get_secret_key_internal(owner_public_key); + + // Constrain the owner - Nullifier secret key is currently just the encryption private key so we can constrain + // the owner by deriving the public key from the secret key and checking the result. + let computed_public_key = dep::std::grumpkin_scalar_mul::grumpkin_fixed_base(secret); + assert(owner_public_key.x == computed_public_key[0]); + assert(owner_public_key.y == computed_public_key[1]); + + secret +} diff --git a/yarn-project/aztec-nr/aztec/src/types.nr b/yarn-project/aztec-nr/aztec/src/types.nr index 8c3255571f0..81b7155d402 100644 --- a/yarn-project/aztec-nr/aztec/src/types.nr +++ b/yarn-project/aztec-nr/aztec/src/types.nr @@ -1,4 +1,3 @@ -mod grumpkin_scalar; mod point; mod vec; // This can/should be moved out into an official noir library mod type_serialisation; \ No newline at end of file diff --git a/yarn-project/aztec-nr/aztec/src/types/grumpkin_scalar.nr b/yarn-project/aztec-nr/aztec/src/types/grumpkin_scalar.nr deleted file mode 100644 index 00b0041b8e3..00000000000 --- a/yarn-project/aztec-nr/aztec/src/types/grumpkin_scalar.nr +++ /dev/null @@ -1,31 +0,0 @@ -use crate::types::type_serialisation::TypeSerialisationInterface; - -struct GrumpkinScalar { - high: Field, - low: Field, -} - -impl GrumpkinScalar { - fn new(high: Field, low: Field) -> Self { - // TODO: max value check - GrumpkinScalar { high, low } - } -} - -global GRUMPKIN_SCALAR_SERIALISED_LEN: Field = 2; - -fn deserialise_grumpkin_scalar(fields: [Field; GRUMPKIN_SCALAR_SERIALISED_LEN]) -> GrumpkinScalar { - GrumpkinScalar { - high: fields[0], - low: fields[1], - } -} - -fn serialise_grumpkin_scalar(scalar: GrumpkinScalar) -> [Field; GRUMPKIN_SCALAR_SERIALISED_LEN] { - [scalar.high, scalar.low] -} - -global GrumpkinScalarSerialisationMethods = TypeSerialisationInterface { - deserialise: deserialise_grumpkin_scalar, - serialise: serialise_grumpkin_scalar, -}; \ No newline at end of file diff --git a/yarn-project/aztec-nr/value-note/src/value_note.nr b/yarn-project/aztec-nr/value-note/src/value_note.nr index 8f722d901a6..2f9ed483068 100644 --- a/yarn-project/aztec-nr/value-note/src/value_note.nr +++ b/yarn-project/aztec-nr/value-note/src/value_note.nr @@ -61,8 +61,8 @@ impl ValueNote { // TODO(#1205) Should use a non-zero generator index. dep::std::hash::pedersen([ note_hash_for_nullify, - secret.high, secret.low, + secret.high, ])[0] } diff --git a/yarn-project/aztec.js/src/abis/ecdsa_account_contract.json b/yarn-project/aztec.js/src/abis/ecdsa_account_contract.json index 75d64f6bbd5..f39c40c43c8 100644 --- a/yarn-project/aztec.js/src/abis/ecdsa_account_contract.json +++ b/yarn-project/aztec.js/src/abis/ecdsa_account_contract.json @@ -48,7 +48,7 @@ } } ], - "bytecode": "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", + "bytecode": "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", "verificationKey": "0000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f" }, { diff --git a/yarn-project/aztec.js/src/abis/schnorr_account_contract.json b/yarn-project/aztec.js/src/abis/schnorr_account_contract.json index c62a7310ed2..22da9f00c00 100644 --- a/yarn-project/aztec.js/src/abis/schnorr_account_contract.json +++ b/yarn-project/aztec.js/src/abis/schnorr_account_contract.json @@ -48,7 +48,7 @@ } } ], - "bytecode": "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", + "bytecode": "H4sIAAAAAAAA/+3dV1cbSRYH8Fam1YBNzsEYMMkgIbIJMskkEx3A2cZMHs/Yxrtnn+aT7NN+pH3b9/0A+7aP46rpa/4u5B5xpnr055ypczjqINX93VvdpQCoPcdxIs5vLfbxJ+6cb7I/799m/ljLRuz1lQnTGb0kzphFZ8Q/DsL0xkOoq21j4hIYk5bHXYwyB6Q+/pR9/HE//qSds5ZK/nartif8bXLMuPD4KGyLGTVwYb+0JCzn7eSVS9qveybh+x24xXwr/VxSduNmsUZx5/NxkjGQ/RVwq7aV2bWMus7n4+VAnc0xdCC+ekzariXnGuPwe5Y0WDy7lozqs9xyn6qPCvBLrh7cyv5yyK3CrkM/b3vO5zWV9QqI+1f+VuNeqvxd2JYsscUDgxueJec5f85xgLWVvtVzwBDErLScm+qzynIeauyuOGftF8irCnIJI+5VI26lETdijOEvYJXHxuA+/06cjcOYvy1t5CG3YcwLNc5Zk5jl4Kj2l2vAEcbrktoCjhQ4JH4tOOrsOkZVH/UFHHXgkPj14Giw7HANh2pBr0cawNIUgqXxApYmsLSEYGm+gKUFLG0hWFovYGkDS0cIlvYLWDrAci0ES+cFLBJfPa7LX8Zz67pdn37e7zIssi6xPDBUh2jxCsTGOjQS1EEMNSWsQzNBHcRQW8I6tBLUQQzREtahnaAOYoiVsA6dBHUQQ/xPrkMIcXKukbNqQc9daOm2a9GvzXsglri6ofayH5+jeizXPgIxpV9ZR1+x1ppLZK0tsTWM40r12Wu3T/2aD2uqWtB50wv53bBryan3rup9o4yr9G/WFp+/wnhf3Q/5Skx8X93nL/eDY8CuQ48LOlQLGpcBsAzateiaDEEscUkcD/bjc8mQXYc+7waN/GUdfcVa+0psDWuOsJyLPhYxF9WCjkXM76Zli8wRMq7Sv9RRnGHPESOQr8TEOWLYXx4BR8ZyLVzDoVrQuGTAkrVr0V2PQixxSRwP9uPYjNp16PMua+Qv6+gr1jpcYmsIYzWm+szZ7VMfi1hT1YKOxRzkN2bZInOEjKv0b9Y27DliAvKVmDhHjPvLE+CYtFwL13CoFjQuk2CZsmvRNZmGWOKSOB7sx/fm03Yd+rybMvKXdfQVax0vsTWEsdK/+5ux26c+FrGmqgUdizOQ3y3LFpkjZFylf7O2Yc8Rc5CvxMQ5YtZfngPHvF2H/uwEHaoFjcs8WBbsWjJmLHFJHA/242cnebsOfd4tGPmbuV7EWnOJrLUltob1vshyLno+w1xUCzpvML/bdi2fPjuRcZX+pY7iDHs+W4J8JSbOZ4v+8hI4lu069LigQ7WgcVkGy4pdi67JKsQSl8TxYD9+drJq16HPuxUjf1lHX7HWxRJbw5ojLOeij0XMRbWgYxHzu2PZInOEjKv0L3UUZ9hzxDrkKzFxjljzl9fBsWG5Fq7hUC1oXDbAsmnXomuyBbHEJXE82I9js2XXoc+7TSN/WUdfsda1ElvD+uzEci76WMRcVAs6FjG/u5YtMkfIuEr/Ukdxhj1H7EC+EhPniG1/eQccu5Zr4RoO1YLGZRcse3Ytuib7EEtcEseD/fjZyb5dhz7v9oz8ZR19xVq3S2wN67MTy7noYxFzUS3oWMT8DixbZI6QcZX+pY7iDHuOuA/5SkycI+75y3I//J8BtN23a8sGjUshS4zIEieyJIgsSSJLishSRmRxiSxpIotHZCknslQQWSqJLFeILFeJLFVElmoiSw2RpZbIUkdkqSeyNBBZGoksTUSWZiJLC5GllcjSRmRpJ7J0EFk6iSzXiCxdRJbrRJZuIksPkaWXyHKDyNJHZOknsgwQWQaJLENElptElmEiywiRJUNkyRJZRoksOSLLGJFlnMgyQWSZJLJMEVmmiSwzRJZbRJZZIssckWWeyLJAZMkTWW4TWRaJLEtElmUiywqRZZXIcofIskZkWSeybBBZNoksW0SWu0SWbSLLDpFll8iyR2TZJ7IcEFnuEVkiJba4zvm/kXdhfy1sixqPVX97/L/E2f4H/vZogX4eOOfvh7k/DCF3jJOHdYmVBsMDAss9IssBkWWfyLJHZNklsuwQWbaJLHeJLFtElk0iywaRZZ3IskZkuUNkWSWyrBBZloksS0SWRSLLbSJLnsiyQGSZJ7LMEVlmiSy3iCwzRJZpIssUkWWSyDJBZBknsowRWXJEllEiS5bIkiGyjBBZhoksN4ksQ0SWQSLLAJGln8jSR2S5QWTpJbL0EFm6iSzXiSxdRJZrRJZOIksHkaWdyNJGZGklsrQQWZqJLE1ElkYiSwORpZ7IUkdkqSWy1BBZqoksVUSWq0SWK0SWSiJLBZGlnMjiEVnSRBaXyFJGZEkRWZJElgSRJU5kiRFZogUsYXzX+aFz1uTvzvG7zsV0CI6U5ZqoPo4KOFLgkPhH4Kiz69C/sntUwFEHDon/CByP7Tr0dfPQoVrEWM/D8mOwPLFr0cfIU4glLonjwf6H4Hhq16HPmydG/rKOvmKth5fIelRiawjH1Veqz2d2+9TXssCaqhZ03jyD/J7btXy6bp6Mq/Rv1jYKhjDm95eQr8TE+f2Fv4z3k+U47JfPGWKwf81/wlTvV750DYyXdnMK/P8sifWla2CU2hInsiSILEkiS4rIUkZkcYksaSKLR2QpJ7JUEFkqiSxXiCxXiSxVRJZqIksNkaWWyFJHZKknsjQQWRqJLE1ElmYiSwuRpZXI0kZkaSeydBBZOoks14gsXUSW60SWbiJLD5Gll8hyg8jSR2TpJ7IMEFkGiSxDRJabRJZhIssIkSVDZMkSWUaJLDkiyxiRZZzIMkFkmSSyTBFZpoksM0SWW0SWWSLLHJFlnsiyQGTJE1luE1kWiSxLRJZlIssKkWWVyHKHyLJGZFknsmwQWTaJLFtElrtElm0iyw6RZZfIskdk2SeyHBBZ7hFZ7hNZHhBZHhJZDoksR0SWR0SWx0SWJ0SWp0SWZ0SW50SWF0SWSIktX7omk+x/CNte+cuHsC1aoD/53yG5v/qfmf/DtZuO/e1ReMxrfzlWIN5xAdfrAo/FWspj8v5t5o81XUuMk4d1iYXXeHpNYHlBZHlOZHlGZHlKZHlCZHlMZHlEZDkishwSWR4SWR4QWe4TWe4RWQ6ILPtElj0iyy6RZYfIsk1kuUtk2SKybBJZNogs60SWNSLLHSLLKpFlhciyTGRZIrIsElluE1nyRJYFIss8kWWOyDJLZLlFZJkhskwTWaaILJNElgkiyziRZYzIkiOyjBJZskSWDJFlhMgyTGS5SWQZIrIMElkGiCz9RJY+IssNIksvkaWHyNJNZLlOZOkislwjsnQSWTqILO1EljYiSyuRpYXI0kxkaSKyNBJZGogs9USWOiJLLZGlhshSTWSpIrLI90wzWK4QWSqJLBVElnIii0dkSRNZXCJLGZElRWRJElkSRJY4kSVGZIkWsJzYtYzi/005YMKWh2WJr54T1Hn+yl9/afijYA7jOlpfg+kYTFK7r/xlvJ8sq+NN/q5f7heD/f/0T44K3x/G9RW/KeDH6yuKBe/3DfgPjZxisP9fhv9bu359PUR0qRZ0zEh8ZfnOrkUfC98752skcTzYj98X8L1dhz6nvzPyl3X0FWt9dYmsL0tsVXG77cbNhJCLnmsxF9WCzhvM7we7lk/XQ5Rxlf6ljuIMex5/A/lKTJzHf/SX34DjJ7uOMddwqBY0Lj+B5We7Fl2TtxBLXBLHg/34Pc5v7Tr0efezkb+so69Y6/glss5eIuuPJba6sO0NbIsaZjXXpGE9Cf2+g+UE5Oj4j3lr3E899r3dXPVrGnSoFjQHvAfLB7uWjIr7N+g/DzEw7t/txs1i3Ij/IzFkewyW/yuDBfdTTcZYzGoMTwvcD5ffGY/xYP9pyDl/AEce1iWWer39H8j1tIDbg1vZ/xbcYbyHeA8OiS9xXKNucmv5WNX1OzXqJ+s4lkmjXiFYcl6B2K5zVhuplxpPvDZE3LIDv6tEWtBcIvHV+2l57fP1yenuh1c/fHu8efKPCPQh/cYK9BuFnBPG/XBOln0pP/+E3fz169y4U3z+icL5H5wcvzs5NfKPG7lGnfP5Y94hnHsZsUqLQz1Vw8/68JrBrl1HVmKZDhccZbAs+9Jgkm2e4cXjBR8rdcX5xhxbawkKMOJjYn6SCefzFxA4AGVGkqr9CsIRdzkBGwEA", "verificationKey": "0000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f" }, { diff --git a/yarn-project/noir-contracts/src/contracts/ecdsa_account_contract/src/ecdsa_public_key_note.nr b/yarn-project/noir-contracts/src/contracts/ecdsa_account_contract/src/ecdsa_public_key_note.nr index c8081b918f2..ccd5084d8fd 100644 --- a/yarn-project/noir-contracts/src/contracts/ecdsa_account_contract/src/ecdsa_public_key_note.nr +++ b/yarn-project/noir-contracts/src/contracts/ecdsa_account_contract/src/ecdsa_public_key_note.nr @@ -1,4 +1,3 @@ -use dep::std::hash::pedersen; use dep::aztec::note::note_interface::NoteInterface; use dep::aztec::note::note_header::NoteHeader; use dep::aztec::note::utils::compute_unique_siloed_note_hash; @@ -57,8 +56,8 @@ impl EcdsaPublicKeyNote { // TODO(#1205) Should use a non-zero generator index. dep::std::hash::pedersen([ unique_siloed_note_hash, - secret.high, secret.low, + secret.high, ])[0] } diff --git a/yarn-project/noir-contracts/src/contracts/escrow_contract/src/address_note.nr b/yarn-project/noir-contracts/src/contracts/escrow_contract/src/address_note.nr index 26752487909..652c664dcb2 100644 --- a/yarn-project/noir-contracts/src/contracts/escrow_contract/src/address_note.nr +++ b/yarn-project/noir-contracts/src/contracts/escrow_contract/src/address_note.nr @@ -1,8 +1,7 @@ -use dep::std::hash::pedersen; use dep::aztec::note::note_interface::NoteInterface; use dep::aztec::note::note_header::NoteHeader; -use dep::aztec::oracle::get_secret_key::get_secret_key; use dep::aztec::note::utils::compute_siloed_note_hash; +use dep::aztec::oracle::get_secret_key::get_secret_key; global ADDRESS_NOTE_LEN: Field = 2; @@ -32,8 +31,8 @@ impl AddressNote { // TODO(#1205) Should use a non-zero generator index. dep::std::hash::pedersen([ siloed_note_hash, - secret.high, secret.low, + secret.high, ])[0] } diff --git a/yarn-project/noir-contracts/src/contracts/pokeable_token_contract/src/address_note.nr b/yarn-project/noir-contracts/src/contracts/pokeable_token_contract/src/address_note.nr index 64162d934f6..6801a040542 100644 --- a/yarn-project/noir-contracts/src/contracts/pokeable_token_contract/src/address_note.nr +++ b/yarn-project/noir-contracts/src/contracts/pokeable_token_contract/src/address_note.nr @@ -1,4 +1,3 @@ -use dep::std::hash::pedersen; use dep::aztec::note::note_interface::NoteInterface; use dep::aztec::note::note_header::NoteHeader; use dep::aztec::note::utils::compute_unique_siloed_note_hash; @@ -31,8 +30,8 @@ impl AddressNote { // TODO(#1205) Should use a non-zero generator index. dep::std::hash::pedersen([ unique_siloed_note_hash, - secret.high, secret.low, + secret.high, ])[0] } diff --git a/yarn-project/noir-contracts/src/contracts/schnorr_account_contract/src/public_key_note.nr b/yarn-project/noir-contracts/src/contracts/schnorr_account_contract/src/public_key_note.nr index 53abc3b4f58..771ca860327 100644 --- a/yarn-project/noir-contracts/src/contracts/schnorr_account_contract/src/public_key_note.nr +++ b/yarn-project/noir-contracts/src/contracts/schnorr_account_contract/src/public_key_note.nr @@ -1,8 +1,7 @@ -use dep::std::hash::pedersen; use dep::aztec::note::note_interface::NoteInterface; use dep::aztec::note::note_header::NoteHeader; -use dep::aztec::oracle::get_secret_key::get_secret_key; use dep::aztec::note::utils::compute_unique_siloed_note_hash; +use dep::aztec::oracle::get_secret_key::get_secret_key; global PUBLIC_KEY_NOTE_LEN: Field = 3; @@ -36,8 +35,8 @@ impl PublicKeyNote { // TODO(#1205) Should use a non-zero generator index. dep::std::hash::pedersen([ unique_siloed_note_hash, - secret.high, secret.low, + secret.high, ])[0] }