From ec5cd7b1b9231fda57c73be4de1fe5adb6f0a2a3 Mon Sep 17 00:00:00 2001 From: sklppy88 Date: Fri, 24 May 2024 00:00:57 +0000 Subject: [PATCH] Initial --- noir-projects/noir-contracts/Nargo.toml | 1 + .../contracts/test_log_contract/Nargo.toml | 9 ++++ .../contracts/test_log_contract/src/main.nr | 30 +++++++++++ yarn-project/aztec.js/src/index.ts | 1 + yarn-project/end-to-end/Earthfile | 3 ++ yarn-project/end-to-end/src/e2e_logs.test.ts | 53 +++++++++++++++++++ 6 files changed, 97 insertions(+) create mode 100644 noir-projects/noir-contracts/contracts/test_log_contract/Nargo.toml create mode 100644 noir-projects/noir-contracts/contracts/test_log_contract/src/main.nr create mode 100644 yarn-project/end-to-end/src/e2e_logs.test.ts diff --git a/noir-projects/noir-contracts/Nargo.toml b/noir-projects/noir-contracts/Nargo.toml index 141e5925a00f..cb62f419903e 100644 --- a/noir-projects/noir-contracts/Nargo.toml +++ b/noir-projects/noir-contracts/Nargo.toml @@ -35,6 +35,7 @@ members = [ "contracts/schnorr_single_key_account_contract", "contracts/stateful_test_contract", "contracts/test_contract", + "contracts/test_log_contract", "contracts/token_contract", "contracts/token_blacklist_contract", "contracts/token_bridge_contract", diff --git a/noir-projects/noir-contracts/contracts/test_log_contract/Nargo.toml b/noir-projects/noir-contracts/contracts/test_log_contract/Nargo.toml new file mode 100644 index 000000000000..31969188f9cf --- /dev/null +++ b/noir-projects/noir-contracts/contracts/test_log_contract/Nargo.toml @@ -0,0 +1,9 @@ +[package] +name = "test_log_contract" +authors = [""] +compiler_version = ">=0.25.0" +type = "contract" + +[dependencies] +aztec = { path = "../../../aztec-nr/aztec" } +value_note = { path = "../../../aztec-nr/value-note" } diff --git a/noir-projects/noir-contracts/contracts/test_log_contract/src/main.nr b/noir-projects/noir-contracts/contracts/test_log_contract/src/main.nr new file mode 100644 index 000000000000..23917a9f08eb --- /dev/null +++ b/noir-projects/noir-contracts/contracts/test_log_contract/src/main.nr @@ -0,0 +1,30 @@ +contract TestLog { + use dep::aztec::prelude::PrivateSet; + use dep::value_note::value_note::ValueNote; + + #[aztec(event)] + struct ExampleEvent { + value: Field, + } + + #[aztec(storage)] + struct Storage { + example_set: PrivateSet, + } + + #[aztec(private)] + fn emit_encrypted_log(randomness: Field, event_type_id: Field, preimage: [Field; 6]) { + let header = context.get_header(); + let msg_sender_ivpk_m = header.get_ivpk_m(&mut context, context.msg_sender()); + let msg_sender_ovpk_m = header.get_ovpk_m(&mut context, context.msg_sender()); + + context.encrypt_and_emit_log( + context.this_address(), + randomness, + event_type_id, + msg_sender_ovpk_m, + msg_sender_ivpk_m, + preimage + ); + } +} diff --git a/yarn-project/aztec.js/src/index.ts b/yarn-project/aztec.js/src/index.ts index d5eb458db246..d239bde316b1 100644 --- a/yarn-project/aztec.js/src/index.ts +++ b/yarn-project/aztec.js/src/index.ts @@ -127,6 +127,7 @@ export { createAztecNodeClient, merkleTreeIds, mockTx, + TaggedNote, } from '@aztec/circuit-types'; export { NodeInfo } from '@aztec/types/interfaces'; diff --git a/yarn-project/end-to-end/Earthfile b/yarn-project/end-to-end/Earthfile index 143458fe9e2c..99f5f10dffea 100644 --- a/yarn-project/end-to-end/Earthfile +++ b/yarn-project/end-to-end/Earthfile @@ -163,6 +163,9 @@ e2e-public-to-private-messaging: e2e-state-vars: DO +E2E_TEST --test=./src/e2e_state_vars.test.ts +e2e-logs: + DO +E2E_TEST --test=./src/e2e_logs.test.ts + e2e-static-calls: DO +E2E_TEST --test=./src/e2e_static_calls.test.ts diff --git a/yarn-project/end-to-end/src/e2e_logs.test.ts b/yarn-project/end-to-end/src/e2e_logs.test.ts new file mode 100644 index 000000000000..aa1ab4134817 --- /dev/null +++ b/yarn-project/end-to-end/src/e2e_logs.test.ts @@ -0,0 +1,53 @@ +import { type AccountWalletWithSecretKey, Fr, TaggedNote } from '@aztec/aztec.js'; +import { deriveMasterIncomingViewingSecretKey } from '@aztec/circuits.js'; +import { makeTuple } from '@aztec/foundation/array'; +import { TestLogContract } from '@aztec/noir-contracts.js'; + +import { jest } from '@jest/globals'; + +import { publicDeployAccounts, setup } from './fixtures/utils.js'; + +const TIMEOUT = 120_000; + +describe('Logs', () => { + let testLogContract: TestLogContract; + jest.setTimeout(TIMEOUT); + + let wallets: AccountWalletWithSecretKey[]; + + let teardown: () => Promise; + + beforeAll(async () => { + ({ teardown, wallets } = await setup(2)); + + await publicDeployAccounts(wallets[0], wallets.slice(0, 2)); + + testLogContract = await TestLogContract.deploy(wallets[0]).send().deployed(); + }); + + afterAll(() => teardown()); + + describe('emits an encrypted log', () => { + it('works', async () => { + const randomness = Fr.random(); + const eventTypeId = Fr.random(); + const preimage = makeTuple(6, Fr.random); + + const tx = await testLogContract.methods.emit_encrypted_log(randomness, eventTypeId, preimage).prove(); + + const encryptedLogs = tx.encryptedLogs.unrollLogs(); + + expect(encryptedLogs.length).toBe(1); + + const decryptedLog = TaggedNote.decryptAsIncoming( + encryptedLogs[0].data, + deriveMasterIncomingViewingSecretKey(wallets[0].getSecretKey()), + ); + + expect(decryptedLog!.notePayload.contractAddress).toStrictEqual(testLogContract.address); + expect(decryptedLog!.notePayload.storageSlot).toStrictEqual(randomness); + expect(decryptedLog!.notePayload.noteTypeId).toStrictEqual(eventTypeId); + expect(decryptedLog!.notePayload.note.items).toStrictEqual(preimage); + }); + }); +});