@aztec/pxe 0.0.1-commit.d431d1c → 0.0.1-commit.e2b2873ed
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dest/bin/check_oracle_version.js +1 -1
- package/dest/block_synchronizer/block_synchronizer.d.ts +9 -5
- package/dest/block_synchronizer/block_synchronizer.d.ts.map +1 -1
- package/dest/block_synchronizer/block_synchronizer.js +62 -16
- package/dest/config/index.d.ts +3 -1
- package/dest/config/index.d.ts.map +1 -1
- package/dest/config/index.js +17 -0
- package/dest/contract_function_simulator/contract_function_simulator.d.ts +50 -28
- package/dest/contract_function_simulator/contract_function_simulator.d.ts.map +1 -1
- package/dest/contract_function_simulator/contract_function_simulator.js +71 -40
- package/dest/contract_function_simulator/noir-structs/event_validation_request.d.ts +1 -1
- package/dest/contract_function_simulator/noir-structs/event_validation_request.js +1 -1
- package/dest/contract_function_simulator/noir-structs/note_validation_request.d.ts +1 -1
- package/dest/contract_function_simulator/noir-structs/note_validation_request.js +1 -1
- package/dest/contract_function_simulator/oracle/interfaces.d.ts +15 -12
- package/dest/contract_function_simulator/oracle/interfaces.d.ts.map +1 -1
- package/dest/contract_function_simulator/oracle/oracle.d.ts +7 -5
- package/dest/contract_function_simulator/oracle/oracle.d.ts.map +1 -1
- package/dest/contract_function_simulator/oracle/oracle.js +51 -29
- package/dest/contract_function_simulator/oracle/private_execution.d.ts +2 -22
- package/dest/contract_function_simulator/oracle/private_execution.d.ts.map +1 -1
- package/dest/contract_function_simulator/oracle/private_execution.js +0 -37
- package/dest/contract_function_simulator/oracle/private_execution_oracle.d.ts +43 -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 +87 -23
- package/dest/contract_function_simulator/oracle/utility_execution_oracle.d.ts +61 -30
- package/dest/contract_function_simulator/oracle/utility_execution_oracle.d.ts.map +1 -1
- package/dest/contract_function_simulator/oracle/utility_execution_oracle.js +108 -86
- package/dest/contract_sync/contract_sync_service.d.ts +42 -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 +28 -0
- package/dest/contract_sync/helpers.d.ts.map +1 -0
- package/dest/contract_sync/helpers.js +55 -0
- package/dest/debug/pxe_debug_utils.d.ts +22 -9
- package/dest/debug/pxe_debug_utils.d.ts.map +1 -1
- package/dest/debug/pxe_debug_utils.js +28 -17
- 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 +21 -7
- package/dest/entrypoints/client/lazy/utils.d.ts +2 -2
- package/dest/entrypoints/client/lazy/utils.d.ts.map +1 -1
- package/dest/entrypoints/client/lazy/utils.js +22 -8
- package/dest/entrypoints/pxe_creation_options.d.ts +3 -2
- package/dest/entrypoints/pxe_creation_options.d.ts.map +1 -1
- package/dest/entrypoints/server/index.d.ts +2 -1
- package/dest/entrypoints/server/index.d.ts.map +1 -1
- package/dest/entrypoints/server/index.js +1 -0
- package/dest/entrypoints/server/utils.d.ts +1 -1
- package/dest/entrypoints/server/utils.d.ts.map +1 -1
- package/dest/entrypoints/server/utils.js +28 -9
- package/dest/events/event_service.d.ts +5 -6
- package/dest/events/event_service.d.ts.map +1 -1
- package/dest/events/event_service.js +6 -7
- package/dest/job_coordinator/job_coordinator.d.ts +3 -2
- package/dest/job_coordinator/job_coordinator.d.ts.map +1 -1
- package/dest/job_coordinator/job_coordinator.js +3 -2
- package/dest/logs/log_service.d.ts +6 -5
- package/dest/logs/log_service.d.ts.map +1 -1
- package/dest/logs/log_service.js +24 -28
- package/dest/notes/note_service.d.ts +6 -6
- package/dest/notes/note_service.d.ts.map +1 -1
- package/dest/notes/note_service.js +14 -14
- package/dest/oracle_version.d.ts +3 -3
- package/dest/oracle_version.d.ts.map +1 -1
- package/dest/oracle_version.js +4 -3
- package/dest/private_kernel/private_kernel_execution_prover.d.ts +3 -2
- package/dest/private_kernel/private_kernel_execution_prover.d.ts.map +1 -1
- package/dest/private_kernel/private_kernel_execution_prover.js +2 -2
- package/dest/private_kernel/private_kernel_oracle.d.ts +3 -3
- package/dest/private_kernel/private_kernel_oracle.d.ts.map +1 -1
- package/dest/pxe.d.ts +68 -23
- package/dest/pxe.d.ts.map +1 -1
- package/dest/pxe.js +78 -48
- package/dest/storage/address_store/address_store.d.ts +1 -1
- package/dest/storage/address_store/address_store.d.ts.map +1 -1
- package/dest/storage/address_store/address_store.js +12 -11
- package/dest/storage/anchor_block_store/anchor_block_store.d.ts +9 -1
- package/dest/storage/anchor_block_store/anchor_block_store.d.ts.map +1 -1
- package/dest/storage/anchor_block_store/anchor_block_store.js +8 -1
- package/dest/storage/capsule_store/capsule_store.js +6 -8
- package/dest/storage/contract_store/contract_store.d.ts +1 -2
- package/dest/storage/contract_store/contract_store.d.ts.map +1 -1
- package/dest/storage/contract_store/contract_store.js +27 -30
- package/dest/storage/metadata.d.ts +1 -1
- package/dest/storage/metadata.js +1 -1
- package/dest/storage/note_store/note_store.d.ts +47 -50
- package/dest/storage/note_store/note_store.d.ts.map +1 -1
- package/dest/storage/note_store/note_store.js +278 -252
- package/dest/storage/note_store/stored_note.d.ts +16 -0
- package/dest/storage/note_store/stored_note.d.ts.map +1 -0
- package/dest/storage/note_store/stored_note.js +43 -0
- package/dest/storage/private_event_store/private_event_store.d.ts +17 -4
- package/dest/storage/private_event_store/private_event_store.d.ts.map +1 -1
- package/dest/storage/private_event_store/private_event_store.js +198 -147
- package/dest/storage/private_event_store/stored_private_event.d.ts +23 -0
- package/dest/storage/private_event_store/stored_private_event.d.ts.map +1 -0
- package/dest/storage/private_event_store/stored_private_event.js +56 -0
- package/dest/storage/tagging_store/recipient_tagging_store.d.ts +1 -1
- package/dest/storage/tagging_store/recipient_tagging_store.d.ts.map +1 -1
- package/dest/storage/tagging_store/recipient_tagging_store.js +31 -19
- package/dest/storage/tagging_store/sender_address_book_store.d.ts +1 -1
- package/dest/storage/tagging_store/sender_address_book_store.d.ts.map +1 -1
- package/dest/storage/tagging_store/sender_address_book_store.js +20 -14
- package/dest/storage/tagging_store/sender_tagging_store.d.ts +1 -1
- package/dest/storage/tagging_store/sender_tagging_store.d.ts.map +1 -1
- package/dest/storage/tagging_store/sender_tagging_store.js +183 -113
- package/dest/tagging/get_all_logs_by_tags.d.ts +24 -0
- package/dest/tagging/get_all_logs_by_tags.d.ts.map +1 -0
- package/dest/tagging/get_all_logs_by_tags.js +46 -0
- package/dest/tagging/index.d.ts +2 -1
- package/dest/tagging/index.d.ts.map +1 -1
- package/dest/tagging/index.js +1 -0
- package/dest/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.d.ts +3 -2
- package/dest/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.d.ts.map +1 -1
- package/dest/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.js +2 -2
- package/dest/tagging/recipient_sync/utils/load_logs_for_range.d.ts +3 -2
- package/dest/tagging/recipient_sync/utils/load_logs_for_range.d.ts.map +1 -1
- package/dest/tagging/recipient_sync/utils/load_logs_for_range.js +5 -2
- package/dest/tagging/sender_sync/sync_sender_tagging_indexes.d.ts +3 -2
- package/dest/tagging/sender_sync/sync_sender_tagging_indexes.d.ts.map +1 -1
- package/dest/tagging/sender_sync/sync_sender_tagging_indexes.js +2 -2
- package/dest/tagging/sender_sync/utils/get_status_change_of_pending.d.ts +1 -1
- package/dest/tagging/sender_sync/utils/get_status_change_of_pending.d.ts.map +1 -1
- package/dest/tagging/sender_sync/utils/get_status_change_of_pending.js +5 -8
- package/dest/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.d.ts +3 -2
- package/dest/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.d.ts.map +1 -1
- package/dest/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.js +7 -4
- package/package.json +25 -16
- package/src/bin/check_oracle_version.ts +1 -0
- package/src/block_synchronizer/block_synchronizer.ts +76 -33
- package/src/config/index.ts +14 -0
- package/src/contract_function_simulator/contract_function_simulator.ts +117 -87
- 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 +20 -11
- package/src/contract_function_simulator/oracle/oracle.ts +56 -26
- package/src/contract_function_simulator/oracle/private_execution.ts +1 -60
- package/src/contract_function_simulator/oracle/private_execution_oracle.ts +122 -101
- package/src/contract_function_simulator/oracle/utility_execution_oracle.ts +170 -95
- package/src/contract_sync/contract_sync_service.ts +145 -0
- package/src/contract_sync/helpers.ts +93 -0
- package/src/debug/pxe_debug_utils.ts +61 -17
- package/src/entrypoints/client/bundle/utils.ts +16 -15
- package/src/entrypoints/client/lazy/utils.ts +17 -15
- package/src/entrypoints/pxe_creation_options.ts +2 -1
- package/src/entrypoints/server/index.ts +1 -0
- package/src/entrypoints/server/utils.ts +22 -26
- package/src/events/event_service.ts +5 -7
- package/src/job_coordinator/job_coordinator.ts +4 -3
- package/src/logs/log_service.ts +35 -28
- package/src/notes/note_service.ts +21 -20
- package/src/oracle_version.ts +4 -3
- package/src/private_kernel/private_kernel_execution_prover.ts +6 -3
- package/src/private_kernel/private_kernel_oracle.ts +2 -2
- package/src/pxe.ts +178 -85
- 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 -35
- package/src/storage/metadata.ts +1 -1
- package/src/storage/note_store/note_store.ts +317 -318
- package/src/storage/note_store/stored_note.ts +48 -0
- package/src/storage/private_event_store/private_event_store.ts +250 -190
- package/src/storage/private_event_store/stored_private_event.ts +73 -0
- package/src/storage/tagging_store/recipient_tagging_store.ts +31 -21
- package/src/storage/tagging_store/sender_address_book_store.ts +20 -14
- package/src/storage/tagging_store/sender_tagging_store.ts +210 -126
- package/src/tagging/get_all_logs_by_tags.ts +68 -0
- package/src/tagging/index.ts +1 -0
- package/src/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.ts +11 -1
- package/src/tagging/recipient_sync/utils/load_logs_for_range.ts +7 -1
- package/src/tagging/sender_sync/sync_sender_tagging_indexes.ts +3 -1
- package/src/tagging/sender_sync/utils/get_status_change_of_pending.ts +5 -17
- package/src/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.ts +12 -3
- package/dest/tree_membership/tree_membership_service.d.ts +0 -50
- package/dest/tree_membership/tree_membership_service.d.ts.map +0 -1
- package/dest/tree_membership/tree_membership_service.js +0 -75
- package/src/tree_membership/tree_membership_service.ts +0 -97
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { keccak256String } from '@aztec/foundation/crypto/keccak';
|
|
1
|
+
/* eslint-disable import-x/no-named-as-default-member */ import { keccak256String } from '@aztec/foundation/crypto/keccak';
|
|
2
2
|
import { readFileSync } from 'fs';
|
|
3
3
|
import { dirname, join } from 'path';
|
|
4
4
|
import ts from 'typescript';
|
|
@@ -1,9 +1,10 @@
|
|
|
1
|
-
import { type
|
|
1
|
+
import { type LoggerBindings } from '@aztec/foundation/log';
|
|
2
2
|
import type { AztecAsyncKVStore } from '@aztec/kv-store';
|
|
3
3
|
import type { L2TipsKVStore } from '@aztec/kv-store/stores';
|
|
4
4
|
import { L2BlockStream, type L2BlockStreamEvent, type L2BlockStreamEventHandler } from '@aztec/stdlib/block';
|
|
5
5
|
import type { AztecNode } from '@aztec/stdlib/interfaces/client';
|
|
6
|
-
import type {
|
|
6
|
+
import type { BlockSynchronizerConfig } from '../config/index.js';
|
|
7
|
+
import type { ContractSyncService } from '../contract_sync/contract_sync_service.js';
|
|
7
8
|
import type { AnchorBlockStore } from '../storage/anchor_block_store/anchor_block_store.js';
|
|
8
9
|
import type { NoteStore } from '../storage/note_store/note_store.js';
|
|
9
10
|
import type { PrivateEventStore } from '../storage/private_event_store/private_event_store.js';
|
|
@@ -19,13 +20,16 @@ export declare class BlockSynchronizer implements L2BlockStreamEventHandler {
|
|
|
19
20
|
private noteStore;
|
|
20
21
|
private privateEventStore;
|
|
21
22
|
private l2TipsStore;
|
|
23
|
+
private contractSyncService;
|
|
24
|
+
private config;
|
|
22
25
|
private log;
|
|
23
26
|
private isSyncing;
|
|
24
27
|
protected readonly blockStream: L2BlockStream;
|
|
25
|
-
constructor(node: AztecNode, store: AztecAsyncKVStore, anchorBlockStore: AnchorBlockStore, noteStore: NoteStore, privateEventStore: PrivateEventStore, l2TipsStore: L2TipsKVStore, config?: Partial<
|
|
26
|
-
protected createBlockStream(config: Partial<
|
|
28
|
+
constructor(node: AztecNode, store: AztecAsyncKVStore, anchorBlockStore: AnchorBlockStore, noteStore: NoteStore, privateEventStore: PrivateEventStore, l2TipsStore: L2TipsKVStore, contractSyncService: ContractSyncService, config?: Partial<BlockSynchronizerConfig>, bindings?: LoggerBindings);
|
|
29
|
+
protected createBlockStream(config: Partial<BlockSynchronizerConfig>): L2BlockStream;
|
|
27
30
|
/** Handle events emitted by the block stream. */
|
|
28
31
|
handleBlockStreamEvent(event: L2BlockStreamEvent): Promise<void>;
|
|
32
|
+
private updateAnchorBlockHeader;
|
|
29
33
|
/**
|
|
30
34
|
* Syncs PXE and the node by downloading the metadata of the latest blocks, allowing simulations to use
|
|
31
35
|
* recent data (e.g. notes), and handling any reorgs that might have occurred.
|
|
@@ -38,4 +42,4 @@ export declare class BlockSynchronizer implements L2BlockStreamEventHandler {
|
|
|
38
42
|
sync(): Promise<void>;
|
|
39
43
|
private doSync;
|
|
40
44
|
}
|
|
41
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
45
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmxvY2tfc3luY2hyb25pemVyLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYmxvY2tfc3luY2hyb25pemVyL2Jsb2NrX3N5bmNocm9uaXplci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQWUsS0FBSyxjQUFjLEVBQWdCLE1BQU0sdUJBQXVCLENBQUM7QUFDdkYsT0FBTyxLQUFLLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN6RCxPQUFPLEtBQUssRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUM1RCxPQUFPLEVBQWEsYUFBYSxFQUFFLEtBQUssa0JBQWtCLEVBQUUsS0FBSyx5QkFBeUIsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3hILE9BQU8sS0FBSyxFQUFFLFNBQVMsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBR2pFLE9BQU8sS0FBSyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDbEUsT0FBTyxLQUFLLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUNyRixPQUFPLEtBQUssRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFEQUFxRCxDQUFDO0FBQzVGLE9BQU8sS0FBSyxFQUFFLFNBQVMsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQ3JFLE9BQU8sS0FBSyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdURBQXVELENBQUM7QUFFL0Y7Ozs7R0FJRztBQUNILHFCQUFhLGlCQUFrQixZQUFXLHlCQUF5QjtJQU0vRCxPQUFPLENBQUMsSUFBSTtJQUNaLE9BQU8sQ0FBQyxLQUFLO0lBQ2IsT0FBTyxDQUFDLGdCQUFnQjtJQUN4QixPQUFPLENBQUMsU0FBUztJQUNqQixPQUFPLENBQUMsaUJBQWlCO0lBQ3pCLE9BQU8sQ0FBQyxXQUFXO0lBQ25CLE9BQU8sQ0FBQyxtQkFBbUI7SUFDM0IsT0FBTyxDQUFDLE1BQU07SUFaaEIsT0FBTyxDQUFDLEdBQUcsQ0FBUztJQUNwQixPQUFPLENBQUMsU0FBUyxDQUE0QjtJQUM3QyxTQUFTLENBQUMsUUFBUSxDQUFDLFdBQVcsRUFBRSxhQUFhLENBQUM7SUFFOUMsWUFDVSxJQUFJLEVBQUUsU0FBUyxFQUNmLEtBQUssRUFBRSxpQkFBaUIsRUFDeEIsZ0JBQWdCLEVBQUUsZ0JBQWdCLEVBQ2xDLFNBQVMsRUFBRSxTQUFTLEVBQ3BCLGlCQUFpQixFQUFFLGlCQUFpQixFQUNwQyxXQUFXLEVBQUUsYUFBYSxFQUMxQixtQkFBbUIsRUFBRSxtQkFBbUIsRUFDeEMsTUFBTSxHQUFFLE9BQU8sQ0FBQyx1QkFBdUIsQ0FBTSxFQUNyRCxRQUFRLENBQUMsRUFBRSxjQUFjLEVBSTFCO0lBRUQsU0FBUyxDQUFDLGlCQUFpQixDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsdUJBQXVCLENBQUMsR0FBRyxhQUFhLENBYW5GO0lBRUQsaURBQWlEO0lBQ3BDLHNCQUFzQixDQUFDLEtBQUssRUFBRSxrQkFBa0IsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLENBc0U1RTtZQUdhLHVCQUF1QjtJQVNyQzs7Ozs7Ozs7T0FRRztJQUNVLElBQUksa0JBZWhCO1lBRWEsTUFBTTtDQWNyQiJ9
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"block_synchronizer.d.ts","sourceRoot":"","sources":["../../src/block_synchronizer/block_synchronizer.ts"],"names":[],"mappings":"AACA,OAAO,
|
|
1
|
+
{"version":3,"file":"block_synchronizer.d.ts","sourceRoot":"","sources":["../../src/block_synchronizer/block_synchronizer.ts"],"names":[],"mappings":"AACA,OAAO,EAAe,KAAK,cAAc,EAAgB,MAAM,uBAAuB,CAAC;AACvF,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,EAAa,aAAa,EAAE,KAAK,kBAAkB,EAAE,KAAK,yBAAyB,EAAE,MAAM,qBAAqB,CAAC;AACxH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iCAAiC,CAAC;AAGjE,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AAClE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,2CAA2C,CAAC;AACrF,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qDAAqD,CAAC;AAC5F,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qCAAqC,CAAC;AACrE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,uDAAuD,CAAC;AAE/F;;;;GAIG;AACH,qBAAa,iBAAkB,YAAW,yBAAyB;IAM/D,OAAO,CAAC,IAAI;IACZ,OAAO,CAAC,KAAK;IACb,OAAO,CAAC,gBAAgB;IACxB,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,iBAAiB;IACzB,OAAO,CAAC,WAAW;IACnB,OAAO,CAAC,mBAAmB;IAC3B,OAAO,CAAC,MAAM;IAZhB,OAAO,CAAC,GAAG,CAAS;IACpB,OAAO,CAAC,SAAS,CAA4B;IAC7C,SAAS,CAAC,QAAQ,CAAC,WAAW,EAAE,aAAa,CAAC;IAE9C,YACU,IAAI,EAAE,SAAS,EACf,KAAK,EAAE,iBAAiB,EACxB,gBAAgB,EAAE,gBAAgB,EAClC,SAAS,EAAE,SAAS,EACpB,iBAAiB,EAAE,iBAAiB,EACpC,WAAW,EAAE,aAAa,EAC1B,mBAAmB,EAAE,mBAAmB,EACxC,MAAM,GAAE,OAAO,CAAC,uBAAuB,CAAM,EACrD,QAAQ,CAAC,EAAE,cAAc,EAI1B;IAED,SAAS,CAAC,iBAAiB,CAAC,MAAM,EAAE,OAAO,CAAC,uBAAuB,CAAC,GAAG,aAAa,CAanF;IAED,iDAAiD;IACpC,sBAAsB,CAAC,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CAsE5E;YAGa,uBAAuB;IASrC;;;;;;;;OAQG;IACU,IAAI,kBAehB;YAEa,MAAM;CAcrB"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { BlockNumber } from '@aztec/foundation/branded-types';
|
|
2
2
|
import { createLogger } from '@aztec/foundation/log';
|
|
3
|
-
import {
|
|
3
|
+
import { BlockHash, L2BlockStream } from '@aztec/stdlib/block';
|
|
4
4
|
/**
|
|
5
5
|
* The BlockSynchronizer class orchestrates synchronization between PXE and Aztec node, maintaining an up-to-date
|
|
6
6
|
* view of the L2 chain state. It handles block header retrieval, chain reorganizations, and provides an interface
|
|
@@ -12,21 +12,25 @@ import { L2BlockHash, L2BlockStream } from '@aztec/stdlib/block';
|
|
|
12
12
|
noteStore;
|
|
13
13
|
privateEventStore;
|
|
14
14
|
l2TipsStore;
|
|
15
|
+
contractSyncService;
|
|
16
|
+
config;
|
|
15
17
|
log;
|
|
16
18
|
isSyncing;
|
|
17
19
|
blockStream;
|
|
18
|
-
constructor(node, store, anchorBlockStore, noteStore, privateEventStore, l2TipsStore, config = {},
|
|
20
|
+
constructor(node, store, anchorBlockStore, noteStore, privateEventStore, l2TipsStore, contractSyncService, config = {}, bindings){
|
|
19
21
|
this.node = node;
|
|
20
22
|
this.store = store;
|
|
21
23
|
this.anchorBlockStore = anchorBlockStore;
|
|
22
24
|
this.noteStore = noteStore;
|
|
23
25
|
this.privateEventStore = privateEventStore;
|
|
24
26
|
this.l2TipsStore = l2TipsStore;
|
|
25
|
-
this.
|
|
27
|
+
this.contractSyncService = contractSyncService;
|
|
28
|
+
this.config = config;
|
|
29
|
+
this.log = createLogger('pxe:block_synchronizer', bindings);
|
|
26
30
|
this.blockStream = this.createBlockStream(config);
|
|
27
31
|
}
|
|
28
32
|
createBlockStream(config) {
|
|
29
|
-
return new L2BlockStream(this.node, this.l2TipsStore, this, createLogger('pxe:block_stream'), {
|
|
33
|
+
return new L2BlockStream(this.node, this.l2TipsStore, this, createLogger('pxe:block_stream', this.log.getBindings()), {
|
|
30
34
|
batchSize: config.l2BlockBatchSize,
|
|
31
35
|
// Skipping finalized blocks makes us sync much faster - we only need to download blocks other than the latest one
|
|
32
36
|
// in order to detect reorgs, and there can be no reorgs on finalized block, making this safe.
|
|
@@ -38,36 +42,78 @@ import { L2BlockHash, L2BlockStream } from '@aztec/stdlib/block';
|
|
|
38
42
|
switch(event.type){
|
|
39
43
|
case 'blocks-added':
|
|
40
44
|
{
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
45
|
+
if (this.config.syncChainTip === undefined || this.config.syncChainTip === 'proposed') {
|
|
46
|
+
const lastBlock = event.blocks.at(-1);
|
|
47
|
+
await this.updateAnchorBlockHeader(lastBlock.header);
|
|
48
|
+
}
|
|
49
|
+
break;
|
|
50
|
+
}
|
|
51
|
+
case 'chain-checkpointed':
|
|
52
|
+
{
|
|
53
|
+
if (this.config.syncChainTip === 'checkpointed') {
|
|
54
|
+
// Get the last block header from the checkpoint
|
|
55
|
+
const lastBlock = event.checkpoint.checkpoint.blocks.at(-1);
|
|
56
|
+
await this.updateAnchorBlockHeader(lastBlock.header);
|
|
57
|
+
}
|
|
58
|
+
break;
|
|
59
|
+
}
|
|
60
|
+
case 'chain-proven':
|
|
61
|
+
{
|
|
62
|
+
if (this.config.syncChainTip === 'proven') {
|
|
63
|
+
const blockHeader = await this.node.getBlockHeader(BlockNumber(event.block.number));
|
|
64
|
+
if (blockHeader) {
|
|
65
|
+
await this.updateAnchorBlockHeader(blockHeader);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
break;
|
|
69
|
+
}
|
|
70
|
+
case 'chain-finalized':
|
|
71
|
+
{
|
|
72
|
+
if (this.config.syncChainTip === 'finalized') {
|
|
73
|
+
const blockHeader = await this.node.getBlockHeader(BlockNumber(event.block.number));
|
|
74
|
+
if (blockHeader) {
|
|
75
|
+
await this.updateAnchorBlockHeader(blockHeader);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
48
78
|
break;
|
|
49
79
|
}
|
|
50
80
|
case 'chain-pruned':
|
|
51
81
|
{
|
|
82
|
+
const currentAnchorBlockHeader = await this.anchorBlockStore.getBlockHeader();
|
|
83
|
+
const currentAnchorBlockNumber = currentAnchorBlockHeader.getBlockNumber();
|
|
84
|
+
if (currentAnchorBlockNumber <= event.block.number) {
|
|
85
|
+
this.log.verbose(`Ignoring prune event to block ${event.block.number} greater than current anchor block ${currentAnchorBlockNumber}`, {
|
|
86
|
+
pruneEvent: event,
|
|
87
|
+
currentAnchorBlockHeader: currentAnchorBlockHeader.toInspect()
|
|
88
|
+
});
|
|
89
|
+
return;
|
|
90
|
+
}
|
|
52
91
|
this.log.warn(`Pruning data after block ${event.block.number} due to reorg`);
|
|
53
|
-
const oldAnchorBlockNumber = (await this.anchorBlockStore.getBlockHeader()).getBlockNumber();
|
|
54
92
|
// Note that the following is not necessarily the anchor block that will be used in the transaction - if
|
|
55
93
|
// the chain has already moved past the reorg, we'll also see blocks-added events that will push the anchor
|
|
56
94
|
// forward.
|
|
57
|
-
const newAnchorBlockHeader = await this.node.getBlockHeader(
|
|
95
|
+
const newAnchorBlockHeader = await this.node.getBlockHeader(BlockHash.fromString(event.block.hash));
|
|
58
96
|
if (!newAnchorBlockHeader) {
|
|
59
97
|
throw new Error(`Block header for block number ${event.block.number} and hash ${event.block.hash} not found during chain prune. This likely indicates a bug in the node, as we receive block stream events and fetch block headers from the same node.`);
|
|
60
98
|
}
|
|
61
99
|
// Operations are wrapped in a single transaction to ensure atomicity.
|
|
62
100
|
await this.store.transactionAsync(async ()=>{
|
|
63
|
-
await this.noteStore.rollback(event.block.number,
|
|
64
|
-
await this.privateEventStore.rollback(event.block.number,
|
|
65
|
-
await this.
|
|
101
|
+
await this.noteStore.rollback(event.block.number, currentAnchorBlockNumber);
|
|
102
|
+
await this.privateEventStore.rollback(event.block.number, currentAnchorBlockNumber);
|
|
103
|
+
await this.updateAnchorBlockHeader(newAnchorBlockHeader);
|
|
66
104
|
});
|
|
67
105
|
break;
|
|
68
106
|
}
|
|
69
107
|
}
|
|
70
108
|
}
|
|
109
|
+
/** Updates the anchor block header to the target block */ async updateAnchorBlockHeader(blockHeader) {
|
|
110
|
+
// Whenever the anchor block header is updated, we need to synchronize the private state of contracts again.
|
|
111
|
+
// Therefore, we clear the contract synchronization cache here such that the sync is re-triggered upon new
|
|
112
|
+
// execution.
|
|
113
|
+
this.contractSyncService.wipe();
|
|
114
|
+
this.log.verbose(`Updated pxe last block to ${blockHeader.getBlockNumber()}`, blockHeader.toInspect());
|
|
115
|
+
await this.anchorBlockStore.setHeader(blockHeader);
|
|
116
|
+
}
|
|
71
117
|
/**
|
|
72
118
|
* Syncs PXE and the node by downloading the metadata of the latest blocks, allowing simulations to use
|
|
73
119
|
* recent data (e.g. notes), and handling any reorgs that might have occurred.
|
package/dest/config/index.d.ts
CHANGED
|
@@ -15,6 +15,8 @@ export interface KernelProverConfig {
|
|
|
15
15
|
export interface BlockSynchronizerConfig {
|
|
16
16
|
/** Maximum amount of blocks to pull from the stream in one request when synchronizing */
|
|
17
17
|
l2BlockBatchSize: number;
|
|
18
|
+
/** Which chain tip to sync to (proposed, checkpointed, proven, finalized) */
|
|
19
|
+
syncChainTip?: 'proposed' | 'checkpointed' | 'proven' | 'finalized';
|
|
18
20
|
}
|
|
19
21
|
export type PXEConfig = KernelProverConfig & DataStoreConfig & ChainConfig & BlockSynchronizerConfig;
|
|
20
22
|
export type CliPXEOptions = {
|
|
@@ -32,4 +34,4 @@ export declare const allPxeConfigMappings: ConfigMappingsType<CliPXEOptions & PX
|
|
|
32
34
|
* Creates an instance of CliPxeOptions out of environment variables
|
|
33
35
|
*/
|
|
34
36
|
export declare function getCliPXEOptions(): CliPXEOptions & PXEConfig;
|
|
35
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
37
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb25maWcvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLEtBQUssa0JBQWtCLEVBS3hCLE1BQU0sMEJBQTBCLENBQUM7QUFDbEMsT0FBTyxFQUFFLEtBQUssZUFBZSxFQUFzQixNQUFNLHdCQUF3QixDQUFDO0FBQ2xGLE9BQU8sRUFBRSxLQUFLLFdBQVcsRUFBdUIsTUFBTSxzQkFBc0IsQ0FBQztBQUU3RSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFFbkQ7O0dBRUc7QUFDSCxNQUFNLFdBQVcsa0JBQWtCO0lBQ2pDLDhDQUE4QztJQUM5QyxhQUFhLENBQUMsRUFBRSxPQUFPLENBQUM7Q0FDekI7QUFFRDs7R0FFRztBQUNILE1BQU0sV0FBVyx1QkFBdUI7SUFDdEMseUZBQXlGO0lBQ3pGLGdCQUFnQixFQUFFLE1BQU0sQ0FBQztJQUN6Qiw2RUFBNkU7SUFDN0UsWUFBWSxDQUFDLEVBQUUsVUFBVSxHQUFHLGNBQWMsR0FBRyxRQUFRLEdBQUcsV0FBVyxDQUFDO0NBQ3JFO0FBRUQsTUFBTSxNQUFNLFNBQVMsR0FBRyxrQkFBa0IsR0FBRyxlQUFlLEdBQUcsV0FBVyxHQUFHLHVCQUF1QixDQUFDO0FBRXJHLE1BQU0sTUFBTSxhQUFhLEdBQUc7SUFDMUIsMkNBQTJDO0lBQzNDLE9BQU8sQ0FBQyxFQUFFLE1BQU0sQ0FBQztDQUNsQixDQUFDO0FBRUYsZUFBTyxNQUFNLGlCQUFpQixFQUFFLGtCQUFrQixDQUFDLFNBQVMsQ0FnQzNELENBQUM7QUFFRjs7R0FFRztBQUNILHdCQUFnQixZQUFZLElBQUksU0FBUyxDQUV4QztBQUVELGVBQU8sTUFBTSxvQkFBb0IsRUFBRSxrQkFBa0IsQ0FBQyxhQUFhLENBS2xFLENBQUM7QUFFRixlQUFPLE1BQU0sb0JBQW9CLEVBQUUsa0JBQWtCLENBQUMsYUFBYSxHQUFHLFNBQVMsQ0FXOUUsQ0FBQztBQUVGOztHQUVHO0FBQ0gsd0JBQWdCLGdCQUFnQixJQUFJLGFBQWEsR0FBRyxTQUFTLENBUTVEIn0=
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,kBAAkB,EAKxB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,KAAK,eAAe,EAAsB,MAAM,wBAAwB,CAAC;AAClF,OAAO,EAAE,KAAK,WAAW,EAAuB,MAAM,sBAAsB,CAAC;AAE7E,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAEnD;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,8CAA8C;IAC9C,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,yFAAyF;IACzF,gBAAgB,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,kBAAkB,EAKxB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,KAAK,eAAe,EAAsB,MAAM,wBAAwB,CAAC;AAClF,OAAO,EAAE,KAAK,WAAW,EAAuB,MAAM,sBAAsB,CAAC;AAE7E,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAEnD;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,8CAA8C;IAC9C,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,yFAAyF;IACzF,gBAAgB,EAAE,MAAM,CAAC;IACzB,6EAA6E;IAC7E,YAAY,CAAC,EAAE,UAAU,GAAG,cAAc,GAAG,QAAQ,GAAG,WAAW,CAAC;CACrE;AAED,MAAM,MAAM,SAAS,GAAG,kBAAkB,GAAG,eAAe,GAAG,WAAW,GAAG,uBAAuB,CAAC;AAErG,MAAM,MAAM,aAAa,GAAG;IAC1B,2CAA2C;IAC3C,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,eAAO,MAAM,iBAAiB,EAAE,kBAAkB,CAAC,SAAS,CAgC3D,CAAC;AAEF;;GAEG;AACH,wBAAgB,YAAY,IAAI,SAAS,CAExC;AAED,eAAO,MAAM,oBAAoB,EAAE,kBAAkB,CAAC,aAAa,CAKlE,CAAC;AAEF,eAAO,MAAM,oBAAoB,EAAE,kBAAkB,CAAC,aAAa,GAAG,SAAS,CAW9E,CAAC;AAEF;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,aAAa,GAAG,SAAS,CAQ5D"}
|
package/dest/config/index.js
CHANGED
|
@@ -21,6 +21,23 @@ export const pxeConfigMappings = {
|
|
|
21
21
|
env: 'PXE_PROVER_ENABLED',
|
|
22
22
|
description: 'Enable real proofs',
|
|
23
23
|
...booleanConfigHelper(true)
|
|
24
|
+
},
|
|
25
|
+
syncChainTip: {
|
|
26
|
+
env: 'PXE_SYNC_CHAIN_TIP',
|
|
27
|
+
description: 'Which chain tip to sync to (proposed, checkpointed, proven, finalized)',
|
|
28
|
+
defaultValue: 'proposed',
|
|
29
|
+
parseEnv: (val)=>{
|
|
30
|
+
const allowedValues = [
|
|
31
|
+
'proposed',
|
|
32
|
+
'checkpointed',
|
|
33
|
+
'proven',
|
|
34
|
+
'finalized'
|
|
35
|
+
];
|
|
36
|
+
if (allowedValues.includes(val)) {
|
|
37
|
+
return val;
|
|
38
|
+
}
|
|
39
|
+
throw new Error(`Invalid value for PXE_SYNC_CHAIN_TIP: ${val}. Allowed values are: ${allowedValues.join(', ')}`);
|
|
40
|
+
}
|
|
24
41
|
}
|
|
25
42
|
};
|
|
26
43
|
/**
|
|
@@ -8,8 +8,8 @@ import { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
|
8
8
|
import type { AztecNode } from '@aztec/stdlib/interfaces/server';
|
|
9
9
|
import { type PrivateKernelExecutionProofOutput, PrivateKernelTailCircuitPublicInputs } from '@aztec/stdlib/kernel';
|
|
10
10
|
import { BlockHeader, PrivateExecutionResult, TxExecutionRequest } from '@aztec/stdlib/tx';
|
|
11
|
+
import type { ContractSyncService } from '../contract_sync/contract_sync_service.js';
|
|
11
12
|
import type { AddressStore } from '../storage/address_store/address_store.js';
|
|
12
|
-
import type { AnchorBlockStore } from '../storage/anchor_block_store/anchor_block_store.js';
|
|
13
13
|
import type { CapsuleStore } from '../storage/capsule_store/capsule_store.js';
|
|
14
14
|
import type { ContractStore } from '../storage/contract_store/contract_store.js';
|
|
15
15
|
import type { NoteStore } from '../storage/note_store/note_store.js';
|
|
@@ -17,39 +17,61 @@ import type { PrivateEventStore } from '../storage/private_event_store/private_e
|
|
|
17
17
|
import type { RecipientTaggingStore } from '../storage/tagging_store/recipient_tagging_store.js';
|
|
18
18
|
import type { SenderAddressBookStore } from '../storage/tagging_store/sender_address_book_store.js';
|
|
19
19
|
import type { SenderTaggingStore } from '../storage/tagging_store/sender_tagging_store.js';
|
|
20
|
+
/** Options for ContractFunctionSimulator.run. */
|
|
21
|
+
export type ContractSimulatorRunOpts = {
|
|
22
|
+
/** The address of the contract (should match request.origin). */
|
|
23
|
+
contractAddress: AztecAddress;
|
|
24
|
+
/** The function selector of the entry point. */
|
|
25
|
+
selector: FunctionSelector;
|
|
26
|
+
/** The address calling the function. Can be replaced to simulate a call from another contract or account. */
|
|
27
|
+
msgSender?: AztecAddress;
|
|
28
|
+
/** The block header to use as base state for this run. */
|
|
29
|
+
anchorBlockHeader: BlockHeader;
|
|
30
|
+
/** The address used as a tagging sender when emitting private logs. */
|
|
31
|
+
senderForTags?: AztecAddress;
|
|
32
|
+
/** The accounts whose notes we can access in this call. Defaults to all. */
|
|
33
|
+
scopes?: AztecAddress[];
|
|
34
|
+
/** The job ID for staged writes. */
|
|
35
|
+
jobId: string;
|
|
36
|
+
};
|
|
37
|
+
/** Args for ContractFunctionSimulator constructor. */
|
|
38
|
+
export type ContractFunctionSimulatorArgs = {
|
|
39
|
+
contractStore: ContractStore;
|
|
40
|
+
noteStore: NoteStore;
|
|
41
|
+
keyStore: KeyStore;
|
|
42
|
+
addressStore: AddressStore;
|
|
43
|
+
aztecNode: AztecNode;
|
|
44
|
+
senderTaggingStore: SenderTaggingStore;
|
|
45
|
+
recipientTaggingStore: RecipientTaggingStore;
|
|
46
|
+
senderAddressBookStore: SenderAddressBookStore;
|
|
47
|
+
capsuleStore: CapsuleStore;
|
|
48
|
+
privateEventStore: PrivateEventStore;
|
|
49
|
+
simulator: CircuitSimulator;
|
|
50
|
+
contractSyncService: ContractSyncService;
|
|
51
|
+
};
|
|
20
52
|
/**
|
|
21
53
|
* The contract function simulator.
|
|
22
54
|
*/
|
|
23
55
|
export declare class ContractFunctionSimulator {
|
|
24
|
-
private
|
|
25
|
-
private
|
|
26
|
-
private
|
|
27
|
-
private
|
|
28
|
-
private
|
|
29
|
-
private
|
|
30
|
-
private senderTaggingStore;
|
|
31
|
-
private recipientTaggingStore;
|
|
32
|
-
private senderAddressBookStore;
|
|
33
|
-
private capsuleStore;
|
|
34
|
-
private privateEventStore;
|
|
35
|
-
private simulator;
|
|
36
|
-
private
|
|
37
|
-
constructor(
|
|
56
|
+
private readonly log;
|
|
57
|
+
private readonly contractStore;
|
|
58
|
+
private readonly noteStore;
|
|
59
|
+
private readonly keyStore;
|
|
60
|
+
private readonly addressStore;
|
|
61
|
+
private readonly aztecNode;
|
|
62
|
+
private readonly senderTaggingStore;
|
|
63
|
+
private readonly recipientTaggingStore;
|
|
64
|
+
private readonly senderAddressBookStore;
|
|
65
|
+
private readonly capsuleStore;
|
|
66
|
+
private readonly privateEventStore;
|
|
67
|
+
private readonly simulator;
|
|
68
|
+
private readonly contractSyncService;
|
|
69
|
+
constructor(args: ContractFunctionSimulatorArgs);
|
|
38
70
|
/**
|
|
39
71
|
* Runs a private function.
|
|
40
72
|
* @param request - The transaction request.
|
|
41
|
-
* @param entryPointArtifact - The artifact of the entry point function.
|
|
42
|
-
* @param contractAddress - The address of the contract (should match request.origin)
|
|
43
|
-
* @param msgSender - The address calling the function. This can be replaced to simulate a call from another contract
|
|
44
|
-
* or a specific account.
|
|
45
|
-
* @param anchorBlockHeader - The block header to use as base state for this run.
|
|
46
|
-
* @param senderForTags - The address that is used as a tagging sender when emitting private logs. Returned from
|
|
47
|
-
* the `privateGetSenderForTags` oracle.
|
|
48
|
-
* @param scopes - The accounts whose notes we can access in this call. Currently optional and will default to all.
|
|
49
|
-
* @param jobId - The job ID for staged writes.
|
|
50
|
-
* @returns The result of the execution.
|
|
51
73
|
*/
|
|
52
|
-
run(request: TxExecutionRequest, contractAddress
|
|
74
|
+
run(request: TxExecutionRequest, { contractAddress, selector, msgSender, anchorBlockHeader, senderForTags, scopes, jobId }: ContractSimulatorRunOpts): Promise<PrivateExecutionResult>;
|
|
53
75
|
/**
|
|
54
76
|
* Runs a utility function.
|
|
55
77
|
* @param call - The function call to execute.
|
|
@@ -80,5 +102,5 @@ export declare class ContractFunctionSimulator {
|
|
|
80
102
|
* Used by TXE to simulate account contract behavior (setting the counter before app execution).
|
|
81
103
|
* @returns The simulated proving result.
|
|
82
104
|
*/
|
|
83
|
-
export declare function generateSimulatedProvingResult(privateExecutionResult: PrivateExecutionResult,
|
|
84
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
105
|
+
export declare function generateSimulatedProvingResult(privateExecutionResult: PrivateExecutionResult, debugFunctionNameGetter: (contractAddress: AztecAddress, functionSelector: FunctionSelector) => Promise<string>, minRevertibleSideEffectCounterOverride?: number): Promise<PrivateKernelExecutionProofOutput<PrivateKernelTailCircuitPublicInputs>>;
|
|
106
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udHJhY3RfZnVuY3Rpb25fc2ltdWxhdG9yLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29udHJhY3RfZnVuY3Rpb25fc2ltdWxhdG9yL2NvbnRyYWN0X2Z1bmN0aW9uX3NpbXVsYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFxQkEsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBR3BELE9BQU8sS0FBSyxFQUFFLFFBQVEsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBR2pELE9BQU8sRUFDTCxLQUFLLGdCQUFnQixFQU90QixNQUFNLHlCQUF5QixDQUFDO0FBQ2pDLE9BQU8sS0FBSyxFQUFFLFlBQVksRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxnQkFBZ0IsRUFBZ0IsTUFBTSxtQkFBbUIsQ0FBQztBQUNuRSxPQUFPLEtBQUssRUFBRSxXQUFXLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFTM0QsT0FBTyxLQUFLLEVBQUUsU0FBUyxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDakUsT0FBTyxFQUlMLEtBQUssaUNBQWlDLEVBQ3RDLG9DQUFvQyxFQUtyQyxNQUFNLHNCQUFzQixDQUFDO0FBSTlCLE9BQU8sRUFDTCxXQUFXLEVBR1gsc0JBQXNCLEVBRXRCLGtCQUFrQixFQUduQixNQUFNLGtCQUFrQixDQUFDO0FBRTFCLE9BQU8sS0FBSyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDckYsT0FBTyxLQUFLLEVBQUUsWUFBWSxFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDOUUsT0FBTyxLQUFLLEVBQUUsWUFBWSxFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDOUUsT0FBTyxLQUFLLEVBQUUsYUFBYSxFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFDakYsT0FBTyxLQUFLLEVBQUUs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
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"contract_function_simulator.d.ts","sourceRoot":"","sources":["../../src/contract_function_simulator/contract_function_simulator.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"contract_function_simulator.d.ts","sourceRoot":"","sources":["../../src/contract_function_simulator/contract_function_simulator.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { AVM_EMITNOTEHASH_BASE_L2_GAS, AVM_EMITNULLIFIER_BASE_L2_GAS, AVM_SENDL2TOL1MSG_BASE_L2_GAS, DA_BYTES_PER_FIELD, DA_GAS_PER_BYTE, FIXED_AVM_STARTUP_L2_GAS, FIXED_DA_GAS, FIXED_L2_GAS, L2_GAS_PER_CONTRACT_CLASS_LOG, L2_GAS_PER_PRIVATE_LOG, MAX_CONTRACT_CLASS_LOGS_PER_TX, MAX_ENQUEUED_CALLS_PER_TX, MAX_L2_TO_L1_MSGS_PER_TX, MAX_NOTE_HASHES_PER_TX, MAX_NULLIFIERS_PER_TX, MAX_PRIVATE_LOGS_PER_TX } from '@aztec/constants';
|
|
1
|
+
import { AVM_EMITNOTEHASH_BASE_L2_GAS, AVM_EMITNULLIFIER_BASE_L2_GAS, AVM_SENDL2TOL1MSG_BASE_L2_GAS, DA_BYTES_PER_FIELD, DA_GAS_PER_BYTE, FIXED_AVM_STARTUP_L2_GAS, FIXED_DA_GAS, FIXED_L2_GAS, GeneratorIndex, L2_GAS_PER_CONTRACT_CLASS_LOG, L2_GAS_PER_PRIVATE_LOG, MAX_CONTRACT_CLASS_LOGS_PER_TX, MAX_ENQUEUED_CALLS_PER_TX, MAX_L2_TO_L1_MSGS_PER_TX, MAX_NOTE_HASHES_PER_TX, MAX_NULLIFIERS_PER_TX, MAX_PRIVATE_LOGS_PER_TX } from '@aztec/constants';
|
|
2
2
|
import { arrayNonEmptyLength, padArrayEnd } from '@aztec/foundation/collection';
|
|
3
|
-
import {
|
|
3
|
+
import { poseidon2HashWithSeparator } from '@aztec/foundation/crypto/poseidon';
|
|
4
4
|
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
5
5
|
import { createLogger } from '@aztec/foundation/log';
|
|
6
6
|
import { Timer } from '@aztec/foundation/timer';
|
|
@@ -20,57 +20,45 @@ import { ExecutionNoteCache } from './execution_note_cache.js';
|
|
|
20
20
|
import { ExecutionTaggingIndexCache } from './execution_tagging_index_cache.js';
|
|
21
21
|
import { HashedValuesCache } from './hashed_values_cache.js';
|
|
22
22
|
import { Oracle } from './oracle/oracle.js';
|
|
23
|
-
import { executePrivateFunction
|
|
23
|
+
import { executePrivateFunction } from './oracle/private_execution.js';
|
|
24
24
|
import { PrivateExecutionOracle } from './oracle/private_execution_oracle.js';
|
|
25
25
|
import { UtilityExecutionOracle } from './oracle/utility_execution_oracle.js';
|
|
26
26
|
/**
|
|
27
27
|
* The contract function simulator.
|
|
28
28
|
*/ export class ContractFunctionSimulator {
|
|
29
|
+
log;
|
|
29
30
|
contractStore;
|
|
30
31
|
noteStore;
|
|
31
32
|
keyStore;
|
|
32
33
|
addressStore;
|
|
33
34
|
aztecNode;
|
|
34
|
-
anchorBlockStore;
|
|
35
35
|
senderTaggingStore;
|
|
36
36
|
recipientTaggingStore;
|
|
37
37
|
senderAddressBookStore;
|
|
38
38
|
capsuleStore;
|
|
39
39
|
privateEventStore;
|
|
40
40
|
simulator;
|
|
41
|
-
|
|
42
|
-
constructor(
|
|
43
|
-
this.contractStore = contractStore;
|
|
44
|
-
this.noteStore = noteStore;
|
|
45
|
-
this.keyStore = keyStore;
|
|
46
|
-
this.addressStore = addressStore;
|
|
47
|
-
this.aztecNode = aztecNode;
|
|
48
|
-
this.
|
|
49
|
-
this.
|
|
50
|
-
this.
|
|
51
|
-
this.
|
|
52
|
-
this.
|
|
53
|
-
this.
|
|
54
|
-
this.
|
|
41
|
+
contractSyncService;
|
|
42
|
+
constructor(args){
|
|
43
|
+
this.contractStore = args.contractStore;
|
|
44
|
+
this.noteStore = args.noteStore;
|
|
45
|
+
this.keyStore = args.keyStore;
|
|
46
|
+
this.addressStore = args.addressStore;
|
|
47
|
+
this.aztecNode = args.aztecNode;
|
|
48
|
+
this.senderTaggingStore = args.senderTaggingStore;
|
|
49
|
+
this.recipientTaggingStore = args.recipientTaggingStore;
|
|
50
|
+
this.senderAddressBookStore = args.senderAddressBookStore;
|
|
51
|
+
this.capsuleStore = args.capsuleStore;
|
|
52
|
+
this.privateEventStore = args.privateEventStore;
|
|
53
|
+
this.simulator = args.simulator;
|
|
54
|
+
this.contractSyncService = args.contractSyncService;
|
|
55
55
|
this.log = createLogger('simulator');
|
|
56
56
|
}
|
|
57
57
|
/**
|
|
58
58
|
* Runs a private function.
|
|
59
59
|
* @param request - The transaction request.
|
|
60
|
-
|
|
61
|
-
* @param contractAddress - The address of the contract (should match request.origin)
|
|
62
|
-
* @param msgSender - The address calling the function. This can be replaced to simulate a call from another contract
|
|
63
|
-
* or a specific account.
|
|
64
|
-
* @param anchorBlockHeader - The block header to use as base state for this run.
|
|
65
|
-
* @param senderForTags - The address that is used as a tagging sender when emitting private logs. Returned from
|
|
66
|
-
* the `privateGetSenderForTags` oracle.
|
|
67
|
-
* @param scopes - The accounts whose notes we can access in this call. Currently optional and will default to all.
|
|
68
|
-
* @param jobId - The job ID for staged writes.
|
|
69
|
-
* @returns The result of the execution.
|
|
70
|
-
*/ async run(request, contractAddress, selector, msgSender = AztecAddress.fromField(Fr.MAX_FIELD_VALUE), anchorBlockHeader, senderForTags, scopes, jobId) {
|
|
60
|
+
*/ async run(request, { contractAddress, selector, msgSender = AztecAddress.fromField(Fr.MAX_FIELD_VALUE), anchorBlockHeader, senderForTags, scopes, jobId }) {
|
|
71
61
|
const simulatorSetupTimer = new Timer();
|
|
72
|
-
await this.contractStore.syncPrivateState(contractAddress, selector, (privateSyncCall)=>this.runUtility(privateSyncCall, [], anchorBlockHeader, scopes, jobId));
|
|
73
|
-
await verifyCurrentClassId(contractAddress, this.aztecNode, this.contractStore, anchorBlockHeader);
|
|
74
62
|
const entryPointArtifact = await this.contractStore.getFunctionArtifactWithDebugMetadata(contractAddress, selector);
|
|
75
63
|
if (entryPointArtifact.functionType !== FunctionType.PRIVATE) {
|
|
76
64
|
throw new Error(`Cannot run ${entryPointArtifact.functionType} function as private`);
|
|
@@ -84,9 +72,37 @@ import { UtilityExecutionOracle } from './oracle/utility_execution_oracle.js';
|
|
|
84
72
|
const protocolNullifier = await computeProtocolNullifier(await request.toTxRequest().hash());
|
|
85
73
|
const noteCache = new ExecutionNoteCache(protocolNullifier);
|
|
86
74
|
const taggingIndexCache = new ExecutionTaggingIndexCache();
|
|
87
|
-
const privateExecutionOracle = new PrivateExecutionOracle(
|
|
88
|
-
|
|
89
|
-
|
|
75
|
+
const privateExecutionOracle = new PrivateExecutionOracle({
|
|
76
|
+
argsHash: request.firstCallArgsHash,
|
|
77
|
+
txContext: request.txContext,
|
|
78
|
+
callContext,
|
|
79
|
+
anchorBlockHeader,
|
|
80
|
+
utilityExecutor: async (call, execScopes)=>{
|
|
81
|
+
await this.runUtility(call, [], anchorBlockHeader, execScopes, jobId);
|
|
82
|
+
},
|
|
83
|
+
authWitnesses: request.authWitnesses,
|
|
84
|
+
capsules: request.capsules,
|
|
85
|
+
executionCache: HashedValuesCache.create(request.argsOfCalls),
|
|
86
|
+
noteCache,
|
|
87
|
+
taggingIndexCache,
|
|
88
|
+
contractStore: this.contractStore,
|
|
89
|
+
noteStore: this.noteStore,
|
|
90
|
+
keyStore: this.keyStore,
|
|
91
|
+
addressStore: this.addressStore,
|
|
92
|
+
aztecNode: this.aztecNode,
|
|
93
|
+
senderTaggingStore: this.senderTaggingStore,
|
|
94
|
+
recipientTaggingStore: this.recipientTaggingStore,
|
|
95
|
+
senderAddressBookStore: this.senderAddressBookStore,
|
|
96
|
+
capsuleStore: this.capsuleStore,
|
|
97
|
+
privateEventStore: this.privateEventStore,
|
|
98
|
+
contractSyncService: this.contractSyncService,
|
|
99
|
+
jobId,
|
|
100
|
+
totalPublicCalldataCount: 0,
|
|
101
|
+
sideEffectCounter: startSideEffectCounter,
|
|
102
|
+
scopes,
|
|
103
|
+
senderForTags,
|
|
104
|
+
simulator: this.simulator
|
|
105
|
+
});
|
|
90
106
|
const setupTime = simulatorSetupTimer.ms();
|
|
91
107
|
try {
|
|
92
108
|
// Note: any nested private function calls are made recursively within this
|
|
@@ -129,12 +145,27 @@ import { UtilityExecutionOracle } from './oracle/utility_execution_oracle.js';
|
|
|
129
145
|
* accounts if not specified.
|
|
130
146
|
* @returns A return value of the utility function in a form as returned by the simulator (Noir fields)
|
|
131
147
|
*/ async runUtility(call, authwits, anchorBlockHeader, scopes, jobId) {
|
|
132
|
-
await verifyCurrentClassId(call.to, this.aztecNode, this.contractStore, anchorBlockHeader);
|
|
133
148
|
const entryPointArtifact = await this.contractStore.getFunctionArtifactWithDebugMetadata(call.to, call.selector);
|
|
134
149
|
if (entryPointArtifact.functionType !== FunctionType.UTILITY) {
|
|
135
150
|
throw new Error(`Cannot run ${entryPointArtifact.functionType} function as utility`);
|
|
136
151
|
}
|
|
137
|
-
const oracle = new UtilityExecutionOracle(
|
|
152
|
+
const oracle = new UtilityExecutionOracle({
|
|
153
|
+
contractAddress: call.to,
|
|
154
|
+
authWitnesses: authwits,
|
|
155
|
+
capsules: [],
|
|
156
|
+
anchorBlockHeader,
|
|
157
|
+
contractStore: this.contractStore,
|
|
158
|
+
noteStore: this.noteStore,
|
|
159
|
+
keyStore: this.keyStore,
|
|
160
|
+
addressStore: this.addressStore,
|
|
161
|
+
aztecNode: this.aztecNode,
|
|
162
|
+
recipientTaggingStore: this.recipientTaggingStore,
|
|
163
|
+
senderAddressBookStore: this.senderAddressBookStore,
|
|
164
|
+
capsuleStore: this.capsuleStore,
|
|
165
|
+
privateEventStore: this.privateEventStore,
|
|
166
|
+
jobId,
|
|
167
|
+
scopes
|
|
168
|
+
});
|
|
138
169
|
try {
|
|
139
170
|
this.log.verbose(`Executing utility function ${entryPointArtifact.name}`, {
|
|
140
171
|
contract: call.to,
|
|
@@ -194,7 +225,7 @@ class OrderedSideEffect {
|
|
|
194
225
|
* @param minRevertibleSideEffectCounterOverride - Optional override for the min revertible side effect counter.
|
|
195
226
|
* Used by TXE to simulate account contract behavior (setting the counter before app execution).
|
|
196
227
|
* @returns The simulated proving result.
|
|
197
|
-
*/ export async function generateSimulatedProvingResult(privateExecutionResult,
|
|
228
|
+
*/ export async function generateSimulatedProvingResult(privateExecutionResult, debugFunctionNameGetter, minRevertibleSideEffectCounterOverride) {
|
|
198
229
|
const siloedNoteHashes = [];
|
|
199
230
|
const nullifiers = [];
|
|
200
231
|
const taggedPrivateLogs = [];
|
|
@@ -213,10 +244,10 @@ class OrderedSideEffect {
|
|
|
213
244
|
const noteHashesFromExecution = await Promise.all(execution.publicInputs.noteHashes.getActiveItems().filter((noteHash)=>!noteHash.isEmpty()).map(async (noteHash)=>new OrderedSideEffect(await siloNoteHash(contractAddress, noteHash.value), noteHash.counter)));
|
|
214
245
|
const nullifiersFromExecution = await Promise.all(execution.publicInputs.nullifiers.getActiveItems().map(async (nullifier)=>new OrderedSideEffect(await siloNullifier(contractAddress, nullifier.value), nullifier.counter)));
|
|
215
246
|
const privateLogsFromExecution = await Promise.all(execution.publicInputs.privateLogs.getActiveItems().map(async (metadata)=>{
|
|
216
|
-
metadata.log.fields[0] = await
|
|
247
|
+
metadata.log.fields[0] = await poseidon2HashWithSeparator([
|
|
217
248
|
contractAddress,
|
|
218
249
|
metadata.log.fields[0]
|
|
219
|
-
]);
|
|
250
|
+
], GeneratorIndex.PRIVATE_LOG_FIRST_FIELD);
|
|
220
251
|
return new OrderedSideEffect(metadata.log, metadata.counter);
|
|
221
252
|
}));
|
|
222
253
|
siloedNoteHashes.push(...noteHashesFromExecution);
|
|
@@ -230,7 +261,7 @@ class OrderedSideEffect {
|
|
|
230
261
|
}
|
|
231
262
|
publicTeardownCallRequest = execution.publicInputs.publicTeardownCallRequest.isEmpty() ? publicTeardownCallRequest : execution.publicInputs.publicTeardownCallRequest;
|
|
232
263
|
executionSteps.push({
|
|
233
|
-
functionName: await
|
|
264
|
+
functionName: await debugFunctionNameGetter(execution.publicInputs.callContext.contractAddress, execution.publicInputs.callContext.functionSelector),
|
|
234
265
|
timings: execution.profileResult?.timings ?? {
|
|
235
266
|
witgen: 0,
|
|
236
267
|
oracles: {}
|
|
@@ -4,7 +4,7 @@ import { EventSelector } from '@aztec/stdlib/abi';
|
|
|
4
4
|
import { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
5
5
|
import { TxHash } from '@aztec/stdlib/tx';
|
|
6
6
|
/**
|
|
7
|
-
* Intermediate struct used to perform batch event validation by PXE. The `
|
|
7
|
+
* Intermediate struct used to perform batch event validation by PXE. The `utilityValidateAndStoreEnqueuedNotesAndEvents` oracle
|
|
8
8
|
* expects for values of this type to be stored in a `CapsuleArray`.
|
|
9
9
|
*/
|
|
10
10
|
export declare class EventValidationRequest {
|
|
@@ -5,7 +5,7 @@ import { TxHash } from '@aztec/stdlib/tx';
|
|
|
5
5
|
// TODO(#14617): should we compute this from constants? This value is aztec-nr specific.
|
|
6
6
|
const MAX_EVENT_SERIALIZED_LEN = 12;
|
|
7
7
|
/**
|
|
8
|
-
* Intermediate struct used to perform batch event validation by PXE. The `
|
|
8
|
+
* Intermediate struct used to perform batch event validation by PXE. The `utilityValidateAndStoreEnqueuedNotesAndEvents` oracle
|
|
9
9
|
* expects for values of this type to be stored in a `CapsuleArray`.
|
|
10
10
|
*/ export class EventValidationRequest {
|
|
11
11
|
contractAddress;
|
|
@@ -4,7 +4,7 @@ import { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
|
4
4
|
import { TxHash } from '@aztec/stdlib/tx';
|
|
5
5
|
export declare const MAX_NOTE_PACKED_LEN = 10;
|
|
6
6
|
/**
|
|
7
|
-
* Intermediate struct used to perform batch note validation by PXE. The `
|
|
7
|
+
* Intermediate struct used to perform batch note validation by PXE. The `utilityValidateAndStoreEnqueuedNotesAndEvents` oracle
|
|
8
8
|
* expects for values of this type to be stored in a `CapsuleArray`.
|
|
9
9
|
*/
|
|
10
10
|
export declare class NoteValidationRequest {
|
|
@@ -4,7 +4,7 @@ import { TxHash } from '@aztec/stdlib/tx';
|
|
|
4
4
|
// TODO(#14617): should we compute this from constants? This value is aztec-nr specific.
|
|
5
5
|
export const MAX_NOTE_PACKED_LEN = 10;
|
|
6
6
|
/**
|
|
7
|
-
* Intermediate struct used to perform batch note validation by PXE. The `
|
|
7
|
+
* Intermediate struct used to perform batch note validation by PXE. The `utilityValidateAndStoreEnqueuedNotesAndEvents` oracle
|
|
8
8
|
* expects for values of this type to be stored in a `CapsuleArray`.
|
|
9
9
|
*/ export class NoteValidationRequest {
|
|
10
10
|
contractAddress;
|