@aztec/pxe 0.0.1-commit.d1f2d6c → 0.0.1-commit.d20b825a7
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 +5 -5
- package/dest/block_synchronizer/block_synchronizer.d.ts +10 -4
- package/dest/block_synchronizer/block_synchronizer.d.ts.map +1 -1
- package/dest/block_synchronizer/block_synchronizer.js +30 -6
- package/dest/config/index.d.ts +2 -2
- package/dest/config/index.d.ts.map +1 -1
- package/dest/config/index.js +8 -15
- package/dest/config/package_info.js +1 -1
- package/dest/contract_function_simulator/contract_function_simulator.d.ts +63 -31
- package/dest/contract_function_simulator/contract_function_simulator.d.ts.map +1 -1
- package/dest/contract_function_simulator/contract_function_simulator.js +206 -77
- package/dest/contract_function_simulator/ephemeral_array_service.d.ts +28 -0
- package/dest/contract_function_simulator/ephemeral_array_service.d.ts.map +1 -0
- package/dest/contract_function_simulator/ephemeral_array_service.js +78 -0
- package/dest/contract_function_simulator/execution_tagging_index_cache.d.ts +7 -7
- package/dest/contract_function_simulator/execution_tagging_index_cache.d.ts.map +1 -1
- package/dest/contract_function_simulator/execution_tagging_index_cache.js +19 -11
- package/dest/contract_function_simulator/index.d.ts +2 -1
- package/dest/contract_function_simulator/index.d.ts.map +1 -1
- package/dest/contract_function_simulator/index.js +1 -0
- package/dest/contract_function_simulator/noir-structs/event_validation_request.d.ts +5 -7
- package/dest/contract_function_simulator/noir-structs/event_validation_request.d.ts.map +1 -1
- package/dest/contract_function_simulator/noir-structs/event_validation_request.js +9 -11
- package/dest/contract_function_simulator/noir-structs/log_retrieval_request.d.ts +1 -1
- package/dest/contract_function_simulator/noir-structs/log_retrieval_request.js +1 -1
- package/dest/contract_function_simulator/noir-structs/log_retrieval_response.d.ts +2 -2
- package/dest/contract_function_simulator/noir-structs/log_retrieval_response.d.ts.map +1 -1
- package/dest/contract_function_simulator/noir-structs/log_retrieval_response.js +2 -4
- package/dest/contract_function_simulator/noir-structs/note_validation_request.d.ts +5 -8
- package/dest/contract_function_simulator/noir-structs/note_validation_request.d.ts.map +1 -1
- package/dest/contract_function_simulator/noir-structs/note_validation_request.js +7 -12
- package/dest/contract_function_simulator/oracle/interfaces.d.ts +62 -46
- package/dest/contract_function_simulator/oracle/interfaces.d.ts.map +1 -1
- package/dest/contract_function_simulator/oracle/legacy_oracle_mappings.d.ts +9 -0
- package/dest/contract_function_simulator/oracle/legacy_oracle_mappings.d.ts.map +1 -0
- package/dest/contract_function_simulator/oracle/legacy_oracle_mappings.js +47 -0
- package/dest/contract_function_simulator/oracle/oracle.d.ts +75 -44
- package/dest/contract_function_simulator/oracle/oracle.d.ts.map +1 -1
- package/dest/contract_function_simulator/oracle/oracle.js +310 -113
- package/dest/contract_function_simulator/oracle/private_execution.d.ts +3 -22
- package/dest/contract_function_simulator/oracle/private_execution.d.ts.map +1 -1
- package/dest/contract_function_simulator/oracle/private_execution.js +5 -49
- package/dest/contract_function_simulator/oracle/private_execution_oracle.d.ts +60 -84
- package/dest/contract_function_simulator/oracle/private_execution_oracle.d.ts.map +1 -1
- package/dest/contract_function_simulator/oracle/private_execution_oracle.js +125 -98
- package/dest/contract_function_simulator/oracle/utility_execution_oracle.d.ts +128 -70
- package/dest/contract_function_simulator/oracle/utility_execution_oracle.d.ts.map +1 -1
- package/dest/contract_function_simulator/oracle/utility_execution_oracle.js +330 -143
- package/dest/contract_function_simulator/pick_notes.d.ts +1 -1
- package/dest/contract_function_simulator/pick_notes.d.ts.map +1 -1
- package/dest/contract_function_simulator/pick_notes.js +20 -3
- package/dest/contract_function_simulator/proxied_contract_data_source.d.ts +1 -1
- package/dest/contract_function_simulator/proxied_contract_data_source.d.ts.map +1 -1
- package/dest/contract_function_simulator/proxied_contract_data_source.js +3 -0
- package/dest/contract_logging.d.ts +27 -0
- package/dest/contract_logging.d.ts.map +1 -0
- package/dest/contract_logging.js +38 -0
- package/dest/contract_sync/contract_sync_service.d.ts +44 -0
- package/dest/contract_sync/contract_sync_service.d.ts.map +1 -0
- package/dest/contract_sync/contract_sync_service.js +116 -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 +60 -0
- package/dest/debug/pxe_debug_utils.d.ts +24 -10
- package/dest/debug/pxe_debug_utils.d.ts.map +1 -1
- package/dest/debug/pxe_debug_utils.js +28 -18
- package/dest/entrypoints/client/bundle/index.d.ts +3 -1
- package/dest/entrypoints/client/bundle/index.d.ts.map +1 -1
- package/dest/entrypoints/client/bundle/index.js +2 -0
- package/dest/entrypoints/client/bundle/utils.d.ts +2 -2
- package/dest/entrypoints/client/bundle/utils.d.ts.map +1 -1
- package/dest/entrypoints/client/bundle/utils.js +23 -9
- package/dest/entrypoints/client/lazy/index.d.ts +3 -1
- package/dest/entrypoints/client/lazy/index.d.ts.map +1 -1
- package/dest/entrypoints/client/lazy/index.js +2 -0
- package/dest/entrypoints/client/lazy/utils.d.ts +3 -3
- package/dest/entrypoints/client/lazy/utils.d.ts.map +1 -1
- package/dest/entrypoints/client/lazy/utils.js +24 -10
- package/dest/entrypoints/pxe_creation_options.d.ts +5 -2
- package/dest/entrypoints/pxe_creation_options.d.ts.map +1 -1
- package/dest/entrypoints/pxe_creation_options.js +3 -1
- package/dest/entrypoints/server/index.d.ts +4 -2
- package/dest/entrypoints/server/index.d.ts.map +1 -1
- package/dest/entrypoints/server/index.js +3 -1
- package/dest/entrypoints/server/utils.d.ts +2 -2
- package/dest/entrypoints/server/utils.d.ts.map +1 -1
- package/dest/entrypoints/server/utils.js +30 -11
- 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 +31 -11
- package/dest/events/private_event_filter_validator.d.ts +3 -2
- package/dest/events/private_event_filter_validator.d.ts.map +1 -1
- package/dest/events/private_event_filter_validator.js +15 -0
- 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 +10 -9
- package/dest/logs/log_service.d.ts.map +1 -1
- package/dest/logs/log_service.js +41 -62
- package/dest/messages/message_context_service.d.ts +17 -0
- package/dest/messages/message_context_service.d.ts.map +1 -0
- package/dest/messages/message_context_service.js +36 -0
- package/dest/notes/note_service.d.ts +7 -8
- package/dest/notes/note_service.d.ts.map +1 -1
- package/dest/notes/note_service.js +23 -15
- package/dest/notes_filter.d.ts +24 -0
- package/dest/notes_filter.d.ts.map +1 -0
- package/dest/notes_filter.js +4 -0
- package/dest/oracle_version.d.ts +4 -3
- package/dest/oracle_version.d.ts.map +1 -1
- package/dest/oracle_version.js +20 -10
- package/dest/private_kernel/hints/compute_tx_expiration_timestamp.d.ts +4 -0
- package/dest/private_kernel/hints/compute_tx_expiration_timestamp.d.ts.map +1 -0
- package/dest/private_kernel/hints/{compute_tx_include_by_timestamp.js → compute_tx_expiration_timestamp.js} +12 -12
- package/dest/private_kernel/hints/index.d.ts +1 -1
- package/dest/private_kernel/hints/index.js +1 -1
- package/dest/private_kernel/hints/private_kernel_reset_private_inputs_builder.d.ts +4 -3
- package/dest/private_kernel/hints/private_kernel_reset_private_inputs_builder.d.ts.map +1 -1
- package/dest/private_kernel/hints/private_kernel_reset_private_inputs_builder.js +129 -68
- package/dest/private_kernel/hints/test_utils.d.ts +122 -0
- package/dest/private_kernel/hints/test_utils.d.ts.map +1 -0
- package/dest/private_kernel/hints/test_utils.js +203 -0
- package/dest/private_kernel/private_kernel_execution_prover.d.ts +3 -2
- package/dest/private_kernel/private_kernel_execution_prover.d.ts.map +1 -1
- package/dest/private_kernel/private_kernel_execution_prover.js +20 -15
- package/dest/private_kernel/private_kernel_oracle.d.ts +10 -6
- package/dest/private_kernel/private_kernel_oracle.d.ts.map +1 -1
- package/dest/private_kernel/private_kernel_oracle.js +19 -18
- package/dest/pxe.d.ts +85 -24
- package/dest/pxe.d.ts.map +1 -1
- package/dest/pxe.js +169 -87
- 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 +9 -2
- package/dest/storage/capsule_store/capsule_service.d.ts +21 -0
- package/dest/storage/capsule_store/capsule_service.d.ts.map +1 -0
- package/dest/storage/capsule_store/capsule_service.js +50 -0
- package/dest/storage/capsule_store/capsule_store.d.ts +9 -9
- package/dest/storage/capsule_store/capsule_store.d.ts.map +1 -1
- package/dest/storage/capsule_store/capsule_store.js +42 -36
- package/dest/storage/capsule_store/index.d.ts +2 -1
- package/dest/storage/capsule_store/index.d.ts.map +1 -1
- package/dest/storage/capsule_store/index.js +1 -0
- package/dest/storage/contract_store/contract_store.d.ts +42 -16
- package/dest/storage/contract_store/contract_store.d.ts.map +1 -1
- package/dest/storage/contract_store/contract_store.js +160 -85
- package/dest/storage/metadata.d.ts +1 -1
- package/dest/storage/metadata.js +1 -1
- package/dest/storage/note_store/note_store.d.ts +14 -4
- package/dest/storage/note_store/note_store.d.ts.map +1 -1
- package/dest/storage/note_store/note_store.js +149 -109
- package/dest/storage/private_event_store/private_event_store.d.ts +1 -1
- package/dest/storage/private_event_store/private_event_store.d.ts.map +1 -1
- package/dest/storage/private_event_store/private_event_store.js +87 -61
- package/dest/storage/private_event_store/stored_private_event.d.ts +4 -4
- package/dest/storage/private_event_store/stored_private_event.d.ts.map +1 -1
- package/dest/storage/private_event_store/stored_private_event.js +2 -2
- package/dest/storage/tagging_store/recipient_tagging_store.d.ts +6 -6
- package/dest/storage/tagging_store/recipient_tagging_store.d.ts.map +1 -1
- package/dest/storage/tagging_store/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 +29 -28
- package/dest/storage/tagging_store/sender_tagging_store.d.ts.map +1 -1
- package/dest/storage/tagging_store/sender_tagging_store.js +233 -137
- package/dest/tagging/get_all_logs_by_tags.d.ts +4 -4
- package/dest/tagging/get_all_logs_by_tags.d.ts.map +1 -1
- package/dest/tagging/get_all_logs_by_tags.js +17 -3
- package/dest/tagging/index.d.ts +3 -3
- package/dest/tagging/index.d.ts.map +1 -1
- package/dest/tagging/index.js +1 -1
- package/dest/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.d.ts +5 -6
- 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 +8 -22
- package/dest/tagging/recipient_sync/utils/find_highest_indexes.js +2 -2
- package/dest/tagging/recipient_sync/utils/load_logs_for_range.d.ts +7 -8
- package/dest/tagging/recipient_sync/utils/load_logs_for_range.d.ts.map +1 -1
- package/dest/tagging/recipient_sync/utils/load_logs_for_range.js +12 -11
- package/dest/tagging/sender_sync/sync_sender_tagging_indexes.d.ts +5 -9
- package/dest/tagging/sender_sync/sync_sender_tagging_indexes.d.ts.map +1 -1
- package/dest/tagging/sender_sync/sync_sender_tagging_indexes.js +13 -7
- package/dest/tagging/sender_sync/utils/get_status_change_of_pending.d.ts +4 -3
- 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 +20 -10
- package/dest/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.d.ts +6 -8
- 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 +36 -24
- package/package.json +25 -16
- package/src/bin/check_oracle_version.ts +5 -4
- package/src/block_synchronizer/block_synchronizer.ts +45 -21
- package/src/config/index.ts +3 -9
- package/src/config/package_info.ts +1 -1
- package/src/contract_function_simulator/contract_function_simulator.ts +366 -136
- package/src/contract_function_simulator/ephemeral_array_service.ts +110 -0
- package/src/contract_function_simulator/execution_tagging_index_cache.ts +19 -14
- package/src/contract_function_simulator/index.ts +1 -0
- package/src/contract_function_simulator/noir-structs/event_validation_request.ts +10 -10
- package/src/contract_function_simulator/noir-structs/log_retrieval_request.ts +1 -1
- package/src/contract_function_simulator/noir-structs/log_retrieval_response.ts +2 -5
- package/src/contract_function_simulator/noir-structs/note_validation_request.ts +5 -11
- package/src/contract_function_simulator/oracle/interfaces.ts +90 -62
- package/src/contract_function_simulator/oracle/legacy_oracle_mappings.ts +104 -0
- package/src/contract_function_simulator/oracle/oracle.ts +391 -150
- package/src/contract_function_simulator/oracle/private_execution.ts +5 -83
- package/src/contract_function_simulator/oracle/private_execution_oracle.ts +160 -193
- package/src/contract_function_simulator/oracle/utility_execution_oracle.ts +552 -179
- package/src/contract_function_simulator/pick_notes.ts +22 -3
- package/src/contract_function_simulator/proxied_contract_data_source.ts +8 -1
- package/src/contract_logging.ts +52 -0
- package/src/contract_sync/contract_sync_service.ts +176 -0
- package/src/contract_sync/helpers.ts +98 -0
- package/src/debug/pxe_debug_utils.ts +63 -19
- package/src/entrypoints/client/bundle/index.ts +2 -0
- package/src/entrypoints/client/bundle/utils.ts +18 -18
- package/src/entrypoints/client/lazy/index.ts +2 -0
- package/src/entrypoints/client/lazy/utils.ts +19 -18
- package/src/entrypoints/pxe_creation_options.ts +9 -1
- package/src/entrypoints/server/index.ts +3 -1
- package/src/entrypoints/server/utils.ts +24 -29
- package/src/events/event_service.ts +35 -12
- package/src/events/private_event_filter_validator.ts +21 -1
- package/src/job_coordinator/job_coordinator.ts +4 -3
- package/src/logs/log_service.ts +77 -106
- package/src/messages/message_context_service.ts +44 -0
- package/src/notes/note_service.ts +25 -17
- package/src/notes_filter.ts +24 -0
- package/src/oracle_version.ts +20 -10
- package/src/private_kernel/hints/{compute_tx_include_by_timestamp.ts → compute_tx_expiration_timestamp.ts} +13 -13
- package/src/private_kernel/hints/index.ts +1 -1
- package/src/private_kernel/hints/private_kernel_reset_private_inputs_builder.ts +164 -117
- package/src/private_kernel/hints/test_utils.ts +325 -0
- package/src/private_kernel/private_kernel_execution_prover.ts +24 -19
- package/src/private_kernel/private_kernel_oracle.ts +21 -21
- package/src/pxe.ts +318 -144
- package/src/storage/address_store/address_store.ts +15 -15
- package/src/storage/anchor_block_store/anchor_block_store.ts +9 -1
- package/src/storage/capsule_store/capsule_service.ts +90 -0
- package/src/storage/capsule_store/capsule_store.ts +52 -34
- package/src/storage/capsule_store/index.ts +1 -0
- package/src/storage/contract_store/contract_store.ts +193 -101
- package/src/storage/metadata.ts +1 -1
- package/src/storage/note_store/note_store.ts +168 -134
- package/src/storage/private_event_store/private_event_store.ts +106 -81
- package/src/storage/private_event_store/stored_private_event.ts +3 -3
- package/src/storage/tagging_store/recipient_tagging_store.ts +38 -24
- package/src/storage/tagging_store/sender_address_book_store.ts +20 -14
- package/src/storage/tagging_store/sender_tagging_store.ts +287 -156
- package/src/tagging/get_all_logs_by_tags.ts +31 -7
- package/src/tagging/index.ts +2 -2
- package/src/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.ts +14 -27
- package/src/tagging/recipient_sync/utils/find_highest_indexes.ts +2 -2
- package/src/tagging/recipient_sync/utils/load_logs_for_range.ts +12 -17
- package/src/tagging/sender_sync/sync_sender_tagging_indexes.ts +25 -12
- package/src/tagging/sender_sync/utils/get_status_change_of_pending.ts +26 -11
- package/src/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.ts +30 -29
- package/dest/private_kernel/hints/compute_tx_include_by_timestamp.d.ts +0 -4
- package/dest/private_kernel/hints/compute_tx_include_by_timestamp.d.ts.map +0 -1
|
@@ -2,7 +2,6 @@ import { MAX_FR_CALLDATA_TO_ALL_ENQUEUED_CALLS, PRIVATE_CONTEXT_INPUTS_LENGTH }
|
|
|
2
2
|
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
3
3
|
import { createLogger } from '@aztec/foundation/log';
|
|
4
4
|
import { Timer } from '@aztec/foundation/timer';
|
|
5
|
-
import type { KeyStore } from '@aztec/key-store';
|
|
6
5
|
import { type CircuitSimulator, toACVMWitness } from '@aztec/simulator/client';
|
|
7
6
|
import {
|
|
8
7
|
type FunctionAbi,
|
|
@@ -12,19 +11,14 @@ import {
|
|
|
12
11
|
type NoteSelector,
|
|
13
12
|
countArgumentsSize,
|
|
14
13
|
} from '@aztec/stdlib/abi';
|
|
15
|
-
import type { AuthWitness } from '@aztec/stdlib/auth-witness';
|
|
16
14
|
import { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
17
|
-
import { L2BlockHash } from '@aztec/stdlib/block';
|
|
18
15
|
import { siloNullifier } from '@aztec/stdlib/hash';
|
|
19
|
-
import type { AztecNode } from '@aztec/stdlib/interfaces/client';
|
|
20
16
|
import { PrivateContextInputs } from '@aztec/stdlib/kernel';
|
|
21
|
-
import { type ContractClassLog,
|
|
17
|
+
import { type ContractClassLog, ExtendedDirectionalAppTaggingSecret, type TaggingIndexRange } from '@aztec/stdlib/logs';
|
|
22
18
|
import { Tag } from '@aztec/stdlib/logs';
|
|
23
19
|
import { Note, type NoteStatus } from '@aztec/stdlib/note';
|
|
24
20
|
import {
|
|
25
|
-
type BlockHeader,
|
|
26
21
|
CallContext,
|
|
27
|
-
Capsule,
|
|
28
22
|
CountedContractClassLog,
|
|
29
23
|
NoteAndSlot,
|
|
30
24
|
PrivateCallExecutionResult,
|
|
@@ -32,14 +26,6 @@ import {
|
|
|
32
26
|
} from '@aztec/stdlib/tx';
|
|
33
27
|
|
|
34
28
|
import { NoteService } from '../../notes/note_service.js';
|
|
35
|
-
import type { AddressStore } from '../../storage/address_store/address_store.js';
|
|
36
|
-
import type { AnchorBlockStore } from '../../storage/anchor_block_store/anchor_block_store.js';
|
|
37
|
-
import type { CapsuleStore } from '../../storage/capsule_store/capsule_store.js';
|
|
38
|
-
import type { ContractStore } from '../../storage/contract_store/contract_store.js';
|
|
39
|
-
import type { NoteStore } from '../../storage/note_store/note_store.js';
|
|
40
|
-
import type { PrivateEventStore } from '../../storage/private_event_store/private_event_store.js';
|
|
41
|
-
import type { RecipientTaggingStore } from '../../storage/tagging_store/recipient_tagging_store.js';
|
|
42
|
-
import type { SenderAddressBookStore } from '../../storage/tagging_store/sender_address_book_store.js';
|
|
43
29
|
import type { SenderTaggingStore } from '../../storage/tagging_store/sender_tagging_store.js';
|
|
44
30
|
import { syncSenderTaggingIndexes } from '../../tagging/index.js';
|
|
45
31
|
import type { ExecutionNoteCache } from '../execution_note_cache.js';
|
|
@@ -47,8 +33,25 @@ import { ExecutionTaggingIndexCache } from '../execution_tagging_index_cache.js'
|
|
|
47
33
|
import type { HashedValuesCache } from '../hashed_values_cache.js';
|
|
48
34
|
import { pickNotes } from '../pick_notes.js';
|
|
49
35
|
import type { IPrivateExecutionOracle, NoteData } from './interfaces.js';
|
|
50
|
-
import {
|
|
51
|
-
import { UtilityExecutionOracle } from './utility_execution_oracle.js';
|
|
36
|
+
import { executePrivateFunction } from './private_execution.js';
|
|
37
|
+
import { UtilityExecutionOracle, type UtilityExecutionOracleArgs } from './utility_execution_oracle.js';
|
|
38
|
+
|
|
39
|
+
/** Args for PrivateExecutionOracle constructor. */
|
|
40
|
+
export type PrivateExecutionOracleArgs = Omit<UtilityExecutionOracleArgs, 'contractAddress'> & {
|
|
41
|
+
argsHash: Fr;
|
|
42
|
+
txContext: TxContext;
|
|
43
|
+
callContext: CallContext;
|
|
44
|
+
/** Needed to trigger contract synchronization before nested calls */
|
|
45
|
+
utilityExecutor: (call: FunctionCall, scopes: AztecAddress[]) => Promise<void>;
|
|
46
|
+
executionCache: HashedValuesCache;
|
|
47
|
+
noteCache: ExecutionNoteCache;
|
|
48
|
+
taggingIndexCache: ExecutionTaggingIndexCache;
|
|
49
|
+
senderTaggingStore: SenderTaggingStore;
|
|
50
|
+
totalPublicCalldataCount?: number;
|
|
51
|
+
sideEffectCounter?: number;
|
|
52
|
+
senderForTags?: AztecAddress;
|
|
53
|
+
simulator?: CircuitSimulator;
|
|
54
|
+
};
|
|
52
55
|
|
|
53
56
|
/**
|
|
54
57
|
* The execution oracle for the private part of a transaction.
|
|
@@ -67,65 +70,51 @@ export class PrivateExecutionOracle extends UtilityExecutionOracle implements IP
|
|
|
67
70
|
private newNotes: NoteAndSlot[] = [];
|
|
68
71
|
private noteHashNullifierCounterMap: Map<number, number> = new Map();
|
|
69
72
|
private contractClassLogs: CountedContractClassLog[] = [];
|
|
70
|
-
private offchainEffects: { data: Fr[] }[] = [];
|
|
71
73
|
private nestedExecutionResults: PrivateCallExecutionResult[] = [];
|
|
72
74
|
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
callContext.contractAddress,
|
|
108
|
-
authWitnesses,
|
|
109
|
-
capsules,
|
|
110
|
-
anchorBlockHeader,
|
|
111
|
-
contractStore,
|
|
112
|
-
noteStore,
|
|
113
|
-
keyStore,
|
|
114
|
-
addressStore,
|
|
115
|
-
aztecNode,
|
|
116
|
-
anchorBlockStore,
|
|
117
|
-
recipientTaggingStore,
|
|
118
|
-
senderAddressBookStore,
|
|
119
|
-
capsuleStore,
|
|
120
|
-
privateEventStore,
|
|
121
|
-
jobId,
|
|
122
|
-
log,
|
|
123
|
-
scopes,
|
|
124
|
-
);
|
|
75
|
+
private readonly argsHash: Fr;
|
|
76
|
+
private readonly txContext: TxContext;
|
|
77
|
+
private readonly callContext: CallContext;
|
|
78
|
+
private readonly utilityExecutor: (call: FunctionCall, scopes: AztecAddress[]) => Promise<void>;
|
|
79
|
+
private readonly executionCache: HashedValuesCache;
|
|
80
|
+
private readonly noteCache: ExecutionNoteCache;
|
|
81
|
+
private readonly taggingIndexCache: ExecutionTaggingIndexCache;
|
|
82
|
+
private readonly senderTaggingStore: SenderTaggingStore;
|
|
83
|
+
private totalPublicCalldataCount: number;
|
|
84
|
+
private readonly initialSideEffectCounter: number;
|
|
85
|
+
/** Sender for tags passed in at oracle construction time. Returned by `getSenderForTags` unless overridden. */
|
|
86
|
+
private readonly defaultSenderForTags: AztecAddress | undefined;
|
|
87
|
+
/** Per-call sender-for-tags override, set by `setSenderForTags`. Takes precedence over `defaultSenderForTags`. */
|
|
88
|
+
private currentSenderForTags: AztecAddress | undefined;
|
|
89
|
+
private readonly simulator?: CircuitSimulator;
|
|
90
|
+
|
|
91
|
+
constructor(args: PrivateExecutionOracleArgs) {
|
|
92
|
+
super({
|
|
93
|
+
...args,
|
|
94
|
+
contractAddress: args.callContext.contractAddress,
|
|
95
|
+
log: args.log ?? createLogger('simulator:client_execution_context'),
|
|
96
|
+
});
|
|
97
|
+
this.argsHash = args.argsHash;
|
|
98
|
+
this.txContext = args.txContext;
|
|
99
|
+
this.callContext = args.callContext;
|
|
100
|
+
this.utilityExecutor = args.utilityExecutor;
|
|
101
|
+
this.executionCache = args.executionCache;
|
|
102
|
+
this.noteCache = args.noteCache;
|
|
103
|
+
this.taggingIndexCache = args.taggingIndexCache;
|
|
104
|
+
this.senderTaggingStore = args.senderTaggingStore;
|
|
105
|
+
this.totalPublicCalldataCount = args.totalPublicCalldataCount ?? 0;
|
|
106
|
+
this.initialSideEffectCounter = args.sideEffectCounter ?? 0;
|
|
107
|
+
this.defaultSenderForTags = args.senderForTags;
|
|
108
|
+
this.simulator = args.simulator;
|
|
125
109
|
}
|
|
126
110
|
|
|
127
111
|
public getPrivateContextInputs(): PrivateContextInputs {
|
|
128
|
-
return new PrivateContextInputs(
|
|
112
|
+
return new PrivateContextInputs(
|
|
113
|
+
this.callContext,
|
|
114
|
+
this.anchorBlockHeader,
|
|
115
|
+
this.txContext,
|
|
116
|
+
this.initialSideEffectCounter,
|
|
117
|
+
);
|
|
129
118
|
}
|
|
130
119
|
|
|
131
120
|
// We still need this function until we can get user-defined ordering of structs for fn arguments
|
|
@@ -172,17 +161,10 @@ export class PrivateExecutionOracle extends UtilityExecutionOracle implements IP
|
|
|
172
161
|
}
|
|
173
162
|
|
|
174
163
|
/**
|
|
175
|
-
*
|
|
164
|
+
* Returns the tagging index ranges that were used in this execution (and that need to be stored in the db).
|
|
176
165
|
*/
|
|
177
|
-
public
|
|
178
|
-
return this.
|
|
179
|
-
}
|
|
180
|
-
|
|
181
|
-
/**
|
|
182
|
-
* Returns the pre-tags that were used in this execution (and that need to be stored in the db).
|
|
183
|
-
*/
|
|
184
|
-
public getUsedPreTags(): PreTag[] {
|
|
185
|
-
return this.taggingIndexCache.getUsedPreTags();
|
|
166
|
+
public getUsedTaggingIndexRanges(): TaggingIndexRange[] {
|
|
167
|
+
return this.taggingIndexCache.getUsedTaggingIndexRanges();
|
|
186
168
|
}
|
|
187
169
|
|
|
188
170
|
/**
|
|
@@ -199,11 +181,10 @@ export class PrivateExecutionOracle extends UtilityExecutionOracle implements IP
|
|
|
199
181
|
* for a tag in order to emit a log. Constrained tagging should not use this as there is no
|
|
200
182
|
* guarantee that the recipient knows about the sender, and hence about the shared secret.
|
|
201
183
|
*
|
|
202
|
-
*
|
|
203
|
-
* 'senderForTags' value (unless it is replaced).
|
|
184
|
+
* Returns `currentSenderForTags` if set (via `setSenderForTags`), otherwise `defaultSenderForTags`.
|
|
204
185
|
*/
|
|
205
|
-
public
|
|
206
|
-
return Promise.resolve(this.
|
|
186
|
+
public getSenderForTags(): Promise<AztecAddress | undefined> {
|
|
187
|
+
return Promise.resolve(this.currentSenderForTags ?? this.defaultSenderForTags);
|
|
207
188
|
}
|
|
208
189
|
|
|
209
190
|
/**
|
|
@@ -213,12 +194,14 @@ export class PrivateExecutionOracle extends UtilityExecutionOracle implements IP
|
|
|
213
194
|
* for a tag in order to emit a log. Constrained tagging should not use this as there is no
|
|
214
195
|
* guarantee that the recipient knows about the sender, and hence about the shared secret.
|
|
215
196
|
*
|
|
216
|
-
*
|
|
217
|
-
*
|
|
218
|
-
* value (unless it is replaced by another call to this setter).
|
|
197
|
+
* Overrides `defaultSenderForTags` for the remainder of this call. Each oracle instance is
|
|
198
|
+
* independent, so this has no effect on any other call in the execution.
|
|
219
199
|
*/
|
|
220
|
-
public
|
|
221
|
-
this.
|
|
200
|
+
public setSenderForTags(senderForTags: AztecAddress): Promise<void> {
|
|
201
|
+
this.logger.debug(
|
|
202
|
+
`Sender for tags switched to ${senderForTags} by contract ${this.contractAddress} (default was ${this.defaultSenderForTags})`,
|
|
203
|
+
);
|
|
204
|
+
this.currentSenderForTags = senderForTags;
|
|
222
205
|
return Promise.resolve();
|
|
223
206
|
}
|
|
224
207
|
|
|
@@ -228,26 +211,40 @@ export class PrivateExecutionOracle extends UtilityExecutionOracle implements IP
|
|
|
228
211
|
* @param recipient - The address receiving the log
|
|
229
212
|
* @returns An app tag to be used in a log.
|
|
230
213
|
*/
|
|
231
|
-
public async
|
|
232
|
-
const
|
|
214
|
+
public async getNextAppTagAsSender(sender: AztecAddress, recipient: AztecAddress): Promise<Tag> {
|
|
215
|
+
const extendedSecret = await this.#calculateExtendedDirectionalAppTaggingSecret(
|
|
216
|
+
this.contractAddress,
|
|
217
|
+
sender,
|
|
218
|
+
recipient,
|
|
219
|
+
);
|
|
220
|
+
|
|
221
|
+
if (!extendedSecret) {
|
|
222
|
+
// We'd only fail to compute an extended secret if the recipient is an invalid address. To prevent
|
|
223
|
+
// king-of-the-hill attacks, instead of failing we use a random tag. By including a correct-looking tag in the
|
|
224
|
+
// log, the transaction shape is preserved and no privacy is leaked, even if the tag is bogus.
|
|
225
|
+
this.logger.warn(`Computing a tag for invalid recipient ${recipient} - returning a random tag instead`, {
|
|
226
|
+
contractAddress: this.contractAddress,
|
|
227
|
+
});
|
|
228
|
+
return Tag.random();
|
|
229
|
+
}
|
|
233
230
|
|
|
234
|
-
const index = await this.#getIndexToUseForSecret(
|
|
235
|
-
this.
|
|
231
|
+
const index = await this.#getIndexToUseForSecret(extendedSecret);
|
|
232
|
+
this.logger.debug(
|
|
236
233
|
`Incrementing tagging index for sender: ${sender}, recipient: ${recipient}, contract: ${this.contractAddress} to ${index}`,
|
|
237
234
|
);
|
|
238
|
-
this.taggingIndexCache.setLastUsedIndex(
|
|
235
|
+
this.taggingIndexCache.setLastUsedIndex(extendedSecret, index);
|
|
239
236
|
|
|
240
|
-
return Tag.compute({
|
|
237
|
+
return Tag.compute({ extendedSecret, index });
|
|
241
238
|
}
|
|
242
239
|
|
|
243
|
-
async #
|
|
240
|
+
async #calculateExtendedDirectionalAppTaggingSecret(
|
|
244
241
|
contractAddress: AztecAddress,
|
|
245
242
|
sender: AztecAddress,
|
|
246
243
|
recipient: AztecAddress,
|
|
247
244
|
) {
|
|
248
|
-
const senderCompleteAddress = await this.
|
|
245
|
+
const senderCompleteAddress = await this.getCompleteAddressOrFail(sender);
|
|
249
246
|
const senderIvsk = await this.keyStore.getMasterIncomingViewingSecretKey(sender);
|
|
250
|
-
return
|
|
247
|
+
return ExtendedDirectionalAppTaggingSecret.compute(
|
|
251
248
|
senderCompleteAddress,
|
|
252
249
|
senderIvsk,
|
|
253
250
|
recipient,
|
|
@@ -256,7 +253,7 @@ export class PrivateExecutionOracle extends UtilityExecutionOracle implements IP
|
|
|
256
253
|
);
|
|
257
254
|
}
|
|
258
255
|
|
|
259
|
-
async #getIndexToUseForSecret(secret:
|
|
256
|
+
async #getIndexToUseForSecret(secret: ExtendedDirectionalAppTaggingSecret): Promise<number> {
|
|
260
257
|
// If we have the tagging index in the cache, we use it. If not we obtain it from the execution data provider.
|
|
261
258
|
const lastUsedIndexInTx = this.taggingIndexCache.getLastUsedIndex(secret);
|
|
262
259
|
|
|
@@ -266,13 +263,11 @@ export class PrivateExecutionOracle extends UtilityExecutionOracle implements IP
|
|
|
266
263
|
// This is a tagging secret we've not yet used in this tx, so first sync our store to make sure its indices
|
|
267
264
|
// are up to date. We do this here because this store is not synced as part of the global sync because
|
|
268
265
|
// that'd be wasteful as most tagging secrets are not used in each tx.
|
|
269
|
-
const anchorBlockHash = L2BlockHash.fromField(await this.anchorBlockHeader.hash());
|
|
270
266
|
await syncSenderTaggingIndexes(
|
|
271
267
|
secret,
|
|
272
|
-
this.contractAddress,
|
|
273
268
|
this.aztecNode,
|
|
274
269
|
this.senderTaggingStore,
|
|
275
|
-
|
|
270
|
+
await this.anchorBlockHeader.hash(),
|
|
276
271
|
this.jobId,
|
|
277
272
|
);
|
|
278
273
|
|
|
@@ -288,7 +283,7 @@ export class PrivateExecutionOracle extends UtilityExecutionOracle implements IP
|
|
|
288
283
|
* @param values - Values to store.
|
|
289
284
|
* @returns The hash of the values.
|
|
290
285
|
*/
|
|
291
|
-
public
|
|
286
|
+
public setHashPreimage(values: Fr[], hash: Fr) {
|
|
292
287
|
return this.executionCache.store(values, hash);
|
|
293
288
|
}
|
|
294
289
|
|
|
@@ -297,7 +292,7 @@ export class PrivateExecutionOracle extends UtilityExecutionOracle implements IP
|
|
|
297
292
|
* @param hash - Hash of the values.
|
|
298
293
|
* @returns The values.
|
|
299
294
|
*/
|
|
300
|
-
public
|
|
295
|
+
public getHashPreimage(hash: Fr): Promise<Fr[]> {
|
|
301
296
|
const preimage = this.executionCache.getPreimage(hash);
|
|
302
297
|
if (!preimage) {
|
|
303
298
|
throw new Error(`Preimage for hash ${hash.toString()} not found in cache`);
|
|
@@ -305,12 +300,12 @@ export class PrivateExecutionOracle extends UtilityExecutionOracle implements IP
|
|
|
305
300
|
return Promise.resolve(preimage);
|
|
306
301
|
}
|
|
307
302
|
|
|
308
|
-
override async
|
|
303
|
+
override async doesNullifierExist(innerNullifier: Fr): Promise<boolean> {
|
|
309
304
|
// This oracle must be overridden because while utility execution can only meaningfully check if a nullifier exists
|
|
310
305
|
// in the synched block, during private execution there's also the possibility of it being pending, i.e. created
|
|
311
306
|
// in the current transaction.
|
|
312
307
|
|
|
313
|
-
this.
|
|
308
|
+
this.logger.debug(`Checking existence of inner nullifier ${innerNullifier}`, {
|
|
314
309
|
contractAddress: this.contractAddress,
|
|
315
310
|
});
|
|
316
311
|
|
|
@@ -318,7 +313,7 @@ export class PrivateExecutionOracle extends UtilityExecutionOracle implements IP
|
|
|
318
313
|
|
|
319
314
|
return (
|
|
320
315
|
this.noteCache.getNullifiers(this.contractAddress).has(nullifier) ||
|
|
321
|
-
(await super.
|
|
316
|
+
(await super.doesNullifierExist(innerNullifier))
|
|
322
317
|
);
|
|
323
318
|
}
|
|
324
319
|
|
|
@@ -343,7 +338,7 @@ export class PrivateExecutionOracle extends UtilityExecutionOracle implements IP
|
|
|
343
338
|
* @param status - The status of notes to fetch.
|
|
344
339
|
* @returns Array of note data.
|
|
345
340
|
*/
|
|
346
|
-
public override async
|
|
341
|
+
public override async getNotes(
|
|
347
342
|
owner: AztecAddress | undefined,
|
|
348
343
|
storageSlot: Fr,
|
|
349
344
|
numSelects: number,
|
|
@@ -365,7 +360,7 @@ export class PrivateExecutionOracle extends UtilityExecutionOracle implements IP
|
|
|
365
360
|
|
|
366
361
|
const pendingNullifiers = this.noteCache.getNullifiers(this.callContext.contractAddress);
|
|
367
362
|
|
|
368
|
-
const noteService = new NoteService(this.noteStore, this.aztecNode, this.
|
|
363
|
+
const noteService = new NoteService(this.noteStore, this.aztecNode, this.anchorBlockHeader, this.jobId);
|
|
369
364
|
const dbNotes = await noteService.getNotes(
|
|
370
365
|
this.callContext.contractAddress,
|
|
371
366
|
owner,
|
|
@@ -389,7 +384,7 @@ export class PrivateExecutionOracle extends UtilityExecutionOracle implements IP
|
|
|
389
384
|
offset,
|
|
390
385
|
});
|
|
391
386
|
|
|
392
|
-
this.
|
|
387
|
+
this.logger.debug(
|
|
393
388
|
`Returning ${notes.length} notes for ${this.callContext.contractAddress} at ${storageSlot}: ${notes
|
|
394
389
|
.map(n => `${n.noteNonce.toString()}:[${n.note.items.map(i => i.toString()).join(',')}]`)
|
|
395
390
|
.join(', ')}`,
|
|
@@ -409,7 +404,7 @@ export class PrivateExecutionOracle extends UtilityExecutionOracle implements IP
|
|
|
409
404
|
* @param noteHash - A hash of the new note.
|
|
410
405
|
* @returns
|
|
411
406
|
*/
|
|
412
|
-
public
|
|
407
|
+
public notifyCreatedNote(
|
|
413
408
|
owner: AztecAddress,
|
|
414
409
|
storageSlot: Fr,
|
|
415
410
|
randomness: Fr,
|
|
@@ -418,7 +413,7 @@ export class PrivateExecutionOracle extends UtilityExecutionOracle implements IP
|
|
|
418
413
|
noteHash: Fr,
|
|
419
414
|
counter: number,
|
|
420
415
|
) {
|
|
421
|
-
this.
|
|
416
|
+
this.logger.debug(`Notified of new note with inner hash ${noteHash}`, {
|
|
422
417
|
contractAddress: this.callContext.contractAddress,
|
|
423
418
|
storageSlot,
|
|
424
419
|
randomness,
|
|
@@ -450,7 +445,7 @@ export class PrivateExecutionOracle extends UtilityExecutionOracle implements IP
|
|
|
450
445
|
* @param innerNullifier - The pending nullifier to add in the list (not yet siloed by contract address).
|
|
451
446
|
* @param noteHash - A hash of the new note.
|
|
452
447
|
*/
|
|
453
|
-
public async
|
|
448
|
+
public async notifyNullifiedNote(innerNullifier: Fr, noteHash: Fr, counter: number) {
|
|
454
449
|
const nullifiedNoteHashCounter = await this.noteCache.nullifyNote(
|
|
455
450
|
this.callContext.contractAddress,
|
|
456
451
|
innerNullifier,
|
|
@@ -467,19 +462,19 @@ export class PrivateExecutionOracle extends UtilityExecutionOracle implements IP
|
|
|
467
462
|
* @param innerNullifier - The pending nullifier to add in the list (not yet siloed by contract address).
|
|
468
463
|
* @param noteHash - A hash of the new note.
|
|
469
464
|
*/
|
|
470
|
-
public
|
|
471
|
-
this.
|
|
465
|
+
public notifyCreatedNullifier(innerNullifier: Fr) {
|
|
466
|
+
this.logger.debug(`Notified of new inner nullifier ${innerNullifier}`, { contractAddress: this.contractAddress });
|
|
472
467
|
return this.noteCache.nullifierCreated(this.callContext.contractAddress, innerNullifier);
|
|
473
468
|
}
|
|
474
469
|
|
|
475
470
|
/**
|
|
476
|
-
* Check if a nullifier has been emitted in the same transaction, i.e. if
|
|
471
|
+
* Check if a nullifier has been emitted in the same transaction, i.e. if notifyCreatedNullifier has been
|
|
477
472
|
* called for this inner nullifier from the contract with the specified address.
|
|
478
473
|
* @param innerNullifier - The inner nullifier to check.
|
|
479
474
|
* @param contractAddress - Address of the contract that emitted the nullifier.
|
|
480
475
|
* @returns A boolean indicating whether the nullifier is pending or not.
|
|
481
476
|
*/
|
|
482
|
-
public async
|
|
477
|
+
public async isNullifierPending(innerNullifier: Fr, contractAddress: AztecAddress): Promise<boolean> {
|
|
483
478
|
const siloedNullifier = await siloNullifier(contractAddress, innerNullifier);
|
|
484
479
|
const isNullifierPending = this.noteCache.getNullifiers(contractAddress).has(siloedNullifier.toBigInt());
|
|
485
480
|
return Promise.resolve(isNullifierPending);
|
|
@@ -492,10 +487,10 @@ export class PrivateExecutionOracle extends UtilityExecutionOracle implements IP
|
|
|
492
487
|
* @param log - The contract class log to be emitted.
|
|
493
488
|
* @param counter - The contract class log's counter.
|
|
494
489
|
*/
|
|
495
|
-
public
|
|
490
|
+
public notifyCreatedContractClassLog(log: ContractClassLog, counter: number) {
|
|
496
491
|
this.contractClassLogs.push(new CountedContractClassLog(log, counter));
|
|
497
492
|
const text = log.toBuffer().toString('hex');
|
|
498
|
-
this.
|
|
493
|
+
this.logger.verbose(
|
|
499
494
|
`Emitted log from ContractClassRegistry: "${text.length > 100 ? text.slice(0, 100) + '...' : text}"`,
|
|
500
495
|
);
|
|
501
496
|
}
|
|
@@ -521,7 +516,7 @@ export class PrivateExecutionOracle extends UtilityExecutionOracle implements IP
|
|
|
521
516
|
* @param isStaticCall - Whether the call is a static call.
|
|
522
517
|
* @returns The execution result.
|
|
523
518
|
*/
|
|
524
|
-
async
|
|
519
|
+
async callPrivateFunction(
|
|
525
520
|
targetContractAddress: AztecAddress,
|
|
526
521
|
functionSelector: FunctionSelector,
|
|
527
522
|
argsHash: Fr,
|
|
@@ -535,19 +530,19 @@ export class PrivateExecutionOracle extends UtilityExecutionOracle implements IP
|
|
|
535
530
|
}
|
|
536
531
|
|
|
537
532
|
const simulatorSetupTimer = new Timer();
|
|
538
|
-
this.
|
|
533
|
+
this.logger.debug(
|
|
539
534
|
`Calling private function ${targetContractAddress}:${functionSelector} from ${this.callContext.contractAddress}`,
|
|
540
535
|
);
|
|
541
536
|
|
|
542
537
|
isStaticCall = isStaticCall || this.callContext.isStaticCall;
|
|
543
538
|
|
|
544
|
-
await ensureContractSynced(
|
|
539
|
+
await this.contractSyncService.ensureContractSynced(
|
|
545
540
|
targetContractAddress,
|
|
546
541
|
functionSelector,
|
|
547
542
|
this.utilityExecutor,
|
|
548
|
-
this.aztecNode,
|
|
549
|
-
this.contractStore,
|
|
550
543
|
this.anchorBlockHeader,
|
|
544
|
+
this.jobId,
|
|
545
|
+
this.scopes,
|
|
551
546
|
);
|
|
552
547
|
|
|
553
548
|
const targetArtifact = await this.contractStore.getFunctionArtifactWithDebugMetadata(
|
|
@@ -559,47 +554,52 @@ export class PrivateExecutionOracle extends UtilityExecutionOracle implements IP
|
|
|
559
554
|
|
|
560
555
|
const derivedCallContext = await this.deriveCallContext(targetContractAddress, targetArtifact, isStaticCall);
|
|
561
556
|
|
|
562
|
-
const privateExecutionOracle = new PrivateExecutionOracle(
|
|
557
|
+
const privateExecutionOracle = new PrivateExecutionOracle({
|
|
563
558
|
argsHash,
|
|
564
|
-
derivedTxContext,
|
|
565
|
-
derivedCallContext,
|
|
566
|
-
this.anchorBlockHeader,
|
|
567
|
-
this.utilityExecutor,
|
|
568
|
-
this.authWitnesses,
|
|
569
|
-
this.capsules,
|
|
570
|
-
this.executionCache,
|
|
571
|
-
this.noteCache,
|
|
572
|
-
this.taggingIndexCache,
|
|
573
|
-
this.contractStore,
|
|
574
|
-
this.noteStore,
|
|
575
|
-
this.keyStore,
|
|
576
|
-
this.addressStore,
|
|
577
|
-
this.aztecNode,
|
|
578
|
-
this.
|
|
579
|
-
this.
|
|
580
|
-
this.
|
|
581
|
-
this.
|
|
582
|
-
this.
|
|
583
|
-
this.
|
|
584
|
-
this.
|
|
585
|
-
this.
|
|
559
|
+
txContext: derivedTxContext,
|
|
560
|
+
callContext: derivedCallContext,
|
|
561
|
+
anchorBlockHeader: this.anchorBlockHeader,
|
|
562
|
+
utilityExecutor: this.utilityExecutor,
|
|
563
|
+
authWitnesses: this.authWitnesses,
|
|
564
|
+
capsules: this.capsules,
|
|
565
|
+
executionCache: this.executionCache,
|
|
566
|
+
noteCache: this.noteCache,
|
|
567
|
+
taggingIndexCache: this.taggingIndexCache,
|
|
568
|
+
contractStore: this.contractStore,
|
|
569
|
+
noteStore: this.noteStore,
|
|
570
|
+
keyStore: this.keyStore,
|
|
571
|
+
addressStore: this.addressStore,
|
|
572
|
+
aztecNode: this.aztecNode,
|
|
573
|
+
senderTaggingStore: this.senderTaggingStore,
|
|
574
|
+
recipientTaggingStore: this.recipientTaggingStore,
|
|
575
|
+
senderAddressBookStore: this.senderAddressBookStore,
|
|
576
|
+
capsuleService: this.capsuleService,
|
|
577
|
+
privateEventStore: this.privateEventStore,
|
|
578
|
+
messageContextService: this.messageContextService,
|
|
579
|
+
contractSyncService: this.contractSyncService,
|
|
580
|
+
jobId: this.jobId,
|
|
581
|
+
totalPublicCalldataCount: this.totalPublicCalldataCount,
|
|
586
582
|
sideEffectCounter,
|
|
587
|
-
this.
|
|
588
|
-
this.scopes,
|
|
589
|
-
this.
|
|
590
|
-
this.simulator
|
|
591
|
-
|
|
583
|
+
log: this.logger,
|
|
584
|
+
scopes: this.scopes,
|
|
585
|
+
senderForTags: this.defaultSenderForTags,
|
|
586
|
+
simulator: this.simulator!,
|
|
587
|
+
l2TipsStore: this.l2TipsStore,
|
|
588
|
+
});
|
|
592
589
|
|
|
593
590
|
const setupTime = simulatorSetupTimer.ms();
|
|
594
591
|
|
|
595
592
|
const childExecutionResult = await executePrivateFunction(
|
|
596
|
-
this.simulator
|
|
593
|
+
this.simulator!,
|
|
597
594
|
privateExecutionOracle,
|
|
598
595
|
targetArtifact,
|
|
599
596
|
targetContractAddress,
|
|
600
597
|
functionSelector,
|
|
601
598
|
);
|
|
602
599
|
|
|
600
|
+
// Propagate the nested call's calldata count so the parent sees its increments on subsequent enqueues.
|
|
601
|
+
this.totalPublicCalldataCount = privateExecutionOracle.getTotalPublicCalldataCount();
|
|
602
|
+
|
|
603
603
|
if (isStaticCall) {
|
|
604
604
|
this.#checkValidStaticCall(childExecutionResult);
|
|
605
605
|
}
|
|
@@ -619,7 +619,8 @@ export class PrivateExecutionOracle extends UtilityExecutionOracle implements IP
|
|
|
619
619
|
};
|
|
620
620
|
}
|
|
621
621
|
|
|
622
|
-
|
|
622
|
+
/** Validates the calldata preimage exists in the cache and checks cumulative calldata size is within limits. */
|
|
623
|
+
public assertValidPublicCalldata(calldataHash: Fr) {
|
|
623
624
|
const calldata = this.executionCache.getPreimage(calldataHash);
|
|
624
625
|
if (!calldata) {
|
|
625
626
|
throw new Error('Calldata for public call not found in cache');
|
|
@@ -629,47 +630,18 @@ export class PrivateExecutionOracle extends UtilityExecutionOracle implements IP
|
|
|
629
630
|
if (this.totalPublicCalldataCount > MAX_FR_CALLDATA_TO_ALL_ENQUEUED_CALLS) {
|
|
630
631
|
throw new Error(`Too many total args to all enqueued public calls! (> ${MAX_FR_CALLDATA_TO_ALL_ENQUEUED_CALLS})`);
|
|
631
632
|
}
|
|
632
|
-
}
|
|
633
|
-
|
|
634
|
-
/**
|
|
635
|
-
* Verify relevant information when a public function is enqueued.
|
|
636
|
-
* @param targetContractAddress - The address of the contract to call.
|
|
637
|
-
* @param calldataHash - The hash of the function selector and arguments.
|
|
638
|
-
* @param sideEffectCounter - The side effect counter at the start of the call.
|
|
639
|
-
* @param isStaticCall - Whether the call is a static call.
|
|
640
|
-
*/
|
|
641
|
-
public privateNotifyEnqueuedPublicFunctionCall(
|
|
642
|
-
_targetContractAddress: AztecAddress,
|
|
643
|
-
calldataHash: Fr,
|
|
644
|
-
_sideEffectCounter: number,
|
|
645
|
-
_isStaticCall: boolean,
|
|
646
|
-
) {
|
|
647
|
-
this.#onNewPublicFunctionCall(calldataHash);
|
|
648
633
|
return Promise.resolve();
|
|
649
634
|
}
|
|
650
635
|
|
|
651
|
-
|
|
652
|
-
|
|
653
|
-
* @param targetContractAddress - The address of the contract to call.
|
|
654
|
-
* @param argsHash - The arguments hash to pass to the function.
|
|
655
|
-
* @param sideEffectCounter - The side effect counter at the start of the call.
|
|
656
|
-
* @param isStaticCall - Whether the call is a static call.
|
|
657
|
-
*/
|
|
658
|
-
public privateNotifySetPublicTeardownFunctionCall(
|
|
659
|
-
_targetContractAddress: AztecAddress,
|
|
660
|
-
calldataHash: Fr,
|
|
661
|
-
_sideEffectCounter: number,
|
|
662
|
-
_isStaticCall: boolean,
|
|
663
|
-
) {
|
|
664
|
-
this.#onNewPublicFunctionCall(calldataHash);
|
|
665
|
-
return Promise.resolve();
|
|
636
|
+
public getTotalPublicCalldataCount(): number {
|
|
637
|
+
return this.totalPublicCalldataCount;
|
|
666
638
|
}
|
|
667
639
|
|
|
668
|
-
public
|
|
640
|
+
public notifyRevertiblePhaseStart(minRevertibleSideEffectCounter: number): Promise<void> {
|
|
669
641
|
return this.noteCache.setMinRevertibleSideEffectCounter(minRevertibleSideEffectCounter);
|
|
670
642
|
}
|
|
671
643
|
|
|
672
|
-
public
|
|
644
|
+
public isExecutionInRevertiblePhase(sideEffectCounter: number): Promise<boolean> {
|
|
673
645
|
return Promise.resolve(this.noteCache.isSideEffectCounterRevertible(sideEffectCounter));
|
|
674
646
|
}
|
|
675
647
|
|
|
@@ -696,9 +668,4 @@ export class PrivateExecutionOracle extends UtilityExecutionOracle implements IP
|
|
|
696
668
|
public getDebugFunctionName() {
|
|
697
669
|
return this.contractStore.getDebugFunctionName(this.contractAddress, this.callContext.functionSelector);
|
|
698
670
|
}
|
|
699
|
-
|
|
700
|
-
public utilityEmitOffchainEffect(data: Fr[]): Promise<void> {
|
|
701
|
-
this.offchainEffects.push({ data });
|
|
702
|
-
return Promise.resolve();
|
|
703
|
-
}
|
|
704
671
|
}
|