@aztec/pxe 0.0.1-commit.96bb3f7 → 0.0.1-commit.a072138
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 +9 -5
- package/dest/block_synchronizer/block_synchronizer.d.ts.map +1 -1
- package/dest/block_synchronizer/block_synchronizer.js +66 -21
- 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/benchmarked_node.d.ts +9 -0
- package/dest/contract_function_simulator/benchmarked_node.d.ts.map +1 -0
- package/dest/contract_function_simulator/benchmarked_node.js +77 -0
- package/dest/contract_function_simulator/contract_function_simulator.d.ts +6 -10
- package/dest/contract_function_simulator/contract_function_simulator.d.ts.map +1 -1
- package/dest/contract_function_simulator/contract_function_simulator.js +33 -25
- package/dest/contract_function_simulator/execution_note_cache.d.ts +18 -9
- package/dest/contract_function_simulator/execution_note_cache.d.ts.map +1 -1
- package/dest/contract_function_simulator/execution_note_cache.js +45 -28
- package/dest/contract_function_simulator/index.d.ts +2 -2
- package/dest/contract_function_simulator/index.d.ts.map +1 -1
- package/dest/contract_function_simulator/index.js +1 -1
- 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/noir-structs/utility_context.d.ts +4 -10
- package/dest/contract_function_simulator/noir-structs/utility_context.d.ts.map +1 -1
- package/dest/contract_function_simulator/noir-structs/utility_context.js +7 -18
- package/dest/contract_function_simulator/oracle/interfaces.d.ts +15 -11
- package/dest/contract_function_simulator/oracle/interfaces.d.ts.map +1 -1
- package/dest/contract_function_simulator/oracle/message_load_oracle_inputs.d.ts +3 -1
- package/dest/contract_function_simulator/oracle/message_load_oracle_inputs.d.ts.map +1 -1
- package/dest/contract_function_simulator/oracle/note_packing_utils.d.ts +6 -6
- package/dest/contract_function_simulator/oracle/note_packing_utils.d.ts.map +1 -1
- package/dest/contract_function_simulator/oracle/note_packing_utils.js +8 -8
- package/dest/contract_function_simulator/oracle/oracle.d.ts +10 -8
- package/dest/contract_function_simulator/oracle/oracle.d.ts.map +1 -1
- package/dest/contract_function_simulator/oracle/oracle.js +44 -33
- package/dest/contract_function_simulator/oracle/private_execution.d.ts +2 -26
- package/dest/contract_function_simulator/oracle/private_execution.d.ts.map +1 -1
- package/dest/contract_function_simulator/oracle/private_execution.js +0 -35
- package/dest/contract_function_simulator/oracle/private_execution_oracle.d.ts +11 -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 +22 -10
- package/dest/contract_function_simulator/oracle/utility_execution_oracle.d.ts +33 -20
- package/dest/contract_function_simulator/oracle/utility_execution_oracle.d.ts.map +1 -1
- package/dest/contract_function_simulator/oracle/utility_execution_oracle.js +78 -76
- 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 +3 -1
- package/dest/entrypoints/server/index.d.ts.map +1 -1
- package/dest/entrypoints/server/index.js +2 -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 +6 -6
- package/dest/events/event_service.d.ts.map +1 -1
- package/dest/events/event_service.js +19 -22
- package/dest/events/private_event_filter_validator.d.ts +5 -5
- package/dest/events/private_event_filter_validator.d.ts.map +1 -1
- package/dest/events/private_event_filter_validator.js +5 -6
- 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 +6 -4
- package/dest/logs/log_service.d.ts.map +1 -1
- package/dest/logs/log_service.js +21 -16
- package/dest/notes/note_service.d.ts +7 -7
- package/dest/notes/note_service.d.ts.map +1 -1
- package/dest/notes/note_service.js +31 -36
- 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/hints/index.d.ts +2 -2
- package/dest/private_kernel/hints/index.d.ts.map +1 -1
- package/dest/private_kernel/hints/index.js +1 -1
- package/dest/private_kernel/hints/private_kernel_reset_private_inputs_builder.d.ts +28 -0
- package/dest/private_kernel/hints/private_kernel_reset_private_inputs_builder.d.ts.map +1 -0
- package/dest/private_kernel/hints/{build_private_kernel_reset_private_inputs.js → private_kernel_reset_private_inputs_builder.js} +12 -6
- 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 +3 -3
- package/dest/private_kernel/private_kernel_oracle.d.ts +23 -28
- package/dest/private_kernel/private_kernel_oracle.d.ts.map +1 -1
- package/dest/private_kernel/private_kernel_oracle.js +90 -2
- package/dest/pxe.d.ts +7 -36
- package/dest/pxe.d.ts.map +1 -1
- package/dest/pxe.js +43 -83
- 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.d.ts +24 -9
- package/dest/storage/capsule_store/capsule_store.d.ts.map +1 -1
- package/dest/storage/capsule_store/capsule_store.js +130 -23
- 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 +51 -52
- package/dest/storage/note_store/note_store.d.ts.map +1 -1
- package/dest/storage/note_store/note_store.js +282 -263
- 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 +43 -8
- package/dest/storage/private_event_store/private_event_store.d.ts.map +1 -1
- package/dest/storage/private_event_store/private_event_store.js +226 -111
- 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 +15 -8
- package/dest/storage/tagging_store/recipient_tagging_store.d.ts.map +1 -1
- package/dest/storage/tagging_store/recipient_tagging_store.js +88 -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 +19 -9
- package/dest/storage/tagging_store/sender_tagging_store.d.ts.map +1 -1
- package/dest/storage/tagging_store/sender_tagging_store.js +252 -100
- 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 +6 -6
- 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 +7 -7
- 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 +5 -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 +10 -5
- package/package.json +18 -18
- package/src/bin/check_oracle_version.ts +1 -0
- package/src/block_synchronizer/block_synchronizer.ts +85 -33
- package/src/config/index.ts +14 -0
- package/src/contract_function_simulator/benchmarked_node.ts +103 -0
- package/src/contract_function_simulator/contract_function_simulator.ts +34 -28
- package/src/contract_function_simulator/execution_note_cache.ts +44 -25
- package/src/contract_function_simulator/index.ts +1 -1
- 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/noir-structs/utility_context.ts +6 -25
- package/src/contract_function_simulator/oracle/interfaces.ts +20 -10
- package/src/contract_function_simulator/oracle/note_packing_utils.ts +10 -10
- package/src/contract_function_simulator/oracle/oracle.ts +65 -40
- package/src/contract_function_simulator/oracle/private_execution.ts +1 -67
- package/src/contract_function_simulator/oracle/private_execution_oracle.ts +35 -12
- package/src/contract_function_simulator/oracle/utility_execution_oracle.ts +100 -82
- 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 +2 -0
- package/src/entrypoints/server/utils.ts +15 -19
- package/src/events/event_service.ts +17 -25
- package/src/events/private_event_filter_validator.ts +3 -5
- package/src/job_coordinator/job_coordinator.ts +4 -3
- package/src/logs/log_service.ts +32 -14
- package/src/notes/note_service.ts +38 -43
- package/src/oracle_version.ts +4 -3
- package/src/private_kernel/hints/index.ts +1 -1
- package/src/private_kernel/hints/{build_private_kernel_reset_private_inputs.ts → private_kernel_reset_private_inputs_builder.ts} +32 -20
- package/src/private_kernel/private_kernel_execution_prover.ts +7 -4
- package/src/private_kernel/private_kernel_oracle.ts +116 -37
- package/src/pxe.ts +77 -118
- 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 +159 -23
- 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 +317 -318
- package/src/storage/note_store/stored_note.ts +48 -0
- package/src/storage/private_event_store/private_event_store.ts +292 -124
- package/src/storage/private_event_store/stored_private_event.ts +73 -0
- package/src/storage/tagging_store/recipient_tagging_store.ts +106 -20
- package/src/storage/tagging_store/sender_address_book_store.ts +20 -14
- package/src/storage/tagging_store/sender_tagging_store.ts +293 -108
- 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 +16 -5
- package/src/tagging/recipient_sync/utils/load_logs_for_range.ts +7 -1
- package/src/tagging/sender_sync/sync_sender_tagging_indexes.ts +9 -6
- 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 +16 -4
- package/dest/contract_function_simulator/proxied_node.d.ts +0 -9
- package/dest/contract_function_simulator/proxied_node.d.ts.map +0 -1
- package/dest/contract_function_simulator/proxied_node.js +0 -27
- package/dest/private_kernel/hints/build_private_kernel_reset_private_inputs.d.ts +0 -28
- package/dest/private_kernel/hints/build_private_kernel_reset_private_inputs.d.ts.map +0 -1
- package/dest/private_kernel/private_kernel_oracle_impl.d.ts +0 -46
- package/dest/private_kernel/private_kernel_oracle_impl.d.ts.map +0 -1
- package/dest/private_kernel/private_kernel_oracle_impl.js +0 -85
- package/dest/public_storage/public_storage_service.d.ts +0 -24
- package/dest/public_storage/public_storage_service.d.ts.map +0 -1
- package/dest/public_storage/public_storage_service.js +0 -26
- package/dest/tree_membership/tree_membership_service.d.ts +0 -52
- package/dest/tree_membership/tree_membership_service.d.ts.map +0 -1
- package/dest/tree_membership/tree_membership_service.js +0 -84
- package/src/contract_function_simulator/proxied_node.ts +0 -33
- package/src/private_kernel/private_kernel_oracle_impl.ts +0 -127
- package/src/public_storage/public_storage_service.ts +0 -33
- package/src/tree_membership/tree_membership_service.ts +0 -112
|
@@ -12,11 +12,11 @@ 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 { BlockHash } from '@aztec/stdlib/block';
|
|
15
16
|
import { ContractClassLog, ContractClassLogFields } from '@aztec/stdlib/logs';
|
|
16
|
-
import { MerkleTreeId } from '@aztec/stdlib/trees';
|
|
17
17
|
|
|
18
18
|
import type { IMiscOracle, IPrivateExecutionOracle, IUtilityExecutionOracle } from './interfaces.js';
|
|
19
|
-
import {
|
|
19
|
+
import { packAsHintedNote } from './note_packing_utils.js';
|
|
20
20
|
|
|
21
21
|
export class UnavailableOracleError extends Error {
|
|
22
22
|
constructor(oracleName: string) {
|
|
@@ -137,77 +137,94 @@ export class Oracle {
|
|
|
137
137
|
].map(toACVMField);
|
|
138
138
|
}
|
|
139
139
|
|
|
140
|
-
async
|
|
141
|
-
[
|
|
142
|
-
[
|
|
143
|
-
[leafValue]: ACVMField[],
|
|
140
|
+
async utilityGetNoteHashMembershipWitness(
|
|
141
|
+
[anchorBlockHash]: ACVMField[],
|
|
142
|
+
[noteHash]: ACVMField[],
|
|
144
143
|
): Promise<(ACVMField | ACVMField[])[]> {
|
|
145
|
-
const
|
|
146
|
-
const
|
|
147
|
-
const parsedLeafValue = Fr.fromString(leafValue);
|
|
144
|
+
const parsedAnchorBlockHash = BlockHash.fromString(anchorBlockHash);
|
|
145
|
+
const parsedNoteHash = Fr.fromString(noteHash);
|
|
148
146
|
|
|
149
|
-
const witness = await this.handlerAsUtility().
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
parsedLeafValue,
|
|
147
|
+
const witness = await this.handlerAsUtility().utilityGetNoteHashMembershipWitness(
|
|
148
|
+
parsedAnchorBlockHash,
|
|
149
|
+
parsedNoteHash,
|
|
153
150
|
);
|
|
154
151
|
if (!witness) {
|
|
155
152
|
throw new Error(
|
|
156
|
-
`
|
|
153
|
+
`Note hash ${noteHash} not found in the note hash tree at anchor block hash ${parsedAnchorBlockHash.toString()}.`,
|
|
157
154
|
);
|
|
158
155
|
}
|
|
159
|
-
return
|
|
156
|
+
return witness.toNoirRepresentation();
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
async utilityGetBlockHashMembershipWitness(
|
|
160
|
+
[anchorBlockHash]: ACVMField[],
|
|
161
|
+
[blockHash]: ACVMField[],
|
|
162
|
+
): Promise<(ACVMField | ACVMField[])[]> {
|
|
163
|
+
const parsedAnchorBlockHash = BlockHash.fromString(anchorBlockHash);
|
|
164
|
+
const parsedBlockHash = BlockHash.fromString(blockHash);
|
|
165
|
+
|
|
166
|
+
const witness = await this.handlerAsUtility().utilityGetBlockHashMembershipWitness(
|
|
167
|
+
parsedAnchorBlockHash,
|
|
168
|
+
parsedBlockHash,
|
|
169
|
+
);
|
|
170
|
+
if (!witness) {
|
|
171
|
+
throw new Error(
|
|
172
|
+
`Block hash ${parsedBlockHash.toString()} not found in the archive tree at anchor block ${parsedAnchorBlockHash.toString()}.`,
|
|
173
|
+
);
|
|
174
|
+
}
|
|
175
|
+
return witness.toNoirRepresentation();
|
|
160
176
|
}
|
|
161
177
|
|
|
162
178
|
async utilityGetNullifierMembershipWitness(
|
|
163
|
-
[
|
|
179
|
+
[blockHash]: ACVMField[],
|
|
164
180
|
[nullifier]: ACVMField[], // nullifier, we try to find the witness for (to prove inclusion)
|
|
165
181
|
): Promise<(ACVMField | ACVMField[])[]> {
|
|
166
|
-
const
|
|
182
|
+
const parsedBlockHash = BlockHash.fromString(blockHash);
|
|
167
183
|
const parsedNullifier = Fr.fromString(nullifier);
|
|
168
184
|
|
|
169
185
|
const witness = await this.handlerAsUtility().utilityGetNullifierMembershipWitness(
|
|
170
|
-
|
|
186
|
+
parsedBlockHash,
|
|
171
187
|
parsedNullifier,
|
|
172
188
|
);
|
|
173
189
|
if (!witness) {
|
|
174
|
-
throw new Error(
|
|
190
|
+
throw new Error(
|
|
191
|
+
`Nullifier witness not found for nullifier ${parsedNullifier} at block hash ${parsedBlockHash.toString()}.`,
|
|
192
|
+
);
|
|
175
193
|
}
|
|
176
194
|
return witness.toNoirRepresentation();
|
|
177
195
|
}
|
|
178
196
|
|
|
179
197
|
async utilityGetLowNullifierMembershipWitness(
|
|
180
|
-
[
|
|
198
|
+
[blockHash]: ACVMField[],
|
|
181
199
|
[nullifier]: ACVMField[], // nullifier, we try to find the low nullifier witness for (to prove non-inclusion)
|
|
182
200
|
): Promise<(ACVMField | ACVMField[])[]> {
|
|
183
|
-
const
|
|
201
|
+
const parsedBlockHash = BlockHash.fromString(blockHash);
|
|
184
202
|
const parsedNullifier = Fr.fromString(nullifier);
|
|
185
203
|
|
|
186
204
|
const witness = await this.handlerAsUtility().utilityGetLowNullifierMembershipWitness(
|
|
187
|
-
|
|
205
|
+
parsedBlockHash,
|
|
188
206
|
parsedNullifier,
|
|
189
207
|
);
|
|
190
208
|
if (!witness) {
|
|
191
209
|
throw new Error(
|
|
192
|
-
`Low nullifier witness not found for nullifier ${parsedNullifier} at block ${
|
|
210
|
+
`Low nullifier witness not found for nullifier ${parsedNullifier} at block hash ${parsedBlockHash.toString()}.`,
|
|
193
211
|
);
|
|
194
212
|
}
|
|
195
213
|
return witness.toNoirRepresentation();
|
|
196
214
|
}
|
|
197
215
|
|
|
198
216
|
async utilityGetPublicDataWitness(
|
|
199
|
-
[
|
|
217
|
+
[blockHash]: ACVMField[],
|
|
200
218
|
[leafSlot]: ACVMField[],
|
|
201
219
|
): Promise<(ACVMField | ACVMField[])[]> {
|
|
202
|
-
const
|
|
220
|
+
const parsedBlockHash = BlockHash.fromString(blockHash);
|
|
203
221
|
const parsedLeafSlot = Fr.fromString(leafSlot);
|
|
204
222
|
|
|
205
|
-
const witness = await this.handlerAsUtility().utilityGetPublicDataWitness(
|
|
206
|
-
BlockNumber(parsedBlockNumber),
|
|
207
|
-
parsedLeafSlot,
|
|
208
|
-
);
|
|
223
|
+
const witness = await this.handlerAsUtility().utilityGetPublicDataWitness(parsedBlockHash, parsedLeafSlot);
|
|
209
224
|
if (!witness) {
|
|
210
|
-
throw new Error(
|
|
225
|
+
throw new Error(
|
|
226
|
+
`Public data witness not found for slot ${parsedLeafSlot} at block hash ${parsedBlockHash.toString()}.`,
|
|
227
|
+
);
|
|
211
228
|
}
|
|
212
229
|
return witness.toNoirRepresentation();
|
|
213
230
|
}
|
|
@@ -257,7 +274,7 @@ export class Oracle {
|
|
|
257
274
|
[offset]: ACVMField[],
|
|
258
275
|
[status]: ACVMField[],
|
|
259
276
|
[maxNotes]: ACVMField[],
|
|
260
|
-
[
|
|
277
|
+
[packedHintedNoteLength]: ACVMField[],
|
|
261
278
|
): Promise<(ACVMField | ACVMField[])[]> {
|
|
262
279
|
// Parse Option<AztecAddress>: ownerSome is 0 for None, 1 for Some
|
|
263
280
|
const owner = Fr.fromString(ownerSome).toNumber() === 1 ? AztecAddress.fromString(ownerValue) : undefined;
|
|
@@ -279,25 +296,25 @@ export class Oracle {
|
|
|
279
296
|
+status,
|
|
280
297
|
);
|
|
281
298
|
|
|
282
|
-
const
|
|
283
|
-
|
|
299
|
+
const returnDataAsArrayOfPackedHintedNotes = noteDatas.map(noteData =>
|
|
300
|
+
packAsHintedNote({
|
|
284
301
|
contractAddress: noteData.contractAddress,
|
|
285
302
|
owner: noteData.owner,
|
|
286
303
|
randomness: noteData.randomness,
|
|
287
304
|
storageSlot: noteData.storageSlot,
|
|
288
305
|
noteNonce: noteData.noteNonce,
|
|
289
|
-
|
|
306
|
+
isPending: noteData.isPending,
|
|
290
307
|
note: noteData.note,
|
|
291
308
|
}),
|
|
292
309
|
);
|
|
293
310
|
|
|
294
311
|
// Now we convert each sub-array to an array of ACVMField
|
|
295
|
-
const returnDataAsArrayOfACVMFieldArrays =
|
|
312
|
+
const returnDataAsArrayOfACVMFieldArrays = returnDataAsArrayOfPackedHintedNotes.map(subArray =>
|
|
296
313
|
subArray.map(toACVMField),
|
|
297
314
|
);
|
|
298
315
|
|
|
299
316
|
// At last we convert the array of arrays to a bounded vec of arrays
|
|
300
|
-
return arrayOfArraysToBoundedVecOfArrays(returnDataAsArrayOfACVMFieldArrays, +maxNotes, +
|
|
317
|
+
return arrayOfArraysToBoundedVecOfArrays(returnDataAsArrayOfACVMFieldArrays, +maxNotes, +packedHintedNoteLength);
|
|
301
318
|
}
|
|
302
319
|
|
|
303
320
|
privateNotifyCreatedNote(
|
|
@@ -339,6 +356,14 @@ export class Oracle {
|
|
|
339
356
|
return [];
|
|
340
357
|
}
|
|
341
358
|
|
|
359
|
+
async privateIsNullifierPending([innerNullifier]: ACVMField[], [contractAddress]: ACVMField[]): Promise<ACVMField[]> {
|
|
360
|
+
const isPending = await this.handlerAsPrivate().privateIsNullifierPending(
|
|
361
|
+
Fr.fromString(innerNullifier),
|
|
362
|
+
AztecAddress.fromString(contractAddress),
|
|
363
|
+
);
|
|
364
|
+
return [toACVMField(isPending)];
|
|
365
|
+
}
|
|
366
|
+
|
|
342
367
|
async utilityCheckNullifierExists([innerNullifier]: ACVMField[]): Promise<ACVMField[]> {
|
|
343
368
|
const exists = await this.handlerAsUtility().utilityCheckNullifierExists(Fr.fromString(innerNullifier));
|
|
344
369
|
return [toACVMField(exists)];
|
|
@@ -358,15 +383,15 @@ export class Oracle {
|
|
|
358
383
|
}
|
|
359
384
|
|
|
360
385
|
async utilityStorageRead(
|
|
386
|
+
[blockHash]: ACVMField[],
|
|
361
387
|
[contractAddress]: ACVMField[],
|
|
362
388
|
[startStorageSlot]: ACVMField[],
|
|
363
|
-
[blockNumber]: ACVMField[],
|
|
364
389
|
[numberOfElements]: ACVMField[],
|
|
365
390
|
): Promise<ACVMField[][]> {
|
|
366
391
|
const values = await this.handlerAsUtility().utilityStorageRead(
|
|
392
|
+
BlockHash.fromString(blockHash),
|
|
367
393
|
new AztecAddress(Fr.fromString(contractAddress)),
|
|
368
394
|
Fr.fromString(startStorageSlot),
|
|
369
|
-
BlockNumber(+blockNumber),
|
|
370
395
|
+numberOfElements,
|
|
371
396
|
);
|
|
372
397
|
return [values.map(toACVMField)];
|
|
@@ -476,12 +501,12 @@ export class Oracle {
|
|
|
476
501
|
return [];
|
|
477
502
|
}
|
|
478
503
|
|
|
479
|
-
async
|
|
504
|
+
async utilityValidateAndStoreEnqueuedNotesAndEvents(
|
|
480
505
|
[contractAddress]: ACVMField[],
|
|
481
506
|
[noteValidationRequestsArrayBaseSlot]: ACVMField[],
|
|
482
507
|
[eventValidationRequestsArrayBaseSlot]: ACVMField[],
|
|
483
508
|
): Promise<ACVMField[]> {
|
|
484
|
-
await this.handlerAsUtility().
|
|
509
|
+
await this.handlerAsUtility().utilityValidateAndStoreEnqueuedNotesAndEvents(
|
|
485
510
|
AztecAddress.fromString(contractAddress),
|
|
486
511
|
Fr.fromString(noteValidationRequestsArrayBaseSlot),
|
|
487
512
|
Fr.fromString(eventValidationRequestsArrayBaseSlot),
|
|
@@ -1,9 +1,7 @@
|
|
|
1
1
|
import { PRIVATE_CIRCUIT_PUBLIC_INPUTS_LENGTH, PRIVATE_CONTEXT_INPUTS_LENGTH } from '@aztec/constants';
|
|
2
|
-
import { BlockNumber } from '@aztec/foundation/branded-types';
|
|
3
2
|
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
4
3
|
import { createLogger } from '@aztec/foundation/log';
|
|
5
4
|
import { Timer } from '@aztec/foundation/timer';
|
|
6
|
-
import { ProtocolContractAddress } from '@aztec/protocol-contracts';
|
|
7
5
|
import {
|
|
8
6
|
type ACVMWitness,
|
|
9
7
|
type CircuitSimulator,
|
|
@@ -19,15 +17,10 @@ import {
|
|
|
19
17
|
countArgumentsSize,
|
|
20
18
|
} from '@aztec/stdlib/abi';
|
|
21
19
|
import type { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
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 {
|
|
28
|
-
import type { UInt64 } from '@aztec/stdlib/types';
|
|
22
|
+
import { PrivateCallExecutionResult } from '@aztec/stdlib/tx';
|
|
29
23
|
|
|
30
|
-
import { ContractStore } from '../../storage/contract_store/index.js';
|
|
31
24
|
import { Oracle } from './oracle.js';
|
|
32
25
|
import type { PrivateExecutionOracle } from './private_execution_oracle.js';
|
|
33
26
|
|
|
@@ -146,62 +139,3 @@ export function extractPrivateCircuitPublicInputs(
|
|
|
146
139
|
}
|
|
147
140
|
return PrivateCircuitPublicInputs.fromFields(returnData);
|
|
148
141
|
}
|
|
149
|
-
|
|
150
|
-
/**
|
|
151
|
-
* Read the current class id of a contract from the execution data provider or AztecNode. If not found, class id
|
|
152
|
-
* from the instance is used.
|
|
153
|
-
* @param contractAddress - The address of the contract to read the class id for.
|
|
154
|
-
* @param instance - The instance of the contract.
|
|
155
|
-
* @param executionStore - The execution data provider.
|
|
156
|
-
* @param blockNumber - The block number at which to load the DelayedPublicMutable storing the class id.
|
|
157
|
-
* @param timestamp - The timestamp at which to obtain the class id from the DelayedPublicMutable.
|
|
158
|
-
* @returns The current class id.
|
|
159
|
-
*/
|
|
160
|
-
export async function readCurrentClassId(
|
|
161
|
-
contractAddress: AztecAddress,
|
|
162
|
-
instance: ContractInstance,
|
|
163
|
-
aztecNode: AztecNode,
|
|
164
|
-
blockNumber: BlockNumber,
|
|
165
|
-
timestamp: UInt64,
|
|
166
|
-
) {
|
|
167
|
-
const { delayedPublicMutableSlot } = await DelayedPublicMutableValuesWithHash.getContractUpdateSlots(contractAddress);
|
|
168
|
-
const delayedPublicMutableValues = await DelayedPublicMutableValues.readFromTree(delayedPublicMutableSlot, slot =>
|
|
169
|
-
aztecNode.getPublicStorageAt(blockNumber, 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. If not provided, the anchor block
|
|
182
|
-
* header of the execution data provider is used.
|
|
183
|
-
*/
|
|
184
|
-
export async function verifyCurrentClassId(
|
|
185
|
-
contractAddress: AztecAddress,
|
|
186
|
-
aztecNode: AztecNode,
|
|
187
|
-
contractStore: ContractStore,
|
|
188
|
-
header: BlockHeader,
|
|
189
|
-
) {
|
|
190
|
-
const instance = await contractStore.getContractInstance(contractAddress);
|
|
191
|
-
if (!instance) {
|
|
192
|
-
throw new Error(`No contract instance found for address ${contractAddress.toString()}`);
|
|
193
|
-
}
|
|
194
|
-
|
|
195
|
-
const currentClassId = await readCurrentClassId(
|
|
196
|
-
contractAddress,
|
|
197
|
-
instance,
|
|
198
|
-
aztecNode,
|
|
199
|
-
header.globalVariables.blockNumber,
|
|
200
|
-
header.globalVariables.timestamp,
|
|
201
|
-
);
|
|
202
|
-
if (!instance.currentContractClassId.equals(currentClassId)) {
|
|
203
|
-
throw new Error(
|
|
204
|
-
`Contract ${contractAddress} is outdated, current class id is ${currentClassId}, local class id is ${instance.currentContractClassId}`,
|
|
205
|
-
);
|
|
206
|
-
}
|
|
207
|
-
}
|
|
@@ -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,9 +263,16 @@ 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(
|
|
269
|
-
|
|
270
|
-
|
|
266
|
+
await syncSenderTaggingIndexes(
|
|
267
|
+
secret,
|
|
268
|
+
this.contractAddress,
|
|
269
|
+
this.aztecNode,
|
|
270
|
+
this.senderTaggingStore,
|
|
271
|
+
await this.anchorBlockHeader.hash(),
|
|
272
|
+
this.jobId,
|
|
273
|
+
);
|
|
274
|
+
|
|
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
|
|
272
277
|
// Otherwise, the next index to use is one past the last used index
|
|
273
278
|
return lastUsedIndex === undefined ? 0 : lastUsedIndex + 1;
|
|
@@ -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,
|
|
@@ -428,6 +433,7 @@ export class PrivateExecutionOracle extends UtilityExecutionOracle implements IP
|
|
|
428
433
|
note,
|
|
429
434
|
siloedNullifier: undefined, // Siloed nullifier cannot be known for newly created note.
|
|
430
435
|
noteHash,
|
|
436
|
+
isPending: true, // This note has just been created and hence is not settled yet.
|
|
431
437
|
},
|
|
432
438
|
counter,
|
|
433
439
|
);
|
|
@@ -462,6 +468,19 @@ export class PrivateExecutionOracle extends UtilityExecutionOracle implements IP
|
|
|
462
468
|
return this.noteCache.nullifierCreated(this.callContext.contractAddress, innerNullifier);
|
|
463
469
|
}
|
|
464
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
|
+
|
|
465
484
|
/**
|
|
466
485
|
* Emit a contract class log.
|
|
467
486
|
* This fn exists because we only carry a poseidon hash through the kernels, and need to
|
|
@@ -518,9 +537,14 @@ export class PrivateExecutionOracle extends UtilityExecutionOracle implements IP
|
|
|
518
537
|
|
|
519
538
|
isStaticCall = isStaticCall || this.callContext.isStaticCall;
|
|
520
539
|
|
|
521
|
-
await
|
|
522
|
-
|
|
523
|
-
|
|
540
|
+
await ensureContractSynced(
|
|
541
|
+
targetContractAddress,
|
|
542
|
+
functionSelector,
|
|
543
|
+
this.utilityExecutor,
|
|
544
|
+
this.aztecNode,
|
|
545
|
+
this.contractStore,
|
|
546
|
+
this.anchorBlockHeader,
|
|
547
|
+
);
|
|
524
548
|
|
|
525
549
|
const targetArtifact = await this.contractStore.getFunctionArtifactWithDebugMetadata(
|
|
526
550
|
targetContractAddress,
|
|
@@ -547,7 +571,6 @@ export class PrivateExecutionOracle extends UtilityExecutionOracle implements IP
|
|
|
547
571
|
this.keyStore,
|
|
548
572
|
this.addressStore,
|
|
549
573
|
this.aztecNode,
|
|
550
|
-
this.anchorBlockStore,
|
|
551
574
|
this.senderTaggingStore,
|
|
552
575
|
this.recipientTaggingStore,
|
|
553
576
|
this.senderAddressBookStore,
|