@aztec/pxe 3.0.0-nightly.20260104 → 3.0.0-nightly.20260106
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/block_synchronizer/block_synchronizer.d.ts +6 -6
- package/dest/block_synchronizer/block_synchronizer.d.ts.map +1 -1
- package/dest/block_synchronizer/block_synchronizer.js +11 -11
- package/dest/contract_function_simulator/contract_function_simulator.d.ts +22 -22
- package/dest/contract_function_simulator/contract_function_simulator.d.ts.map +1 -1
- package/dest/contract_function_simulator/contract_function_simulator.js +31 -28
- package/dest/contract_function_simulator/oracle/private_execution.d.ts +4 -4
- package/dest/contract_function_simulator/oracle/private_execution.d.ts.map +1 -1
- package/dest/contract_function_simulator/oracle/private_execution.js +3 -3
- package/dest/contract_function_simulator/oracle/private_execution_oracle.d.ts +17 -13
- package/dest/contract_function_simulator/oracle/private_execution_oracle.d.ts.map +1 -1
- package/dest/contract_function_simulator/oracle/private_execution_oracle.js +13 -11
- package/dest/contract_function_simulator/oracle/utility_execution_oracle.d.ts +19 -19
- package/dest/contract_function_simulator/oracle/utility_execution_oracle.d.ts.map +1 -1
- package/dest/contract_function_simulator/oracle/utility_execution_oracle.js +44 -44
- package/dest/contract_function_simulator/proxied_contract_data_source.d.ts +4 -4
- package/dest/contract_function_simulator/proxied_contract_data_source.d.ts.map +1 -1
- package/dest/contract_function_simulator/proxied_contract_data_source.js +5 -5
- package/dest/debug/pxe_debug_utils.d.ts +6 -6
- package/dest/debug/pxe_debug_utils.d.ts.map +1 -1
- package/dest/debug/pxe_debug_utils.js +7 -7
- 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 +10 -1
- 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 +10 -1
- package/dest/entrypoints/pxe_creation_options.d.ts +3 -2
- package/dest/entrypoints/pxe_creation_options.d.ts.map +1 -1
- package/dest/entrypoints/server/utils.d.ts +1 -1
- package/dest/entrypoints/server/utils.d.ts.map +1 -1
- package/dest/entrypoints/server/utils.js +11 -7
- package/dest/error_enriching.d.ts +4 -4
- package/dest/error_enriching.d.ts.map +1 -1
- package/dest/error_enriching.js +6 -6
- package/dest/events/event_service.d.ts +6 -6
- package/dest/events/event_service.d.ts.map +1 -1
- package/dest/events/event_service.js +7 -7
- package/dest/events/private_event_filter_validator.d.ts +6 -6
- package/dest/events/private_event_filter_validator.d.ts.map +1 -1
- package/dest/events/private_event_filter_validator.js +4 -4
- package/dest/logs/log_service.d.ts +12 -12
- package/dest/logs/log_service.d.ts.map +1 -1
- package/dest/logs/log_service.js +17 -17
- 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 +14 -14
- package/dest/private_kernel/private_kernel_oracle_impl.d.ts +4 -4
- package/dest/private_kernel/private_kernel_oracle_impl.d.ts.map +1 -1
- package/dest/private_kernel/private_kernel_oracle_impl.js +7 -7
- package/dest/public_storage/public_storage_service.d.ts +4 -4
- package/dest/public_storage/public_storage_service.d.ts.map +1 -1
- package/dest/public_storage/public_storage_service.js +4 -4
- package/dest/pxe.d.ts +10 -10
- package/dest/pxe.d.ts.map +1 -1
- package/dest/pxe.js +81 -78
- package/dest/storage/address_store/address_store.d.ts +11 -0
- package/dest/storage/address_store/address_store.d.ts.map +1 -0
- package/dest/storage/{address_data_provider/address_data_provider.js → address_store/address_store.js} +1 -1
- package/dest/storage/address_store/index.d.ts +2 -0
- package/dest/storage/address_store/index.d.ts.map +1 -0
- package/dest/storage/address_store/index.js +1 -0
- package/dest/storage/anchor_block_store/anchor_block_store.d.ts +9 -0
- package/dest/storage/anchor_block_store/anchor_block_store.d.ts.map +1 -0
- package/dest/storage/{anchor_block_data_provider/anchor_block_data_provider.js → anchor_block_store/anchor_block_store.js} +1 -1
- package/dest/storage/anchor_block_store/index.d.ts +2 -0
- package/dest/storage/anchor_block_store/index.d.ts.map +1 -0
- package/dest/storage/anchor_block_store/index.js +1 -0
- package/dest/storage/{capsule_data_provider/capsule_data_provider.d.ts → capsule_store/capsule_store.d.ts} +2 -2
- package/dest/storage/capsule_store/capsule_store.d.ts.map +1 -0
- package/dest/storage/{capsule_data_provider/capsule_data_provider.js → capsule_store/capsule_store.js} +1 -1
- package/dest/storage/capsule_store/index.d.ts +2 -0
- package/dest/storage/capsule_store/index.d.ts.map +1 -0
- package/dest/storage/capsule_store/index.js +1 -0
- package/dest/storage/{contract_data_provider/contract_data_provider.d.ts → contract_store/contract_store.d.ts} +4 -3
- package/dest/storage/contract_store/contract_store.d.ts.map +1 -0
- package/dest/storage/{contract_data_provider/contract_data_provider.js → contract_store/contract_store.js} +14 -2
- package/dest/storage/contract_store/index.d.ts +2 -0
- package/dest/storage/contract_store/index.d.ts.map +1 -0
- package/dest/storage/contract_store/index.js +1 -0
- package/dest/storage/{contract_data_provider → contract_store}/private_functions_tree.d.ts +1 -1
- package/dest/storage/contract_store/private_functions_tree.d.ts.map +1 -0
- package/dest/storage/index.d.ts +8 -8
- package/dest/storage/index.d.ts.map +1 -1
- package/dest/storage/index.js +7 -7
- package/dest/storage/note_store/index.d.ts +3 -0
- package/dest/storage/note_store/index.d.ts.map +1 -0
- package/dest/storage/note_store/index.js +2 -0
- package/dest/storage/{note_data_provider/note_data_provider.d.ts → note_store/note_store.d.ts} +7 -7
- package/dest/storage/note_store/note_store.d.ts.map +1 -0
- package/dest/storage/{note_data_provider/note_data_provider.js → note_store/note_store.js} +6 -6
- package/dest/storage/{private_event_data_provider/private_event_data_provider.d.ts → private_event_store/private_event_store.d.ts} +4 -4
- package/dest/storage/private_event_store/private_event_store.d.ts.map +1 -0
- package/dest/storage/{private_event_data_provider/private_event_data_provider.js → private_event_store/private_event_store.js} +2 -2
- package/dest/storage/tagging_store/index.d.ts +4 -0
- package/dest/storage/tagging_store/index.d.ts.map +1 -0
- package/dest/storage/tagging_store/index.js +3 -0
- package/dest/{tagging/recipient_sync/recipient_tagging_data_provider.d.ts → storage/tagging_store/recipient_tagging_store.d.ts} +4 -4
- package/dest/storage/tagging_store/recipient_tagging_store.d.ts.map +1 -0
- package/dest/{tagging/recipient_sync/recipient_tagging_data_provider.js → storage/tagging_store/recipient_tagging_store.js} +3 -3
- package/dest/storage/tagging_store/sender_address_book_store.d.ts +14 -0
- package/dest/storage/tagging_store/sender_address_book_store.d.ts.map +1 -0
- package/dest/storage/{tagging_data_provider/sender_address_book.js → tagging_store/sender_address_book_store.js} +1 -1
- package/dest/storage/{tagging_data_provider/sender_tagging_data_provider.d.ts → tagging_store/sender_tagging_store.d.ts} +3 -3
- package/dest/storage/tagging_store/sender_tagging_store.d.ts.map +1 -0
- package/dest/storage/{tagging_data_provider/sender_tagging_data_provider.js → tagging_store/sender_tagging_store.js} +3 -3
- package/dest/tagging/index.d.ts +14 -1
- package/dest/tagging/index.d.ts.map +1 -1
- package/dest/tagging/index.js +22 -0
- package/dest/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.d.ts +3 -3
- package/dest/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.d.ts.map +1 -1
- package/dest/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.js +6 -6
- package/dest/tagging/{sync → sender_sync}/sync_sender_tagging_indexes.d.ts +3 -4
- package/dest/tagging/sender_sync/sync_sender_tagging_indexes.d.ts.map +1 -0
- package/dest/tagging/{sync → sender_sync}/sync_sender_tagging_indexes.js +8 -17
- package/dest/tagging/{sync → sender_sync}/utils/get_status_change_of_pending.d.ts +1 -1
- package/dest/tagging/sender_sync/utils/get_status_change_of_pending.d.ts.map +1 -0
- package/dest/tagging/{sync → sender_sync}/utils/load_and_store_new_tagging_indexes.d.ts +4 -4
- package/dest/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.d.ts.map +1 -0
- package/dest/tagging/{sync → sender_sync}/utils/load_and_store_new_tagging_indexes.js +3 -3
- package/dest/tree_membership/tree_membership_service.d.ts +4 -4
- package/dest/tree_membership/tree_membership_service.d.ts.map +1 -1
- package/dest/tree_membership/tree_membership_service.js +5 -5
- package/package.json +16 -16
- package/src/block_synchronizer/block_synchronizer.ts +10 -10
- package/src/contract_function_simulator/contract_function_simulator.ts +49 -48
- package/src/contract_function_simulator/oracle/private_execution.ts +4 -4
- package/src/contract_function_simulator/oracle/private_execution_oracle.ts +48 -47
- package/src/contract_function_simulator/oracle/utility_execution_oracle.ts +51 -51
- package/src/contract_function_simulator/proxied_contract_data_source.ts +7 -7
- package/src/debug/pxe_debug_utils.ts +6 -6
- package/src/entrypoints/client/bundle/utils.ts +7 -1
- package/src/entrypoints/client/lazy/utils.ts +7 -2
- package/src/entrypoints/pxe_creation_options.ts +2 -1
- package/src/entrypoints/server/utils.ts +11 -15
- package/src/error_enriching.ts +7 -15
- package/src/events/event_service.ts +6 -6
- package/src/events/private_event_filter_validator.ts +5 -5
- package/src/logs/log_service.ts +16 -16
- package/src/notes/note_service.ts +13 -13
- package/src/private_kernel/private_kernel_oracle_impl.ts +6 -6
- package/src/public_storage/public_storage_service.ts +3 -3
- package/src/pxe.ts +100 -101
- package/src/storage/{address_data_provider/address_data_provider.ts → address_store/address_store.ts} +1 -1
- package/src/storage/address_store/index.ts +1 -0
- package/src/storage/{anchor_block_data_provider/anchor_block_data_provider.ts → anchor_block_store/anchor_block_store.ts} +1 -1
- package/src/storage/anchor_block_store/index.ts +1 -0
- package/src/storage/{capsule_data_provider/capsule_data_provider.ts → capsule_store/capsule_store.ts} +1 -1
- package/src/storage/capsule_store/index.ts +1 -0
- package/src/storage/{contract_data_provider/contract_data_provider.ts → contract_store/contract_store.ts} +22 -2
- package/src/storage/contract_store/index.ts +1 -0
- package/src/storage/index.ts +7 -7
- package/src/storage/note_store/index.ts +2 -0
- package/src/storage/{note_data_provider/note_data_provider.ts → note_store/note_store.ts} +7 -7
- package/src/storage/{private_event_data_provider/private_event_data_provider.ts → private_event_store/private_event_store.ts} +4 -4
- package/src/storage/tagging_store/index.ts +3 -0
- package/src/{tagging/recipient_sync/recipient_tagging_data_provider.ts → storage/tagging_store/recipient_tagging_store.ts} +3 -3
- package/src/storage/{tagging_data_provider/sender_address_book.ts → tagging_store/sender_address_book_store.ts} +1 -1
- package/src/storage/{tagging_data_provider/sender_tagging_data_provider.ts → tagging_store/sender_tagging_store.ts} +3 -3
- package/src/tagging/index.ts +26 -0
- package/src/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.ts +7 -7
- package/src/tagging/{sync → sender_sync}/sync_sender_tagging_indexes.ts +9 -19
- package/src/tagging/{sync → sender_sync}/utils/load_and_store_new_tagging_indexes.ts +4 -4
- package/src/tree_membership/tree_membership_service.ts +4 -4
- package/dest/storage/address_data_provider/address_data_provider.d.ts +0 -11
- package/dest/storage/address_data_provider/address_data_provider.d.ts.map +0 -1
- package/dest/storage/address_data_provider/index.d.ts +0 -2
- package/dest/storage/address_data_provider/index.d.ts.map +0 -1
- package/dest/storage/address_data_provider/index.js +0 -1
- package/dest/storage/anchor_block_data_provider/anchor_block_data_provider.d.ts +0 -9
- package/dest/storage/anchor_block_data_provider/anchor_block_data_provider.d.ts.map +0 -1
- package/dest/storage/anchor_block_data_provider/index.d.ts +0 -2
- package/dest/storage/anchor_block_data_provider/index.d.ts.map +0 -1
- package/dest/storage/anchor_block_data_provider/index.js +0 -1
- package/dest/storage/capsule_data_provider/capsule_data_provider.d.ts.map +0 -1
- package/dest/storage/capsule_data_provider/index.d.ts +0 -2
- package/dest/storage/capsule_data_provider/index.d.ts.map +0 -1
- package/dest/storage/capsule_data_provider/index.js +0 -1
- package/dest/storage/contract_data_provider/contract_data_provider.d.ts.map +0 -1
- package/dest/storage/contract_data_provider/index.d.ts +0 -2
- package/dest/storage/contract_data_provider/index.d.ts.map +0 -1
- package/dest/storage/contract_data_provider/index.js +0 -1
- package/dest/storage/contract_data_provider/private_functions_tree.d.ts.map +0 -1
- package/dest/storage/note_data_provider/index.d.ts +0 -3
- package/dest/storage/note_data_provider/index.d.ts.map +0 -1
- package/dest/storage/note_data_provider/index.js +0 -2
- package/dest/storage/note_data_provider/note_data_provider.d.ts.map +0 -1
- package/dest/storage/private_event_data_provider/private_event_data_provider.d.ts.map +0 -1
- package/dest/storage/tagging_data_provider/index.d.ts +0 -4
- package/dest/storage/tagging_data_provider/index.d.ts.map +0 -1
- package/dest/storage/tagging_data_provider/index.js +0 -3
- package/dest/storage/tagging_data_provider/sender_address_book.d.ts +0 -14
- package/dest/storage/tagging_data_provider/sender_address_book.d.ts.map +0 -1
- package/dest/storage/tagging_data_provider/sender_tagging_data_provider.d.ts.map +0 -1
- package/dest/tagging/recipient_sync/recipient_tagging_data_provider.d.ts.map +0 -1
- package/dest/tagging/sync/sync_sender_tagging_indexes.d.ts.map +0 -1
- package/dest/tagging/sync/utils/get_status_change_of_pending.d.ts.map +0 -1
- package/dest/tagging/sync/utils/load_and_store_new_tagging_indexes.d.ts.map +0 -1
- package/src/storage/address_data_provider/index.ts +0 -1
- package/src/storage/anchor_block_data_provider/index.ts +0 -1
- package/src/storage/capsule_data_provider/index.ts +0 -1
- package/src/storage/contract_data_provider/index.ts +0 -1
- package/src/storage/note_data_provider/index.ts +0 -2
- package/src/storage/tagging_data_provider/index.ts +0 -3
- /package/dest/storage/{contract_data_provider → contract_store}/private_functions_tree.js +0 -0
- /package/dest/tagging/{sync → sender_sync}/utils/get_status_change_of_pending.js +0 -0
- /package/src/storage/{contract_data_provider → contract_store}/private_functions_tree.ts +0 -0
- /package/src/tagging/{sync → sender_sync}/utils/get_status_change_of_pending.ts +0 -0
|
@@ -21,14 +21,14 @@ import { LogService } from '../../logs/log_service.js';
|
|
|
21
21
|
import { NoteService } from '../../notes/note_service.js';
|
|
22
22
|
import { ORACLE_VERSION } from '../../oracle_version.js';
|
|
23
23
|
import { PublicStorageService } from '../../public_storage/public_storage_service.js';
|
|
24
|
-
import type {
|
|
25
|
-
import type {
|
|
26
|
-
import type {
|
|
27
|
-
import type {
|
|
28
|
-
import type {
|
|
29
|
-
import type {
|
|
30
|
-
import type {
|
|
31
|
-
import type {
|
|
24
|
+
import type { AddressStore } from '../../storage/address_store/address_store.js';
|
|
25
|
+
import type { AnchorBlockStore } from '../../storage/anchor_block_store/anchor_block_store.js';
|
|
26
|
+
import type { CapsuleStore } from '../../storage/capsule_store/capsule_store.js';
|
|
27
|
+
import type { ContractStore } from '../../storage/contract_store/contract_store.js';
|
|
28
|
+
import type { NoteStore } from '../../storage/note_store/note_store.js';
|
|
29
|
+
import type { PrivateEventStore } from '../../storage/private_event_store/private_event_store.js';
|
|
30
|
+
import type { RecipientTaggingStore } from '../../storage/tagging_store/recipient_tagging_store.js';
|
|
31
|
+
import type { SenderAddressBookStore } from '../../storage/tagging_store/sender_address_book_store.js';
|
|
32
32
|
import { TreeMembershipService } from '../../tree_membership/tree_membership_service.js';
|
|
33
33
|
import { EventValidationRequest } from '../noir-structs/event_validation_request.js';
|
|
34
34
|
import { LogRetrievalRequest } from '../noir-structs/log_retrieval_request.js';
|
|
@@ -54,16 +54,16 @@ export class UtilityExecutionOracle implements IMiscOracle, IUtilityExecutionOra
|
|
|
54
54
|
protected readonly authWitnesses: AuthWitness[],
|
|
55
55
|
protected readonly capsules: Capsule[], // TODO(#12425): Rename to transientCapsules
|
|
56
56
|
protected readonly anchorBlockHeader: BlockHeader,
|
|
57
|
-
protected readonly
|
|
58
|
-
protected readonly
|
|
57
|
+
protected readonly contractStore: ContractStore,
|
|
58
|
+
protected readonly noteStore: NoteStore,
|
|
59
59
|
protected readonly keyStore: KeyStore,
|
|
60
|
-
protected readonly
|
|
60
|
+
protected readonly addressStore: AddressStore,
|
|
61
61
|
protected readonly aztecNode: AztecNode,
|
|
62
|
-
protected readonly
|
|
63
|
-
protected readonly
|
|
64
|
-
protected readonly
|
|
65
|
-
protected readonly
|
|
66
|
-
protected readonly
|
|
62
|
+
protected readonly anchorBlockStore: AnchorBlockStore,
|
|
63
|
+
protected readonly recipientTaggingStore: RecipientTaggingStore,
|
|
64
|
+
protected readonly senderAddressBookStore: SenderAddressBookStore,
|
|
65
|
+
protected readonly capsuleStore: CapsuleStore,
|
|
66
|
+
protected readonly privateEventStore: PrivateEventStore,
|
|
67
67
|
protected log = createLogger('simulator:client_view_context'),
|
|
68
68
|
protected readonly scopes?: AztecAddress[],
|
|
69
69
|
) {}
|
|
@@ -106,7 +106,7 @@ export class UtilityExecutionOracle implements IMiscOracle, IUtilityExecutionOra
|
|
|
106
106
|
* @returns The index and sibling path concatenated [index, sibling_path]
|
|
107
107
|
*/
|
|
108
108
|
public utilityGetMembershipWitness(blockNumber: BlockNumber, treeId: MerkleTreeId, leafValue: Fr): Promise<Fr[]> {
|
|
109
|
-
const treeMembershipService = new TreeMembershipService(this.aztecNode, this.
|
|
109
|
+
const treeMembershipService = new TreeMembershipService(this.aztecNode, this.anchorBlockStore);
|
|
110
110
|
return treeMembershipService.getMembershipWitness(blockNumber, treeId, leafValue);
|
|
111
111
|
}
|
|
112
112
|
|
|
@@ -136,7 +136,7 @@ export class UtilityExecutionOracle implements IMiscOracle, IUtilityExecutionOra
|
|
|
136
136
|
blockNumber: BlockNumber,
|
|
137
137
|
nullifier: Fr,
|
|
138
138
|
): Promise<NullifierMembershipWitness | undefined> {
|
|
139
|
-
const treeMembershipService = new TreeMembershipService(this.aztecNode, this.
|
|
139
|
+
const treeMembershipService = new TreeMembershipService(this.aztecNode, this.anchorBlockStore);
|
|
140
140
|
return await treeMembershipService.getLowNullifierMembershipWitness(blockNumber, nullifier);
|
|
141
141
|
}
|
|
142
142
|
|
|
@@ -150,7 +150,7 @@ export class UtilityExecutionOracle implements IMiscOracle, IUtilityExecutionOra
|
|
|
150
150
|
blockNumber: BlockNumber,
|
|
151
151
|
leafSlot: Fr,
|
|
152
152
|
): Promise<PublicDataWitness | undefined> {
|
|
153
|
-
const treeMembershipService = new TreeMembershipService(this.aztecNode, this.
|
|
153
|
+
const treeMembershipService = new TreeMembershipService(this.aztecNode, this.anchorBlockStore);
|
|
154
154
|
return await treeMembershipService.getPublicDataWitness(blockNumber, leafSlot);
|
|
155
155
|
}
|
|
156
156
|
|
|
@@ -160,7 +160,7 @@ export class UtilityExecutionOracle implements IMiscOracle, IUtilityExecutionOra
|
|
|
160
160
|
* @returns Block extracted from a block with block number `blockNumber`.
|
|
161
161
|
*/
|
|
162
162
|
public async utilityGetBlockHeader(blockNumber: BlockNumber): Promise<BlockHeader | undefined> {
|
|
163
|
-
const anchorBlockNumber = (await this.
|
|
163
|
+
const anchorBlockNumber = (await this.anchorBlockStore.getBlockHeader()).getBlockNumber();
|
|
164
164
|
if (blockNumber > anchorBlockNumber) {
|
|
165
165
|
throw new Error(`Block number ${blockNumber} is higher than current block ${anchorBlockNumber}`);
|
|
166
166
|
}
|
|
@@ -180,7 +180,7 @@ export class UtilityExecutionOracle implements IMiscOracle, IUtilityExecutionOra
|
|
|
180
180
|
}
|
|
181
181
|
|
|
182
182
|
protected async getCompleteAddress(account: AztecAddress): Promise<CompleteAddress> {
|
|
183
|
-
const completeAddress = await this.
|
|
183
|
+
const completeAddress = await this.addressStore.getCompleteAddress(account);
|
|
184
184
|
if (!completeAddress) {
|
|
185
185
|
throw new Error(
|
|
186
186
|
`No public key registered for address ${account}.
|
|
@@ -200,7 +200,7 @@ export class UtilityExecutionOracle implements IMiscOracle, IUtilityExecutionOra
|
|
|
200
200
|
}
|
|
201
201
|
|
|
202
202
|
protected async getContractInstance(address: AztecAddress): Promise<ContractInstance> {
|
|
203
|
-
const instance = await this.
|
|
203
|
+
const instance = await this.contractStore.getContractInstance(address);
|
|
204
204
|
if (!instance) {
|
|
205
205
|
throw new Error(`No contract instance found for address ${address.toString()}`);
|
|
206
206
|
}
|
|
@@ -256,7 +256,7 @@ export class UtilityExecutionOracle implements IMiscOracle, IUtilityExecutionOra
|
|
|
256
256
|
offset: number,
|
|
257
257
|
status: NoteStatus,
|
|
258
258
|
): Promise<NoteData[]> {
|
|
259
|
-
const noteService = new NoteService(this.
|
|
259
|
+
const noteService = new NoteService(this.noteStore, this.aztecNode, this.anchorBlockStore);
|
|
260
260
|
|
|
261
261
|
const dbNotes = await noteService.getNotes(this.contractAddress, owner, storageSlot, status, this.scopes);
|
|
262
262
|
return pickNotes<NoteData>(dbNotes, {
|
|
@@ -281,13 +281,13 @@ export class UtilityExecutionOracle implements IMiscOracle, IUtilityExecutionOra
|
|
|
281
281
|
*/
|
|
282
282
|
public async utilityCheckNullifierExists(innerNullifier: Fr) {
|
|
283
283
|
const nullifier = await siloNullifier(this.contractAddress, innerNullifier!);
|
|
284
|
-
const treeMembershipService = new TreeMembershipService(this.aztecNode, this.
|
|
284
|
+
const treeMembershipService = new TreeMembershipService(this.aztecNode, this.anchorBlockStore);
|
|
285
285
|
const index = await treeMembershipService.getNullifierIndex(nullifier);
|
|
286
286
|
return index !== undefined;
|
|
287
287
|
}
|
|
288
288
|
|
|
289
289
|
/**
|
|
290
|
-
* Fetches a message from the
|
|
290
|
+
* Fetches a message from the executionStore, given its key.
|
|
291
291
|
* @param contractAddress - Address of a contract by which the message was emitted.
|
|
292
292
|
* @param messageHash - Hash of the message.
|
|
293
293
|
* @param secret - Secret used to compute a nullifier.
|
|
@@ -295,7 +295,7 @@ export class UtilityExecutionOracle implements IMiscOracle, IUtilityExecutionOra
|
|
|
295
295
|
* @returns The l1 to l2 membership witness (index of message in the tree and sibling path).
|
|
296
296
|
*/
|
|
297
297
|
public async utilityGetL1ToL2MembershipWitness(contractAddress: AztecAddress, messageHash: Fr, secret: Fr) {
|
|
298
|
-
const treeMembershipService = new TreeMembershipService(this.aztecNode, this.
|
|
298
|
+
const treeMembershipService = new TreeMembershipService(this.aztecNode, this.anchorBlockStore);
|
|
299
299
|
const [messageIndex, siblingPath] = await treeMembershipService.getL1ToL2MembershipWitness(
|
|
300
300
|
contractAddress,
|
|
301
301
|
messageHash,
|
|
@@ -320,7 +320,7 @@ export class UtilityExecutionOracle implements IMiscOracle, IUtilityExecutionOra
|
|
|
320
320
|
numberOfElements: number,
|
|
321
321
|
) {
|
|
322
322
|
const values = [];
|
|
323
|
-
const publicStorageService = new PublicStorageService(this.
|
|
323
|
+
const publicStorageService = new PublicStorageService(this.anchorBlockStore, this.aztecNode);
|
|
324
324
|
|
|
325
325
|
// TODO: why do we serialize these requests? This should probably a single call
|
|
326
326
|
// Privacy considerations?
|
|
@@ -347,17 +347,17 @@ export class UtilityExecutionOracle implements IMiscOracle, IUtilityExecutionOra
|
|
|
347
347
|
public async utilityFetchTaggedLogs(pendingTaggedLogArrayBaseSlot: Fr) {
|
|
348
348
|
const logService = new LogService(
|
|
349
349
|
this.aztecNode,
|
|
350
|
-
this.
|
|
350
|
+
this.anchorBlockStore,
|
|
351
351
|
this.keyStore,
|
|
352
|
-
this.
|
|
353
|
-
this.
|
|
354
|
-
this.
|
|
355
|
-
this.
|
|
352
|
+
this.capsuleStore,
|
|
353
|
+
this.recipientTaggingStore,
|
|
354
|
+
this.senderAddressBookStore,
|
|
355
|
+
this.addressStore,
|
|
356
356
|
);
|
|
357
357
|
|
|
358
358
|
await logService.syncTaggedLogs(this.contractAddress, pendingTaggedLogArrayBaseSlot, this.scopes);
|
|
359
359
|
|
|
360
|
-
const noteService = new NoteService(this.
|
|
360
|
+
const noteService = new NoteService(this.noteStore, this.aztecNode, this.anchorBlockStore);
|
|
361
361
|
await noteService.syncNoteNullifiers(this.contractAddress);
|
|
362
362
|
}
|
|
363
363
|
|
|
@@ -384,14 +384,14 @@ export class UtilityExecutionOracle implements IMiscOracle, IUtilityExecutionOra
|
|
|
384
384
|
// We read all note and event validation requests and process them all concurrently. This makes the process much
|
|
385
385
|
// faster as we don't need to wait for the network round-trip.
|
|
386
386
|
const noteValidationRequests = (
|
|
387
|
-
await this.
|
|
387
|
+
await this.capsuleStore.readCapsuleArray(contractAddress, noteValidationRequestsArrayBaseSlot)
|
|
388
388
|
).map(NoteValidationRequest.fromFields);
|
|
389
389
|
|
|
390
390
|
const eventValidationRequests = (
|
|
391
|
-
await this.
|
|
391
|
+
await this.capsuleStore.readCapsuleArray(contractAddress, eventValidationRequestsArrayBaseSlot)
|
|
392
392
|
).map(EventValidationRequest.fromFields);
|
|
393
393
|
|
|
394
|
-
const noteService = new NoteService(this.
|
|
394
|
+
const noteService = new NoteService(this.noteStore, this.aztecNode, this.anchorBlockStore);
|
|
395
395
|
const noteDeliveries = noteValidationRequests.map(request =>
|
|
396
396
|
noteService.deliverNote(
|
|
397
397
|
request.contractAddress,
|
|
@@ -407,7 +407,7 @@ export class UtilityExecutionOracle implements IMiscOracle, IUtilityExecutionOra
|
|
|
407
407
|
),
|
|
408
408
|
);
|
|
409
409
|
|
|
410
|
-
const eventService = new EventService(this.
|
|
410
|
+
const eventService = new EventService(this.anchorBlockStore, this.aztecNode, this.privateEventStore);
|
|
411
411
|
const eventDeliveries = eventValidationRequests.map(request =>
|
|
412
412
|
eventService.deliverEvent(
|
|
413
413
|
request.contractAddress,
|
|
@@ -422,8 +422,8 @@ export class UtilityExecutionOracle implements IMiscOracle, IUtilityExecutionOra
|
|
|
422
422
|
await Promise.all([...noteDeliveries, ...eventDeliveries]);
|
|
423
423
|
|
|
424
424
|
// Requests are cleared once we're done.
|
|
425
|
-
await this.
|
|
426
|
-
await this.
|
|
425
|
+
await this.capsuleStore.setCapsuleArray(contractAddress, noteValidationRequestsArrayBaseSlot, []);
|
|
426
|
+
await this.capsuleStore.setCapsuleArray(contractAddress, eventValidationRequestsArrayBaseSlot, []);
|
|
427
427
|
}
|
|
428
428
|
|
|
429
429
|
public async utilityBulkRetrieveLogs(
|
|
@@ -439,26 +439,26 @@ export class UtilityExecutionOracle implements IMiscOracle, IUtilityExecutionOra
|
|
|
439
439
|
// We read all log retrieval requests and process them all concurrently. This makes the process much faster as we
|
|
440
440
|
// don't need to wait for the network round-trip.
|
|
441
441
|
const logRetrievalRequests = (
|
|
442
|
-
await this.
|
|
442
|
+
await this.capsuleStore.readCapsuleArray(contractAddress, logRetrievalRequestsArrayBaseSlot)
|
|
443
443
|
).map(LogRetrievalRequest.fromFields);
|
|
444
444
|
|
|
445
445
|
const logService = new LogService(
|
|
446
446
|
this.aztecNode,
|
|
447
|
-
this.
|
|
447
|
+
this.anchorBlockStore,
|
|
448
448
|
this.keyStore,
|
|
449
|
-
this.
|
|
450
|
-
this.
|
|
451
|
-
this.
|
|
452
|
-
this.
|
|
449
|
+
this.capsuleStore,
|
|
450
|
+
this.recipientTaggingStore,
|
|
451
|
+
this.senderAddressBookStore,
|
|
452
|
+
this.addressStore,
|
|
453
453
|
);
|
|
454
454
|
|
|
455
455
|
const maybeLogRetrievalResponses = await logService.bulkRetrieveLogs(logRetrievalRequests);
|
|
456
456
|
|
|
457
457
|
// Requests are cleared once we're done.
|
|
458
|
-
await this.
|
|
458
|
+
await this.capsuleStore.setCapsuleArray(contractAddress, logRetrievalRequestsArrayBaseSlot, []);
|
|
459
459
|
|
|
460
460
|
// The responses are stored as Option<LogRetrievalResponse> in a second CapsuleArray.
|
|
461
|
-
await this.
|
|
461
|
+
await this.capsuleStore.setCapsuleArray(
|
|
462
462
|
contractAddress,
|
|
463
463
|
logRetrievalResponsesArrayBaseSlot,
|
|
464
464
|
maybeLogRetrievalResponses.map(LogRetrievalResponse.toSerializedOption),
|
|
@@ -470,7 +470,7 @@ export class UtilityExecutionOracle implements IMiscOracle, IUtilityExecutionOra
|
|
|
470
470
|
// TODO(#10727): instead of this check that this.contractAddress is allowed to access the external DB
|
|
471
471
|
throw new Error(`Contract ${contractAddress} is not allowed to access ${this.contractAddress}'s PXE DB`);
|
|
472
472
|
}
|
|
473
|
-
return this.
|
|
473
|
+
return this.capsuleStore.storeCapsule(this.contractAddress, slot, capsule);
|
|
474
474
|
}
|
|
475
475
|
|
|
476
476
|
public async utilityLoadCapsule(contractAddress: AztecAddress, slot: Fr): Promise<Fr[] | null> {
|
|
@@ -481,7 +481,7 @@ export class UtilityExecutionOracle implements IMiscOracle, IUtilityExecutionOra
|
|
|
481
481
|
return (
|
|
482
482
|
// TODO(#12425): On the following line, the pertinent capsule gets overshadowed by the transient one. Tackle this.
|
|
483
483
|
this.capsules.find(c => c.contractAddress.equals(contractAddress) && c.storageSlot.equals(slot))?.data ??
|
|
484
|
-
(await this.
|
|
484
|
+
(await this.capsuleStore.loadCapsule(this.contractAddress, slot))
|
|
485
485
|
);
|
|
486
486
|
}
|
|
487
487
|
|
|
@@ -490,7 +490,7 @@ export class UtilityExecutionOracle implements IMiscOracle, IUtilityExecutionOra
|
|
|
490
490
|
// TODO(#10727): instead of this check that this.contractAddress is allowed to access the external DB
|
|
491
491
|
throw new Error(`Contract ${contractAddress} is not allowed to access ${this.contractAddress}'s PXE DB`);
|
|
492
492
|
}
|
|
493
|
-
return this.
|
|
493
|
+
return this.capsuleStore.deleteCapsule(this.contractAddress, slot);
|
|
494
494
|
}
|
|
495
495
|
|
|
496
496
|
public utilityCopyCapsule(
|
|
@@ -503,7 +503,7 @@ export class UtilityExecutionOracle implements IMiscOracle, IUtilityExecutionOra
|
|
|
503
503
|
// TODO(#10727): instead of this check that this.contractAddress is allowed to access the external DB
|
|
504
504
|
throw new Error(`Contract ${contractAddress} is not allowed to access ${this.contractAddress}'s PXE DB`);
|
|
505
505
|
}
|
|
506
|
-
return this.
|
|
506
|
+
return this.capsuleStore.copyCapsule(this.contractAddress, srcSlot, dstSlot, numEntries);
|
|
507
507
|
}
|
|
508
508
|
|
|
509
509
|
// TODO(#11849): consider replacing this oracle with a pure Noir implementation of aes decryption.
|
|
@@ -2,21 +2,21 @@ import { FunctionSelector } from '@aztec/stdlib/abi';
|
|
|
2
2
|
import { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
3
3
|
import type { ContractOverrides } from '@aztec/stdlib/tx';
|
|
4
4
|
|
|
5
|
-
import type {
|
|
5
|
+
import type { ContractStore } from '../storage/contract_store/contract_store.js';
|
|
6
6
|
|
|
7
7
|
/*
|
|
8
|
-
* Proxy generator for a
|
|
8
|
+
* Proxy generator for a ContractStore that allows overriding contract instances and artifacts, so
|
|
9
9
|
* the contract function simulator can execute different bytecode on certain addresses. An example use case
|
|
10
10
|
* would be overriding your own account contract so that valid signatures don't have to be provided while simulating.
|
|
11
11
|
*/
|
|
12
|
-
export class
|
|
13
|
-
static create(
|
|
12
|
+
export class ProxiedContractStoreFactory {
|
|
13
|
+
static create(contractStore: ContractStore, overrides?: ContractOverrides) {
|
|
14
14
|
if (!overrides) {
|
|
15
|
-
return
|
|
15
|
+
return contractStore;
|
|
16
16
|
}
|
|
17
17
|
|
|
18
|
-
return new Proxy(
|
|
19
|
-
get(target, prop: keyof
|
|
18
|
+
return new Proxy(contractStore, {
|
|
19
|
+
get(target, prop: keyof ContractStore) {
|
|
20
20
|
switch (prop) {
|
|
21
21
|
case 'getContractInstance': {
|
|
22
22
|
return async (address: AztecAddress) => {
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import type { NoteDao, NotesFilter } from '@aztec/stdlib/note';
|
|
2
2
|
|
|
3
3
|
import type { PXE } from '../pxe.js';
|
|
4
|
-
import type {
|
|
5
|
-
import type {
|
|
4
|
+
import type { ContractStore } from '../storage/contract_store/contract_store.js';
|
|
5
|
+
import type { NoteStore } from '../storage/note_store/note_store.js';
|
|
6
6
|
|
|
7
7
|
/**
|
|
8
8
|
* Methods provided by this class might help debugging but must not be used in production.
|
|
@@ -12,8 +12,8 @@ export class PXEDebugUtils {
|
|
|
12
12
|
#pxe: PXE | undefined = undefined;
|
|
13
13
|
|
|
14
14
|
constructor(
|
|
15
|
-
private
|
|
16
|
-
private
|
|
15
|
+
private contractStore: ContractStore,
|
|
16
|
+
private noteStore: NoteStore,
|
|
17
17
|
) {}
|
|
18
18
|
|
|
19
19
|
/**
|
|
@@ -40,9 +40,9 @@ export class PXEDebugUtils {
|
|
|
40
40
|
}
|
|
41
41
|
|
|
42
42
|
// We need to manually trigger private state sync to have a guarantee that all the notes are available.
|
|
43
|
-
const call = await this.
|
|
43
|
+
const call = await this.contractStore.getFunctionCall('sync_private_state', [], filter.contractAddress);
|
|
44
44
|
await this.#pxe.simulateUtility(call);
|
|
45
45
|
|
|
46
|
-
return this.
|
|
46
|
+
return this.noteStore.getNotes(filter);
|
|
47
47
|
}
|
|
48
48
|
}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { BBPrivateKernelProver } from '@aztec/bb-prover/client';
|
|
1
2
|
import { BBBundlePrivateKernelProver } from '@aztec/bb-prover/client/bundle';
|
|
2
3
|
import { randomBytes } from '@aztec/foundation/crypto/random';
|
|
3
4
|
import { createLogger } from '@aztec/foundation/log';
|
|
@@ -49,7 +50,12 @@ export async function createPXE(
|
|
|
49
50
|
? loggers.prover
|
|
50
51
|
: createLogger('pxe:bb:wasm:bundle' + (logSuffix ? `:${logSuffix}` : ''));
|
|
51
52
|
|
|
52
|
-
|
|
53
|
+
let prover;
|
|
54
|
+
if (options.proverOrOptions instanceof BBPrivateKernelProver) {
|
|
55
|
+
prover = options.proverOrOptions;
|
|
56
|
+
} else {
|
|
57
|
+
prover = new BBBundlePrivateKernelProver(simulator, { ...options.proverOrOptions, logger: proverLogger });
|
|
58
|
+
}
|
|
53
59
|
const protocolContractsProvider = new BundledProtocolContractsProvider();
|
|
54
60
|
|
|
55
61
|
const pxeLogger = loggers.pxe ? loggers.pxe : createLogger('pxe:service' + (logSuffix ? `:${logSuffix}` : ''));
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { BBPrivateKernelProver } from '@aztec/bb-prover/client';
|
|
1
2
|
import { BBLazyPrivateKernelProver } from '@aztec/bb-prover/client/lazy';
|
|
2
3
|
import { randomBytes } from '@aztec/foundation/crypto/random';
|
|
3
4
|
import { createLogger } from '@aztec/foundation/log';
|
|
@@ -48,8 +49,12 @@ export async function createPXE(
|
|
|
48
49
|
? loggers.prover
|
|
49
50
|
: createLogger('pxe:bb:wasm:bundle' + (logSuffix ? `:${logSuffix}` : ''));
|
|
50
51
|
|
|
51
|
-
|
|
52
|
-
|
|
52
|
+
let prover;
|
|
53
|
+
if (options.proverOrOptions instanceof BBPrivateKernelProver) {
|
|
54
|
+
prover = options.proverOrOptions;
|
|
55
|
+
} else {
|
|
56
|
+
prover = new BBLazyPrivateKernelProver(simulator, { ...options.proverOrOptions, logger: proverLogger });
|
|
57
|
+
}
|
|
53
58
|
const protocolContractsProvider = new LazyProtocolContractsProvider();
|
|
54
59
|
|
|
55
60
|
const pxeLogger = loggers.pxe ? loggers.pxe : createLogger('pxe:service' + (logSuffix ? `:${logSuffix}` : ''));
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { BBPrivateKernelProverOptions } from '@aztec/bb-prover/client';
|
|
1
2
|
import type { Logger } from '@aztec/foundation/log';
|
|
2
3
|
import type { AztecAsyncKVStore } from '@aztec/kv-store';
|
|
3
4
|
import type { CircuitSimulator } from '@aztec/simulator/client';
|
|
@@ -6,7 +7,7 @@ import type { PrivateKernelProver } from '@aztec/stdlib/interfaces/client';
|
|
|
6
7
|
export type PXECreationOptions = {
|
|
7
8
|
loggers?: { store?: Logger; pxe?: Logger; prover?: Logger };
|
|
8
9
|
useLogSuffix?: boolean | string;
|
|
9
|
-
|
|
10
|
+
proverOrOptions?: PrivateKernelProver | BBPrivateKernelProverOptions;
|
|
10
11
|
store?: AztecAsyncKVStore;
|
|
11
12
|
simulator?: CircuitSimulator;
|
|
12
13
|
};
|
|
@@ -1,13 +1,10 @@
|
|
|
1
|
+
import { BBPrivateKernelProver } from '@aztec/bb-prover/client';
|
|
1
2
|
import { BBBundlePrivateKernelProver } from '@aztec/bb-prover/client/bundle';
|
|
2
3
|
import { randomBytes } from '@aztec/foundation/crypto/random';
|
|
3
|
-
import {
|
|
4
|
+
import { createLogger } from '@aztec/foundation/log';
|
|
5
|
+
import { createStore } from '@aztec/kv-store/lmdb-v2';
|
|
4
6
|
import { BundledProtocolContractsProvider } from '@aztec/protocol-contracts/providers/bundle';
|
|
5
|
-
import {
|
|
6
|
-
type CircuitSimulator,
|
|
7
|
-
MemoryCircuitRecorder,
|
|
8
|
-
SimulatorRecorderWrapper,
|
|
9
|
-
WASMSimulator,
|
|
10
|
-
} from '@aztec/simulator/client';
|
|
7
|
+
import { MemoryCircuitRecorder, SimulatorRecorderWrapper, WASMSimulator } from '@aztec/simulator/client';
|
|
11
8
|
import { FileCircuitRecorder } from '@aztec/simulator/testing';
|
|
12
9
|
import type { AztecNode } from '@aztec/stdlib/interfaces/client';
|
|
13
10
|
|
|
@@ -46,9 +43,6 @@ export async function createPXE(
|
|
|
46
43
|
};
|
|
47
44
|
|
|
48
45
|
if (!options.store) {
|
|
49
|
-
// TODO once https://github.com/AztecProtocol/aztec-packages/issues/13656 is fixed, we can remove this and always
|
|
50
|
-
// import the lmdb-v2 version
|
|
51
|
-
const { createStore } = await import('@aztec/kv-store/lmdb-v2');
|
|
52
46
|
const storeLogger = loggers.store
|
|
53
47
|
? loggers.store
|
|
54
48
|
: createLogger('pxe:data:lmdb' + (logSuffix ? `:${logSuffix}` : ''));
|
|
@@ -58,7 +52,13 @@ export async function createPXE(
|
|
|
58
52
|
? loggers.prover
|
|
59
53
|
: createLogger('pxe:bb:native' + (logSuffix ? `:${logSuffix}` : ''));
|
|
60
54
|
|
|
61
|
-
|
|
55
|
+
let prover;
|
|
56
|
+
if (options.proverOrOptions instanceof BBPrivateKernelProver) {
|
|
57
|
+
prover = options.proverOrOptions;
|
|
58
|
+
} else {
|
|
59
|
+
prover = new BBBundlePrivateKernelProver(simulator, { ...options.proverOrOptions, logger: proverLogger });
|
|
60
|
+
}
|
|
61
|
+
|
|
62
62
|
const protocolContractsProvider = new BundledProtocolContractsProvider();
|
|
63
63
|
|
|
64
64
|
const pxeLogger = loggers.pxe ? loggers.pxe : createLogger('pxe:service' + (logSuffix ? `:${logSuffix}` : ''));
|
|
@@ -73,7 +73,3 @@ export async function createPXE(
|
|
|
73
73
|
);
|
|
74
74
|
return pxe;
|
|
75
75
|
}
|
|
76
|
-
|
|
77
|
-
function createProver(simulator: CircuitSimulator, logger?: Logger) {
|
|
78
|
-
return new BBBundlePrivateKernelProver(simulator, logger);
|
|
79
|
-
}
|
package/src/error_enriching.ts
CHANGED
|
@@ -4,18 +4,14 @@ import { FunctionSelector } from '@aztec/stdlib/abi';
|
|
|
4
4
|
import { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
5
5
|
import { type SimulationError, isNoirCallStackUnresolved } from '@aztec/stdlib/errors';
|
|
6
6
|
|
|
7
|
-
import type {
|
|
7
|
+
import type { ContractStore } from './storage/contract_store/contract_store.js';
|
|
8
8
|
|
|
9
9
|
/**
|
|
10
10
|
* Adds contract and function names to a simulation error, if they
|
|
11
11
|
* can be found in the PXE database
|
|
12
12
|
* @param err - The error to enrich.
|
|
13
13
|
*/
|
|
14
|
-
export async function enrichSimulationError(
|
|
15
|
-
err: SimulationError,
|
|
16
|
-
contractDataProvider: ContractDataProvider,
|
|
17
|
-
logger: Logger,
|
|
18
|
-
) {
|
|
14
|
+
export async function enrichSimulationError(err: SimulationError, contractStore: ContractStore, logger: Logger) {
|
|
19
15
|
// Maps contract addresses to the set of function selectors that were in error.
|
|
20
16
|
// Map and Set do reference equality for their keys instead of value equality, so we store the string
|
|
21
17
|
// representation to get e.g. different contract address objects with the same address value to match.
|
|
@@ -34,7 +30,7 @@ export async function enrichSimulationError(
|
|
|
34
30
|
await Promise.all(
|
|
35
31
|
[...mentionedFunctions.entries()].map(async ([contractAddress, fnSelectors]) => {
|
|
36
32
|
const parsedContractAddress = AztecAddress.fromString(contractAddress);
|
|
37
|
-
const contract = await
|
|
33
|
+
const contract = await contractStore.getContract(parsedContractAddress);
|
|
38
34
|
if (contract) {
|
|
39
35
|
err.enrichWithContractName(parsedContractAddress, contract.name);
|
|
40
36
|
// Map from function selector to function name. It uses a stringified key for the same reason as mentionedFunctions.
|
|
@@ -68,11 +64,7 @@ export async function enrichSimulationError(
|
|
|
68
64
|
);
|
|
69
65
|
}
|
|
70
66
|
|
|
71
|
-
export async function enrichPublicSimulationError(
|
|
72
|
-
err: SimulationError,
|
|
73
|
-
contractDataProvider: ContractDataProvider,
|
|
74
|
-
logger: Logger,
|
|
75
|
-
) {
|
|
67
|
+
export async function enrichPublicSimulationError(err: SimulationError, contractStore: ContractStore, logger: Logger) {
|
|
76
68
|
const callStack = err.getCallStack();
|
|
77
69
|
const originalFailingFunction = callStack[callStack.length - 1];
|
|
78
70
|
|
|
@@ -80,7 +72,7 @@ export async function enrichPublicSimulationError(
|
|
|
80
72
|
throw new Error(`Original failing function not found when enriching public simulation, missing callstack`);
|
|
81
73
|
}
|
|
82
74
|
|
|
83
|
-
const artifact = await
|
|
75
|
+
const artifact = await contractStore.getPublicFunctionArtifact(originalFailingFunction.contractAddress);
|
|
84
76
|
if (!artifact) {
|
|
85
77
|
throw new Error(
|
|
86
78
|
`Artifact not found when enriching public simulation error. Contract address: ${originalFailingFunction.contractAddress}.`,
|
|
@@ -92,7 +84,7 @@ export async function enrichPublicSimulationError(
|
|
|
92
84
|
err.setOriginalMessage(err.getOriginalMessage() + `${assertionMessage}`);
|
|
93
85
|
}
|
|
94
86
|
|
|
95
|
-
const debugInfo = await
|
|
87
|
+
const debugInfo = await contractStore.getPublicFunctionDebugMetadata(originalFailingFunction.contractAddress);
|
|
96
88
|
|
|
97
89
|
const noirCallStack = err.getNoirCallStack();
|
|
98
90
|
if (debugInfo) {
|
|
@@ -110,6 +102,6 @@ export async function enrichPublicSimulationError(
|
|
|
110
102
|
);
|
|
111
103
|
}
|
|
112
104
|
}
|
|
113
|
-
await enrichSimulationError(err,
|
|
105
|
+
await enrichSimulationError(err, contractStore, logger);
|
|
114
106
|
}
|
|
115
107
|
}
|
|
@@ -6,14 +6,14 @@ import type { AztecNode } from '@aztec/stdlib/interfaces/server';
|
|
|
6
6
|
import { MerkleTreeId } from '@aztec/stdlib/trees';
|
|
7
7
|
import type { TxHash } from '@aztec/stdlib/tx';
|
|
8
8
|
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
9
|
+
import { AnchorBlockStore } from '../storage/anchor_block_store/anchor_block_store.js';
|
|
10
|
+
import { PrivateEventStore } from '../storage/private_event_store/private_event_store.js';
|
|
11
11
|
|
|
12
12
|
export class EventService {
|
|
13
13
|
constructor(
|
|
14
|
-
private readonly
|
|
14
|
+
private readonly anchorBlockStore: AnchorBlockStore,
|
|
15
15
|
private readonly aztecNode: AztecNode,
|
|
16
|
-
private readonly
|
|
16
|
+
private readonly privateEventStore: PrivateEventStore,
|
|
17
17
|
) {}
|
|
18
18
|
|
|
19
19
|
public async deliverEvent(
|
|
@@ -29,7 +29,7 @@ export class EventService {
|
|
|
29
29
|
// maintain consistent behavior in the PXE. Additionally, events should never be ahead of the synced block here
|
|
30
30
|
// since `fetchTaggedLogs` only processes logs up to the synced block.
|
|
31
31
|
const [syncedBlockHeader, siloedEventCommitment, txEffect] = await Promise.all([
|
|
32
|
-
this.
|
|
32
|
+
this.anchorBlockStore.getBlockHeader(),
|
|
33
33
|
siloNullifier(contractAddress, eventCommitment),
|
|
34
34
|
this.aztecNode.getTxEffect(txHash),
|
|
35
35
|
]);
|
|
@@ -61,7 +61,7 @@ export class EventService {
|
|
|
61
61
|
);
|
|
62
62
|
}
|
|
63
63
|
|
|
64
|
-
return this.
|
|
64
|
+
return this.privateEventStore.storePrivateEventLog(
|
|
65
65
|
selector,
|
|
66
66
|
content,
|
|
67
67
|
Number(nullifierIndex.data), // Index of the event commitment in the nullifier tree
|
|
@@ -2,13 +2,13 @@ import type { PrivateEventFilter } from '@aztec/aztec.js/wallet';
|
|
|
2
2
|
import { INITIAL_L2_BLOCK_NUM } from '@aztec/constants';
|
|
3
3
|
import { BlockNumber } from '@aztec/foundation/branded-types';
|
|
4
4
|
|
|
5
|
-
import {
|
|
6
|
-
import type {
|
|
5
|
+
import { AnchorBlockStore } from '../storage/anchor_block_store/anchor_block_store.js';
|
|
6
|
+
import type { PrivateEventStoreFilter } from '../storage/private_event_store/private_event_store.js';
|
|
7
7
|
|
|
8
8
|
export class PrivateEventFilterValidator {
|
|
9
|
-
constructor(private
|
|
9
|
+
constructor(private anchorBlockStore: AnchorBlockStore) {}
|
|
10
10
|
|
|
11
|
-
async validate(filter: PrivateEventFilter): Promise<
|
|
11
|
+
async validate(filter: PrivateEventFilter): Promise<PrivateEventStoreFilter> {
|
|
12
12
|
let { fromBlock, toBlock } = filter;
|
|
13
13
|
|
|
14
14
|
// Block range filters in Aztec Node are defined as closed-open intervals [fromBlock, toBlock), so
|
|
@@ -16,7 +16,7 @@ export class PrivateEventFilterValidator {
|
|
|
16
16
|
// We then default to [INITIAL_L2_BLOCK_NUM, latestKnownBlock + 1), ie: by default return events from
|
|
17
17
|
// the first block to the latest known block.
|
|
18
18
|
if (!fromBlock || !toBlock) {
|
|
19
|
-
const lastKnownBlock = (await this.
|
|
19
|
+
const lastKnownBlock = (await this.anchorBlockStore.getBlockHeader()).getBlockNumber();
|
|
20
20
|
fromBlock = fromBlock ?? BlockNumber(INITIAL_L2_BLOCK_NUM);
|
|
21
21
|
toBlock = toBlock ?? BlockNumber(lastKnownBlock + 1);
|
|
22
22
|
}
|