@aztec/pxe 0.0.1-commit.d431d1c → 0.0.1-commit.e3c1de76
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dest/bin/check_oracle_version.js +1 -1
- package/dest/block_synchronizer/block_synchronizer.d.ts +7 -5
- package/dest/block_synchronizer/block_synchronizer.d.ts.map +1 -1
- package/dest/block_synchronizer/block_synchronizer.js +56 -16
- package/dest/config/index.d.ts +3 -1
- package/dest/config/index.d.ts.map +1 -1
- package/dest/config/index.js +17 -0
- package/dest/contract_function_simulator/contract_function_simulator.d.ts +2 -4
- package/dest/contract_function_simulator/contract_function_simulator.d.ts.map +1 -1
- package/dest/contract_function_simulator/contract_function_simulator.js +8 -13
- package/dest/contract_function_simulator/noir-structs/event_validation_request.d.ts +1 -1
- package/dest/contract_function_simulator/noir-structs/event_validation_request.js +1 -1
- package/dest/contract_function_simulator/noir-structs/note_validation_request.d.ts +1 -1
- package/dest/contract_function_simulator/noir-structs/note_validation_request.js +1 -1
- package/dest/contract_function_simulator/oracle/interfaces.d.ts +13 -10
- package/dest/contract_function_simulator/oracle/interfaces.d.ts.map +1 -1
- package/dest/contract_function_simulator/oracle/oracle.d.ts +5 -3
- package/dest/contract_function_simulator/oracle/oracle.d.ts.map +1 -1
- package/dest/contract_function_simulator/oracle/oracle.js +27 -17
- package/dest/contract_function_simulator/oracle/private_execution.d.ts +2 -22
- package/dest/contract_function_simulator/oracle/private_execution.d.ts.map +1 -1
- package/dest/contract_function_simulator/oracle/private_execution.js +0 -37
- package/dest/contract_function_simulator/oracle/private_execution_oracle.d.ts +10 -3
- package/dest/contract_function_simulator/oracle/private_execution_oracle.d.ts.map +1 -1
- package/dest/contract_function_simulator/oracle/private_execution_oracle.js +19 -8
- package/dest/contract_function_simulator/oracle/utility_execution_oracle.d.ts +21 -15
- package/dest/contract_function_simulator/oracle/utility_execution_oracle.d.ts.map +1 -1
- package/dest/contract_function_simulator/oracle/utility_execution_oracle.js +39 -43
- package/dest/contract_sync/index.d.ts +23 -0
- package/dest/contract_sync/index.d.ts.map +1 -0
- package/dest/contract_sync/index.js +54 -0
- package/dest/debug/pxe_debug_utils.d.ts +16 -6
- package/dest/debug/pxe_debug_utils.d.ts.map +1 -1
- package/dest/debug/pxe_debug_utils.js +20 -10
- package/dest/entrypoints/client/bundle/utils.d.ts +1 -1
- package/dest/entrypoints/client/bundle/utils.d.ts.map +1 -1
- package/dest/entrypoints/client/bundle/utils.js +12 -6
- package/dest/entrypoints/client/lazy/utils.d.ts +2 -2
- package/dest/entrypoints/client/lazy/utils.d.ts.map +1 -1
- package/dest/entrypoints/client/lazy/utils.js +13 -7
- package/dest/entrypoints/pxe_creation_options.d.ts +3 -2
- package/dest/entrypoints/pxe_creation_options.d.ts.map +1 -1
- package/dest/entrypoints/server/index.d.ts +2 -1
- package/dest/entrypoints/server/index.d.ts.map +1 -1
- package/dest/entrypoints/server/index.js +1 -0
- package/dest/entrypoints/server/utils.d.ts +1 -1
- package/dest/entrypoints/server/utils.d.ts.map +1 -1
- package/dest/entrypoints/server/utils.js +19 -8
- package/dest/events/event_service.d.ts +5 -6
- package/dest/events/event_service.d.ts.map +1 -1
- package/dest/events/event_service.js +6 -7
- package/dest/job_coordinator/job_coordinator.d.ts +3 -2
- package/dest/job_coordinator/job_coordinator.d.ts.map +1 -1
- package/dest/job_coordinator/job_coordinator.js +3 -2
- package/dest/logs/log_service.d.ts +5 -4
- package/dest/logs/log_service.d.ts.map +1 -1
- package/dest/logs/log_service.js +18 -15
- package/dest/notes/note_service.d.ts +6 -6
- package/dest/notes/note_service.d.ts.map +1 -1
- package/dest/notes/note_service.js +14 -14
- package/dest/oracle_version.d.ts +3 -3
- package/dest/oracle_version.d.ts.map +1 -1
- package/dest/oracle_version.js +4 -3
- package/dest/private_kernel/private_kernel_execution_prover.d.ts +3 -2
- package/dest/private_kernel/private_kernel_execution_prover.d.ts.map +1 -1
- package/dest/private_kernel/private_kernel_execution_prover.js +2 -2
- package/dest/private_kernel/private_kernel_oracle.d.ts +3 -3
- package/dest/private_kernel/private_kernel_oracle.d.ts.map +1 -1
- package/dest/pxe.d.ts +1 -1
- package/dest/pxe.d.ts.map +1 -1
- package/dest/pxe.js +19 -15
- package/dest/storage/address_store/address_store.d.ts +1 -1
- package/dest/storage/address_store/address_store.d.ts.map +1 -1
- package/dest/storage/address_store/address_store.js +12 -11
- package/dest/storage/anchor_block_store/anchor_block_store.d.ts +9 -1
- package/dest/storage/anchor_block_store/anchor_block_store.d.ts.map +1 -1
- package/dest/storage/anchor_block_store/anchor_block_store.js +8 -1
- package/dest/storage/capsule_store/capsule_store.js +6 -8
- package/dest/storage/contract_store/contract_store.d.ts +1 -2
- package/dest/storage/contract_store/contract_store.d.ts.map +1 -1
- package/dest/storage/contract_store/contract_store.js +22 -25
- package/dest/storage/metadata.d.ts +1 -1
- package/dest/storage/metadata.js +1 -1
- package/dest/storage/note_store/note_store.d.ts +48 -50
- package/dest/storage/note_store/note_store.d.ts.map +1 -1
- package/dest/storage/note_store/note_store.js +276 -252
- package/dest/storage/note_store/stored_note.d.ts +16 -0
- package/dest/storage/note_store/stored_note.d.ts.map +1 -0
- package/dest/storage/note_store/stored_note.js +43 -0
- package/dest/storage/private_event_store/private_event_store.d.ts +17 -4
- package/dest/storage/private_event_store/private_event_store.d.ts.map +1 -1
- package/dest/storage/private_event_store/private_event_store.js +198 -147
- package/dest/storage/private_event_store/stored_private_event.d.ts +23 -0
- package/dest/storage/private_event_store/stored_private_event.d.ts.map +1 -0
- package/dest/storage/private_event_store/stored_private_event.js +56 -0
- package/dest/storage/tagging_store/recipient_tagging_store.d.ts +1 -1
- package/dest/storage/tagging_store/recipient_tagging_store.d.ts.map +1 -1
- package/dest/storage/tagging_store/recipient_tagging_store.js +31 -19
- package/dest/storage/tagging_store/sender_address_book_store.d.ts +1 -1
- package/dest/storage/tagging_store/sender_address_book_store.d.ts.map +1 -1
- package/dest/storage/tagging_store/sender_address_book_store.js +20 -14
- package/dest/storage/tagging_store/sender_tagging_store.d.ts +1 -1
- package/dest/storage/tagging_store/sender_tagging_store.d.ts.map +1 -1
- package/dest/storage/tagging_store/sender_tagging_store.js +183 -113
- package/dest/tagging/get_all_logs_by_tags.d.ts +24 -0
- package/dest/tagging/get_all_logs_by_tags.d.ts.map +1 -0
- package/dest/tagging/get_all_logs_by_tags.js +46 -0
- package/dest/tagging/index.d.ts +2 -1
- package/dest/tagging/index.d.ts.map +1 -1
- package/dest/tagging/index.js +1 -0
- package/dest/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.d.ts +3 -2
- package/dest/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.d.ts.map +1 -1
- package/dest/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.js +2 -2
- package/dest/tagging/recipient_sync/utils/load_logs_for_range.d.ts +3 -2
- package/dest/tagging/recipient_sync/utils/load_logs_for_range.d.ts.map +1 -1
- package/dest/tagging/recipient_sync/utils/load_logs_for_range.js +5 -2
- package/dest/tagging/sender_sync/sync_sender_tagging_indexes.d.ts +3 -2
- package/dest/tagging/sender_sync/sync_sender_tagging_indexes.d.ts.map +1 -1
- package/dest/tagging/sender_sync/sync_sender_tagging_indexes.js +2 -2
- package/dest/tagging/sender_sync/utils/get_status_change_of_pending.d.ts +1 -1
- package/dest/tagging/sender_sync/utils/get_status_change_of_pending.d.ts.map +1 -1
- package/dest/tagging/sender_sync/utils/get_status_change_of_pending.js +5 -8
- package/dest/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.d.ts +3 -2
- package/dest/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.d.ts.map +1 -1
- package/dest/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.js +7 -4
- package/package.json +16 -16
- package/src/bin/check_oracle_version.ts +1 -0
- package/src/block_synchronizer/block_synchronizer.ts +70 -33
- package/src/config/index.ts +14 -0
- package/src/contract_function_simulator/contract_function_simulator.ts +7 -15
- package/src/contract_function_simulator/noir-structs/event_validation_request.ts +1 -1
- package/src/contract_function_simulator/noir-structs/note_validation_request.ts +1 -1
- package/src/contract_function_simulator/oracle/interfaces.ts +18 -9
- package/src/contract_function_simulator/oracle/oracle.ts +34 -21
- package/src/contract_function_simulator/oracle/private_execution.ts +1 -60
- package/src/contract_function_simulator/oracle/private_execution_oracle.ts +32 -10
- package/src/contract_function_simulator/oracle/utility_execution_oracle.ts +59 -51
- package/src/contract_sync/index.ts +98 -0
- package/src/debug/pxe_debug_utils.ts +26 -11
- package/src/entrypoints/client/bundle/utils.ts +7 -14
- package/src/entrypoints/client/lazy/utils.ts +8 -14
- package/src/entrypoints/pxe_creation_options.ts +2 -1
- package/src/entrypoints/server/index.ts +1 -0
- package/src/entrypoints/server/utils.ts +15 -19
- package/src/events/event_service.ts +5 -7
- package/src/job_coordinator/job_coordinator.ts +4 -3
- package/src/logs/log_service.ts +29 -13
- package/src/notes/note_service.ts +21 -20
- package/src/oracle_version.ts +4 -3
- package/src/private_kernel/private_kernel_execution_prover.ts +6 -3
- package/src/private_kernel/private_kernel_oracle.ts +2 -2
- package/src/pxe.ts +48 -17
- package/src/storage/address_store/address_store.ts +15 -15
- package/src/storage/anchor_block_store/anchor_block_store.ts +8 -0
- package/src/storage/capsule_store/capsule_store.ts +8 -8
- package/src/storage/contract_store/contract_store.ts +22 -31
- package/src/storage/metadata.ts +1 -1
- package/src/storage/note_store/note_store.ts +314 -318
- package/src/storage/note_store/stored_note.ts +48 -0
- package/src/storage/private_event_store/private_event_store.ts +250 -190
- package/src/storage/private_event_store/stored_private_event.ts +73 -0
- package/src/storage/tagging_store/recipient_tagging_store.ts +31 -21
- package/src/storage/tagging_store/sender_address_book_store.ts +20 -14
- package/src/storage/tagging_store/sender_tagging_store.ts +210 -126
- package/src/tagging/get_all_logs_by_tags.ts +68 -0
- package/src/tagging/index.ts +1 -0
- package/src/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.ts +11 -1
- package/src/tagging/recipient_sync/utils/load_logs_for_range.ts +7 -1
- package/src/tagging/sender_sync/sync_sender_tagging_indexes.ts +3 -1
- package/src/tagging/sender_sync/utils/get_status_change_of_pending.ts +5 -17
- package/src/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.ts +12 -3
- package/dest/tree_membership/tree_membership_service.d.ts +0 -50
- package/dest/tree_membership/tree_membership_service.d.ts.map +0 -1
- package/dest/tree_membership/tree_membership_service.js +0 -75
- package/src/tree_membership/tree_membership_service.ts +0 -97
|
@@ -1,15 +1,16 @@
|
|
|
1
|
-
import type { L1_TO_L2_MSG_TREE_HEIGHT } from '@aztec/constants';
|
|
1
|
+
import type { ARCHIVE_HEIGHT, L1_TO_L2_MSG_TREE_HEIGHT, NOTE_HASH_TREE_HEIGHT } from '@aztec/constants';
|
|
2
2
|
import type { BlockNumber } from '@aztec/foundation/branded-types';
|
|
3
3
|
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
4
4
|
import { Point } from '@aztec/foundation/curves/grumpkin';
|
|
5
|
+
import { MembershipWitness } from '@aztec/foundation/trees';
|
|
5
6
|
import type { FunctionSelector, NoteSelector } from '@aztec/stdlib/abi';
|
|
6
7
|
import type { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
7
|
-
import {
|
|
8
|
+
import { BlockHash } from '@aztec/stdlib/block';
|
|
8
9
|
import type { CompleteAddress, ContractInstance } from '@aztec/stdlib/contract';
|
|
9
10
|
import type { KeyValidationRequest } from '@aztec/stdlib/kernel';
|
|
10
11
|
import type { ContractClassLog, Tag } from '@aztec/stdlib/logs';
|
|
11
12
|
import type { Note, NoteStatus } from '@aztec/stdlib/note';
|
|
12
|
-
import { type
|
|
13
|
+
import { type NullifierMembershipWitness, PublicDataWitness } from '@aztec/stdlib/trees';
|
|
13
14
|
import type { BlockHeader } from '@aztec/stdlib/tx';
|
|
14
15
|
|
|
15
16
|
import type { UtilityContext } from '../noir-structs/utility_context.js';
|
|
@@ -66,14 +67,21 @@ export interface IUtilityExecutionOracle {
|
|
|
66
67
|
utilityGetUtilityContext(): UtilityContext;
|
|
67
68
|
utilityGetKeyValidationRequest(pkMHash: Fr): Promise<KeyValidationRequest>;
|
|
68
69
|
utilityGetContractInstance(address: AztecAddress): Promise<ContractInstance>;
|
|
69
|
-
|
|
70
|
+
utilityGetNoteHashMembershipWitness(
|
|
71
|
+
blockHash: BlockHash,
|
|
72
|
+
leafValue: Fr,
|
|
73
|
+
): Promise<MembershipWitness<typeof NOTE_HASH_TREE_HEIGHT> | undefined>;
|
|
74
|
+
utilityGetArchiveMembershipWitness(
|
|
75
|
+
blockHash: BlockHash,
|
|
76
|
+
leafValue: Fr,
|
|
77
|
+
): Promise<MembershipWitness<typeof ARCHIVE_HEIGHT> | undefined>;
|
|
70
78
|
utilityGetNullifierMembershipWitness(
|
|
71
|
-
blockHash:
|
|
79
|
+
blockHash: BlockHash,
|
|
72
80
|
nullifier: Fr,
|
|
73
81
|
): Promise<NullifierMembershipWitness | undefined>;
|
|
74
|
-
utilityGetPublicDataWitness(blockHash:
|
|
82
|
+
utilityGetPublicDataWitness(blockHash: BlockHash, leafSlot: Fr): Promise<PublicDataWitness | undefined>;
|
|
75
83
|
utilityGetLowNullifierMembershipWitness(
|
|
76
|
-
blockHash:
|
|
84
|
+
blockHash: BlockHash,
|
|
77
85
|
nullifier: Fr,
|
|
78
86
|
): Promise<NullifierMembershipWitness | undefined>;
|
|
79
87
|
utilityGetBlockHeader(blockNumber: BlockNumber): Promise<BlockHeader | undefined>;
|
|
@@ -103,13 +111,13 @@ export interface IUtilityExecutionOracle {
|
|
|
103
111
|
secret: Fr,
|
|
104
112
|
): Promise<MessageLoadOracleInputs<typeof L1_TO_L2_MSG_TREE_HEIGHT>>;
|
|
105
113
|
utilityStorageRead(
|
|
106
|
-
blockHash:
|
|
114
|
+
blockHash: BlockHash,
|
|
107
115
|
contractAddress: AztecAddress,
|
|
108
116
|
startStorageSlot: Fr,
|
|
109
117
|
numberOfElements: number,
|
|
110
118
|
): Promise<Fr[]>;
|
|
111
119
|
utilityFetchTaggedLogs(pendingTaggedLogArrayBaseSlot: Fr): Promise<void>;
|
|
112
|
-
|
|
120
|
+
utilityValidateAndStoreEnqueuedNotesAndEvents(
|
|
113
121
|
contractAddress: AztecAddress,
|
|
114
122
|
noteValidationRequestsArrayBaseSlot: Fr,
|
|
115
123
|
eventValidationRequestsArrayBaseSlot: Fr,
|
|
@@ -147,6 +155,7 @@ export interface IPrivateExecutionOracle {
|
|
|
147
155
|
): void;
|
|
148
156
|
privateNotifyNullifiedNote(innerNullifier: Fr, noteHash: Fr, counter: number): Promise<void>;
|
|
149
157
|
privateNotifyCreatedNullifier(innerNullifier: Fr): Promise<void>;
|
|
158
|
+
privateIsNullifierPending(innerNullifier: Fr, contractAddress: AztecAddress): Promise<boolean>;
|
|
150
159
|
privateNotifyCreatedContractClassLog(log: ContractClassLog, counter: number): void;
|
|
151
160
|
privateCallPrivateFunction(
|
|
152
161
|
targetContractAddress: AztecAddress,
|
|
@@ -12,9 +12,8 @@ import {
|
|
|
12
12
|
} from '@aztec/simulator/client';
|
|
13
13
|
import { FunctionSelector, NoteSelector } from '@aztec/stdlib/abi';
|
|
14
14
|
import { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
15
|
-
import {
|
|
15
|
+
import { BlockHash } from '@aztec/stdlib/block';
|
|
16
16
|
import { ContractClassLog, ContractClassLogFields } from '@aztec/stdlib/logs';
|
|
17
|
-
import { MerkleTreeId } from '@aztec/stdlib/trees';
|
|
18
17
|
|
|
19
18
|
import type { IMiscOracle, IPrivateExecutionOracle, IUtilityExecutionOracle } from './interfaces.js';
|
|
20
19
|
import { packAsHintedNote } from './note_packing_utils.js';
|
|
@@ -138,33 +137,39 @@ export class Oracle {
|
|
|
138
137
|
].map(toACVMField);
|
|
139
138
|
}
|
|
140
139
|
|
|
141
|
-
async
|
|
140
|
+
async utilityGetNoteHashMembershipWitness(
|
|
142
141
|
[blockHash]: ACVMField[],
|
|
143
|
-
[treeId]: ACVMField[],
|
|
144
142
|
[leafValue]: ACVMField[],
|
|
145
143
|
): Promise<(ACVMField | ACVMField[])[]> {
|
|
146
|
-
const parsedBlockHash =
|
|
147
|
-
const parsedTreeId = Fr.fromString(treeId).toNumber();
|
|
144
|
+
const parsedBlockHash = BlockHash.fromString(blockHash);
|
|
148
145
|
const parsedLeafValue = Fr.fromString(leafValue);
|
|
149
146
|
|
|
150
|
-
const witness = await this.handlerAsUtility().
|
|
151
|
-
parsedBlockHash,
|
|
152
|
-
parsedTreeId,
|
|
153
|
-
parsedLeafValue,
|
|
154
|
-
);
|
|
147
|
+
const witness = await this.handlerAsUtility().utilityGetNoteHashMembershipWitness(parsedBlockHash, parsedLeafValue);
|
|
155
148
|
if (!witness) {
|
|
156
|
-
throw new Error(
|
|
157
|
-
|
|
158
|
-
|
|
149
|
+
throw new Error(`Leaf ${leafValue} not found in the note hash tree at block hash ${parsedBlockHash.toString()}.`);
|
|
150
|
+
}
|
|
151
|
+
return witness.toNoirRepresentation();
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
async utilityGetArchiveMembershipWitness(
|
|
155
|
+
[blockHash]: ACVMField[],
|
|
156
|
+
[leafValue]: ACVMField[],
|
|
157
|
+
): Promise<(ACVMField | ACVMField[])[]> {
|
|
158
|
+
const parsedBlockHash = BlockHash.fromString(blockHash);
|
|
159
|
+
const parsedLeafValue = Fr.fromString(leafValue);
|
|
160
|
+
|
|
161
|
+
const witness = await this.handlerAsUtility().utilityGetArchiveMembershipWitness(parsedBlockHash, parsedLeafValue);
|
|
162
|
+
if (!witness) {
|
|
163
|
+
throw new Error(`Leaf ${leafValue} not found in the archive tree at block hash ${parsedBlockHash.toString()}.`);
|
|
159
164
|
}
|
|
160
|
-
return
|
|
165
|
+
return witness.toNoirRepresentation();
|
|
161
166
|
}
|
|
162
167
|
|
|
163
168
|
async utilityGetNullifierMembershipWitness(
|
|
164
169
|
[blockHash]: ACVMField[],
|
|
165
170
|
[nullifier]: ACVMField[], // nullifier, we try to find the witness for (to prove inclusion)
|
|
166
171
|
): Promise<(ACVMField | ACVMField[])[]> {
|
|
167
|
-
const parsedBlockHash =
|
|
172
|
+
const parsedBlockHash = BlockHash.fromString(blockHash);
|
|
168
173
|
const parsedNullifier = Fr.fromString(nullifier);
|
|
169
174
|
|
|
170
175
|
const witness = await this.handlerAsUtility().utilityGetNullifierMembershipWitness(
|
|
@@ -183,7 +188,7 @@ export class Oracle {
|
|
|
183
188
|
[blockHash]: ACVMField[],
|
|
184
189
|
[nullifier]: ACVMField[], // nullifier, we try to find the low nullifier witness for (to prove non-inclusion)
|
|
185
190
|
): Promise<(ACVMField | ACVMField[])[]> {
|
|
186
|
-
const parsedBlockHash =
|
|
191
|
+
const parsedBlockHash = BlockHash.fromString(blockHash);
|
|
187
192
|
const parsedNullifier = Fr.fromString(nullifier);
|
|
188
193
|
|
|
189
194
|
const witness = await this.handlerAsUtility().utilityGetLowNullifierMembershipWitness(
|
|
@@ -202,7 +207,7 @@ export class Oracle {
|
|
|
202
207
|
[blockHash]: ACVMField[],
|
|
203
208
|
[leafSlot]: ACVMField[],
|
|
204
209
|
): Promise<(ACVMField | ACVMField[])[]> {
|
|
205
|
-
const parsedBlockHash =
|
|
210
|
+
const parsedBlockHash = BlockHash.fromString(blockHash);
|
|
206
211
|
const parsedLeafSlot = Fr.fromString(leafSlot);
|
|
207
212
|
|
|
208
213
|
const witness = await this.handlerAsUtility().utilityGetPublicDataWitness(parsedBlockHash, parsedLeafSlot);
|
|
@@ -341,6 +346,14 @@ export class Oracle {
|
|
|
341
346
|
return [];
|
|
342
347
|
}
|
|
343
348
|
|
|
349
|
+
async privateIsNullifierPending([innerNullifier]: ACVMField[], [contractAddress]: ACVMField[]): Promise<ACVMField[]> {
|
|
350
|
+
const isPending = await this.handlerAsPrivate().privateIsNullifierPending(
|
|
351
|
+
Fr.fromString(innerNullifier),
|
|
352
|
+
AztecAddress.fromString(contractAddress),
|
|
353
|
+
);
|
|
354
|
+
return [toACVMField(isPending)];
|
|
355
|
+
}
|
|
356
|
+
|
|
344
357
|
async utilityCheckNullifierExists([innerNullifier]: ACVMField[]): Promise<ACVMField[]> {
|
|
345
358
|
const exists = await this.handlerAsUtility().utilityCheckNullifierExists(Fr.fromString(innerNullifier));
|
|
346
359
|
return [toACVMField(exists)];
|
|
@@ -366,7 +379,7 @@ export class Oracle {
|
|
|
366
379
|
[numberOfElements]: ACVMField[],
|
|
367
380
|
): Promise<ACVMField[][]> {
|
|
368
381
|
const values = await this.handlerAsUtility().utilityStorageRead(
|
|
369
|
-
|
|
382
|
+
BlockHash.fromString(blockHash),
|
|
370
383
|
new AztecAddress(Fr.fromString(contractAddress)),
|
|
371
384
|
Fr.fromString(startStorageSlot),
|
|
372
385
|
+numberOfElements,
|
|
@@ -478,12 +491,12 @@ export class Oracle {
|
|
|
478
491
|
return [];
|
|
479
492
|
}
|
|
480
493
|
|
|
481
|
-
async
|
|
494
|
+
async utilityValidateAndStoreEnqueuedNotesAndEvents(
|
|
482
495
|
[contractAddress]: ACVMField[],
|
|
483
496
|
[noteValidationRequestsArrayBaseSlot]: ACVMField[],
|
|
484
497
|
[eventValidationRequestsArrayBaseSlot]: ACVMField[],
|
|
485
498
|
): Promise<ACVMField[]> {
|
|
486
|
-
await this.handlerAsUtility().
|
|
499
|
+
await this.handlerAsUtility().utilityValidateAndStoreEnqueuedNotesAndEvents(
|
|
487
500
|
AztecAddress.fromString(contractAddress),
|
|
488
501
|
Fr.fromString(noteValidationRequestsArrayBaseSlot),
|
|
489
502
|
Fr.fromString(eventValidationRequestsArrayBaseSlot),
|
|
@@ -2,7 +2,6 @@ import { PRIVATE_CIRCUIT_PUBLIC_INPUTS_LENGTH, PRIVATE_CONTEXT_INPUTS_LENGTH } f
|
|
|
2
2
|
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
3
3
|
import { createLogger } from '@aztec/foundation/log';
|
|
4
4
|
import { Timer } from '@aztec/foundation/timer';
|
|
5
|
-
import { ProtocolContractAddress } from '@aztec/protocol-contracts';
|
|
6
5
|
import {
|
|
7
6
|
type ACVMWitness,
|
|
8
7
|
type CircuitSimulator,
|
|
@@ -18,15 +17,10 @@ import {
|
|
|
18
17
|
countArgumentsSize,
|
|
19
18
|
} from '@aztec/stdlib/abi';
|
|
20
19
|
import type { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
21
|
-
import { L2BlockHash } from '@aztec/stdlib/block';
|
|
22
|
-
import type { ContractInstance } from '@aztec/stdlib/contract';
|
|
23
|
-
import { DelayedPublicMutableValues, DelayedPublicMutableValuesWithHash } from '@aztec/stdlib/delayed-public-mutable';
|
|
24
|
-
import type { AztecNode } from '@aztec/stdlib/interfaces/client';
|
|
25
20
|
import { PrivateCircuitPublicInputs } from '@aztec/stdlib/kernel';
|
|
26
21
|
import type { CircuitWitnessGenerationStats } from '@aztec/stdlib/stats';
|
|
27
|
-
import {
|
|
22
|
+
import { PrivateCallExecutionResult } from '@aztec/stdlib/tx';
|
|
28
23
|
|
|
29
|
-
import { ContractStore } from '../../storage/contract_store/index.js';
|
|
30
24
|
import { Oracle } from './oracle.js';
|
|
31
25
|
import type { PrivateExecutionOracle } from './private_execution_oracle.js';
|
|
32
26
|
|
|
@@ -145,56 +139,3 @@ export function extractPrivateCircuitPublicInputs(
|
|
|
145
139
|
}
|
|
146
140
|
return PrivateCircuitPublicInputs.fromFields(returnData);
|
|
147
141
|
}
|
|
148
|
-
|
|
149
|
-
/**
|
|
150
|
-
* Read the current class id of a contract from the execution data provider or AztecNode. If not found, class id
|
|
151
|
-
* from the instance is used.
|
|
152
|
-
* @param contractAddress - The address of the contract to read the class id for.
|
|
153
|
-
* @param instance - The instance of the contract.
|
|
154
|
-
* @param aztecNode - The Aztec node to query for storage.
|
|
155
|
-
* @param header - The header of the block at which to load the DelayedPublicMutable storing the class id.
|
|
156
|
-
* @returns The current class id.
|
|
157
|
-
*/
|
|
158
|
-
export async function readCurrentClassId(
|
|
159
|
-
contractAddress: AztecAddress,
|
|
160
|
-
instance: ContractInstance,
|
|
161
|
-
aztecNode: AztecNode,
|
|
162
|
-
header: BlockHeader,
|
|
163
|
-
) {
|
|
164
|
-
const blockHashFr = await header.hash();
|
|
165
|
-
const blockHash = L2BlockHash.fromField(blockHashFr);
|
|
166
|
-
const timestamp = header.globalVariables.timestamp;
|
|
167
|
-
const { delayedPublicMutableSlot } = await DelayedPublicMutableValuesWithHash.getContractUpdateSlots(contractAddress);
|
|
168
|
-
const delayedPublicMutableValues = await DelayedPublicMutableValues.readFromTree(delayedPublicMutableSlot, slot =>
|
|
169
|
-
aztecNode.getPublicStorageAt(blockHash, ProtocolContractAddress.ContractInstanceRegistry, slot),
|
|
170
|
-
);
|
|
171
|
-
let currentClassId = delayedPublicMutableValues.svc.getCurrentAt(timestamp)[0];
|
|
172
|
-
if (currentClassId.isZero()) {
|
|
173
|
-
currentClassId = instance.originalContractClassId;
|
|
174
|
-
}
|
|
175
|
-
return currentClassId;
|
|
176
|
-
}
|
|
177
|
-
|
|
178
|
-
/**
|
|
179
|
-
* Verify that the current class id of a contract obtained from AztecNode is the same as the one in contract data
|
|
180
|
-
* provider (i.e. PXE's own storage).
|
|
181
|
-
* @param header - The header of the block at which to verify the current class id.
|
|
182
|
-
*/
|
|
183
|
-
export async function verifyCurrentClassId(
|
|
184
|
-
contractAddress: AztecAddress,
|
|
185
|
-
aztecNode: AztecNode,
|
|
186
|
-
contractStore: ContractStore,
|
|
187
|
-
header: BlockHeader,
|
|
188
|
-
) {
|
|
189
|
-
const instance = await contractStore.getContractInstance(contractAddress);
|
|
190
|
-
if (!instance) {
|
|
191
|
-
throw new Error(`No contract instance found for address ${contractAddress.toString()}`);
|
|
192
|
-
}
|
|
193
|
-
|
|
194
|
-
const currentClassId = await readCurrentClassId(contractAddress, instance, aztecNode, header);
|
|
195
|
-
if (!instance.currentContractClassId.equals(currentClassId)) {
|
|
196
|
-
throw new Error(
|
|
197
|
-
`Contract ${contractAddress} is outdated, current class id is ${currentClassId}, local class id is ${instance.currentContractClassId}`,
|
|
198
|
-
);
|
|
199
|
-
}
|
|
200
|
-
}
|
|
@@ -30,9 +30,9 @@ import {
|
|
|
30
30
|
type TxContext,
|
|
31
31
|
} from '@aztec/stdlib/tx';
|
|
32
32
|
|
|
33
|
+
import { ensureContractSynced } from '../../contract_sync/index.js';
|
|
33
34
|
import { NoteService } from '../../notes/note_service.js';
|
|
34
35
|
import type { AddressStore } from '../../storage/address_store/address_store.js';
|
|
35
|
-
import type { AnchorBlockStore } from '../../storage/anchor_block_store/anchor_block_store.js';
|
|
36
36
|
import type { CapsuleStore } from '../../storage/capsule_store/capsule_store.js';
|
|
37
37
|
import type { ContractStore } from '../../storage/contract_store/contract_store.js';
|
|
38
38
|
import type { NoteStore } from '../../storage/note_store/note_store.js';
|
|
@@ -46,7 +46,7 @@ import { ExecutionTaggingIndexCache } from '../execution_tagging_index_cache.js'
|
|
|
46
46
|
import type { HashedValuesCache } from '../hashed_values_cache.js';
|
|
47
47
|
import { pickNotes } from '../pick_notes.js';
|
|
48
48
|
import type { IPrivateExecutionOracle, NoteData } from './interfaces.js';
|
|
49
|
-
import { executePrivateFunction
|
|
49
|
+
import { executePrivateFunction } from './private_execution.js';
|
|
50
50
|
import { UtilityExecutionOracle } from './utility_execution_oracle.js';
|
|
51
51
|
|
|
52
52
|
/**
|
|
@@ -88,7 +88,6 @@ export class PrivateExecutionOracle extends UtilityExecutionOracle implements IP
|
|
|
88
88
|
keyStore: KeyStore,
|
|
89
89
|
addressStore: AddressStore,
|
|
90
90
|
aztecNode: AztecNode,
|
|
91
|
-
anchorBlockStore: AnchorBlockStore,
|
|
92
91
|
private readonly senderTaggingStore: SenderTaggingStore,
|
|
93
92
|
recipientTaggingStore: RecipientTaggingStore,
|
|
94
93
|
senderAddressBookStore: SenderAddressBookStore,
|
|
@@ -112,7 +111,6 @@ export class PrivateExecutionOracle extends UtilityExecutionOracle implements IP
|
|
|
112
111
|
keyStore,
|
|
113
112
|
addressStore,
|
|
114
113
|
aztecNode,
|
|
115
|
-
anchorBlockStore,
|
|
116
114
|
recipientTaggingStore,
|
|
117
115
|
senderAddressBookStore,
|
|
118
116
|
capsuleStore,
|
|
@@ -265,7 +263,14 @@ export class PrivateExecutionOracle extends UtilityExecutionOracle implements IP
|
|
|
265
263
|
// This is a tagging secret we've not yet used in this tx, so first sync our store to make sure its indices
|
|
266
264
|
// are up to date. We do this here because this store is not synced as part of the global sync because
|
|
267
265
|
// that'd be wasteful as most tagging secrets are not used in each tx.
|
|
268
|
-
await syncSenderTaggingIndexes(
|
|
266
|
+
await syncSenderTaggingIndexes(
|
|
267
|
+
secret,
|
|
268
|
+
this.contractAddress,
|
|
269
|
+
this.aztecNode,
|
|
270
|
+
this.senderTaggingStore,
|
|
271
|
+
await this.anchorBlockHeader.hash(),
|
|
272
|
+
this.jobId,
|
|
273
|
+
);
|
|
269
274
|
|
|
270
275
|
const lastUsedIndex = await this.senderTaggingStore.getLastUsedIndex(secret, this.jobId);
|
|
271
276
|
// If lastUsedIndex is undefined, we've never used this secret, so start from 0
|
|
@@ -356,7 +361,7 @@ export class PrivateExecutionOracle extends UtilityExecutionOracle implements IP
|
|
|
356
361
|
|
|
357
362
|
const pendingNullifiers = this.noteCache.getNullifiers(this.callContext.contractAddress);
|
|
358
363
|
|
|
359
|
-
const noteService = new NoteService(this.noteStore, this.aztecNode, this.
|
|
364
|
+
const noteService = new NoteService(this.noteStore, this.aztecNode, this.anchorBlockHeader, this.jobId);
|
|
360
365
|
const dbNotes = await noteService.getNotes(
|
|
361
366
|
this.callContext.contractAddress,
|
|
362
367
|
owner,
|
|
@@ -463,6 +468,19 @@ export class PrivateExecutionOracle extends UtilityExecutionOracle implements IP
|
|
|
463
468
|
return this.noteCache.nullifierCreated(this.callContext.contractAddress, innerNullifier);
|
|
464
469
|
}
|
|
465
470
|
|
|
471
|
+
/**
|
|
472
|
+
* Check if a nullifier has been emitted in the same transaction, i.e. if privateNotifyCreatedNullifier has been
|
|
473
|
+
* called for this inner nullifier from the contract with the specified address.
|
|
474
|
+
* @param innerNullifier - The inner nullifier to check.
|
|
475
|
+
* @param contractAddress - Address of the contract that emitted the nullifier.
|
|
476
|
+
* @returns A boolean indicating whether the nullifier is pending or not.
|
|
477
|
+
*/
|
|
478
|
+
public async privateIsNullifierPending(innerNullifier: Fr, contractAddress: AztecAddress): Promise<boolean> {
|
|
479
|
+
const siloedNullifier = await siloNullifier(contractAddress, innerNullifier);
|
|
480
|
+
const isNullifierPending = this.noteCache.getNullifiers(contractAddress).has(siloedNullifier.toBigInt());
|
|
481
|
+
return Promise.resolve(isNullifierPending);
|
|
482
|
+
}
|
|
483
|
+
|
|
466
484
|
/**
|
|
467
485
|
* Emit a contract class log.
|
|
468
486
|
* This fn exists because we only carry a poseidon hash through the kernels, and need to
|
|
@@ -519,9 +537,14 @@ export class PrivateExecutionOracle extends UtilityExecutionOracle implements IP
|
|
|
519
537
|
|
|
520
538
|
isStaticCall = isStaticCall || this.callContext.isStaticCall;
|
|
521
539
|
|
|
522
|
-
await
|
|
523
|
-
|
|
524
|
-
|
|
540
|
+
await ensureContractSynced(
|
|
541
|
+
targetContractAddress,
|
|
542
|
+
functionSelector,
|
|
543
|
+
this.utilityExecutor,
|
|
544
|
+
this.aztecNode,
|
|
545
|
+
this.contractStore,
|
|
546
|
+
this.anchorBlockHeader,
|
|
547
|
+
);
|
|
525
548
|
|
|
526
549
|
const targetArtifact = await this.contractStore.getFunctionArtifactWithDebugMetadata(
|
|
527
550
|
targetContractAddress,
|
|
@@ -548,7 +571,6 @@ export class PrivateExecutionOracle extends UtilityExecutionOracle implements IP
|
|
|
548
571
|
this.keyStore,
|
|
549
572
|
this.addressStore,
|
|
550
573
|
this.aztecNode,
|
|
551
|
-
this.anchorBlockStore,
|
|
552
574
|
this.senderTaggingStore,
|
|
553
575
|
this.recipientTaggingStore,
|
|
554
576
|
this.senderAddressBookStore,
|
|
@@ -1,18 +1,21 @@
|
|
|
1
|
+
import type { ARCHIVE_HEIGHT, NOTE_HASH_TREE_HEIGHT } from '@aztec/constants';
|
|
1
2
|
import type { BlockNumber } from '@aztec/foundation/branded-types';
|
|
2
3
|
import { Aes128 } from '@aztec/foundation/crypto/aes128';
|
|
3
4
|
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
4
5
|
import { Point } from '@aztec/foundation/curves/grumpkin';
|
|
5
6
|
import { LogLevels, applyStringFormatting, createLogger } from '@aztec/foundation/log';
|
|
7
|
+
import type { MembershipWitness } from '@aztec/foundation/trees';
|
|
6
8
|
import type { KeyStore } from '@aztec/key-store';
|
|
7
9
|
import type { AuthWitness } from '@aztec/stdlib/auth-witness';
|
|
8
10
|
import { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
9
|
-
import {
|
|
11
|
+
import { BlockHash } from '@aztec/stdlib/block';
|
|
10
12
|
import type { CompleteAddress, ContractInstance } from '@aztec/stdlib/contract';
|
|
11
13
|
import { siloNullifier } from '@aztec/stdlib/hash';
|
|
12
14
|
import type { AztecNode } from '@aztec/stdlib/interfaces/server';
|
|
13
15
|
import type { KeyValidationRequest } from '@aztec/stdlib/kernel';
|
|
14
16
|
import { computeAddressSecret } from '@aztec/stdlib/keys';
|
|
15
17
|
import { deriveEcdhSharedSecret } from '@aztec/stdlib/logs';
|
|
18
|
+
import { getNonNullifiedL1ToL2MessageWitness } from '@aztec/stdlib/messaging';
|
|
16
19
|
import type { NoteStatus } from '@aztec/stdlib/note';
|
|
17
20
|
import { MerkleTreeId, type NullifierMembershipWitness, PublicDataWitness } from '@aztec/stdlib/trees';
|
|
18
21
|
import type { BlockHeader, Capsule } from '@aztec/stdlib/tx';
|
|
@@ -22,14 +25,12 @@ import { LogService } from '../../logs/log_service.js';
|
|
|
22
25
|
import { NoteService } from '../../notes/note_service.js';
|
|
23
26
|
import { ORACLE_VERSION } from '../../oracle_version.js';
|
|
24
27
|
import type { AddressStore } from '../../storage/address_store/address_store.js';
|
|
25
|
-
import type { AnchorBlockStore } from '../../storage/anchor_block_store/anchor_block_store.js';
|
|
26
28
|
import type { CapsuleStore } from '../../storage/capsule_store/capsule_store.js';
|
|
27
29
|
import type { ContractStore } from '../../storage/contract_store/contract_store.js';
|
|
28
30
|
import type { NoteStore } from '../../storage/note_store/note_store.js';
|
|
29
31
|
import type { PrivateEventStore } from '../../storage/private_event_store/private_event_store.js';
|
|
30
32
|
import type { RecipientTaggingStore } from '../../storage/tagging_store/recipient_tagging_store.js';
|
|
31
33
|
import type { SenderAddressBookStore } from '../../storage/tagging_store/sender_address_book_store.js';
|
|
32
|
-
import { TreeMembershipService } from '../../tree_membership/tree_membership_service.js';
|
|
33
34
|
import { EventValidationRequest } from '../noir-structs/event_validation_request.js';
|
|
34
35
|
import { LogRetrievalRequest } from '../noir-structs/log_retrieval_request.js';
|
|
35
36
|
import { LogRetrievalResponse } from '../noir-structs/log_retrieval_response.js';
|
|
@@ -59,7 +60,6 @@ export class UtilityExecutionOracle implements IMiscOracle, IUtilityExecutionOra
|
|
|
59
60
|
protected readonly keyStore: KeyStore,
|
|
60
61
|
protected readonly addressStore: AddressStore,
|
|
61
62
|
protected readonly aztecNode: AztecNode,
|
|
62
|
-
protected readonly anchorBlockStore: AnchorBlockStore,
|
|
63
63
|
protected readonly recipientTaggingStore: RecipientTaggingStore,
|
|
64
64
|
protected readonly senderAddressBookStore: SenderAddressBookStore,
|
|
65
65
|
protected readonly capsuleStore: CapsuleStore,
|
|
@@ -94,15 +94,29 @@ export class UtilityExecutionOracle implements IMiscOracle, IUtilityExecutionOra
|
|
|
94
94
|
}
|
|
95
95
|
|
|
96
96
|
/**
|
|
97
|
-
* Fetches the index and sibling path of a leaf at a given block from
|
|
97
|
+
* Fetches the index and sibling path of a leaf at a given block from the note hash tree.
|
|
98
98
|
* @param blockHash - The block hash at which to get the membership witness.
|
|
99
|
-
* @param treeId - Id of the tree to get the sibling path from.
|
|
100
99
|
* @param leafValue - The leaf value
|
|
101
|
-
* @returns The index and sibling path
|
|
100
|
+
* @returns The membership witness containing the leaf index and sibling path
|
|
102
101
|
*/
|
|
103
|
-
public
|
|
104
|
-
|
|
105
|
-
|
|
102
|
+
public utilityGetNoteHashMembershipWitness(
|
|
103
|
+
blockHash: BlockHash,
|
|
104
|
+
leafValue: Fr,
|
|
105
|
+
): Promise<MembershipWitness<typeof NOTE_HASH_TREE_HEIGHT> | undefined> {
|
|
106
|
+
return this.aztecNode.getNoteHashMembershipWitness(blockHash, leafValue);
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
/**
|
|
110
|
+
* Fetches the index and sibling path of a leaf at a given block from the archive tree.
|
|
111
|
+
* @param blockHash - The block hash at which to get the membership witness.
|
|
112
|
+
* @param leafValue - The leaf value
|
|
113
|
+
* @returns The membership witness containing the leaf index and sibling path
|
|
114
|
+
*/
|
|
115
|
+
public utilityGetArchiveMembershipWitness(
|
|
116
|
+
blockHash: BlockHash,
|
|
117
|
+
leafValue: Fr,
|
|
118
|
+
): Promise<MembershipWitness<typeof ARCHIVE_HEIGHT> | undefined> {
|
|
119
|
+
return this.aztecNode.getArchiveMembershipWitness(blockHash, leafValue);
|
|
106
120
|
}
|
|
107
121
|
|
|
108
122
|
/**
|
|
@@ -111,11 +125,11 @@ export class UtilityExecutionOracle implements IMiscOracle, IUtilityExecutionOra
|
|
|
111
125
|
* @param nullifier - Nullifier we try to find witness for.
|
|
112
126
|
* @returns The nullifier membership witness (if found).
|
|
113
127
|
*/
|
|
114
|
-
public
|
|
115
|
-
blockHash:
|
|
128
|
+
public utilityGetNullifierMembershipWitness(
|
|
129
|
+
blockHash: BlockHash,
|
|
116
130
|
nullifier: Fr,
|
|
117
131
|
): Promise<NullifierMembershipWitness | undefined> {
|
|
118
|
-
return
|
|
132
|
+
return this.aztecNode.getNullifierMembershipWitness(blockHash, nullifier);
|
|
119
133
|
}
|
|
120
134
|
|
|
121
135
|
/**
|
|
@@ -127,12 +141,11 @@ export class UtilityExecutionOracle implements IMiscOracle, IUtilityExecutionOra
|
|
|
127
141
|
* list structure" of leaves and proving that a lower nullifier is pointing to a bigger next value than the nullifier
|
|
128
142
|
* we are trying to prove non-inclusion for.
|
|
129
143
|
*/
|
|
130
|
-
public
|
|
131
|
-
blockHash:
|
|
144
|
+
public utilityGetLowNullifierMembershipWitness(
|
|
145
|
+
blockHash: BlockHash,
|
|
132
146
|
nullifier: Fr,
|
|
133
147
|
): Promise<NullifierMembershipWitness | undefined> {
|
|
134
|
-
|
|
135
|
-
return await treeMembershipService.getLowNullifierMembershipWitness(blockHash, nullifier);
|
|
148
|
+
return this.aztecNode.getLowNullifierMembershipWitness(blockHash, nullifier);
|
|
136
149
|
}
|
|
137
150
|
|
|
138
151
|
/**
|
|
@@ -141,12 +154,8 @@ export class UtilityExecutionOracle implements IMiscOracle, IUtilityExecutionOra
|
|
|
141
154
|
* @param leafSlot - The slot of the public data tree to get the witness for.
|
|
142
155
|
* @returns - The witness
|
|
143
156
|
*/
|
|
144
|
-
public
|
|
145
|
-
blockHash
|
|
146
|
-
leafSlot: Fr,
|
|
147
|
-
): Promise<PublicDataWitness | undefined> {
|
|
148
|
-
const treeMembershipService = new TreeMembershipService(this.aztecNode);
|
|
149
|
-
return await treeMembershipService.getPublicDataWitness(blockHash, leafSlot);
|
|
157
|
+
public utilityGetPublicDataWitness(blockHash: BlockHash, leafSlot: Fr): Promise<PublicDataWitness | undefined> {
|
|
158
|
+
return this.aztecNode.getPublicDataWitness(blockHash, leafSlot);
|
|
150
159
|
}
|
|
151
160
|
|
|
152
161
|
/**
|
|
@@ -155,7 +164,7 @@ export class UtilityExecutionOracle implements IMiscOracle, IUtilityExecutionOra
|
|
|
155
164
|
* @returns Block extracted from a block with block number `blockNumber`.
|
|
156
165
|
*/
|
|
157
166
|
public async utilityGetBlockHeader(blockNumber: BlockNumber): Promise<BlockHeader | undefined> {
|
|
158
|
-
const anchorBlockNumber =
|
|
167
|
+
const anchorBlockNumber = this.anchorBlockHeader.getBlockNumber();
|
|
159
168
|
if (blockNumber > anchorBlockNumber) {
|
|
160
169
|
throw new Error(`Block number ${blockNumber} is higher than current block ${anchorBlockNumber}`);
|
|
161
170
|
}
|
|
@@ -251,7 +260,7 @@ export class UtilityExecutionOracle implements IMiscOracle, IUtilityExecutionOra
|
|
|
251
260
|
offset: number,
|
|
252
261
|
status: NoteStatus,
|
|
253
262
|
): Promise<NoteData[]> {
|
|
254
|
-
const noteService = new NoteService(this.noteStore, this.aztecNode, this.
|
|
263
|
+
const noteService = new NoteService(this.noteStore, this.aztecNode, this.anchorBlockHeader, this.jobId);
|
|
255
264
|
|
|
256
265
|
const dbNotes = await noteService.getNotes(this.contractAddress, owner, storageSlot, status, this.scopes);
|
|
257
266
|
return pickNotes<NoteData>(dbNotes, {
|
|
@@ -276,9 +285,8 @@ export class UtilityExecutionOracle implements IMiscOracle, IUtilityExecutionOra
|
|
|
276
285
|
*/
|
|
277
286
|
public async utilityCheckNullifierExists(innerNullifier: Fr) {
|
|
278
287
|
const nullifier = await siloNullifier(this.contractAddress, innerNullifier!);
|
|
279
|
-
const
|
|
280
|
-
|
|
281
|
-
return index !== undefined;
|
|
288
|
+
const [leafIndex] = await this.aztecNode.findLeavesIndexes('latest', MerkleTreeId.NULLIFIER_TREE, [nullifier]);
|
|
289
|
+
return leafIndex?.data !== undefined;
|
|
282
290
|
}
|
|
283
291
|
|
|
284
292
|
/**
|
|
@@ -290,14 +298,13 @@ export class UtilityExecutionOracle implements IMiscOracle, IUtilityExecutionOra
|
|
|
290
298
|
* @returns The l1 to l2 membership witness (index of message in the tree and sibling path).
|
|
291
299
|
*/
|
|
292
300
|
public async utilityGetL1ToL2MembershipWitness(contractAddress: AztecAddress, messageHash: Fr, secret: Fr) {
|
|
293
|
-
const
|
|
294
|
-
|
|
301
|
+
const [messageIndex, siblingPath] = await getNonNullifiedL1ToL2MessageWitness(
|
|
302
|
+
this.aztecNode,
|
|
295
303
|
contractAddress,
|
|
296
304
|
messageHash,
|
|
297
305
|
secret,
|
|
298
306
|
);
|
|
299
307
|
|
|
300
|
-
// Assuming messageIndex is what you intended to use for the index in MessageLoadOracleInputs
|
|
301
308
|
return new MessageLoadOracleInputs(messageIndex, siblingPath);
|
|
302
309
|
}
|
|
303
310
|
|
|
@@ -309,24 +316,23 @@ export class UtilityExecutionOracle implements IMiscOracle, IUtilityExecutionOra
|
|
|
309
316
|
* @param numberOfElements - Number of elements to read from the starting storage slot.
|
|
310
317
|
*/
|
|
311
318
|
public async utilityStorageRead(
|
|
312
|
-
blockHash:
|
|
319
|
+
blockHash: BlockHash,
|
|
313
320
|
contractAddress: AztecAddress,
|
|
314
321
|
startStorageSlot: Fr,
|
|
315
322
|
numberOfElements: number,
|
|
316
323
|
) {
|
|
317
|
-
const
|
|
324
|
+
const slots = Array(numberOfElements)
|
|
325
|
+
.fill(0)
|
|
326
|
+
.map((_, i) => new Fr(startStorageSlot.value + BigInt(i)));
|
|
318
327
|
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
328
|
+
const values = await Promise.all(
|
|
329
|
+
slots.map(storageSlot => this.aztecNode.getPublicStorageAt(blockHash, contractAddress, storageSlot)),
|
|
330
|
+
);
|
|
331
|
+
|
|
332
|
+
this.log.debug(
|
|
333
|
+
`Oracle storage read: slots=[${slots.map(slot => slot.toString()).join(', ')}] address=${contractAddress.toString()} values=[${values.join(', ')}]`,
|
|
334
|
+
);
|
|
324
335
|
|
|
325
|
-
this.log.debug(
|
|
326
|
-
`Oracle storage read: slot=${storageSlot.toString()} address-${contractAddress.toString()} value=${value}`,
|
|
327
|
-
);
|
|
328
|
-
values.push(value);
|
|
329
|
-
}
|
|
330
336
|
return values;
|
|
331
337
|
}
|
|
332
338
|
|
|
@@ -341,16 +347,17 @@ export class UtilityExecutionOracle implements IMiscOracle, IUtilityExecutionOra
|
|
|
341
347
|
public async utilityFetchTaggedLogs(pendingTaggedLogArrayBaseSlot: Fr) {
|
|
342
348
|
const logService = new LogService(
|
|
343
349
|
this.aztecNode,
|
|
344
|
-
this.
|
|
350
|
+
this.anchorBlockHeader,
|
|
345
351
|
this.keyStore,
|
|
346
352
|
this.capsuleStore,
|
|
347
353
|
this.recipientTaggingStore,
|
|
348
354
|
this.senderAddressBookStore,
|
|
349
355
|
this.addressStore,
|
|
350
356
|
this.jobId,
|
|
357
|
+
this.log.getBindings(),
|
|
351
358
|
);
|
|
352
359
|
|
|
353
|
-
const noteService = new NoteService(this.noteStore, this.aztecNode, this.
|
|
360
|
+
const noteService = new NoteService(this.noteStore, this.aztecNode, this.anchorBlockHeader, this.jobId);
|
|
354
361
|
|
|
355
362
|
// It is acceptable to run the following operations in parallel for several reasons:
|
|
356
363
|
// 1. syncTaggedLogs does not write to the note store — it only stores the pending tagged logs in a capsule array,
|
|
@@ -372,7 +379,7 @@ export class UtilityExecutionOracle implements IMiscOracle, IUtilityExecutionOra
|
|
|
372
379
|
* @param noteValidationRequestsArrayBaseSlot - The base slot of capsule array containing note validation requests.
|
|
373
380
|
* @param eventValidationRequestsArrayBaseSlot - The base slot of capsule array containing event validation requests.
|
|
374
381
|
*/
|
|
375
|
-
public async
|
|
382
|
+
public async utilityValidateAndStoreEnqueuedNotesAndEvents(
|
|
376
383
|
contractAddress: AztecAddress,
|
|
377
384
|
noteValidationRequestsArrayBaseSlot: Fr,
|
|
378
385
|
eventValidationRequestsArrayBaseSlot: Fr,
|
|
@@ -392,9 +399,9 @@ export class UtilityExecutionOracle implements IMiscOracle, IUtilityExecutionOra
|
|
|
392
399
|
await this.capsuleStore.readCapsuleArray(contractAddress, eventValidationRequestsArrayBaseSlot, this.jobId)
|
|
393
400
|
).map(EventValidationRequest.fromFields);
|
|
394
401
|
|
|
395
|
-
const noteService = new NoteService(this.noteStore, this.aztecNode, this.
|
|
402
|
+
const noteService = new NoteService(this.noteStore, this.aztecNode, this.anchorBlockHeader, this.jobId);
|
|
396
403
|
const noteStorePromises = noteValidationRequests.map(request =>
|
|
397
|
-
noteService.
|
|
404
|
+
noteService.validateAndStoreNote(
|
|
398
405
|
request.contractAddress,
|
|
399
406
|
request.owner,
|
|
400
407
|
request.storageSlot,
|
|
@@ -408,9 +415,9 @@ export class UtilityExecutionOracle implements IMiscOracle, IUtilityExecutionOra
|
|
|
408
415
|
),
|
|
409
416
|
);
|
|
410
417
|
|
|
411
|
-
const eventService = new EventService(this.
|
|
418
|
+
const eventService = new EventService(this.anchorBlockHeader, this.aztecNode, this.privateEventStore, this.jobId);
|
|
412
419
|
const eventStorePromises = eventValidationRequests.map(request =>
|
|
413
|
-
eventService.
|
|
420
|
+
eventService.validateAndStoreEvent(
|
|
414
421
|
request.contractAddress,
|
|
415
422
|
request.eventTypeId,
|
|
416
423
|
request.randomness,
|
|
@@ -446,13 +453,14 @@ export class UtilityExecutionOracle implements IMiscOracle, IUtilityExecutionOra
|
|
|
446
453
|
|
|
447
454
|
const logService = new LogService(
|
|
448
455
|
this.aztecNode,
|
|
449
|
-
this.
|
|
456
|
+
this.anchorBlockHeader,
|
|
450
457
|
this.keyStore,
|
|
451
458
|
this.capsuleStore,
|
|
452
459
|
this.recipientTaggingStore,
|
|
453
460
|
this.senderAddressBookStore,
|
|
454
461
|
this.addressStore,
|
|
455
462
|
this.jobId,
|
|
463
|
+
this.log.getBindings(),
|
|
456
464
|
);
|
|
457
465
|
|
|
458
466
|
const maybeLogRetrievalResponses = await logService.bulkRetrieveLogs(logRetrievalRequests);
|