From 8876409e4b05a7ae7296c6b8a7d8ff9cd5a6149a Mon Sep 17 00:00:00 2001 From: thunkar Date: Mon, 1 Jul 2024 11:46:00 +0000 Subject: [PATCH 01/10] Fixes to avm opcodes and missing oracles, forced ci failure --- avm-transpiler/src/transpile.rs | 2 +- noir-projects/Dockerfile.test | 8 ++--- noir-projects/Earthfile | 11 +++--- .../aztec/src/context/public_context.nr | 4 +-- yarn-project/txe/package.json | 2 +- yarn-project/txe/src/oracle/txe_oracle.ts | 31 ++++++++++++++-- .../txe/src/txe_service/txe_service.ts | 36 +++++++++++++++++-- 7 files changed, 76 insertions(+), 18 deletions(-) diff --git a/avm-transpiler/src/transpile.rs b/avm-transpiler/src/transpile.rs index 80610006ec0a..352c29d27c19 100644 --- a/avm-transpiler/src/transpile.rs +++ b/avm-transpiler/src/transpile.rs @@ -992,7 +992,7 @@ fn handle_storage_read( inputs: &Vec, ) { // For the foreign calls we want to handle, we do not want inputs, as they are getters - assert!(inputs.len() == 1); // storage_slot + assert!(inputs.len() == 2); // output, len - but we dont use this len - its for the oracle assert!(destinations.len() == 1); // return values let slot_offset_maybe = inputs[0]; diff --git a/noir-projects/Dockerfile.test b/noir-projects/Dockerfile.test index dac95b562a72..0ff6fb26b78f 100644 --- a/noir-projects/Dockerfile.test +++ b/noir-projects/Dockerfile.test @@ -24,16 +24,16 @@ COPY . . # Build & test RUN cd ./noir-protocol-circuits && ./bootstrap.sh && nargo test --use-legacy --silence-warnings -RUN cd /usr/src/yarn-project/txe && yarn start & echo $! > /tmp/txe.pid && \ +RUN cd /usr/src/yarn-project/txe && yarn start & \ # Wait for TXE to initialize sleep 5 && \ cd ./noir-contracts && \ # We need to increase the timeout since all tests running in parallel hammer TXE at the same time, and processing slows down leading to timeouts # The only way we currently have to batch tests is via RAYON_NUM_THREADS, which is not ideal - ./bootstrap.sh && NARGO_FOREIGN_CALL_TIMEOUT=300000 nargo test --use-legacy --silence-warnings --oracle-resolver http://localhost:8080 ; \ - kill $(cat /tmp/txe.pid) + ./bootstrap.sh && \ + NARGO_FOREIGN_CALL_TIMEOUT=300000 nargo test --use-legacy --silence-warnings --oracle-resolver http://localhost:8080 -RUN cd /usr/src/yarn-project/txe && yarn start & echo $! > /tmp/txe.pid && \ +RUN cd /usr/src/yarn-project/txe && yarn start & \ # Wait for TXE to initialize sleep 5 && \ cd ./aztec-nr && \ diff --git a/noir-projects/Earthfile b/noir-projects/Earthfile index 50267fa30843..6325ad83e4e3 100644 --- a/noir-projects/Earthfile +++ b/noir-projects/Earthfile @@ -49,20 +49,19 @@ test: COPY +build/. /usr/src/noir-projects RUN cd /usr/src/noir-projects/noir-protocol-circuits && nargo test --silence-warnings - RUN cd /usr/src/yarn-project/txe && yarn start & echo $! > /tmp/txe.pid && \ + + RUN cd /usr/src/yarn-project/txe && yarn start & \ # Wait for TXE to initialize sleep 5 && \ - cd /usr/src/noir-projects/aztec-nr && nargo test --use-legacy --silence-warnings --oracle-resolver http://localhost:8080 ; \ - kill $(cat /tmp/txe.pid) + cd /usr/src/noir-projects/aztec-nr && nargo test --use-legacy --silence-warnings --oracle-resolver http://localhost:8080 - RUN cd /usr/src/yarn-project/txe && yarn start & echo $! > /tmp/txe.pid && \ + RUN cd /usr/src/yarn-project/txe && yarn start & \ # Wait for TXE to initialize sleep 5 && \ cd /usr/src/noir-projects/noir-contracts && \ # We need to increase the timeout since all tests running in parallel hammer TXE at the same time and processing slows down, leading to timeouts # The only way we currently have to batch tests is via RAYON_NUM_THREADS, which is not ideal - NARGO_FOREIGN_CALL_TIMEOUT=300000 nargo test --use-legacy --silence-warnings --oracle-resolver http://localhost:8080 ; \ - kill $(cat /tmp/txe.pid) + NARGO_FOREIGN_CALL_TIMEOUT=300000 nargo test --use-legacy --silence-warnings --oracle-resolver http://localhost:8080 format: FROM +build diff --git a/noir-projects/aztec-nr/aztec/src/context/public_context.nr b/noir-projects/aztec-nr/aztec/src/context/public_context.nr index 7c056a43506d..d0197860334e 100644 --- a/noir-projects/aztec-nr/aztec/src/context/public_context.nr +++ b/noir-projects/aztec-nr/aztec/src/context/public_context.nr @@ -275,7 +275,7 @@ unconstrained fn call_static( } unconstrained fn storage_read(storage_slot: Field) -> [Field; N] { - storage_read_opcode(storage_slot) + storage_read_opcode(storage_slot, N) } unconstrained fn storage_write(storage_slot: Field, values: [Field; N]) { @@ -370,7 +370,7 @@ unconstrained fn call_static_opcode( // ^ return data ^ success #[oracle(avmOpcodeStorageRead)] -unconstrained fn storage_read_opcode(storage_slot: Field) -> [Field; N] {} +unconstrained fn storage_read_opcode(storage_slot: Field, size: Field) -> [Field; N] {} #[oracle(avmOpcodeStorageWrite)] unconstrained fn storage_write_opcode(storage_slot: Field, values: [Field; N]) {} diff --git a/yarn-project/txe/package.json b/yarn-project/txe/package.json index f77a47b7f62a..14f89c536216 100644 --- a/yarn-project/txe/package.json +++ b/yarn-project/txe/package.json @@ -18,7 +18,7 @@ "formatting": "run -T prettier --check ./src && run -T eslint ./src", "formatting:fix": "run -T eslint --fix ./src && run -T prettier -w ./src", "test": "NODE_NO_WARNINGS=1 node --experimental-vm-modules ../node_modules/.bin/jest --passWithNoTests", - "dev": "DEBUG='aztec:*' && node ./dest/bin/index.js", + "dev": "DEBUG='aztec:*' LOG_LEVEL=debug && node ./dest/bin/index.js", "start": "node ./dest/bin/index.js" }, "inherits": [ diff --git a/yarn-project/txe/src/oracle/txe_oracle.ts b/yarn-project/txe/src/oracle/txe_oracle.ts index eb805c21d08b..a8e42fca1eb4 100644 --- a/yarn-project/txe/src/oracle/txe_oracle.ts +++ b/yarn-project/txe/src/oracle/txe_oracle.ts @@ -434,13 +434,40 @@ export class TXE implements TypedOracle { throw new Error('Method not implemented.'); } + async avmOpcodeStorageRead(slot: Fr, length: Fr) { + const db = this.trees.asLatest(); + + let result = []; + + for (let i = 0; i < length.toNumber(); i++) { + const leafSlot = computePublicDataTreeLeafSlot(this.contractAddress, slot).toBigInt(); + + const lowLeafResult = await db.getPreviousValueIndex(MerkleTreeId.PUBLIC_DATA_TREE, leafSlot); + if (!lowLeafResult || !lowLeafResult.alreadyPresent) { + result.push(Fr.ZERO); + break; + } + + const preimage = (await db.getLeafPreimage( + MerkleTreeId.PUBLIC_DATA_TREE, + lowLeafResult.index, + )) as PublicDataTreeLeafPreimage; + + result.push(preimage.value); + } + return result; + } + async storageRead( contractAddress: Fr, startStorageSlot: Fr, - blockNumber: number, // TODO(#7230): use block number + blockNumber: number, numberOfElements: number, ): Promise { - const db = this.trees.asLatest(); + const db = + blockNumber === (await this.getBlockNumber()) + ? this.trees.asLatest() + : new MerkleTreeSnapshotOperationsFacade(this.trees, blockNumber); const values = []; for (let i = 0n; i < numberOfElements; i++) { diff --git a/yarn-project/txe/src/txe_service/txe_service.ts b/yarn-project/txe/src/txe_service/txe_service.ts index bfd99bd74d1b..90ddab656fe6 100644 --- a/yarn-project/txe/src/txe_service/txe_service.ts +++ b/yarn-project/txe/src/txe_service/txe_service.ts @@ -506,13 +506,41 @@ export class TXEService { fromSingle(address), FunctionSelector.fromField(fromSingle(functionSelector)), fromArray(args), - false, - false, + /* isStaticCall */ false, + /* isDelegateCall */ false, + ); + + return toForeignCallResult([toArray(result.returnValues), toSingle(new Fr(1))]); + } + + async avmOpcodeStaticCall( + _gas: ForeignCallArray, + address: ForeignCallSingle, + _length: ForeignCallSingle, + args: ForeignCallArray, + functionSelector: ForeignCallSingle, + ) { + const result = await (this.typedOracle as TXE).avmOpcodeCall( + fromSingle(address), + FunctionSelector.fromField(fromSingle(functionSelector)), + fromArray(args), + /* isStaticCall */ true, + /* isDelegateCall */ false, ); return toForeignCallResult([toArray(result.returnValues), toSingle(new Fr(1))]); } + async avmOpcodeStorageRead(slot: ForeignCallSingle, length: ForeignCallSingle) { + const values = await (this.typedOracle as TXE).avmOpcodeStorageRead(fromSingle(slot), fromSingle(length)); + return toForeignCallResult([toArray(values)]); + } + + async avmOpcodeStorageWrite(startStorageSlot: ForeignCallSingle, values: ForeignCallArray) { + await this.typedOracle.storageWrite(fromSingle(startStorageSlot), fromArray(values)); + return toForeignCallResult([]); + } + async getPublicKeysAndPartialAddress(address: ForeignCallSingle) { const parsedAddress = AztecAddress.fromField(fromSingle(address)); const { publicKeys, partialAddress } = await this.typedOracle.getCompleteAddress(parsedAddress); @@ -571,6 +599,10 @@ export class TXEService { return toForeignCallResult([]); } + emitEncryptedEventLog(_contractAddress: AztecAddress, _randomness: Fr, _encryptedEvent: Buffer, _counter: number) { + return toForeignCallResult([]); + } + async callPrivateFunction( targetContractAddress: ForeignCallSingle, functionSelector: ForeignCallSingle, From 1775f5e21a422f9c865c982cd01c9be05e4fb713 Mon Sep 17 00:00:00 2001 From: thunkar Date: Mon, 1 Jul 2024 11:49:10 +0000 Subject: [PATCH 02/10] unified naming --- noir-projects/aztec-nr/aztec/src/context/public_context.nr | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/noir-projects/aztec-nr/aztec/src/context/public_context.nr b/noir-projects/aztec-nr/aztec/src/context/public_context.nr index d0197860334e..b2e23c5f1034 100644 --- a/noir-projects/aztec-nr/aztec/src/context/public_context.nr +++ b/noir-projects/aztec-nr/aztec/src/context/public_context.nr @@ -370,7 +370,7 @@ unconstrained fn call_static_opcode( // ^ return data ^ success #[oracle(avmOpcodeStorageRead)] -unconstrained fn storage_read_opcode(storage_slot: Field, size: Field) -> [Field; N] {} +unconstrained fn storage_read_opcode(storage_slot: Field, length: Field) -> [Field; N] {} #[oracle(avmOpcodeStorageWrite)] unconstrained fn storage_write_opcode(storage_slot: Field, values: [Field; N]) {} From 461d22d2a0ffdc50ddbe8228165993ea6b5faf4c Mon Sep 17 00:00:00 2001 From: thunkar Date: Mon, 1 Jul 2024 12:15:24 +0000 Subject: [PATCH 03/10] formatting fix --- yarn-project/txe/src/oracle/txe_oracle.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/yarn-project/txe/src/oracle/txe_oracle.ts b/yarn-project/txe/src/oracle/txe_oracle.ts index a8e42fca1eb4..6366165d4034 100644 --- a/yarn-project/txe/src/oracle/txe_oracle.ts +++ b/yarn-project/txe/src/oracle/txe_oracle.ts @@ -437,7 +437,7 @@ export class TXE implements TypedOracle { async avmOpcodeStorageRead(slot: Fr, length: Fr) { const db = this.trees.asLatest(); - let result = []; + const result = []; for (let i = 0; i < length.toNumber(); i++) { const leafSlot = computePublicDataTreeLeafSlot(this.contractAddress, slot).toBigInt(); From b2a90e4f024dadc56c104074debb7f02b8158d0c Mon Sep 17 00:00:00 2001 From: thunkar Date: Mon, 1 Jul 2024 16:11:24 +0000 Subject: [PATCH 04/10] clarifying comment --- avm-transpiler/src/transpile.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/avm-transpiler/src/transpile.rs b/avm-transpiler/src/transpile.rs index 352c29d27c19..8fbd3c711832 100644 --- a/avm-transpiler/src/transpile.rs +++ b/avm-transpiler/src/transpile.rs @@ -992,7 +992,7 @@ fn handle_storage_read( inputs: &Vec, ) { // For the foreign calls we want to handle, we do not want inputs, as they are getters - assert!(inputs.len() == 2); // output, len - but we dont use this len - its for the oracle + assert!(inputs.len() == 2); // output, len. The latter is not used by the AVM, but required in the oracle call so that TXE knows how many slots to read. assert!(destinations.len() == 1); // return values let slot_offset_maybe = inputs[0]; From 836cc70ae58bc3dcef168a01275388653420b191 Mon Sep 17 00:00:00 2001 From: thunkar Date: Tue, 2 Jul 2024 08:32:30 +0000 Subject: [PATCH 05/10] added fn selector for the avm --- .../aztec-nr/aztec/src/test/helpers/cheatcodes.nr | 13 +++++++++++++ .../aztec/src/test/helpers/test_environment.nr | 4 ++++ .../aztec-nr/aztec/src/test/helpers/utils.nr | 5 ++++- yarn-project/txe/src/oracle/txe_oracle.ts | 7 +++++-- yarn-project/txe/src/txe_service/txe_service.ts | 15 +++++++++++++++ 5 files changed, 41 insertions(+), 3 deletions(-) diff --git a/noir-projects/aztec-nr/aztec/src/test/helpers/cheatcodes.nr b/noir-projects/aztec-nr/aztec/src/test/helpers/cheatcodes.nr index db5e13ed4240..b00724d192fb 100644 --- a/noir-projects/aztec-nr/aztec/src/test/helpers/cheatcodes.nr +++ b/noir-projects/aztec-nr/aztec/src/test/helpers/cheatcodes.nr @@ -101,6 +101,14 @@ unconstrained pub fn add_note_hashes(contractAddress: AztecAddress, inner_note_h oracle_add_note_hashes(contractAddress, inner_note_hashes) } +unconstrained pub fn get_function_selector() -> FunctionSelector { + oracle_get_function_selector() +} + +unconstrained pub fn set_fn_selector(selector: FunctionSelector) { + oracle_set_function_selector(selector) +} + #[oracle(reset)] fn oracle_reset() {} @@ -181,3 +189,8 @@ fn oracle_add_nullifiers(contractAddress: AztecAddress, nullifiers: [Field]) {} #[oracle(addNoteHashes)] fn oracle_add_note_hashes(contractAddress: AztecAddress, inner_note_hashes: [Field]) {} +#[oracle(getFunctionSelector)] +fn oracle_get_function_selector() -> FunctionSelector {} + +#[oracle(setFunctionSelector)] +fn oracle_set_function_selector(selector: FunctionSelector) {} \ No newline at end of file diff --git a/noir-projects/aztec-nr/aztec/src/test/helpers/test_environment.nr b/noir-projects/aztec-nr/aztec/src/test/helpers/test_environment.nr index e07b411e0128..e22d5783de02 100644 --- a/noir-projects/aztec-nr/aztec/src/test/helpers/test_environment.nr +++ b/noir-projects/aztec-nr/aztec/src/test/helpers/test_environment.nr @@ -159,8 +159,11 @@ impl TestEnvironment { let original_fn = call_interface.get_original(); let original_msg_sender = cheatcodes::get_msg_sender(); let original_contract_address = cheatcodes::get_contract_address(); + let original_fn_selector = cheatcodes::get_function_selector(); let target_address = call_interface.get_contract_address(); + let fn_selector = call_interface.get_selector(); + cheatcodes::set_fn_selector(fn_selector); cheatcodes::set_contract_address(target_address); cheatcodes::set_msg_sender(original_contract_address); let mut inputs = cheatcodes::get_public_context_inputs(); @@ -168,6 +171,7 @@ impl TestEnvironment { inputs.is_static_call = call_interface.get_is_static(); let result = original_fn(inputs); + cheatcodes::set_fn_selector(original_fn_selector); cheatcodes::set_contract_address(original_contract_address); cheatcodes::set_msg_sender(original_msg_sender); result diff --git a/noir-projects/aztec-nr/aztec/src/test/helpers/utils.nr b/noir-projects/aztec-nr/aztec/src/test/helpers/utils.nr index 87639e0fb73a..d68f0a096bf5 100644 --- a/noir-projects/aztec-nr/aztec/src/test/helpers/utils.nr +++ b/noir-projects/aztec-nr/aztec/src/test/helpers/utils.nr @@ -78,13 +78,16 @@ impl Deployer { let original_fn = call_interface.get_original(); let original_msg_sender = cheatcodes::get_msg_sender(); let original_contract_address = cheatcodes::get_contract_address(); - + let original_fn_selector = cheatcodes::get_function_selector(); + + cheatcodes::set_fn_selector(call_interface.get_selector()); cheatcodes::set_contract_address(instance.to_address()); cheatcodes::set_msg_sender(original_contract_address); let mut inputs = cheatcodes::get_public_context_inputs(); inputs.args_hash = hash_args(call_interface.get_args()); let _result: T = original_fn(inputs); + cheatcodes::set_fn_selector(original_fn_selector); cheatcodes::set_contract_address(original_contract_address); cheatcodes::set_msg_sender(original_msg_sender); instance diff --git a/yarn-project/txe/src/oracle/txe_oracle.ts b/yarn-project/txe/src/oracle/txe_oracle.ts index 6366165d4034..d7af67efd77c 100644 --- a/yarn-project/txe/src/oracle/txe_oracle.ts +++ b/yarn-project/txe/src/oracle/txe_oracle.ts @@ -113,6 +113,10 @@ export class TXE implements TypedOracle { return this.msgSender; } + getFunctionSelector() { + return this.functionSelector; + } + setMsgSender(msgSender: Fr) { this.msgSender = msgSender; } @@ -185,11 +189,10 @@ export class TXE implements TypedOracle { getPublicContextInputs() { const inputs = { - functionSelector: FunctionSelector.fromField(new Fr(0)), argsHash: new Fr(0), isStaticCall: false, toFields: function () { - return [this.functionSelector.toField(), this.argsHash, new Fr(this.isStaticCall)]; + return [this.argsHash, new Fr(this.isStaticCall)]; }, }; return inputs; diff --git a/yarn-project/txe/src/txe_service/txe_service.ts b/yarn-project/txe/src/txe_service/txe_service.ts index 90ddab656fe6..745fbce3afde 100644 --- a/yarn-project/txe/src/txe_service/txe_service.ts +++ b/yarn-project/txe/src/txe_service/txe_service.ts @@ -251,6 +251,16 @@ export class TXEService { return toForeignCallResult([]); } + setFunctionSelector(functionSelector: ForeignCallSingle) { + (this.typedOracle as TXE).setFunctionSelector(FunctionSelector.fromField(fromSingle(functionSelector))); + return toForeignCallResult([]); + } + + getFunctionSelector() { + const functionSelector = (this.typedOracle as TXE).getFunctionSelector(); + return toForeignCallResult([toSingle(functionSelector.toField())]); + } + // PXE oracles getRandomField() { @@ -277,6 +287,11 @@ export class TXEService { return toForeignCallResult([toSingle(new Fr(blockNumber))]); } + async avmOpcodeFunctionSelector() { + const functionSelector = await (this.typedOracle as TXE).getFunctionSelector(); + return toForeignCallResult([toSingle(functionSelector.toField())]); + } + async packArgumentsArray(args: ForeignCallArray) { const packed = await this.typedOracle.packArgumentsArray(fromArray(args)); return toForeignCallResult([toSingle(packed)]); From d5328c3cc16182280e754056ebfeb403267f8c28 Mon Sep 17 00:00:00 2001 From: thunkar Date: Tue, 2 Jul 2024 08:46:00 +0000 Subject: [PATCH 06/10] nargo fmt --- noir-projects/aztec-nr/aztec/src/test/helpers/cheatcodes.nr | 2 +- noir-projects/aztec-nr/aztec/src/test/helpers/utils.nr | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/noir-projects/aztec-nr/aztec/src/test/helpers/cheatcodes.nr b/noir-projects/aztec-nr/aztec/src/test/helpers/cheatcodes.nr index b00724d192fb..3d6b791e8334 100644 --- a/noir-projects/aztec-nr/aztec/src/test/helpers/cheatcodes.nr +++ b/noir-projects/aztec-nr/aztec/src/test/helpers/cheatcodes.nr @@ -193,4 +193,4 @@ fn oracle_add_note_hashes(contractAddress: AztecAddress, inner_note_hashes: [Fie fn oracle_get_function_selector() -> FunctionSelector {} #[oracle(setFunctionSelector)] -fn oracle_set_function_selector(selector: FunctionSelector) {} \ No newline at end of file +fn oracle_set_function_selector(selector: FunctionSelector) {} diff --git a/noir-projects/aztec-nr/aztec/src/test/helpers/utils.nr b/noir-projects/aztec-nr/aztec/src/test/helpers/utils.nr index d68f0a096bf5..28ca84b1f744 100644 --- a/noir-projects/aztec-nr/aztec/src/test/helpers/utils.nr +++ b/noir-projects/aztec-nr/aztec/src/test/helpers/utils.nr @@ -79,7 +79,7 @@ impl Deployer { let original_msg_sender = cheatcodes::get_msg_sender(); let original_contract_address = cheatcodes::get_contract_address(); let original_fn_selector = cheatcodes::get_function_selector(); - + cheatcodes::set_fn_selector(call_interface.get_selector()); cheatcodes::set_contract_address(instance.to_address()); cheatcodes::set_msg_sender(original_contract_address); From 9f6bbf47d5a8159a9891fc79e437151722981ac2 Mon Sep 17 00:00:00 2001 From: thunkar Date: Tue, 2 Jul 2024 09:21:54 +0000 Subject: [PATCH 07/10] format fix --- yarn-project/txe/src/txe_service/txe_service.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/yarn-project/txe/src/txe_service/txe_service.ts b/yarn-project/txe/src/txe_service/txe_service.ts index 745fbce3afde..f44644018eed 100644 --- a/yarn-project/txe/src/txe_service/txe_service.ts +++ b/yarn-project/txe/src/txe_service/txe_service.ts @@ -288,7 +288,7 @@ export class TXEService { } async avmOpcodeFunctionSelector() { - const functionSelector = await (this.typedOracle as TXE).getFunctionSelector(); + const functionSelector = (this.typedOracle as TXE).getFunctionSelector(); return toForeignCallResult([toSingle(functionSelector.toField())]); } From c29efc9bc70027b77e3550a773fb68eed18e662f Mon Sep 17 00:00:00 2001 From: thunkar Date: Tue, 2 Jul 2024 09:52:39 +0000 Subject: [PATCH 08/10] fix --- yarn-project/txe/src/txe_service/txe_service.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/yarn-project/txe/src/txe_service/txe_service.ts b/yarn-project/txe/src/txe_service/txe_service.ts index f44644018eed..7113a743464a 100644 --- a/yarn-project/txe/src/txe_service/txe_service.ts +++ b/yarn-project/txe/src/txe_service/txe_service.ts @@ -287,7 +287,7 @@ export class TXEService { return toForeignCallResult([toSingle(new Fr(blockNumber))]); } - async avmOpcodeFunctionSelector() { + avmOpcodeFunctionSelector() { const functionSelector = (this.typedOracle as TXE).getFunctionSelector(); return toForeignCallResult([toSingle(functionSelector.toField())]); } From e2e7aa3dcd88bdce0331fb453b9fc48ad3538a2c Mon Sep 17 00:00:00 2001 From: thunkar Date: Tue, 2 Jul 2024 11:06:59 +0000 Subject: [PATCH 09/10] fixed return length mismatch --- yarn-project/txe/src/oracle/txe_oracle.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/yarn-project/txe/src/oracle/txe_oracle.ts b/yarn-project/txe/src/oracle/txe_oracle.ts index d7af67efd77c..62336d5bc6d4 100644 --- a/yarn-project/txe/src/oracle/txe_oracle.ts +++ b/yarn-project/txe/src/oracle/txe_oracle.ts @@ -443,12 +443,12 @@ export class TXE implements TypedOracle { const result = []; for (let i = 0; i < length.toNumber(); i++) { - const leafSlot = computePublicDataTreeLeafSlot(this.contractAddress, slot).toBigInt(); + const leafSlot = computePublicDataTreeLeafSlot(this.contractAddress, slot.add(new Fr(i))).toBigInt(); const lowLeafResult = await db.getPreviousValueIndex(MerkleTreeId.PUBLIC_DATA_TREE, leafSlot); if (!lowLeafResult || !lowLeafResult.alreadyPresent) { result.push(Fr.ZERO); - break; + continue; } const preimage = (await db.getLeafPreimage( From 0bbe7daadd657282ec54a42ff71832dbaebac50c Mon Sep 17 00:00:00 2001 From: thunkar Date: Tue, 2 Jul 2024 13:36:44 +0000 Subject: [PATCH 10/10] fixed shared mutable tests --- .../src/state_vars/shared_mutable/test.nr | 24 +++++++++++++++---- .../src/test/helpers/test_environment.nr | 7 +++++- 2 files changed, 26 insertions(+), 5 deletions(-) diff --git a/noir-projects/aztec-nr/aztec/src/state_vars/shared_mutable/test.nr b/noir-projects/aztec-nr/aztec/src/state_vars/shared_mutable/test.nr index abf0e28940b2..e162a642eaae 100644 --- a/noir-projects/aztec-nr/aztec/src/state_vars/shared_mutable/test.nr +++ b/noir-projects/aztec-nr/aztec/src/state_vars/shared_mutable/test.nr @@ -275,7 +275,11 @@ fn test_get_current_value_in_private_bad_value_hints() { let private_state_var = in_private(&mut env, schedule_block_number); let mocked: ScheduledValueChange = ScheduledValueChange::new(0, new_value + 1, schedule_block_number); - let _ = OracleMock::mock("storageRead").with_params((private_state_var.get_value_change_storage_slot(), 3)).returns(mocked.serialize()).times(1); + let _ = OracleMock::mock("storageRead").with_params( + ( + env.contract_address().to_field(), private_state_var.get_value_change_storage_slot(), schedule_block_number, 3 + ) + ).returns(mocked.serialize()).times(1); let _ = private_state_var.get_current_value_in_private(); } @@ -291,7 +295,11 @@ fn test_get_current_value_in_private_bad_delay_hints() { let private_state_var = in_private(&mut env, schedule_block_number); let mocked: ScheduledDelayChange = ScheduledDelayChange::new(Option::none(), Option::some(42), schedule_block_number); - let _ = OracleMock::mock("storageRead").with_params((private_state_var.get_delay_change_storage_slot(), 1)).returns(mocked.serialize()).times(1); + let _ = OracleMock::mock("storageRead").with_params( + ( + env.contract_address().to_field(), private_state_var.get_delay_change_storage_slot(), schedule_block_number, 1 + ) + ).returns(mocked.serialize()).times(1); let _ = private_state_var.get_current_value_in_private(); } @@ -304,7 +312,11 @@ fn test_get_current_value_in_private_bad_zero_hash_value_hints() { let state_var = in_private(&mut env, historical_block_number); let mocked: ScheduledValueChange = ScheduledValueChange::new(0, new_value, 0); - let _ = OracleMock::mock("storageRead").with_params((state_var.get_value_change_storage_slot(), 3)).returns(mocked.serialize()).times(1); + let _ = OracleMock::mock("storageRead").with_params( + ( + env.contract_address().to_field(), state_var.get_value_change_storage_slot(), historical_block_number, 3 + ) + ).returns(mocked.serialize()).times(1); let _ = state_var.get_current_value_in_private(); } @@ -317,7 +329,11 @@ fn test_get_current_value_in_private_bad_zero_hash_delay_hints() { let state_var = in_private(&mut env, historical_block_number); let mocked: ScheduledDelayChange = ScheduledDelayChange::new(Option::none(), Option::some(new_delay), 0); - let _ = OracleMock::mock("storageRead").with_params((state_var.get_delay_change_storage_slot(), 1)).returns(mocked.serialize()).times(1); + let _ = OracleMock::mock("storageRead").with_params( + ( + env.contract_address().to_field(), state_var.get_delay_change_storage_slot(), historical_block_number, 1 + ) + ).returns(mocked.serialize()).times(1); let _ = state_var.get_current_value_in_private(); } diff --git a/noir-projects/aztec-nr/aztec/src/test/helpers/test_environment.nr b/noir-projects/aztec-nr/aztec/src/test/helpers/test_environment.nr index e22d5783de02..e045ca4b8bc5 100644 --- a/noir-projects/aztec-nr/aztec/src/test/helpers/test_environment.nr +++ b/noir-projects/aztec-nr/aztec/src/test/helpers/test_environment.nr @@ -30,6 +30,10 @@ impl TestEnvironment { cheatcodes::get_block_number() } + fn contract_address(self) -> AztecAddress { + cheatcodes::get_contract_address() + } + fn advance_block_to(&mut self, block_number: u32) { let difference = block_number - cheatcodes::get_block_number(); self.advance_block_by(difference); @@ -40,7 +44,8 @@ impl TestEnvironment { } fn public(self) -> PublicContext { - PublicContext::empty() + let mut inputs = cheatcodes::get_public_context_inputs(); + PublicContext::new(inputs) } fn private(&mut self) -> PrivateContext {