@aztec/pxe 0.0.1-commit.c80b6263 → 0.0.1-commit.cf93bcc56
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/block_synchronizer/block_synchronizer.d.ts +4 -2
- package/dest/block_synchronizer/block_synchronizer.d.ts.map +1 -1
- package/dest/block_synchronizer/block_synchronizer.js +7 -1
- package/dest/contract_function_simulator/contract_function_simulator.d.ts +54 -30
- package/dest/contract_function_simulator/contract_function_simulator.d.ts.map +1 -1
- package/dest/contract_function_simulator/contract_function_simulator.js +170 -66
- 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 +2 -2
- 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 +1 -1
- package/dest/contract_function_simulator/oracle/interfaces.d.ts +9 -9
- package/dest/contract_function_simulator/oracle/interfaces.d.ts.map +1 -1
- package/dest/contract_function_simulator/oracle/oracle.d.ts +5 -5
- package/dest/contract_function_simulator/oracle/oracle.d.ts.map +1 -1
- package/dest/contract_function_simulator/oracle/oracle.js +32 -20
- package/dest/contract_function_simulator/oracle/private_execution_oracle.d.ts +36 -36
- package/dest/contract_function_simulator/oracle/private_execution_oracle.d.ts.map +1 -1
- package/dest/contract_function_simulator/oracle/private_execution_oracle.js +74 -21
- package/dest/contract_function_simulator/oracle/utility_execution_oracle.d.ts +48 -24
- package/dest/contract_function_simulator/oracle/utility_execution_oracle.d.ts.map +1 -1
- package/dest/contract_function_simulator/oracle/utility_execution_oracle.js +85 -61
- package/dest/contract_sync/contract_sync_service.d.ts +43 -0
- package/dest/contract_sync/contract_sync_service.d.ts.map +1 -0
- package/dest/contract_sync/contract_sync_service.js +97 -0
- package/dest/contract_sync/helpers.d.ts +29 -0
- package/dest/contract_sync/helpers.d.ts.map +1 -0
- package/dest/contract_sync/{index.js → helpers.js} +13 -12
- package/dest/debug/pxe_debug_utils.d.ts +14 -10
- package/dest/debug/pxe_debug_utils.d.ts.map +1 -1
- package/dest/debug/pxe_debug_utils.js +16 -15
- package/dest/entrypoints/client/bundle/index.d.ts +3 -1
- package/dest/entrypoints/client/bundle/index.d.ts.map +1 -1
- package/dest/entrypoints/client/bundle/index.js +2 -0
- 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 +11 -2
- package/dest/entrypoints/client/lazy/index.d.ts +3 -1
- package/dest/entrypoints/client/lazy/index.d.ts.map +1 -1
- package/dest/entrypoints/client/lazy/index.js +2 -0
- package/dest/entrypoints/client/lazy/utils.d.ts +1 -1
- package/dest/entrypoints/client/lazy/utils.d.ts.map +1 -1
- package/dest/entrypoints/client/lazy/utils.js +11 -2
- package/dest/entrypoints/server/index.d.ts +4 -2
- package/dest/entrypoints/server/index.d.ts.map +1 -1
- package/dest/entrypoints/server/index.js +3 -1
- package/dest/entrypoints/server/utils.js +9 -1
- package/dest/events/event_service.d.ts +4 -5
- package/dest/events/event_service.d.ts.map +1 -1
- package/dest/events/event_service.js +5 -6
- package/dest/logs/log_service.d.ts +6 -5
- package/dest/logs/log_service.d.ts.map +1 -1
- package/dest/logs/log_service.js +14 -24
- 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 +9 -9
- 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 +3 -3
- package/dest/oracle_version.d.ts.map +1 -1
- package/dest/oracle_version.js +2 -2
- 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.js +4 -4
- package/dest/private_kernel/private_kernel_execution_prover.js +6 -6
- package/dest/pxe.d.ts +69 -23
- package/dest/pxe.d.ts.map +1 -1
- package/dest/pxe.js +72 -44
- 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 -1
- package/dest/storage/contract_store/contract_store.d.ts.map +1 -1
- package/dest/storage/contract_store/contract_store.js +27 -18
- package/dest/storage/metadata.d.ts +1 -1
- package/dest/storage/metadata.js +1 -1
- package/dest/storage/note_store/note_store.d.ts +13 -3
- package/dest/storage/note_store/note_store.d.ts.map +1 -1
- package/dest/storage/note_store/note_store.js +147 -107
- package/dest/storage/private_event_store/private_event_store.d.ts +1 -1
- package/dest/storage/private_event_store/private_event_store.d.ts.map +1 -1
- package/dest/storage/private_event_store/private_event_store.js +84 -61
- package/dest/storage/private_event_store/stored_private_event.js +1 -1
- 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 +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/recipient_sync/load_private_logs_for_sender_recipient_pair.js +4 -4
- package/dest/tagging/recipient_sync/utils/find_highest_indexes.js +2 -2
- package/package.json +25 -16
- package/src/access_scopes.ts +9 -0
- package/src/block_synchronizer/block_synchronizer.ts +6 -0
- package/src/contract_function_simulator/contract_function_simulator.ts +318 -121
- 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 +10 -10
- package/src/contract_function_simulator/oracle/oracle.ts +35 -18
- package/src/contract_function_simulator/oracle/private_execution_oracle.ts +97 -101
- package/src/contract_function_simulator/oracle/utility_execution_oracle.ts +129 -63
- package/src/contract_sync/contract_sync_service.ts +152 -0
- package/src/contract_sync/{index.ts → helpers.ts} +21 -21
- package/src/debug/pxe_debug_utils.ts +48 -18
- package/src/entrypoints/client/bundle/index.ts +2 -0
- package/src/entrypoints/client/bundle/utils.ts +12 -2
- package/src/entrypoints/client/lazy/index.ts +2 -0
- package/src/entrypoints/client/lazy/utils.ts +12 -2
- package/src/entrypoints/server/index.ts +3 -1
- package/src/entrypoints/server/utils.ts +7 -7
- package/src/events/event_service.ts +4 -6
- package/src/logs/log_service.ts +14 -29
- package/src/notes/note_service.ts +9 -10
- package/src/notes_filter.ts +26 -0
- package/src/oracle_version.ts +2 -2
- 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 +7 -7
- package/src/private_kernel/private_kernel_execution_prover.ts +6 -6
- package/src/pxe.ts +151 -88
- 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 +26 -15
- package/src/storage/metadata.ts +1 -1
- package/src/storage/note_store/note_store.ts +169 -132
- package/src/storage/private_event_store/private_event_store.ts +102 -81
- package/src/storage/private_event_store/stored_private_event.ts +1 -1
- 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 +28 -4
- package/src/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.ts +4 -4
- package/src/tagging/recipient_sync/utils/find_highest_indexes.ts +2 -2
- package/dest/contract_sync/index.d.ts +0 -23
- package/dest/contract_sync/index.d.ts.map +0 -1
- 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
|
@@ -2,6 +2,7 @@ import type { ARCHIVE_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 { createLogger } from '@aztec/foundation/log';
|
|
5
6
|
import type { MembershipWitness } from '@aztec/foundation/trees';
|
|
6
7
|
import type { KeyStore } from '@aztec/key-store';
|
|
7
8
|
import type { AuthWitness } from '@aztec/stdlib/auth-witness';
|
|
@@ -13,8 +14,8 @@ import type { KeyValidationRequest } from '@aztec/stdlib/kernel';
|
|
|
13
14
|
import type { NoteStatus } from '@aztec/stdlib/note';
|
|
14
15
|
import { type NullifierMembershipWitness, PublicDataWitness } from '@aztec/stdlib/trees';
|
|
15
16
|
import type { BlockHeader, Capsule } from '@aztec/stdlib/tx';
|
|
17
|
+
import type { AccessScopes } from '../../access_scopes.js';
|
|
16
18
|
import type { AddressStore } from '../../storage/address_store/address_store.js';
|
|
17
|
-
import type { AnchorBlockStore } from '../../storage/anchor_block_store/anchor_block_store.js';
|
|
18
19
|
import type { CapsuleStore } from '../../storage/capsule_store/capsule_store.js';
|
|
19
20
|
import type { ContractStore } from '../../storage/contract_store/contract_store.js';
|
|
20
21
|
import type { NoteStore } from '../../storage/note_store/note_store.js';
|
|
@@ -24,12 +25,35 @@ import type { SenderAddressBookStore } from '../../storage/tagging_store/sender_
|
|
|
24
25
|
import { UtilityContext } from '../noir-structs/utility_context.js';
|
|
25
26
|
import type { IMiscOracle, IUtilityExecutionOracle, NoteData } from './interfaces.js';
|
|
26
27
|
import { MessageLoadOracleInputs } from './message_load_oracle_inputs.js';
|
|
28
|
+
/** Args for UtilityExecutionOracle constructor. */
|
|
29
|
+
export type UtilityExecutionOracleArgs = {
|
|
30
|
+
contractAddress: AztecAddress;
|
|
31
|
+
/** List of transient auth witnesses to be used during this simulation */
|
|
32
|
+
authWitnesses: AuthWitness[];
|
|
33
|
+
capsules: Capsule[];
|
|
34
|
+
anchorBlockHeader: BlockHeader;
|
|
35
|
+
contractStore: ContractStore;
|
|
36
|
+
noteStore: NoteStore;
|
|
37
|
+
keyStore: KeyStore;
|
|
38
|
+
addressStore: AddressStore;
|
|
39
|
+
aztecNode: AztecNode;
|
|
40
|
+
recipientTaggingStore: RecipientTaggingStore;
|
|
41
|
+
senderAddressBookStore: SenderAddressBookStore;
|
|
42
|
+
capsuleStore: CapsuleStore;
|
|
43
|
+
privateEventStore: PrivateEventStore;
|
|
44
|
+
jobId: string;
|
|
45
|
+
log?: ReturnType<typeof createLogger>;
|
|
46
|
+
scopes: AccessScopes;
|
|
47
|
+
};
|
|
27
48
|
/**
|
|
28
49
|
* The oracle for an execution of utility contract functions.
|
|
29
50
|
*/
|
|
30
51
|
export declare class UtilityExecutionOracle implements IMiscOracle, IUtilityExecutionOracle {
|
|
52
|
+
#private;
|
|
53
|
+
isMisc: true;
|
|
54
|
+
isUtility: true;
|
|
55
|
+
private contractLogger;
|
|
31
56
|
protected readonly contractAddress: AztecAddress;
|
|
32
|
-
/** List of transient auth witnesses to be used during this simulation */
|
|
33
57
|
protected readonly authWitnesses: AuthWitness[];
|
|
34
58
|
protected readonly capsules: Capsule[];
|
|
35
59
|
protected readonly anchorBlockHeader: BlockHeader;
|
|
@@ -38,20 +62,14 @@ export declare class UtilityExecutionOracle implements IMiscOracle, IUtilityExec
|
|
|
38
62
|
protected readonly keyStore: KeyStore;
|
|
39
63
|
protected readonly addressStore: AddressStore;
|
|
40
64
|
protected readonly aztecNode: AztecNode;
|
|
41
|
-
protected readonly anchorBlockStore: AnchorBlockStore;
|
|
42
65
|
protected readonly recipientTaggingStore: RecipientTaggingStore;
|
|
43
66
|
protected readonly senderAddressBookStore: SenderAddressBookStore;
|
|
44
67
|
protected readonly capsuleStore: CapsuleStore;
|
|
45
68
|
protected readonly privateEventStore: PrivateEventStore;
|
|
46
69
|
protected readonly jobId: string;
|
|
47
|
-
protected log:
|
|
48
|
-
protected readonly scopes
|
|
49
|
-
|
|
50
|
-
isUtility: true;
|
|
51
|
-
private aztecNrDebugLog;
|
|
52
|
-
constructor(contractAddress: AztecAddress,
|
|
53
|
-
/** List of transient auth witnesses to be used during this simulation */
|
|
54
|
-
authWitnesses: AuthWitness[], capsules: Capsule[], anchorBlockHeader: BlockHeader, contractStore: ContractStore, noteStore: NoteStore, keyStore: KeyStore, addressStore: AddressStore, aztecNode: AztecNode, anchorBlockStore: AnchorBlockStore, recipientTaggingStore: RecipientTaggingStore, senderAddressBookStore: SenderAddressBookStore, capsuleStore: CapsuleStore, privateEventStore: PrivateEventStore, jobId: string, log?: import("@aztec/foundation/log").Logger, scopes?: AztecAddress[] | undefined);
|
|
70
|
+
protected log: ReturnType<typeof createLogger>;
|
|
71
|
+
protected readonly scopes: AccessScopes;
|
|
72
|
+
constructor(args: UtilityExecutionOracleArgs);
|
|
55
73
|
utilityAssertCompatibleOracleVersion(version: number): void;
|
|
56
74
|
utilityGetRandomField(): Fr;
|
|
57
75
|
utilityGetUtilityContext(): UtilityContext;
|
|
@@ -60,22 +78,29 @@ export declare class UtilityExecutionOracle implements IMiscOracle, IUtilityExec
|
|
|
60
78
|
* @param pkMHash - The master public key hash.
|
|
61
79
|
* @returns A Promise that resolves to nullifier keys.
|
|
62
80
|
* @throws If the keys are not registered in the key store.
|
|
81
|
+
* @throws If scopes are defined and the account is not in the scopes.
|
|
63
82
|
*/
|
|
64
83
|
utilityGetKeyValidationRequest(pkMHash: Fr): Promise<KeyValidationRequest>;
|
|
65
84
|
/**
|
|
66
85
|
* Fetches the index and sibling path of a leaf at a given block from the note hash tree.
|
|
67
|
-
* @param
|
|
68
|
-
*
|
|
86
|
+
* @param anchorBlockHash - The hash of a block that contains the note hash tree root in which to find the membership
|
|
87
|
+
* witness.
|
|
88
|
+
* @param noteHash - The note hash to find in the note hash tree.
|
|
69
89
|
* @returns The membership witness containing the leaf index and sibling path
|
|
70
90
|
*/
|
|
71
|
-
utilityGetNoteHashMembershipWitness(
|
|
91
|
+
utilityGetNoteHashMembershipWitness(anchorBlockHash: BlockHash, noteHash: Fr): Promise<MembershipWitness<typeof NOTE_HASH_TREE_HEIGHT> | undefined>;
|
|
72
92
|
/**
|
|
73
|
-
* Fetches the index and sibling path of a
|
|
74
|
-
*
|
|
75
|
-
*
|
|
93
|
+
* Fetches the index and sibling path of a block hash in the archive tree.
|
|
94
|
+
*
|
|
95
|
+
* Block hashes are the leaves of the archive tree. Each time a new block is added to the chain,
|
|
96
|
+
* its block hash is appended as a new leaf to the archive tree.
|
|
97
|
+
*
|
|
98
|
+
* @param anchorBlockHash - The hash of a block that contains the archive tree root in which to find the membership
|
|
99
|
+
* witness.
|
|
100
|
+
* @param blockHash - The block hash to find in the archive tree.
|
|
76
101
|
* @returns The membership witness containing the leaf index and sibling path
|
|
77
102
|
*/
|
|
78
|
-
|
|
103
|
+
utilityGetBlockHashMembershipWitness(anchorBlockHash: BlockHash, blockHash: BlockHash): Promise<MembershipWitness<typeof ARCHIVE_HEIGHT> | undefined>;
|
|
79
104
|
/**
|
|
80
105
|
* Returns a nullifier membership witness for a given nullifier at a given block.
|
|
81
106
|
* @param blockHash - The block hash at which to get the index.
|
|
@@ -109,11 +134,10 @@ export declare class UtilityExecutionOracle implements IMiscOracle, IUtilityExec
|
|
|
109
134
|
/**
|
|
110
135
|
* Retrieve the complete address associated to a given address.
|
|
111
136
|
* @param account - The account address.
|
|
112
|
-
* @returns A complete address associated with the input address.
|
|
113
|
-
* @throws An error if the account is not registered in the database.
|
|
137
|
+
* @returns A complete address associated with the input address, or `undefined` if not registered.
|
|
114
138
|
*/
|
|
115
|
-
|
|
116
|
-
protected
|
|
139
|
+
utilityTryGetPublicKeysAndPartialAddress(account: AztecAddress): Promise<CompleteAddress | undefined>;
|
|
140
|
+
protected getCompleteAddressOrFail(account: AztecAddress): Promise<CompleteAddress>;
|
|
117
141
|
/**
|
|
118
142
|
* Returns a contract instance associated with an address or throws if not found.
|
|
119
143
|
* @param address - Address.
|
|
@@ -174,7 +198,7 @@ export declare class UtilityExecutionOracle implements IMiscOracle, IUtilityExec
|
|
|
174
198
|
* @param numberOfElements - Number of elements to read from the starting storage slot.
|
|
175
199
|
*/
|
|
176
200
|
utilityStorageRead(blockHash: BlockHash, contractAddress: AztecAddress, startStorageSlot: Fr, numberOfElements: number): Promise<Fr[]>;
|
|
177
|
-
|
|
201
|
+
utilityLog(level: number, message: string, fields: Fr[]): Promise<void>;
|
|
178
202
|
utilityFetchTaggedLogs(pendingTaggedLogArrayBaseSlot: Fr): Promise<void>;
|
|
179
203
|
/**
|
|
180
204
|
* Validates all note and event validation requests enqueued via `enqueue_note_for_validation` and
|
|
@@ -202,4 +226,4 @@ export declare class UtilityExecutionOracle implements IMiscOracle, IUtilityExec
|
|
|
202
226
|
utilityGetSharedSecret(address: AztecAddress, ephPk: Point): Promise<Point>;
|
|
203
227
|
protected getSharedSecret(address: AztecAddress, ephPk: Point): Promise<Point>;
|
|
204
228
|
}
|
|
205
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
229
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbGl0eV9leGVjdXRpb25fb3JhY2xlLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29udHJhY3RfZnVuY3Rpb25fc2ltdWxhdG9yL29yYWNsZS91dGlsaXR5X2V4ZWN1dGlvbl9vcmFjbGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLEVBQUUsY0FBYyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDOUUsT0FBTyxLQUFLLEVBQUUsV0FBVyxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFFbkUsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3BELE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUMxRCxPQUFPLEVBQWlELFlBQVksRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3BHLE9BQU8sS0FBSyxFQUFFLGlCQUFpQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDakUsT0FBTyxLQUFLLEVBQUUsUUFBUSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDakQsT0FBTyxLQUFLLEVBQUUsV0FBVyxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDOUQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzNELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNoRCxPQUFPLEtBQUssRUFBRSxlQUFlLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUVoRixPQUFPLEtBQUssRUFBRSxTQUFTLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNqRSxPQUFPLEtBQUssRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBSWpFLE9BQU8sS0FBSyxFQUFFLFVBQVUsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3JELE9BQU8sRUFBZ0IsS0FBSywwQkFBMEIsRUFBRSxpQkFBaUIsRUFB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
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utility_execution_oracle.d.ts","sourceRoot":"","sources":["../../../src/contract_function_simulator/oracle/utility_execution_oracle.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AAC9E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAC;AAEnE,OAAO,EAAE,EAAE,EAAE,MAAM,gCAAgC,CAAC;AACpD,OAAO,EAAE,KAAK,EAAE,MAAM,mCAAmC,CAAC;
|
|
1
|
+
{"version":3,"file":"utility_execution_oracle.d.ts","sourceRoot":"","sources":["../../../src/contract_function_simulator/oracle/utility_execution_oracle.ts"],"names":[],"mappings":"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"}
|
|
@@ -20,6 +20,9 @@ import { MessageLoadOracleInputs } from './message_load_oracle_inputs.js';
|
|
|
20
20
|
/**
|
|
21
21
|
* The oracle for an execution of utility contract functions.
|
|
22
22
|
*/ export class UtilityExecutionOracle {
|
|
23
|
+
isMisc = true;
|
|
24
|
+
isUtility = true;
|
|
25
|
+
contractLogger;
|
|
23
26
|
contractAddress;
|
|
24
27
|
authWitnesses;
|
|
25
28
|
capsules;
|
|
@@ -29,7 +32,6 @@ import { MessageLoadOracleInputs } from './message_load_oracle_inputs.js';
|
|
|
29
32
|
keyStore;
|
|
30
33
|
addressStore;
|
|
31
34
|
aztecNode;
|
|
32
|
-
anchorBlockStore;
|
|
33
35
|
recipientTaggingStore;
|
|
34
36
|
senderAddressBookStore;
|
|
35
37
|
capsuleStore;
|
|
@@ -37,30 +39,23 @@ import { MessageLoadOracleInputs } from './message_load_oracle_inputs.js';
|
|
|
37
39
|
jobId;
|
|
38
40
|
log;
|
|
39
41
|
scopes;
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
this.
|
|
45
|
-
this.
|
|
46
|
-
this.
|
|
47
|
-
this.
|
|
48
|
-
this.
|
|
49
|
-
this.
|
|
50
|
-
this.
|
|
51
|
-
this.
|
|
52
|
-
this.
|
|
53
|
-
this.
|
|
54
|
-
this.
|
|
55
|
-
this.
|
|
56
|
-
this.
|
|
57
|
-
this.privateEventStore = privateEventStore;
|
|
58
|
-
this.jobId = jobId;
|
|
59
|
-
this.log = log;
|
|
60
|
-
this.scopes = scopes;
|
|
61
|
-
this.isMisc = true;
|
|
62
|
-
this.isUtility = true;
|
|
63
|
-
this.aztecNrDebugLog = createLogger('aztec-nr:debug_log');
|
|
42
|
+
constructor(args){
|
|
43
|
+
this.contractAddress = args.contractAddress;
|
|
44
|
+
this.authWitnesses = args.authWitnesses;
|
|
45
|
+
this.capsules = args.capsules;
|
|
46
|
+
this.anchorBlockHeader = args.anchorBlockHeader;
|
|
47
|
+
this.contractStore = args.contractStore;
|
|
48
|
+
this.noteStore = args.noteStore;
|
|
49
|
+
this.keyStore = args.keyStore;
|
|
50
|
+
this.addressStore = args.addressStore;
|
|
51
|
+
this.aztecNode = args.aztecNode;
|
|
52
|
+
this.recipientTaggingStore = args.recipientTaggingStore;
|
|
53
|
+
this.senderAddressBookStore = args.senderAddressBookStore;
|
|
54
|
+
this.capsuleStore = args.capsuleStore;
|
|
55
|
+
this.privateEventStore = args.privateEventStore;
|
|
56
|
+
this.jobId = args.jobId;
|
|
57
|
+
this.log = args.log ?? createLogger('simulator:client_view_context');
|
|
58
|
+
this.scopes = args.scopes;
|
|
64
59
|
}
|
|
65
60
|
utilityAssertCompatibleOracleVersion(version) {
|
|
66
61
|
if (version !== ORACLE_VERSION) {
|
|
@@ -78,24 +73,43 @@ import { MessageLoadOracleInputs } from './message_load_oracle_inputs.js';
|
|
|
78
73
|
* @param pkMHash - The master public key hash.
|
|
79
74
|
* @returns A Promise that resolves to nullifier keys.
|
|
80
75
|
* @throws If the keys are not registered in the key store.
|
|
81
|
-
|
|
76
|
+
* @throws If scopes are defined and the account is not in the scopes.
|
|
77
|
+
*/ async utilityGetKeyValidationRequest(pkMHash) {
|
|
78
|
+
// If scopes are defined, check that the key belongs to an account in the scopes.
|
|
79
|
+
if (this.scopes !== 'ALL_SCOPES' && this.scopes.length > 0) {
|
|
80
|
+
let hasAccess = false;
|
|
81
|
+
for(let i = 0; i < this.scopes.length && !hasAccess; i++){
|
|
82
|
+
if (await this.keyStore.accountHasKey(this.scopes[i], pkMHash)) {
|
|
83
|
+
hasAccess = true;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
if (!hasAccess) {
|
|
87
|
+
throw new Error(`Key validation request denied: no scoped account has a key with hash ${pkMHash.toString()}.`);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
82
90
|
return this.keyStore.getKeyValidationRequest(pkMHash, this.contractAddress);
|
|
83
91
|
}
|
|
84
92
|
/**
|
|
85
93
|
* Fetches the index and sibling path of a leaf at a given block from the note hash tree.
|
|
86
|
-
* @param
|
|
87
|
-
*
|
|
94
|
+
* @param anchorBlockHash - The hash of a block that contains the note hash tree root in which to find the membership
|
|
95
|
+
* witness.
|
|
96
|
+
* @param noteHash - The note hash to find in the note hash tree.
|
|
88
97
|
* @returns The membership witness containing the leaf index and sibling path
|
|
89
|
-
*/ utilityGetNoteHashMembershipWitness(
|
|
90
|
-
return this.aztecNode.getNoteHashMembershipWitness(
|
|
98
|
+
*/ utilityGetNoteHashMembershipWitness(anchorBlockHash, noteHash) {
|
|
99
|
+
return this.aztecNode.getNoteHashMembershipWitness(anchorBlockHash, noteHash);
|
|
91
100
|
}
|
|
92
101
|
/**
|
|
93
|
-
* Fetches the index and sibling path of a
|
|
94
|
-
*
|
|
95
|
-
*
|
|
102
|
+
* Fetches the index and sibling path of a block hash in the archive tree.
|
|
103
|
+
*
|
|
104
|
+
* Block hashes are the leaves of the archive tree. Each time a new block is added to the chain,
|
|
105
|
+
* its block hash is appended as a new leaf to the archive tree.
|
|
106
|
+
*
|
|
107
|
+
* @param anchorBlockHash - The hash of a block that contains the archive tree root in which to find the membership
|
|
108
|
+
* witness.
|
|
109
|
+
* @param blockHash - The block hash to find in the archive tree.
|
|
96
110
|
* @returns The membership witness containing the leaf index and sibling path
|
|
97
|
-
*/
|
|
98
|
-
return this.aztecNode.
|
|
111
|
+
*/ utilityGetBlockHashMembershipWitness(anchorBlockHash, blockHash) {
|
|
112
|
+
return this.aztecNode.getBlockHashMembershipWitness(anchorBlockHash, blockHash);
|
|
99
113
|
}
|
|
100
114
|
/**
|
|
101
115
|
* Returns a nullifier membership witness for a given nullifier at a given block.
|
|
@@ -129,7 +143,7 @@ import { MessageLoadOracleInputs } from './message_load_oracle_inputs.js';
|
|
|
129
143
|
* @param blockNumber - The number of a block of which to get the block header.
|
|
130
144
|
* @returns Block extracted from a block with block number `blockNumber`.
|
|
131
145
|
*/ async utilityGetBlockHeader(blockNumber) {
|
|
132
|
-
const anchorBlockNumber =
|
|
146
|
+
const anchorBlockNumber = this.anchorBlockHeader.getBlockNumber();
|
|
133
147
|
if (blockNumber > anchorBlockNumber) {
|
|
134
148
|
throw new Error(`Block number ${blockNumber} is higher than current block ${anchorBlockNumber}`);
|
|
135
149
|
}
|
|
@@ -139,12 +153,11 @@ import { MessageLoadOracleInputs } from './message_load_oracle_inputs.js';
|
|
|
139
153
|
/**
|
|
140
154
|
* Retrieve the complete address associated to a given address.
|
|
141
155
|
* @param account - The account address.
|
|
142
|
-
* @returns A complete address associated with the input address.
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
return this.getCompleteAddress(account);
|
|
156
|
+
* @returns A complete address associated with the input address, or `undefined` if not registered.
|
|
157
|
+
*/ utilityTryGetPublicKeysAndPartialAddress(account) {
|
|
158
|
+
return this.addressStore.getCompleteAddress(account);
|
|
146
159
|
}
|
|
147
|
-
async
|
|
160
|
+
async getCompleteAddressOrFail(account) {
|
|
148
161
|
const completeAddress = await this.addressStore.getCompleteAddress(account);
|
|
149
162
|
if (!completeAddress) {
|
|
150
163
|
throw new Error(`No public key registered for address ${account}.
|
|
@@ -196,7 +209,7 @@ import { MessageLoadOracleInputs } from './message_load_oracle_inputs.js';
|
|
|
196
209
|
* @param status - The status of notes to fetch.
|
|
197
210
|
* @returns Array of note data.
|
|
198
211
|
*/ async utilityGetNotes(owner, storageSlot, numSelects, selectByIndexes, selectByOffsets, selectByLengths, selectValues, selectComparators, sortByIndexes, sortByOffsets, sortByLengths, sortOrder, limit, offset, status) {
|
|
199
|
-
const noteService = new NoteService(this.noteStore, this.aztecNode, this.
|
|
212
|
+
const noteService = new NoteService(this.noteStore, this.aztecNode, this.anchorBlockHeader, this.jobId);
|
|
200
213
|
const dbNotes = await noteService.getNotes(this.contractAddress, owner, storageSlot, status, this.scopes);
|
|
201
214
|
return pickNotes(dbNotes, {
|
|
202
215
|
selects: selectByIndexes.slice(0, numSelects).map((index, i)=>({
|
|
@@ -225,8 +238,11 @@ import { MessageLoadOracleInputs } from './message_load_oracle_inputs.js';
|
|
|
225
238
|
* @param innerNullifier - The inner nullifier.
|
|
226
239
|
* @returns A boolean indicating whether the nullifier exists in the tree or not.
|
|
227
240
|
*/ async utilityCheckNullifierExists(innerNullifier) {
|
|
228
|
-
const nullifier = await
|
|
229
|
-
|
|
241
|
+
const [nullifier, anchorBlockHash] = await Promise.all([
|
|
242
|
+
siloNullifier(this.contractAddress, innerNullifier),
|
|
243
|
+
this.anchorBlockHeader.hash()
|
|
244
|
+
]);
|
|
245
|
+
const [leafIndex] = await this.aztecNode.findLeavesIndexes(anchorBlockHash, MerkleTreeId.NULLIFIER_TREE, [
|
|
230
246
|
nullifier
|
|
231
247
|
]);
|
|
232
248
|
return leafIndex?.data !== undefined;
|
|
@@ -254,24 +270,32 @@ import { MessageLoadOracleInputs } from './message_load_oracle_inputs.js';
|
|
|
254
270
|
this.log.debug(`Oracle storage read: slots=[${slots.map((slot)=>slot.toString()).join(', ')}] address=${contractAddress.toString()} values=[${values.join(', ')}]`);
|
|
255
271
|
return values;
|
|
256
272
|
}
|
|
257
|
-
|
|
273
|
+
/**
|
|
274
|
+
* Returns a per-contract logger whose output is prefixed with `contract_log::<name>(<addrAbbrev>)`.
|
|
275
|
+
*/ async #getContractLogger() {
|
|
276
|
+
if (!this.contractLogger) {
|
|
277
|
+
const addrAbbrev = this.contractAddress.toString().slice(0, 10);
|
|
278
|
+
const name = await this.contractStore.getDebugContractName(this.contractAddress);
|
|
279
|
+
const module = name ? `contract_log::${name}(${addrAbbrev})` : `contract_log::${addrAbbrev}`;
|
|
280
|
+
// Purpose of instanceId is to distinguish logs from different instances of the same component. It makes sense
|
|
281
|
+
// to re-use jobId as instanceId here as executions of different PXE jobs are isolated.
|
|
282
|
+
this.contractLogger = createLogger(module, {
|
|
283
|
+
instanceId: this.jobId
|
|
284
|
+
});
|
|
285
|
+
}
|
|
286
|
+
return this.contractLogger;
|
|
287
|
+
}
|
|
288
|
+
async utilityLog(level, message, fields) {
|
|
258
289
|
if (!LogLevels[level]) {
|
|
259
|
-
throw new Error(`Invalid
|
|
290
|
+
throw new Error(`Invalid log level: ${level}`);
|
|
260
291
|
}
|
|
261
292
|
const levelName = LogLevels[level];
|
|
262
|
-
this
|
|
293
|
+
const logger = await this.#getContractLogger();
|
|
294
|
+
logger[levelName](`${applyStringFormatting(message, fields)}`);
|
|
263
295
|
}
|
|
264
296
|
async utilityFetchTaggedLogs(pendingTaggedLogArrayBaseSlot) {
|
|
265
|
-
const logService = new LogService(this.aztecNode, this.
|
|
266
|
-
|
|
267
|
-
// It is acceptable to run the following operations in parallel for several reasons:
|
|
268
|
-
// 1. syncTaggedLogs does not write to the note store — it only stores the pending tagged logs in a capsule array,
|
|
269
|
-
// which is then processed in Noir after this handler returns.
|
|
270
|
-
// 2. Even if syncTaggedLogs did write to the note store, it would not cause inconsistent state.
|
|
271
|
-
await Promise.all([
|
|
272
|
-
logService.syncTaggedLogs(this.contractAddress, pendingTaggedLogArrayBaseSlot, this.scopes),
|
|
273
|
-
noteService.syncNoteNullifiers(this.contractAddress)
|
|
274
|
-
]);
|
|
297
|
+
const logService = new LogService(this.aztecNode, this.anchorBlockHeader, this.keyStore, this.capsuleStore, this.recipientTaggingStore, this.senderAddressBookStore, this.addressStore, this.jobId, this.log.getBindings());
|
|
298
|
+
await logService.fetchTaggedLogs(this.contractAddress, pendingTaggedLogArrayBaseSlot, this.scopes);
|
|
275
299
|
}
|
|
276
300
|
/**
|
|
277
301
|
* Validates all note and event validation requests enqueued via `enqueue_note_for_validation` and
|
|
@@ -291,9 +315,9 @@ import { MessageLoadOracleInputs } from './message_load_oracle_inputs.js';
|
|
|
291
315
|
// faster as we don't need to wait for the network round-trip.
|
|
292
316
|
const noteValidationRequests = (await this.capsuleStore.readCapsuleArray(contractAddress, noteValidationRequestsArrayBaseSlot, this.jobId)).map(NoteValidationRequest.fromFields);
|
|
293
317
|
const eventValidationRequests = (await this.capsuleStore.readCapsuleArray(contractAddress, eventValidationRequestsArrayBaseSlot, this.jobId)).map(EventValidationRequest.fromFields);
|
|
294
|
-
const noteService = new NoteService(this.noteStore, this.aztecNode, this.
|
|
318
|
+
const noteService = new NoteService(this.noteStore, this.aztecNode, this.anchorBlockHeader, this.jobId);
|
|
295
319
|
const noteStorePromises = noteValidationRequests.map((request)=>noteService.validateAndStoreNote(request.contractAddress, request.owner, request.storageSlot, request.randomness, request.noteNonce, request.content, request.noteHash, request.nullifier, request.txHash, request.recipient));
|
|
296
|
-
const eventService = new EventService(this.
|
|
320
|
+
const eventService = new EventService(this.anchorBlockHeader, this.aztecNode, this.privateEventStore, this.jobId);
|
|
297
321
|
const eventStorePromises = eventValidationRequests.map((request)=>eventService.validateAndStoreEvent(request.contractAddress, request.eventTypeId, request.randomness, request.serializedEvent, request.eventCommitment, request.txHash, request.recipient));
|
|
298
322
|
await Promise.all([
|
|
299
323
|
...noteStorePromises,
|
|
@@ -311,7 +335,7 @@ import { MessageLoadOracleInputs } from './message_load_oracle_inputs.js';
|
|
|
311
335
|
// We read all log retrieval requests and process them all concurrently. This makes the process much faster as we
|
|
312
336
|
// don't need to wait for the network round-trip.
|
|
313
337
|
const logRetrievalRequests = (await this.capsuleStore.readCapsuleArray(contractAddress, logRetrievalRequestsArrayBaseSlot, this.jobId)).map(LogRetrievalRequest.fromFields);
|
|
314
|
-
const logService = new LogService(this.aztecNode, this.
|
|
338
|
+
const logService = new LogService(this.aztecNode, this.anchorBlockHeader, this.keyStore, this.capsuleStore, this.recipientTaggingStore, this.senderAddressBookStore, this.addressStore, this.jobId, this.log.getBindings());
|
|
315
339
|
const maybeLogRetrievalResponses = await logService.bulkRetrieveLogs(logRetrievalRequests);
|
|
316
340
|
// Requests are cleared once we're done.
|
|
317
341
|
await this.capsuleStore.setCapsuleArray(contractAddress, logRetrievalRequestsArrayBaseSlot, [], this.jobId);
|
|
@@ -364,7 +388,7 @@ import { MessageLoadOracleInputs } from './message_load_oracle_inputs.js';
|
|
|
364
388
|
}
|
|
365
389
|
async getSharedSecret(address, ephPk) {
|
|
366
390
|
// TODO(#12656): return an app-siloed secret
|
|
367
|
-
const recipientCompleteAddress = await this.
|
|
391
|
+
const recipientCompleteAddress = await this.getCompleteAddressOrFail(address);
|
|
368
392
|
const ivskM = await this.keyStore.getMasterSecretKey(recipientCompleteAddress.publicKeys.masterIncomingViewingPublicKey);
|
|
369
393
|
const addressSecret = await computeAddressSecret(await recipientCompleteAddress.getPreaddress(), ivskM);
|
|
370
394
|
return deriveEcdhSharedSecret(addressSecret, ephPk);
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import type { Logger } from '@aztec/foundation/log';
|
|
2
|
+
import type { FunctionCall, FunctionSelector } from '@aztec/stdlib/abi';
|
|
3
|
+
import type { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
4
|
+
import type { AztecNode } from '@aztec/stdlib/interfaces/client';
|
|
5
|
+
import type { BlockHeader } from '@aztec/stdlib/tx';
|
|
6
|
+
import type { AccessScopes } from '../access_scopes.js';
|
|
7
|
+
import type { StagedStore } from '../job_coordinator/job_coordinator.js';
|
|
8
|
+
import type { ContractStore } from '../storage/contract_store/contract_store.js';
|
|
9
|
+
import type { NoteStore } from '../storage/note_store/note_store.js';
|
|
10
|
+
/**
|
|
11
|
+
* Service for syncing the private state of contracts and verifying that the PXE holds the current class artifact.
|
|
12
|
+
* It uses a cache to avoid redundant sync operations - the cache is wiped when the anchor block changes.
|
|
13
|
+
*
|
|
14
|
+
* TODO: The StagedStore naming is broken here. Figure out a better name.
|
|
15
|
+
*/
|
|
16
|
+
export declare class ContractSyncService implements StagedStore {
|
|
17
|
+
#private;
|
|
18
|
+
private aztecNode;
|
|
19
|
+
private contractStore;
|
|
20
|
+
private noteStore;
|
|
21
|
+
private log;
|
|
22
|
+
readonly storeName = "contract_sync";
|
|
23
|
+
private syncedContracts;
|
|
24
|
+
private overriddenContracts;
|
|
25
|
+
constructor(aztecNode: AztecNode, contractStore: ContractStore, noteStore: NoteStore, log: Logger);
|
|
26
|
+
/** Sets contracts that should be skipped during sync for a specific job. */
|
|
27
|
+
setOverriddenContracts(jobId: string, addresses: Set<string>): void;
|
|
28
|
+
/**
|
|
29
|
+
* Ensures a contract's private state is synchronized and that the PXE holds the current class artifact.
|
|
30
|
+
* Uses a cache to avoid redundant sync operations - the cache is wiped when the anchor block changes.
|
|
31
|
+
* @param contractAddress - The address of the contract to sync.
|
|
32
|
+
* @param functionToInvokeAfterSync - The function selector that will be called after sync (used to validate it's
|
|
33
|
+
* not sync_state itself).
|
|
34
|
+
* @param utilityExecutor - Executor function for running the sync_state utility function.
|
|
35
|
+
* @param scopes - Access scopes to pass through to the utility executor (affects whose account's private state is discovered).
|
|
36
|
+
*/
|
|
37
|
+
ensureContractSynced(contractAddress: AztecAddress, functionToInvokeAfterSync: FunctionSelector | null, utilityExecutor: (call: FunctionCall, scopes: AccessScopes) => Promise<any>, anchorBlockHeader: BlockHeader, jobId: string, scopes: AccessScopes): Promise<void>;
|
|
38
|
+
/** Clears sync cache. Called by BlockSynchronizer when anchor block changes. */
|
|
39
|
+
wipe(): void;
|
|
40
|
+
commit(jobId: string): Promise<void>;
|
|
41
|
+
discardStaged(jobId: string): Promise<void>;
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udHJhY3Rfc3luY19zZXJ2aWNlLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29udHJhY3Rfc3luYy9jb250cmFjdF9zeW5jX3NlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDcEQsT0FBTyxLQUFLLEVBQUUsWUFBWSxFQUFFLGdCQUFnQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDeEUsT0FBTyxLQUFLLEVBQUUsWUFBWSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDaEUsT0FBTyxLQUFLLEVBQUUsU0FBUyxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDakUsT0FBTyxLQUFLLEVBQUUsV0FBVyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFcEQsT0FBTyxLQUFLLEVBQUUsWUFBWSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDeEQsT0FBTyxLQUFLLEVBQUUsV0FBVyxFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDekUsT0FBTyxLQUFLLEVBQUUsYUFBYSxFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFDakYsT0FBTyxLQUFLLEVBQUUsU0FBUyxFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFHckU7Ozs7O0dBS0c7QUFDSCxxQkFBYSxtQkFBb0IsWUFBVyxXQUFXOztJQVluRCxPQUFPLENBQUMsU0FBUztJQUNqQixPQUFPLENBQUMsYUFBYTtJQUNyQixPQUFPLENBQUMsU0FBUztJQUNqQixPQUFPLENBQUMsR0FBRztJQWRiLFFBQVEsQ0FBQyxTQUFTLG1CQUFtQjtJQUtyQyxPQUFPLENBQUMsZUFBZSxDQUF5QztJQUdoRSxPQUFPLENBQUMsbUJBQW1CLENBQXVDO0lBRWxFLFlBQ1UsU0FBUyxFQUFFLFNBQVMsRUFDcEIsYUFBYSxFQUFFLGFBQWEsRUFDNUIsU0FBUyxFQUFFLFNBQVMsRUFDcEIsR0FBRyxFQUFFLE1BQU0sRUFDakI7SUFFSiw0RUFBNEU7SUFDNUUsc0JBQXNCLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FFbEU7SUFFRDs7Ozs7Ozs7T0FRRztJQUNHLG9CQUFvQixDQUN4QixlQUFlLEVBQUUsWUFBWSxFQUM3Qix5QkFBeUIsRUFBRSxnQkFBZ0IsR0FBRyxJQUFJLEVBQ2xELGVBQWUsRUFBRSxDQUFDLElBQUksRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLFlBQVksS0FBSyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQzNFLGlCQUFpQixFQUFFLFdBQVcsRUFDOUIsS0FBSyxFQUFFLE1BQU0sRUFDYixNQUFNLEVBQUUsWUFBWSxHQUNuQixPQUFPLENBQUMsSUFBSSxDQUFDLENBdUNmO0lBNEJELGdGQUFnRjtJQUNoRixJQUFJLElBQUksSUFBSSxDQUdYO0lBRUQsTUFBTSxDQUFDLEtBQUssRUFBRSxNQUFNLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUluQztJQUVELGFBQWEsQ0FBQyxLQUFLLEVBQUUsTUFBTSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FNMUM7Q0FDRiJ9
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"contract_sync_service.d.ts","sourceRoot":"","sources":["../../src/contract_sync/contract_sync_service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,KAAK,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACxE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iCAAiC,CAAC;AACjE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAEpD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uCAAuC,CAAC;AACzE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6CAA6C,CAAC;AACjF,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qCAAqC,CAAC;AAGrE;;;;;GAKG;AACH,qBAAa,mBAAoB,YAAW,WAAW;;IAYnD,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,aAAa;IACrB,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,GAAG;IAdb,QAAQ,CAAC,SAAS,mBAAmB;IAKrC,OAAO,CAAC,eAAe,CAAyC;IAGhE,OAAO,CAAC,mBAAmB,CAAuC;IAElE,YACU,SAAS,EAAE,SAAS,EACpB,aAAa,EAAE,aAAa,EAC5B,SAAS,EAAE,SAAS,EACpB,GAAG,EAAE,MAAM,EACjB;IAEJ,4EAA4E;IAC5E,sBAAsB,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,IAAI,CAElE;IAED;;;;;;;;OAQG;IACG,oBAAoB,CACxB,eAAe,EAAE,YAAY,EAC7B,yBAAyB,EAAE,gBAAgB,GAAG,IAAI,EAClD,eAAe,EAAE,CAAC,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,YAAY,KAAK,OAAO,CAAC,GAAG,CAAC,EAC3E,iBAAiB,EAAE,WAAW,EAC9B,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,YAAY,GACnB,OAAO,CAAC,IAAI,CAAC,CAuCf;IA4BD,gFAAgF;IAChF,IAAI,IAAI,IAAI,CAGX;IAED,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAInC;IAED,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAM1C;CACF"}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
import { syncState, verifyCurrentClassId } from './helpers.js';
|
|
2
|
+
/**
|
|
3
|
+
* Service for syncing the private state of contracts and verifying that the PXE holds the current class artifact.
|
|
4
|
+
* It uses a cache to avoid redundant sync operations - the cache is wiped when the anchor block changes.
|
|
5
|
+
*
|
|
6
|
+
* TODO: The StagedStore naming is broken here. Figure out a better name.
|
|
7
|
+
*/ export class ContractSyncService {
|
|
8
|
+
aztecNode;
|
|
9
|
+
contractStore;
|
|
10
|
+
noteStore;
|
|
11
|
+
log;
|
|
12
|
+
storeName;
|
|
13
|
+
// Tracks contracts synced since last wipe. The cache is keyed per individual scope address
|
|
14
|
+
// (`contractAddress:scopeAddress`), or `contractAddress:*` for undefined scopes (all accounts).
|
|
15
|
+
// The value is a promise that resolves when the contract is synced.
|
|
16
|
+
syncedContracts;
|
|
17
|
+
// Per-job overridden contract addresses - these contracts should not be synced.
|
|
18
|
+
overriddenContracts;
|
|
19
|
+
constructor(aztecNode, contractStore, noteStore, log){
|
|
20
|
+
this.aztecNode = aztecNode;
|
|
21
|
+
this.contractStore = contractStore;
|
|
22
|
+
this.noteStore = noteStore;
|
|
23
|
+
this.log = log;
|
|
24
|
+
this.storeName = 'contract_sync';
|
|
25
|
+
this.syncedContracts = new Map();
|
|
26
|
+
this.overriddenContracts = new Map();
|
|
27
|
+
}
|
|
28
|
+
/** Sets contracts that should be skipped during sync for a specific job. */ setOverriddenContracts(jobId, addresses) {
|
|
29
|
+
this.overriddenContracts.set(jobId, addresses);
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Ensures a contract's private state is synchronized and that the PXE holds the current class artifact.
|
|
33
|
+
* Uses a cache to avoid redundant sync operations - the cache is wiped when the anchor block changes.
|
|
34
|
+
* @param contractAddress - The address of the contract to sync.
|
|
35
|
+
* @param functionToInvokeAfterSync - The function selector that will be called after sync (used to validate it's
|
|
36
|
+
* not sync_state itself).
|
|
37
|
+
* @param utilityExecutor - Executor function for running the sync_state utility function.
|
|
38
|
+
* @param scopes - Access scopes to pass through to the utility executor (affects whose account's private state is discovered).
|
|
39
|
+
*/ async ensureContractSynced(contractAddress, functionToInvokeAfterSync, utilityExecutor, anchorBlockHeader, jobId, scopes) {
|
|
40
|
+
// Skip sync if this contract has an override for this job (overrides are keyed by contract address only)
|
|
41
|
+
const overrides = this.overriddenContracts.get(jobId);
|
|
42
|
+
if (overrides?.has(contractAddress.toString())) {
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
// Skip sync if we already synced for "all scopes", or if we have an empty list of scopes
|
|
46
|
+
const allScopesKey = toKey(contractAddress, 'ALL_SCOPES');
|
|
47
|
+
const allScopesExisting = this.syncedContracts.get(allScopesKey);
|
|
48
|
+
if (allScopesExisting || scopes !== 'ALL_SCOPES' && scopes.length == 0) {
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
51
|
+
const unsyncedScopes = scopes === 'ALL_SCOPES' ? scopes : scopes.filter((scope)=>!this.syncedContracts.has(toKey(contractAddress, scope)));
|
|
52
|
+
const unsyncedScopesKeys = toKeys(contractAddress, unsyncedScopes);
|
|
53
|
+
if (unsyncedScopesKeys.length > 0) {
|
|
54
|
+
// Start sync and store the promise for all unsynced scopes
|
|
55
|
+
const promise = this.#doSync(contractAddress, functionToInvokeAfterSync, utilityExecutor, anchorBlockHeader, jobId, unsyncedScopes).catch((err)=>{
|
|
56
|
+
// There was an error syncing the contract, so we remove it from the cache so that it can be retried.
|
|
57
|
+
unsyncedScopesKeys.forEach((key)=>this.syncedContracts.delete(key));
|
|
58
|
+
throw err;
|
|
59
|
+
});
|
|
60
|
+
unsyncedScopesKeys.forEach((key)=>this.syncedContracts.set(key, promise));
|
|
61
|
+
}
|
|
62
|
+
const promises = toKeys(contractAddress, scopes).map((key)=>this.syncedContracts.get(key));
|
|
63
|
+
await Promise.all(promises);
|
|
64
|
+
}
|
|
65
|
+
async #doSync(contractAddress, functionToInvokeAfterSync, utilityExecutor, anchorBlockHeader, jobId, scopes) {
|
|
66
|
+
this.log.debug(`Syncing contract ${contractAddress}`);
|
|
67
|
+
await Promise.all([
|
|
68
|
+
syncState(contractAddress, this.contractStore, functionToInvokeAfterSync, utilityExecutor, this.noteStore, this.aztecNode, anchorBlockHeader, jobId, scopes),
|
|
69
|
+
verifyCurrentClassId(contractAddress, this.aztecNode, this.contractStore, anchorBlockHeader)
|
|
70
|
+
]);
|
|
71
|
+
this.log.debug(`Contract ${contractAddress} synced`);
|
|
72
|
+
}
|
|
73
|
+
/** Clears sync cache. Called by BlockSynchronizer when anchor block changes. */ wipe() {
|
|
74
|
+
this.log.debug(`Wiping contract sync cache (${this.syncedContracts.size} entries)`);
|
|
75
|
+
this.syncedContracts.clear();
|
|
76
|
+
}
|
|
77
|
+
commit(jobId) {
|
|
78
|
+
// Clear overridden contracts for this job
|
|
79
|
+
this.overriddenContracts.delete(jobId);
|
|
80
|
+
return Promise.resolve();
|
|
81
|
+
}
|
|
82
|
+
discardStaged(jobId) {
|
|
83
|
+
// We clear the synced contracts cache here because, when the job is discarded, any associated database writes from
|
|
84
|
+
// the sync are also undone.
|
|
85
|
+
this.syncedContracts.clear();
|
|
86
|
+
this.overriddenContracts.delete(jobId);
|
|
87
|
+
return Promise.resolve();
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
function toKeys(contract, scopes) {
|
|
91
|
+
return scopes === 'ALL_SCOPES' ? [
|
|
92
|
+
toKey(contract, scopes)
|
|
93
|
+
] : scopes.map((scope)=>toKey(contract, scope));
|
|
94
|
+
}
|
|
95
|
+
function toKey(contract, scope) {
|
|
96
|
+
return scope === 'ALL_SCOPES' ? `${contract.toString()}:*` : `${contract.toString()}:${scope.toString()}`;
|
|
97
|
+
}
|