@aztec/pxe 0.0.1-commit.7cf39cb55 → 0.0.1-commit.7ffbba4
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/access_scopes.d.ts +9 -0
- package/dest/access_scopes.d.ts.map +1 -0
- package/dest/access_scopes.js +6 -0
- package/dest/config/index.d.ts +2 -2
- package/dest/config/index.d.ts.map +1 -1
- package/dest/config/index.js +1 -1
- package/dest/config/package_info.js +1 -1
- package/dest/contract_function_simulator/contract_function_simulator.d.ts +5 -4
- package/dest/contract_function_simulator/contract_function_simulator.d.ts.map +1 -1
- package/dest/contract_function_simulator/contract_function_simulator.js +12 -12
- package/dest/contract_function_simulator/execution_tagging_index_cache.d.ts +5 -5
- package/dest/contract_function_simulator/execution_tagging_index_cache.d.ts.map +1 -1
- package/dest/contract_function_simulator/execution_tagging_index_cache.js +3 -3
- package/dest/contract_function_simulator/noir-structs/event_validation_request.d.ts +2 -3
- package/dest/contract_function_simulator/noir-structs/event_validation_request.d.ts.map +1 -1
- package/dest/contract_function_simulator/noir-structs/event_validation_request.js +5 -4
- package/dest/contract_function_simulator/noir-structs/log_retrieval_response.d.ts +1 -1
- package/dest/contract_function_simulator/noir-structs/log_retrieval_response.d.ts.map +1 -1
- package/dest/contract_function_simulator/noir-structs/log_retrieval_response.js +1 -3
- package/dest/contract_function_simulator/noir-structs/note_validation_request.d.ts +2 -4
- package/dest/contract_function_simulator/noir-structs/note_validation_request.d.ts.map +1 -1
- package/dest/contract_function_simulator/noir-structs/note_validation_request.js +3 -5
- package/dest/contract_function_simulator/oracle/interfaces.d.ts +48 -45
- package/dest/contract_function_simulator/oracle/interfaces.d.ts.map +1 -1
- package/dest/contract_function_simulator/oracle/oracle.d.ts +43 -44
- package/dest/contract_function_simulator/oracle/oracle.d.ts.map +1 -1
- package/dest/contract_function_simulator/oracle/oracle.js +129 -91
- package/dest/contract_function_simulator/oracle/private_execution.js +1 -1
- package/dest/contract_function_simulator/oracle/private_execution_oracle.d.ts +22 -35
- package/dest/contract_function_simulator/oracle/private_execution_oracle.d.ts.map +1 -1
- package/dest/contract_function_simulator/oracle/private_execution_oracle.js +37 -64
- package/dest/contract_function_simulator/oracle/utility_execution_oracle.d.ts +39 -36
- package/dest/contract_function_simulator/oracle/utility_execution_oracle.d.ts.map +1 -1
- package/dest/contract_function_simulator/oracle/utility_execution_oracle.js +49 -51
- package/dest/contract_logging.d.ts +22 -0
- package/dest/contract_logging.d.ts.map +1 -0
- package/dest/contract_logging.js +23 -0
- package/dest/contract_sync/contract_sync_service.d.ts +4 -3
- package/dest/contract_sync/contract_sync_service.d.ts.map +1 -1
- package/dest/contract_sync/contract_sync_service.js +10 -10
- package/dest/contract_sync/helpers.d.ts +3 -2
- package/dest/contract_sync/helpers.d.ts.map +1 -1
- package/dest/contract_sync/helpers.js +3 -3
- package/dest/debug/pxe_debug_utils.d.ts +5 -4
- package/dest/debug/pxe_debug_utils.d.ts.map +1 -1
- package/dest/debug/pxe_debug_utils.js +4 -4
- package/dest/entrypoints/client/bundle/index.d.ts +4 -1
- package/dest/entrypoints/client/bundle/index.d.ts.map +1 -1
- package/dest/entrypoints/client/bundle/index.js +3 -0
- package/dest/entrypoints/client/lazy/index.d.ts +4 -1
- package/dest/entrypoints/client/lazy/index.d.ts.map +1 -1
- package/dest/entrypoints/client/lazy/index.js +3 -0
- 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/logs/log_service.d.ts +3 -2
- package/dest/logs/log_service.d.ts.map +1 -1
- package/dest/logs/log_service.js +5 -5
- package/dest/notes/note_service.d.ts +4 -3
- package/dest/notes/note_service.d.ts.map +1 -1
- package/dest/notes/note_service.js +3 -2
- package/dest/notes_filter.d.ts +25 -0
- package/dest/notes_filter.d.ts.map +1 -0
- package/dest/notes_filter.js +4 -0
- package/dest/oracle_version.d.ts +2 -2
- package/dest/oracle_version.js +3 -3
- package/dest/private_kernel/hints/compute_tx_expiration_timestamp.d.ts +4 -0
- package/dest/private_kernel/hints/compute_tx_expiration_timestamp.d.ts.map +1 -0
- package/dest/private_kernel/hints/{compute_tx_include_by_timestamp.js → compute_tx_expiration_timestamp.js} +12 -12
- package/dest/private_kernel/hints/index.d.ts +1 -1
- package/dest/private_kernel/hints/index.js +1 -1
- package/dest/private_kernel/hints/private_kernel_reset_private_inputs_builder.d.ts +4 -3
- package/dest/private_kernel/hints/private_kernel_reset_private_inputs_builder.d.ts.map +1 -1
- package/dest/private_kernel/hints/private_kernel_reset_private_inputs_builder.js +129 -68
- package/dest/private_kernel/hints/test_utils.d.ts +122 -0
- package/dest/private_kernel/hints/test_utils.d.ts.map +1 -0
- package/dest/private_kernel/hints/test_utils.js +203 -0
- package/dest/private_kernel/private_kernel_execution_prover.d.ts +1 -1
- package/dest/private_kernel/private_kernel_execution_prover.d.ts.map +1 -1
- package/dest/private_kernel/private_kernel_execution_prover.js +19 -11
- package/dest/private_kernel/private_kernel_oracle.d.ts +6 -2
- package/dest/private_kernel/private_kernel_oracle.d.ts.map +1 -1
- package/dest/private_kernel/private_kernel_oracle.js +7 -3
- package/dest/pxe.d.ts +14 -12
- package/dest/pxe.d.ts.map +1 -1
- package/dest/pxe.js +40 -30
- package/dest/storage/contract_store/contract_store.d.ts +42 -15
- package/dest/storage/contract_store/contract_store.d.ts.map +1 -1
- package/dest/storage/contract_store/contract_store.js +140 -64
- package/dest/storage/note_store/note_store.d.ts +3 -2
- package/dest/storage/note_store/note_store.d.ts.map +1 -1
- package/dest/storage/note_store/note_store.js +2 -2
- package/dest/storage/tagging_store/recipient_tagging_store.d.ts +6 -6
- package/dest/storage/tagging_store/recipient_tagging_store.d.ts.map +1 -1
- package/dest/storage/tagging_store/sender_tagging_store.d.ts +5 -5
- package/dest/storage/tagging_store/sender_tagging_store.d.ts.map +1 -1
- package/dest/storage/tagging_store/sender_tagging_store.js +4 -4
- package/dest/tagging/get_all_logs_by_tags.d.ts +1 -1
- package/dest/tagging/get_all_logs_by_tags.d.ts.map +1 -1
- package/dest/tagging/get_all_logs_by_tags.js +17 -3
- package/dest/tagging/index.d.ts +2 -2
- package/dest/tagging/index.d.ts.map +1 -1
- package/dest/tagging/index.js +1 -1
- package/dest/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.d.ts +4 -5
- 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 +7 -7
- package/dest/tagging/recipient_sync/utils/find_highest_indexes.js +2 -2
- package/dest/tagging/recipient_sync/utils/load_logs_for_range.d.ts +6 -7
- 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 +12 -11
- package/dest/tagging/sender_sync/sync_sender_tagging_indexes.d.ts +4 -8
- package/dest/tagging/sender_sync/sync_sender_tagging_indexes.d.ts.map +1 -1
- package/dest/tagging/sender_sync/sync_sender_tagging_indexes.js +3 -6
- package/dest/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.d.ts +4 -7
- 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 +14 -15
- package/package.json +16 -16
- package/src/access_scopes.ts +9 -0
- package/src/config/index.ts +1 -1
- package/src/config/package_info.ts +1 -1
- package/src/contract_function_simulator/contract_function_simulator.ts +23 -24
- package/src/contract_function_simulator/execution_tagging_index_cache.ts +5 -5
- package/src/contract_function_simulator/noir-structs/event_validation_request.ts +8 -5
- package/src/contract_function_simulator/noir-structs/log_retrieval_response.ts +1 -4
- package/src/contract_function_simulator/noir-structs/note_validation_request.ts +3 -6
- package/src/contract_function_simulator/oracle/interfaces.ts +48 -54
- package/src/contract_function_simulator/oracle/oracle.ts +136 -136
- package/src/contract_function_simulator/oracle/private_execution.ts +1 -1
- package/src/contract_function_simulator/oracle/private_execution_oracle.ts +45 -82
- package/src/contract_function_simulator/oracle/utility_execution_oracle.ts +59 -62
- package/src/contract_logging.ts +39 -0
- package/src/contract_sync/contract_sync_service.ts +19 -12
- package/src/contract_sync/helpers.ts +7 -2
- package/src/debug/pxe_debug_utils.ts +9 -8
- package/src/entrypoints/client/bundle/index.ts +3 -0
- package/src/entrypoints/client/lazy/index.ts +3 -0
- package/src/entrypoints/server/index.ts +2 -0
- package/src/logs/log_service.ts +13 -11
- package/src/notes/note_service.ts +4 -3
- package/src/notes_filter.ts +26 -0
- package/src/oracle_version.ts +3 -3
- package/src/private_kernel/hints/{compute_tx_include_by_timestamp.ts → compute_tx_expiration_timestamp.ts} +13 -13
- package/src/private_kernel/hints/index.ts +1 -1
- package/src/private_kernel/hints/private_kernel_reset_private_inputs_builder.ts +164 -117
- package/src/private_kernel/hints/test_utils.ts +325 -0
- package/src/private_kernel/private_kernel_execution_prover.ts +19 -12
- package/src/private_kernel/private_kernel_oracle.ts +7 -7
- package/src/pxe.ts +51 -43
- package/src/storage/contract_store/contract_store.ts +170 -71
- package/src/storage/note_store/note_store.ts +7 -3
- package/src/storage/tagging_store/recipient_tagging_store.ts +9 -5
- package/src/storage/tagging_store/sender_tagging_store.ts +8 -8
- package/src/tagging/get_all_logs_by_tags.ts +28 -4
- package/src/tagging/index.ts +1 -1
- package/src/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.ts +7 -10
- package/src/tagging/recipient_sync/utils/find_highest_indexes.ts +2 -2
- package/src/tagging/recipient_sync/utils/load_logs_for_range.ts +10 -15
- package/src/tagging/sender_sync/sync_sender_tagging_indexes.ts +4 -9
- package/src/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.ts +11 -20
- package/dest/private_kernel/hints/compute_tx_include_by_timestamp.d.ts +0 -4
- package/dest/private_kernel/hints/compute_tx_include_by_timestamp.d.ts.map +0 -1
|
@@ -3,23 +3,25 @@ import type { BlockNumber } from '@aztec/foundation/branded-types';
|
|
|
3
3
|
import { Aes128 } from '@aztec/foundation/crypto/aes128';
|
|
4
4
|
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
5
5
|
import { Point } from '@aztec/foundation/curves/grumpkin';
|
|
6
|
-
import { LogLevels, type Logger,
|
|
6
|
+
import { LogLevels, type Logger, createLogger } from '@aztec/foundation/log';
|
|
7
7
|
import type { MembershipWitness } from '@aztec/foundation/trees';
|
|
8
8
|
import type { KeyStore } from '@aztec/key-store';
|
|
9
9
|
import type { AuthWitness } from '@aztec/stdlib/auth-witness';
|
|
10
10
|
import { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
11
11
|
import { BlockHash } from '@aztec/stdlib/block';
|
|
12
|
-
import type { CompleteAddress, ContractInstance } from '@aztec/stdlib/contract';
|
|
12
|
+
import type { CompleteAddress, ContractInstance, PartialAddress } from '@aztec/stdlib/contract';
|
|
13
13
|
import { siloNullifier } from '@aztec/stdlib/hash';
|
|
14
14
|
import type { AztecNode } from '@aztec/stdlib/interfaces/server';
|
|
15
15
|
import type { KeyValidationRequest } from '@aztec/stdlib/kernel';
|
|
16
|
-
import { computeAddressSecret } from '@aztec/stdlib/keys';
|
|
16
|
+
import { type PublicKeys, computeAddressSecret } from '@aztec/stdlib/keys';
|
|
17
17
|
import { deriveEcdhSharedSecret } from '@aztec/stdlib/logs';
|
|
18
18
|
import { getNonNullifiedL1ToL2MessageWitness } from '@aztec/stdlib/messaging';
|
|
19
19
|
import type { NoteStatus } from '@aztec/stdlib/note';
|
|
20
20
|
import { MerkleTreeId, type NullifierMembershipWitness, PublicDataWitness } from '@aztec/stdlib/trees';
|
|
21
21
|
import type { BlockHeader, Capsule } from '@aztec/stdlib/tx';
|
|
22
22
|
|
|
23
|
+
import type { AccessScopes } from '../../access_scopes.js';
|
|
24
|
+
import { createContractLogger, logContractMessage } from '../../contract_logging.js';
|
|
23
25
|
import { EventService } from '../../events/event_service.js';
|
|
24
26
|
import { LogService } from '../../logs/log_service.js';
|
|
25
27
|
import { NoteService } from '../../notes/note_service.js';
|
|
@@ -58,7 +60,7 @@ export type UtilityExecutionOracleArgs = {
|
|
|
58
60
|
privateEventStore: PrivateEventStore;
|
|
59
61
|
jobId: string;
|
|
60
62
|
log?: ReturnType<typeof createLogger>;
|
|
61
|
-
scopes
|
|
63
|
+
scopes: AccessScopes;
|
|
62
64
|
};
|
|
63
65
|
|
|
64
66
|
/**
|
|
@@ -84,8 +86,8 @@ export class UtilityExecutionOracle implements IMiscOracle, IUtilityExecutionOra
|
|
|
84
86
|
protected readonly capsuleStore: CapsuleStore;
|
|
85
87
|
protected readonly privateEventStore: PrivateEventStore;
|
|
86
88
|
protected readonly jobId: string;
|
|
87
|
-
protected
|
|
88
|
-
protected readonly scopes
|
|
89
|
+
protected logger: ReturnType<typeof createLogger>;
|
|
90
|
+
protected readonly scopes: AccessScopes;
|
|
89
91
|
|
|
90
92
|
constructor(args: UtilityExecutionOracleArgs) {
|
|
91
93
|
this.contractAddress = args.contractAddress;
|
|
@@ -102,21 +104,21 @@ export class UtilityExecutionOracle implements IMiscOracle, IUtilityExecutionOra
|
|
|
102
104
|
this.capsuleStore = args.capsuleStore;
|
|
103
105
|
this.privateEventStore = args.privateEventStore;
|
|
104
106
|
this.jobId = args.jobId;
|
|
105
|
-
this.
|
|
107
|
+
this.logger = args.log ?? createLogger('simulator:client_view_context');
|
|
106
108
|
this.scopes = args.scopes;
|
|
107
109
|
}
|
|
108
110
|
|
|
109
|
-
public
|
|
111
|
+
public assertCompatibleOracleVersion(version: number): void {
|
|
110
112
|
if (version !== ORACLE_VERSION) {
|
|
111
113
|
throw new Error(`Incompatible oracle version. Expected version ${ORACLE_VERSION}, got ${version}.`);
|
|
112
114
|
}
|
|
113
115
|
}
|
|
114
116
|
|
|
115
|
-
public
|
|
117
|
+
public getRandomField(): Fr {
|
|
116
118
|
return Fr.random();
|
|
117
119
|
}
|
|
118
120
|
|
|
119
|
-
public
|
|
121
|
+
public getUtilityContext(): UtilityContext {
|
|
120
122
|
return new UtilityContext(this.anchorBlockHeader, this.contractAddress);
|
|
121
123
|
}
|
|
122
124
|
|
|
@@ -127,9 +129,9 @@ export class UtilityExecutionOracle implements IMiscOracle, IUtilityExecutionOra
|
|
|
127
129
|
* @throws If the keys are not registered in the key store.
|
|
128
130
|
* @throws If scopes are defined and the account is not in the scopes.
|
|
129
131
|
*/
|
|
130
|
-
public async
|
|
132
|
+
public async getKeyValidationRequest(pkMHash: Fr): Promise<KeyValidationRequest> {
|
|
131
133
|
// If scopes are defined, check that the key belongs to an account in the scopes.
|
|
132
|
-
if (this.scopes && this.scopes.length > 0) {
|
|
134
|
+
if (this.scopes !== 'ALL_SCOPES' && this.scopes.length > 0) {
|
|
133
135
|
let hasAccess = false;
|
|
134
136
|
for (let i = 0; i < this.scopes.length && !hasAccess; i++) {
|
|
135
137
|
if (await this.keyStore.accountHasKey(this.scopes[i], pkMHash)) {
|
|
@@ -150,7 +152,7 @@ export class UtilityExecutionOracle implements IMiscOracle, IUtilityExecutionOra
|
|
|
150
152
|
* @param noteHash - The note hash to find in the note hash tree.
|
|
151
153
|
* @returns The membership witness containing the leaf index and sibling path
|
|
152
154
|
*/
|
|
153
|
-
public
|
|
155
|
+
public getNoteHashMembershipWitness(
|
|
154
156
|
anchorBlockHash: BlockHash,
|
|
155
157
|
noteHash: Fr,
|
|
156
158
|
): Promise<MembershipWitness<typeof NOTE_HASH_TREE_HEIGHT> | undefined> {
|
|
@@ -168,7 +170,7 @@ export class UtilityExecutionOracle implements IMiscOracle, IUtilityExecutionOra
|
|
|
168
170
|
* @param blockHash - The block hash to find in the archive tree.
|
|
169
171
|
* @returns The membership witness containing the leaf index and sibling path
|
|
170
172
|
*/
|
|
171
|
-
public
|
|
173
|
+
public getBlockHashMembershipWitness(
|
|
172
174
|
anchorBlockHash: BlockHash,
|
|
173
175
|
blockHash: BlockHash,
|
|
174
176
|
): Promise<MembershipWitness<typeof ARCHIVE_HEIGHT> | undefined> {
|
|
@@ -181,7 +183,7 @@ export class UtilityExecutionOracle implements IMiscOracle, IUtilityExecutionOra
|
|
|
181
183
|
* @param nullifier - Nullifier we try to find witness for.
|
|
182
184
|
* @returns The nullifier membership witness (if found).
|
|
183
185
|
*/
|
|
184
|
-
public
|
|
186
|
+
public getNullifierMembershipWitness(
|
|
185
187
|
blockHash: BlockHash,
|
|
186
188
|
nullifier: Fr,
|
|
187
189
|
): Promise<NullifierMembershipWitness | undefined> {
|
|
@@ -197,7 +199,7 @@ export class UtilityExecutionOracle implements IMiscOracle, IUtilityExecutionOra
|
|
|
197
199
|
* list structure" of leaves and proving that a lower nullifier is pointing to a bigger next value than the nullifier
|
|
198
200
|
* we are trying to prove non-inclusion for.
|
|
199
201
|
*/
|
|
200
|
-
public
|
|
202
|
+
public getLowNullifierMembershipWitness(
|
|
201
203
|
blockHash: BlockHash,
|
|
202
204
|
nullifier: Fr,
|
|
203
205
|
): Promise<NullifierMembershipWitness | undefined> {
|
|
@@ -210,7 +212,7 @@ export class UtilityExecutionOracle implements IMiscOracle, IUtilityExecutionOra
|
|
|
210
212
|
* @param leafSlot - The slot of the public data tree to get the witness for.
|
|
211
213
|
* @returns - The witness
|
|
212
214
|
*/
|
|
213
|
-
public
|
|
215
|
+
public getPublicDataWitness(blockHash: BlockHash, leafSlot: Fr): Promise<PublicDataWitness | undefined> {
|
|
214
216
|
return this.aztecNode.getPublicDataWitness(blockHash, leafSlot);
|
|
215
217
|
}
|
|
216
218
|
|
|
@@ -219,7 +221,7 @@ export class UtilityExecutionOracle implements IMiscOracle, IUtilityExecutionOra
|
|
|
219
221
|
* @param blockNumber - The number of a block of which to get the block header.
|
|
220
222
|
* @returns Block extracted from a block with block number `blockNumber`.
|
|
221
223
|
*/
|
|
222
|
-
public async
|
|
224
|
+
public async getBlockHeader(blockNumber: BlockNumber): Promise<BlockHeader | undefined> {
|
|
223
225
|
const anchorBlockNumber = this.anchorBlockHeader.getBlockNumber();
|
|
224
226
|
if (blockNumber > anchorBlockNumber) {
|
|
225
227
|
throw new Error(`Block number ${blockNumber} is higher than current block ${anchorBlockNumber}`);
|
|
@@ -230,12 +232,18 @@ export class UtilityExecutionOracle implements IMiscOracle, IUtilityExecutionOra
|
|
|
230
232
|
}
|
|
231
233
|
|
|
232
234
|
/**
|
|
233
|
-
* Retrieve the
|
|
235
|
+
* Retrieve the public keys and partial address associated to a given address.
|
|
234
236
|
* @param account - The account address.
|
|
235
|
-
* @returns
|
|
237
|
+
* @returns The public keys and partial address, or `undefined` if the account is not registered.
|
|
236
238
|
*/
|
|
237
|
-
public
|
|
238
|
-
|
|
239
|
+
public async tryGetPublicKeysAndPartialAddress(
|
|
240
|
+
account: AztecAddress,
|
|
241
|
+
): Promise<{ publicKeys: PublicKeys; partialAddress: PartialAddress } | undefined> {
|
|
242
|
+
const completeAddress = await this.addressStore.getCompleteAddress(account);
|
|
243
|
+
if (!completeAddress) {
|
|
244
|
+
return undefined;
|
|
245
|
+
}
|
|
246
|
+
return { publicKeys: completeAddress.publicKeys, partialAddress: completeAddress.partialAddress };
|
|
239
247
|
}
|
|
240
248
|
|
|
241
249
|
protected async getCompleteAddressOrFail(account: AztecAddress): Promise<CompleteAddress> {
|
|
@@ -254,11 +262,7 @@ export class UtilityExecutionOracle implements IMiscOracle, IUtilityExecutionOra
|
|
|
254
262
|
* @param address - Address.
|
|
255
263
|
* @returns A contract instance.
|
|
256
264
|
*/
|
|
257
|
-
public
|
|
258
|
-
return this.getContractInstance(address);
|
|
259
|
-
}
|
|
260
|
-
|
|
261
|
-
protected async getContractInstance(address: AztecAddress): Promise<ContractInstance> {
|
|
265
|
+
public async getContractInstance(address: AztecAddress): Promise<ContractInstance> {
|
|
262
266
|
const instance = await this.contractStore.getContractInstance(address);
|
|
263
267
|
if (!instance) {
|
|
264
268
|
throw new Error(`No contract instance found for address ${address.toString()}`);
|
|
@@ -272,7 +276,7 @@ export class UtilityExecutionOracle implements IMiscOracle, IUtilityExecutionOra
|
|
|
272
276
|
* @param messageHash - Hash of the message to authenticate.
|
|
273
277
|
* @returns Authentication witness for the requested message hash.
|
|
274
278
|
*/
|
|
275
|
-
public
|
|
279
|
+
public getAuthWitness(messageHash: Fr): Promise<Fr[] | undefined> {
|
|
276
280
|
return Promise.resolve(this.authWitnesses.find(w => w.requestHash.equals(messageHash))?.witness);
|
|
277
281
|
}
|
|
278
282
|
|
|
@@ -298,7 +302,7 @@ export class UtilityExecutionOracle implements IMiscOracle, IUtilityExecutionOra
|
|
|
298
302
|
* @param status - The status of notes to fetch.
|
|
299
303
|
* @returns Array of note data.
|
|
300
304
|
*/
|
|
301
|
-
public async
|
|
305
|
+
public async getNotes(
|
|
302
306
|
owner: AztecAddress | undefined,
|
|
303
307
|
storageSlot: Fr,
|
|
304
308
|
numSelects: number,
|
|
@@ -338,7 +342,7 @@ export class UtilityExecutionOracle implements IMiscOracle, IUtilityExecutionOra
|
|
|
338
342
|
* @param innerNullifier - The inner nullifier.
|
|
339
343
|
* @returns A boolean indicating whether the nullifier exists in the tree or not.
|
|
340
344
|
*/
|
|
341
|
-
public async
|
|
345
|
+
public async checkNullifierExists(innerNullifier: Fr) {
|
|
342
346
|
const [nullifier, anchorBlockHash] = await Promise.all([
|
|
343
347
|
siloNullifier(this.contractAddress, innerNullifier!),
|
|
344
348
|
this.anchorBlockHeader.hash(),
|
|
@@ -357,7 +361,7 @@ export class UtilityExecutionOracle implements IMiscOracle, IUtilityExecutionOra
|
|
|
357
361
|
* @dev Contract address and secret are only used to compute the nullifier to get non-nullified messages
|
|
358
362
|
* @returns The l1 to l2 membership witness (index of message in the tree and sibling path).
|
|
359
363
|
*/
|
|
360
|
-
public async
|
|
364
|
+
public async getL1ToL2MembershipWitness(contractAddress: AztecAddress, messageHash: Fr, secret: Fr) {
|
|
361
365
|
const [messageIndex, siblingPath] = await getNonNullifiedL1ToL2MessageWitness(
|
|
362
366
|
this.aztecNode,
|
|
363
367
|
contractAddress,
|
|
@@ -375,7 +379,7 @@ export class UtilityExecutionOracle implements IMiscOracle, IUtilityExecutionOra
|
|
|
375
379
|
* @param startStorageSlot - The starting storage slot.
|
|
376
380
|
* @param numberOfElements - Number of elements to read from the starting storage slot.
|
|
377
381
|
*/
|
|
378
|
-
public async
|
|
382
|
+
public async storageRead(
|
|
379
383
|
blockHash: BlockHash,
|
|
380
384
|
contractAddress: AztecAddress,
|
|
381
385
|
startStorageSlot: Fr,
|
|
@@ -389,7 +393,7 @@ export class UtilityExecutionOracle implements IMiscOracle, IUtilityExecutionOra
|
|
|
389
393
|
slots.map(storageSlot => this.aztecNode.getPublicStorageAt(blockHash, contractAddress, storageSlot)),
|
|
390
394
|
);
|
|
391
395
|
|
|
392
|
-
this.
|
|
396
|
+
this.logger.debug(
|
|
393
397
|
`Oracle storage read: slots=[${slots.map(slot => slot.toString()).join(', ')}] address=${contractAddress.toString()} values=[${values.join(', ')}]`,
|
|
394
398
|
);
|
|
395
399
|
|
|
@@ -401,26 +405,26 @@ export class UtilityExecutionOracle implements IMiscOracle, IUtilityExecutionOra
|
|
|
401
405
|
*/
|
|
402
406
|
async #getContractLogger(): Promise<Logger> {
|
|
403
407
|
if (!this.contractLogger) {
|
|
404
|
-
const addrAbbrev = this.contractAddress.toString().slice(0, 10);
|
|
405
|
-
const name = await this.contractStore.getDebugContractName(this.contractAddress);
|
|
406
|
-
const module = name ? `contract_log::${name}(${addrAbbrev})` : `contract_log::${addrAbbrev}`;
|
|
407
408
|
// Purpose of instanceId is to distinguish logs from different instances of the same component. It makes sense
|
|
408
409
|
// to re-use jobId as instanceId here as executions of different PXE jobs are isolated.
|
|
409
|
-
this.contractLogger =
|
|
410
|
+
this.contractLogger = await createContractLogger(
|
|
411
|
+
this.contractAddress,
|
|
412
|
+
addr => this.contractStore.getDebugContractName(addr),
|
|
413
|
+
{ instanceId: this.jobId },
|
|
414
|
+
);
|
|
410
415
|
}
|
|
411
416
|
return this.contractLogger;
|
|
412
417
|
}
|
|
413
418
|
|
|
414
|
-
public async
|
|
419
|
+
public async log(level: number, message: string, fields: Fr[]): Promise<void> {
|
|
415
420
|
if (!LogLevels[level]) {
|
|
416
421
|
throw new Error(`Invalid log level: ${level}`);
|
|
417
422
|
}
|
|
418
|
-
const levelName = LogLevels[level];
|
|
419
423
|
const logger = await this.#getContractLogger();
|
|
420
|
-
logger[
|
|
424
|
+
logContractMessage(logger, LogLevels[level], message, fields);
|
|
421
425
|
}
|
|
422
426
|
|
|
423
|
-
public async
|
|
427
|
+
public async fetchTaggedLogs(pendingTaggedLogArrayBaseSlot: Fr) {
|
|
424
428
|
const logService = new LogService(
|
|
425
429
|
this.aztecNode,
|
|
426
430
|
this.anchorBlockHeader,
|
|
@@ -430,7 +434,7 @@ export class UtilityExecutionOracle implements IMiscOracle, IUtilityExecutionOra
|
|
|
430
434
|
this.senderAddressBookStore,
|
|
431
435
|
this.addressStore,
|
|
432
436
|
this.jobId,
|
|
433
|
-
this.
|
|
437
|
+
this.logger.getBindings(),
|
|
434
438
|
);
|
|
435
439
|
|
|
436
440
|
await logService.fetchTaggedLogs(this.contractAddress, pendingTaggedLogArrayBaseSlot, this.scopes);
|
|
@@ -446,10 +450,12 @@ export class UtilityExecutionOracle implements IMiscOracle, IUtilityExecutionOra
|
|
|
446
450
|
* @param noteValidationRequestsArrayBaseSlot - The base slot of capsule array containing note validation requests.
|
|
447
451
|
* @param eventValidationRequestsArrayBaseSlot - The base slot of capsule array containing event validation requests.
|
|
448
452
|
*/
|
|
449
|
-
public async
|
|
453
|
+
public async validateAndStoreEnqueuedNotesAndEvents(
|
|
450
454
|
contractAddress: AztecAddress,
|
|
451
455
|
noteValidationRequestsArrayBaseSlot: Fr,
|
|
452
456
|
eventValidationRequestsArrayBaseSlot: Fr,
|
|
457
|
+
maxNotePackedLen: number,
|
|
458
|
+
maxEventSerializedLen: number,
|
|
453
459
|
) {
|
|
454
460
|
// TODO(#10727): allow other contracts to store notes
|
|
455
461
|
if (!this.contractAddress.equals(contractAddress)) {
|
|
@@ -460,11 +466,11 @@ export class UtilityExecutionOracle implements IMiscOracle, IUtilityExecutionOra
|
|
|
460
466
|
// faster as we don't need to wait for the network round-trip.
|
|
461
467
|
const noteValidationRequests = (
|
|
462
468
|
await this.capsuleStore.readCapsuleArray(contractAddress, noteValidationRequestsArrayBaseSlot, this.jobId)
|
|
463
|
-
).map(NoteValidationRequest.fromFields);
|
|
469
|
+
).map(fields => NoteValidationRequest.fromFields(fields, maxNotePackedLen));
|
|
464
470
|
|
|
465
471
|
const eventValidationRequests = (
|
|
466
472
|
await this.capsuleStore.readCapsuleArray(contractAddress, eventValidationRequestsArrayBaseSlot, this.jobId)
|
|
467
|
-
).map(EventValidationRequest.fromFields);
|
|
473
|
+
).map(fields => EventValidationRequest.fromFields(fields, maxEventSerializedLen));
|
|
468
474
|
|
|
469
475
|
const noteService = new NoteService(this.noteStore, this.aztecNode, this.anchorBlockHeader, this.jobId);
|
|
470
476
|
const noteStorePromises = noteValidationRequests.map(request =>
|
|
@@ -502,7 +508,7 @@ export class UtilityExecutionOracle implements IMiscOracle, IUtilityExecutionOra
|
|
|
502
508
|
await this.capsuleStore.setCapsuleArray(contractAddress, eventValidationRequestsArrayBaseSlot, [], this.jobId);
|
|
503
509
|
}
|
|
504
510
|
|
|
505
|
-
public async
|
|
511
|
+
public async bulkRetrieveLogs(
|
|
506
512
|
contractAddress: AztecAddress,
|
|
507
513
|
logRetrievalRequestsArrayBaseSlot: Fr,
|
|
508
514
|
logRetrievalResponsesArrayBaseSlot: Fr,
|
|
@@ -527,7 +533,7 @@ export class UtilityExecutionOracle implements IMiscOracle, IUtilityExecutionOra
|
|
|
527
533
|
this.senderAddressBookStore,
|
|
528
534
|
this.addressStore,
|
|
529
535
|
this.jobId,
|
|
530
|
-
this.
|
|
536
|
+
this.logger.getBindings(),
|
|
531
537
|
);
|
|
532
538
|
|
|
533
539
|
const maybeLogRetrievalResponses = await logService.bulkRetrieveLogs(logRetrievalRequests);
|
|
@@ -544,7 +550,7 @@ export class UtilityExecutionOracle implements IMiscOracle, IUtilityExecutionOra
|
|
|
544
550
|
);
|
|
545
551
|
}
|
|
546
552
|
|
|
547
|
-
public
|
|
553
|
+
public storeCapsule(contractAddress: AztecAddress, slot: Fr, capsule: Fr[]): Promise<void> {
|
|
548
554
|
if (!contractAddress.equals(this.contractAddress)) {
|
|
549
555
|
// TODO(#10727): instead of this check that this.contractAddress is allowed to access the external DB
|
|
550
556
|
throw new Error(`Contract ${contractAddress} is not allowed to access ${this.contractAddress}'s PXE DB`);
|
|
@@ -553,7 +559,7 @@ export class UtilityExecutionOracle implements IMiscOracle, IUtilityExecutionOra
|
|
|
553
559
|
return Promise.resolve();
|
|
554
560
|
}
|
|
555
561
|
|
|
556
|
-
public async
|
|
562
|
+
public async loadCapsule(contractAddress: AztecAddress, slot: Fr): Promise<Fr[] | null> {
|
|
557
563
|
if (!contractAddress.equals(this.contractAddress)) {
|
|
558
564
|
// TODO(#10727): instead of this check that this.contractAddress is allowed to access the external DB
|
|
559
565
|
throw new Error(`Contract ${contractAddress} is not allowed to access ${this.contractAddress}'s PXE DB`);
|
|
@@ -565,7 +571,7 @@ export class UtilityExecutionOracle implements IMiscOracle, IUtilityExecutionOra
|
|
|
565
571
|
);
|
|
566
572
|
}
|
|
567
573
|
|
|
568
|
-
public
|
|
574
|
+
public deleteCapsule(contractAddress: AztecAddress, slot: Fr): Promise<void> {
|
|
569
575
|
if (!contractAddress.equals(this.contractAddress)) {
|
|
570
576
|
// TODO(#10727): instead of this check that this.contractAddress is allowed to access the external DB
|
|
571
577
|
throw new Error(`Contract ${contractAddress} is not allowed to access ${this.contractAddress}'s PXE DB`);
|
|
@@ -574,12 +580,7 @@ export class UtilityExecutionOracle implements IMiscOracle, IUtilityExecutionOra
|
|
|
574
580
|
return Promise.resolve();
|
|
575
581
|
}
|
|
576
582
|
|
|
577
|
-
public
|
|
578
|
-
contractAddress: AztecAddress,
|
|
579
|
-
srcSlot: Fr,
|
|
580
|
-
dstSlot: Fr,
|
|
581
|
-
numEntries: number,
|
|
582
|
-
): Promise<void> {
|
|
583
|
+
public copyCapsule(contractAddress: AztecAddress, srcSlot: Fr, dstSlot: Fr, numEntries: number): Promise<void> {
|
|
583
584
|
if (!contractAddress.equals(this.contractAddress)) {
|
|
584
585
|
// TODO(#10727): instead of this check that this.contractAddress is allowed to access the external DB
|
|
585
586
|
throw new Error(`Contract ${contractAddress} is not allowed to access ${this.contractAddress}'s PXE DB`);
|
|
@@ -588,7 +589,7 @@ export class UtilityExecutionOracle implements IMiscOracle, IUtilityExecutionOra
|
|
|
588
589
|
}
|
|
589
590
|
|
|
590
591
|
// TODO(#11849): consider replacing this oracle with a pure Noir implementation of aes decryption.
|
|
591
|
-
public
|
|
592
|
+
public aes128Decrypt(ciphertext: Buffer, iv: Buffer, symKey: Buffer): Promise<Buffer> {
|
|
592
593
|
const aes128 = new Aes128();
|
|
593
594
|
return aes128.decryptBufferCBC(ciphertext, iv, symKey);
|
|
594
595
|
}
|
|
@@ -599,11 +600,7 @@ export class UtilityExecutionOracle implements IMiscOracle, IUtilityExecutionOra
|
|
|
599
600
|
* @param ephPk - The ephemeral public key to get the secret for.
|
|
600
601
|
* @returns The secret for the given address.
|
|
601
602
|
*/
|
|
602
|
-
public
|
|
603
|
-
return this.getSharedSecret(address, ephPk);
|
|
604
|
-
}
|
|
605
|
-
|
|
606
|
-
protected async getSharedSecret(address: AztecAddress, ephPk: Point): Promise<Point> {
|
|
603
|
+
public async getSharedSecret(address: AztecAddress, ephPk: Point): Promise<Point> {
|
|
607
604
|
// TODO(#12656): return an app-siloed secret
|
|
608
605
|
const recipientCompleteAddress = await this.getCompleteAddressOrFail(address);
|
|
609
606
|
const ivskM = await this.keyStore.getMasterSecretKey(
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import type { Fr } from '@aztec/foundation/curves/bn254';
|
|
2
|
+
import { type LogLevel, type Logger, applyStringFormatting, createLogger } from '@aztec/foundation/log';
|
|
3
|
+
import type { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
4
|
+
import type { DebugLog } from '@aztec/stdlib/logs';
|
|
5
|
+
|
|
6
|
+
/** Resolves a contract address to a human-readable name, if available. */
|
|
7
|
+
export type ContractNameResolver = (address: AztecAddress) => Promise<string | undefined>;
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Creates a logger whose output is prefixed with `contract_log::<name>(<addrAbbrev>)`.
|
|
11
|
+
*/
|
|
12
|
+
export async function createContractLogger(
|
|
13
|
+
contractAddress: AztecAddress,
|
|
14
|
+
getContractName: ContractNameResolver,
|
|
15
|
+
options?: { instanceId?: string },
|
|
16
|
+
): Promise<Logger> {
|
|
17
|
+
const addrAbbrev = contractAddress.toString().slice(0, 10);
|
|
18
|
+
const name = await getContractName(contractAddress);
|
|
19
|
+
const module = name ? `contract_log::${name}(${addrAbbrev})` : `contract_log::Unknown(${addrAbbrev})`;
|
|
20
|
+
return createLogger(module, options);
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* Formats and emits a single contract log message through the given logger.
|
|
25
|
+
*/
|
|
26
|
+
export function logContractMessage(logger: Logger, level: LogLevel, message: string, fields: Fr[]): void {
|
|
27
|
+
logger[level](applyStringFormatting(message, fields));
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* Displays debug logs collected during public function simulation,
|
|
32
|
+
* using the `contract_log::` prefixed logger format.
|
|
33
|
+
*/
|
|
34
|
+
export async function displayDebugLogs(debugLogs: DebugLog[], getContractName: ContractNameResolver): Promise<void> {
|
|
35
|
+
for (const log of debugLogs) {
|
|
36
|
+
const logger = await createContractLogger(log.contractAddress, getContractName);
|
|
37
|
+
logContractMessage(logger, log.level, log.message, log.fields);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
@@ -4,6 +4,7 @@ import type { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
|
4
4
|
import type { AztecNode } from '@aztec/stdlib/interfaces/client';
|
|
5
5
|
import type { BlockHeader } from '@aztec/stdlib/tx';
|
|
6
6
|
|
|
7
|
+
import type { AccessScopes } from '../access_scopes.js';
|
|
7
8
|
import type { StagedStore } from '../job_coordinator/job_coordinator.js';
|
|
8
9
|
import type { ContractStore } from '../storage/contract_store/contract_store.js';
|
|
9
10
|
import type { NoteStore } from '../storage/note_store/note_store.js';
|
|
@@ -45,15 +46,15 @@ export class ContractSyncService implements StagedStore {
|
|
|
45
46
|
* @param functionToInvokeAfterSync - The function selector that will be called after sync (used to validate it's
|
|
46
47
|
* not sync_state itself).
|
|
47
48
|
* @param utilityExecutor - Executor function for running the sync_state utility function.
|
|
48
|
-
* @param scopes -
|
|
49
|
+
* @param scopes - Access scopes to pass through to the utility executor (affects whose account's private state is discovered).
|
|
49
50
|
*/
|
|
50
51
|
async ensureContractSynced(
|
|
51
52
|
contractAddress: AztecAddress,
|
|
52
53
|
functionToInvokeAfterSync: FunctionSelector | null,
|
|
53
|
-
utilityExecutor: (call: FunctionCall, scopes:
|
|
54
|
+
utilityExecutor: (call: FunctionCall, scopes: AccessScopes) => Promise<any>,
|
|
54
55
|
anchorBlockHeader: BlockHeader,
|
|
55
56
|
jobId: string,
|
|
56
|
-
scopes:
|
|
57
|
+
scopes: AccessScopes,
|
|
57
58
|
): Promise<void> {
|
|
58
59
|
// Skip sync if this contract has an override for this job (overrides are keyed by contract address only)
|
|
59
60
|
const overrides = this.overriddenContracts.get(jobId);
|
|
@@ -62,13 +63,16 @@ export class ContractSyncService implements StagedStore {
|
|
|
62
63
|
}
|
|
63
64
|
|
|
64
65
|
// Skip sync if we already synced for "all scopes", or if we have an empty list of scopes
|
|
65
|
-
const allScopesKey = toKey(contractAddress,
|
|
66
|
+
const allScopesKey = toKey(contractAddress, 'ALL_SCOPES');
|
|
66
67
|
const allScopesExisting = this.syncedContracts.get(allScopesKey);
|
|
67
|
-
if (allScopesExisting || (scopes && scopes.length == 0)) {
|
|
68
|
+
if (allScopesExisting || (scopes !== 'ALL_SCOPES' && scopes.length == 0)) {
|
|
68
69
|
return;
|
|
69
70
|
}
|
|
70
71
|
|
|
71
|
-
const unsyncedScopes =
|
|
72
|
+
const unsyncedScopes =
|
|
73
|
+
scopes === 'ALL_SCOPES'
|
|
74
|
+
? scopes
|
|
75
|
+
: scopes.filter(scope => !this.syncedContracts.has(toKey(contractAddress, scope)));
|
|
72
76
|
const unsyncedScopesKeys = toKeys(contractAddress, unsyncedScopes);
|
|
73
77
|
|
|
74
78
|
if (unsyncedScopesKeys.length > 0) {
|
|
@@ -76,9 +80,10 @@ export class ContractSyncService implements StagedStore {
|
|
|
76
80
|
const promise = this.#doSync(
|
|
77
81
|
contractAddress,
|
|
78
82
|
functionToInvokeAfterSync,
|
|
79
|
-
|
|
83
|
+
utilityExecutor,
|
|
80
84
|
anchorBlockHeader,
|
|
81
85
|
jobId,
|
|
86
|
+
unsyncedScopes,
|
|
82
87
|
).catch(err => {
|
|
83
88
|
// There was an error syncing the contract, so we remove it from the cache so that it can be retried.
|
|
84
89
|
unsyncedScopesKeys.forEach(key => this.syncedContracts.delete(key));
|
|
@@ -94,9 +99,10 @@ export class ContractSyncService implements StagedStore {
|
|
|
94
99
|
async #doSync(
|
|
95
100
|
contractAddress: AztecAddress,
|
|
96
101
|
functionToInvokeAfterSync: FunctionSelector | null,
|
|
97
|
-
utilityExecutor: (call: FunctionCall) => Promise<any>,
|
|
102
|
+
utilityExecutor: (call: FunctionCall, scopes: AccessScopes) => Promise<any>,
|
|
98
103
|
anchorBlockHeader: BlockHeader,
|
|
99
104
|
jobId: string,
|
|
105
|
+
scopes: AccessScopes,
|
|
100
106
|
): Promise<void> {
|
|
101
107
|
this.log.debug(`Syncing contract ${contractAddress}`);
|
|
102
108
|
await Promise.all([
|
|
@@ -109,6 +115,7 @@ export class ContractSyncService implements StagedStore {
|
|
|
109
115
|
this.aztecNode,
|
|
110
116
|
anchorBlockHeader,
|
|
111
117
|
jobId,
|
|
118
|
+
scopes,
|
|
112
119
|
),
|
|
113
120
|
verifyCurrentClassId(contractAddress, this.aztecNode, this.contractStore, anchorBlockHeader),
|
|
114
121
|
]);
|
|
@@ -136,10 +143,10 @@ export class ContractSyncService implements StagedStore {
|
|
|
136
143
|
}
|
|
137
144
|
}
|
|
138
145
|
|
|
139
|
-
function toKeys(contract: AztecAddress, scopes:
|
|
140
|
-
return scopes ===
|
|
146
|
+
function toKeys(contract: AztecAddress, scopes: AccessScopes) {
|
|
147
|
+
return scopes === 'ALL_SCOPES' ? [toKey(contract, scopes)] : scopes.map(scope => toKey(contract, scope));
|
|
141
148
|
}
|
|
142
149
|
|
|
143
|
-
function toKey(contract: AztecAddress, scope: AztecAddress |
|
|
144
|
-
return scope ===
|
|
150
|
+
function toKey(contract: AztecAddress, scope: AztecAddress | 'ALL_SCOPES') {
|
|
151
|
+
return scope === 'ALL_SCOPES' ? `${contract.toString()}:*` : `${contract.toString()}:${scope.toString()}`;
|
|
145
152
|
}
|
|
@@ -6,6 +6,7 @@ import { DelayedPublicMutableValues, DelayedPublicMutableValuesWithHash } from '
|
|
|
6
6
|
import type { AztecNode } from '@aztec/stdlib/interfaces/client';
|
|
7
7
|
import type { BlockHeader } from '@aztec/stdlib/tx';
|
|
8
8
|
|
|
9
|
+
import type { AccessScopes } from '../access_scopes.js';
|
|
9
10
|
import { NoteService } from '../notes/note_service.js';
|
|
10
11
|
import type { ContractStore } from '../storage/contract_store/contract_store.js';
|
|
11
12
|
import type { NoteStore } from '../storage/note_store/note_store.js';
|
|
@@ -42,11 +43,12 @@ export async function syncState(
|
|
|
42
43
|
contractAddress: AztecAddress,
|
|
43
44
|
contractStore: ContractStore,
|
|
44
45
|
functionToInvokeAfterSync: FunctionSelector | null,
|
|
45
|
-
utilityExecutor: (privateSyncCall: FunctionCall) => Promise<any>,
|
|
46
|
+
utilityExecutor: (privateSyncCall: FunctionCall, scopes: AccessScopes) => Promise<any>,
|
|
46
47
|
noteStore: NoteStore,
|
|
47
48
|
aztecNode: AztecNode,
|
|
48
49
|
anchorBlockHeader: BlockHeader,
|
|
49
50
|
jobId: string,
|
|
51
|
+
scopes: AccessScopes,
|
|
50
52
|
) {
|
|
51
53
|
// Protocol contracts don't have private state to sync
|
|
52
54
|
if (!isProtocolContract(contractAddress)) {
|
|
@@ -61,7 +63,10 @@ export async function syncState(
|
|
|
61
63
|
|
|
62
64
|
// Both sync_state and syncNoteNullifiers interact with the note store, but running them in parallel is safe
|
|
63
65
|
// because note store is designed to handle concurrent operations.
|
|
64
|
-
await Promise.all([
|
|
66
|
+
await Promise.all([
|
|
67
|
+
utilityExecutor(syncStateFunctionCall, scopes),
|
|
68
|
+
noteService.syncNoteNullifiers(contractAddress, scopes),
|
|
69
|
+
]);
|
|
65
70
|
}
|
|
66
71
|
}
|
|
67
72
|
|
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
import type { FunctionCall } from '@aztec/stdlib/abi';
|
|
2
2
|
import type { AuthWitness } from '@aztec/stdlib/auth-witness';
|
|
3
|
-
import type {
|
|
4
|
-
import type { NoteDao, NotesFilter } from '@aztec/stdlib/note';
|
|
3
|
+
import type { NoteDao } from '@aztec/stdlib/note';
|
|
5
4
|
import type { ContractOverrides } from '@aztec/stdlib/tx';
|
|
6
5
|
|
|
6
|
+
import type { AccessScopes } from '../access_scopes.js';
|
|
7
7
|
import type { BlockSynchronizer } from '../block_synchronizer/block_synchronizer.js';
|
|
8
8
|
import type { ContractFunctionSimulator } from '../contract_function_simulator/contract_function_simulator.js';
|
|
9
9
|
import type { ContractSyncService } from '../contract_sync/contract_sync_service.js';
|
|
10
|
+
import type { NotesFilter } from '../notes_filter.js';
|
|
10
11
|
import type { AnchorBlockStore } from '../storage/index.js';
|
|
11
12
|
import type { NoteStore } from '../storage/note_store/note_store.js';
|
|
12
13
|
|
|
@@ -17,11 +18,11 @@ import type { NoteStore } from '../storage/note_store/note_store.js';
|
|
|
17
18
|
export class PXEDebugUtils {
|
|
18
19
|
#putJobInQueue!: <T>(job: (jobId: string) => Promise<T>) => Promise<T>;
|
|
19
20
|
#getSimulatorForTx!: (overrides?: { contracts?: ContractOverrides }) => ContractFunctionSimulator;
|
|
20
|
-
#
|
|
21
|
+
#executeUtility!: (
|
|
21
22
|
contractFunctionSimulator: ContractFunctionSimulator,
|
|
22
23
|
call: FunctionCall,
|
|
23
24
|
authWitnesses: AuthWitness[] | undefined,
|
|
24
|
-
scopes:
|
|
25
|
+
scopes: AccessScopes,
|
|
25
26
|
jobId: string,
|
|
26
27
|
) => Promise<any>;
|
|
27
28
|
|
|
@@ -36,17 +37,17 @@ export class PXEDebugUtils {
|
|
|
36
37
|
public setPXEHelpers(
|
|
37
38
|
putJobInQueue: <T>(job: (jobId: string) => Promise<T>) => Promise<T>,
|
|
38
39
|
getSimulatorForTx: (overrides?: { contracts?: ContractOverrides }) => ContractFunctionSimulator,
|
|
39
|
-
|
|
40
|
+
executeUtility: (
|
|
40
41
|
contractFunctionSimulator: ContractFunctionSimulator,
|
|
41
42
|
call: FunctionCall,
|
|
42
43
|
authWitnesses: AuthWitness[] | undefined,
|
|
43
|
-
scopes:
|
|
44
|
+
scopes: AccessScopes,
|
|
44
45
|
jobId: string,
|
|
45
46
|
) => Promise<any>,
|
|
46
47
|
) {
|
|
47
48
|
this.#putJobInQueue = putJobInQueue;
|
|
48
49
|
this.#getSimulatorForTx = getSimulatorForTx;
|
|
49
|
-
this.#
|
|
50
|
+
this.#executeUtility = executeUtility;
|
|
50
51
|
}
|
|
51
52
|
|
|
52
53
|
/**
|
|
@@ -72,7 +73,7 @@ export class PXEDebugUtils {
|
|
|
72
73
|
filter.contractAddress,
|
|
73
74
|
null,
|
|
74
75
|
async (privateSyncCall, execScopes) =>
|
|
75
|
-
await this.#
|
|
76
|
+
await this.#executeUtility(contractFunctionSimulator, privateSyncCall, [], execScopes, jobId),
|
|
76
77
|
anchorBlockHeader,
|
|
77
78
|
jobId,
|
|
78
79
|
filter.scopes,
|
|
@@ -1,6 +1,9 @@
|
|
|
1
|
+
export * from '../../../access_scopes.js';
|
|
2
|
+
export * from '../../../notes_filter.js';
|
|
1
3
|
export * from '../../../pxe.js';
|
|
2
4
|
export * from '../../../config/index.js';
|
|
3
5
|
export * from '../../../error_enriching.js';
|
|
6
|
+
export * from '../../../contract_logging.js';
|
|
4
7
|
export * from '../../../storage/index.js';
|
|
5
8
|
export * from './utils.js';
|
|
6
9
|
export type { PXECreationOptions } from '../../pxe_creation_options.js';
|
|
@@ -1,6 +1,9 @@
|
|
|
1
|
+
export * from '../../../access_scopes.js';
|
|
2
|
+
export * from '../../../notes_filter.js';
|
|
1
3
|
export * from '../../../pxe.js';
|
|
2
4
|
export * from '../../../config/index.js';
|
|
3
5
|
export * from '../../../storage/index.js';
|
|
4
6
|
export * from '../../../error_enriching.js';
|
|
7
|
+
export * from '../../../contract_logging.js';
|
|
5
8
|
export * from './utils.js';
|
|
6
9
|
export { type PXECreationOptions } from '../../pxe_creation_options.js';
|