@aztec/pxe 0.0.1-commit.592b9384 → 0.0.1-commit.59a0419c6
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 +4 -4
- package/dest/block_synchronizer/block_synchronizer.d.ts +9 -3
- package/dest/block_synchronizer/block_synchronizer.d.ts.map +1 -1
- package/dest/block_synchronizer/block_synchronizer.js +26 -2
- 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 -29
- package/dest/contract_function_simulator/contract_function_simulator.d.ts.map +1 -1
- package/dest/contract_function_simulator/contract_function_simulator.js +206 -75
- 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 +4 -6
- 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 +8 -10
- 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 +4 -7
- 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 +6 -11
- package/dest/contract_function_simulator/oracle/interfaces.d.ts +61 -45
- 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 +300 -103
- package/dest/contract_function_simulator/oracle/private_execution.js +5 -3
- package/dest/contract_function_simulator/oracle/private_execution_oracle.d.ts +60 -83
- package/dest/contract_function_simulator/oracle/private_execution_oracle.d.ts.map +1 -1
- package/dest/contract_function_simulator/oracle/private_execution_oracle.js +123 -95
- package/dest/contract_function_simulator/oracle/utility_execution_oracle.d.ts +120 -66
- package/dest/contract_function_simulator/oracle/utility_execution_oracle.d.ts.map +1 -1
- package/dest/contract_function_simulator/oracle/utility_execution_oracle.js +317 -134
- 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/{index.js → helpers.js} +19 -13
- package/dest/debug/pxe_debug_utils.d.ts +14 -10
- package/dest/debug/pxe_debug_utils.d.ts.map +1 -1
- package/dest/debug/pxe_debug_utils.js +16 -15
- package/dest/entrypoints/client/bundle/index.d.ts +3 -1
- package/dest/entrypoints/client/bundle/index.d.ts.map +1 -1
- package/dest/entrypoints/client/bundle/index.js +2 -0
- package/dest/entrypoints/client/bundle/utils.d.ts +2 -2
- package/dest/entrypoints/client/bundle/utils.d.ts.map +1 -1
- package/dest/entrypoints/client/bundle/utils.js +11 -3
- 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 +2 -2
- package/dest/entrypoints/client/lazy/utils.d.ts.map +1 -1
- package/dest/entrypoints/client/lazy/utils.js +11 -3
- package/dest/entrypoints/pxe_creation_options.d.ts +3 -1
- 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 -3
- package/dest/entrypoints/server/index.d.ts.map +1 -1
- package/dest/entrypoints/server/index.js +3 -2
- 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 +11 -3
- package/dest/events/event_service.d.ts +3 -2
- package/dest/events/event_service.d.ts.map +1 -1
- package/dest/events/event_service.js +26 -5
- 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/logs/log_service.d.ts +7 -7
- package/dest/logs/log_service.d.ts.map +1 -1
- package/dest/logs/log_service.js +34 -51
- 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 +4 -4
- package/dest/notes/note_service.d.ts.map +1 -1
- package/dest/notes/note_service.js +17 -7
- 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 +1 -1
- package/dest/private_kernel/private_kernel_execution_prover.d.ts.map +1 -1
- package/dest/private_kernel/private_kernel_execution_prover.js +18 -13
- 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 +165 -84
- package/dest/storage/anchor_block_store/anchor_block_store.js +1 -1
- 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 +36 -28
- 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 -15
- package/dest/storage/contract_store/contract_store.d.ts.map +1 -1
- package/dest/storage/contract_store/contract_store.js +148 -70
- package/dest/storage/metadata.d.ts +1 -1
- package/dest/storage/metadata.js +1 -1
- package/dest/storage/note_store/note_store.d.ts +3 -3
- package/dest/storage/note_store/note_store.d.ts.map +1 -1
- package/dest/storage/note_store/note_store.js +6 -4
- 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 +3 -0
- package/dest/storage/private_event_store/stored_private_event.js +1 -1
- package/dest/storage/tagging_store/recipient_tagging_store.d.ts +6 -6
- package/dest/storage/tagging_store/recipient_tagging_store.d.ts.map +1 -1
- package/dest/storage/tagging_store/sender_tagging_store.d.ts +29 -28
- package/dest/storage/tagging_store/sender_tagging_store.d.ts.map +1 -1
- package/dest/storage/tagging_store/sender_tagging_store.js +141 -115
- package/dest/tagging/get_all_logs_by_tags.d.ts +1 -1
- package/dest/tagging/get_all_logs_by_tags.d.ts.map +1 -1
- package/dest/tagging/get_all_logs_by_tags.js +17 -3
- package/dest/tagging/index.d.ts +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 +4 -5
- package/dest/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.d.ts.map +1 -1
- package/dest/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.js +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 +6 -7
- package/dest/tagging/recipient_sync/utils/load_logs_for_range.d.ts.map +1 -1
- package/dest/tagging/recipient_sync/utils/load_logs_for_range.js +12 -11
- package/dest/tagging/sender_sync/sync_sender_tagging_indexes.d.ts +4 -8
- package/dest/tagging/sender_sync/sync_sender_tagging_indexes.d.ts.map +1 -1
- package/dest/tagging/sender_sync/sync_sender_tagging_indexes.js +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 +5 -7
- package/dest/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.d.ts.map +1 -1
- package/dest/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.js +36 -24
- package/package.json +25 -16
- package/src/bin/check_oracle_version.ts +4 -4
- package/src/block_synchronizer/block_synchronizer.ts +28 -2
- 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 +9 -9
- 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 +4 -10
- package/src/contract_function_simulator/oracle/interfaces.ts +82 -54
- package/src/contract_function_simulator/oracle/legacy_oracle_mappings.ts +104 -0
- package/src/contract_function_simulator/oracle/oracle.ts +373 -142
- package/src/contract_function_simulator/oracle/private_execution.ts +4 -4
- package/src/contract_function_simulator/oracle/private_execution_oracle.ts +157 -185
- package/src/contract_function_simulator/oracle/utility_execution_oracle.ts +532 -165
- 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/{index.ts → helpers.ts} +22 -22
- package/src/debug/pxe_debug_utils.ts +48 -18
- package/src/entrypoints/client/bundle/index.ts +2 -0
- package/src/entrypoints/client/bundle/utils.ts +11 -4
- package/src/entrypoints/client/lazy/index.ts +2 -0
- package/src/entrypoints/client/lazy/utils.ts +11 -4
- package/src/entrypoints/pxe_creation_options.ts +7 -0
- package/src/entrypoints/server/index.ts +3 -2
- package/src/entrypoints/server/utils.ts +9 -10
- package/src/events/event_service.ts +30 -5
- package/src/events/private_event_filter_validator.ts +21 -1
- package/src/logs/log_service.ts +64 -92
- package/src/messages/message_context_service.ts +44 -0
- package/src/notes/note_service.ts +19 -8
- 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 +18 -16
- package/src/private_kernel/private_kernel_oracle.ts +21 -21
- package/src/pxe.ts +305 -138
- package/src/storage/anchor_block_store/anchor_block_store.ts +1 -1
- package/src/storage/capsule_store/capsule_service.ts +90 -0
- package/src/storage/capsule_store/capsule_store.ts +44 -26
- package/src/storage/capsule_store/index.ts +1 -0
- package/src/storage/contract_store/contract_store.ts +181 -80
- package/src/storage/metadata.ts +1 -1
- package/src/storage/note_store/note_store.ts +9 -5
- package/src/storage/private_event_store/private_event_store.ts +4 -0
- package/src/storage/private_event_store/stored_private_event.ts +1 -1
- package/src/storage/tagging_store/recipient_tagging_store.ts +9 -5
- package/src/storage/tagging_store/sender_tagging_store.ts +185 -138
- package/src/tagging/get_all_logs_by_tags.ts +28 -4
- package/src/tagging/index.ts +2 -2
- package/src/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.ts +12 -25
- package/src/tagging/recipient_sync/utils/find_highest_indexes.ts +2 -2
- package/src/tagging/recipient_sync/utils/load_logs_for_range.ts +10 -15
- package/src/tagging/sender_sync/sync_sender_tagging_indexes.ts +23 -10
- 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 +27 -26
- package/dest/contract_sync/index.d.ts +0 -23
- package/dest/contract_sync/index.d.ts.map +0 -1
- package/dest/private_kernel/hints/compute_tx_include_by_timestamp.d.ts +0 -4
- package/dest/private_kernel/hints/compute_tx_include_by_timestamp.d.ts.map +0 -1
|
@@ -76,12 +76,12 @@ export async function executePrivateFunction(
|
|
|
76
76
|
|
|
77
77
|
const contractClassLogs = privateExecutionOracle.getContractClassLogs();
|
|
78
78
|
|
|
79
|
-
const rawReturnValues = await privateExecutionOracle.
|
|
79
|
+
const rawReturnValues = await privateExecutionOracle.getHashPreimage(publicInputs.returnsHash);
|
|
80
80
|
|
|
81
81
|
const newNotes = privateExecutionOracle.getNewNotes();
|
|
82
82
|
const noteHashNullifierCounterMap = privateExecutionOracle.getNoteHashNullifierCounterMap();
|
|
83
83
|
const offchainEffects = privateExecutionOracle.getOffchainEffects();
|
|
84
|
-
const
|
|
84
|
+
const taggingIndexRanges = privateExecutionOracle.getUsedTaggingIndexRanges();
|
|
85
85
|
const nestedExecutionResults = privateExecutionOracle.getNestedExecutionResults();
|
|
86
86
|
|
|
87
87
|
let timerSubtractionList = nestedExecutionResults;
|
|
@@ -103,8 +103,8 @@ export async function executePrivateFunction(
|
|
|
103
103
|
newNotes,
|
|
104
104
|
noteHashNullifierCounterMap,
|
|
105
105
|
rawReturnValues,
|
|
106
|
-
offchainEffects,
|
|
107
|
-
|
|
106
|
+
offchainEffects.map(e => ({ data: e.data })),
|
|
107
|
+
taggingIndexRanges,
|
|
108
108
|
nestedExecutionResults,
|
|
109
109
|
contractClassLogs,
|
|
110
110
|
{
|
|
@@ -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,33 +11,21 @@ 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
15
|
import { siloNullifier } from '@aztec/stdlib/hash';
|
|
18
|
-
import type { AztecNode } from '@aztec/stdlib/interfaces/client';
|
|
19
16
|
import { PrivateContextInputs } from '@aztec/stdlib/kernel';
|
|
20
|
-
import { type ContractClassLog,
|
|
17
|
+
import { type ContractClassLog, ExtendedDirectionalAppTaggingSecret, type TaggingIndexRange } from '@aztec/stdlib/logs';
|
|
21
18
|
import { Tag } from '@aztec/stdlib/logs';
|
|
22
19
|
import { Note, type NoteStatus } from '@aztec/stdlib/note';
|
|
23
20
|
import {
|
|
24
|
-
type BlockHeader,
|
|
25
21
|
CallContext,
|
|
26
|
-
Capsule,
|
|
27
22
|
CountedContractClassLog,
|
|
28
23
|
NoteAndSlot,
|
|
29
24
|
PrivateCallExecutionResult,
|
|
30
25
|
type TxContext,
|
|
31
26
|
} from '@aztec/stdlib/tx';
|
|
32
27
|
|
|
33
|
-
import { ensureContractSynced } from '../../contract_sync/index.js';
|
|
34
28
|
import { NoteService } from '../../notes/note_service.js';
|
|
35
|
-
import type { AddressStore } from '../../storage/address_store/address_store.js';
|
|
36
|
-
import type { CapsuleStore } from '../../storage/capsule_store/capsule_store.js';
|
|
37
|
-
import type { ContractStore } from '../../storage/contract_store/contract_store.js';
|
|
38
|
-
import type { NoteStore } from '../../storage/note_store/note_store.js';
|
|
39
|
-
import type { PrivateEventStore } from '../../storage/private_event_store/private_event_store.js';
|
|
40
|
-
import type { RecipientTaggingStore } from '../../storage/tagging_store/recipient_tagging_store.js';
|
|
41
|
-
import type { SenderAddressBookStore } from '../../storage/tagging_store/sender_address_book_store.js';
|
|
42
29
|
import type { SenderTaggingStore } from '../../storage/tagging_store/sender_tagging_store.js';
|
|
43
30
|
import { syncSenderTaggingIndexes } from '../../tagging/index.js';
|
|
44
31
|
import type { ExecutionNoteCache } from '../execution_note_cache.js';
|
|
@@ -47,7 +34,24 @@ import type { HashedValuesCache } from '../hashed_values_cache.js';
|
|
|
47
34
|
import { pickNotes } from '../pick_notes.js';
|
|
48
35
|
import type { IPrivateExecutionOracle, NoteData } from './interfaces.js';
|
|
49
36
|
import { executePrivateFunction } from './private_execution.js';
|
|
50
|
-
import { UtilityExecutionOracle } from './utility_execution_oracle.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
|
+
};
|
|
51
55
|
|
|
52
56
|
/**
|
|
53
57
|
* The execution oracle for the private part of a transaction.
|
|
@@ -66,63 +70,51 @@ export class PrivateExecutionOracle extends UtilityExecutionOracle implements IP
|
|
|
66
70
|
private newNotes: NoteAndSlot[] = [];
|
|
67
71
|
private noteHashNullifierCounterMap: Map<number, number> = new Map();
|
|
68
72
|
private contractClassLogs: CountedContractClassLog[] = [];
|
|
69
|
-
private offchainEffects: { data: Fr[] }[] = [];
|
|
70
73
|
private nestedExecutionResults: PrivateCallExecutionResult[] = [];
|
|
71
74
|
|
|
72
|
-
|
|
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
|
-
authWitnesses,
|
|
107
|
-
capsules,
|
|
108
|
-
anchorBlockHeader,
|
|
109
|
-
contractStore,
|
|
110
|
-
noteStore,
|
|
111
|
-
keyStore,
|
|
112
|
-
addressStore,
|
|
113
|
-
aztecNode,
|
|
114
|
-
recipientTaggingStore,
|
|
115
|
-
senderAddressBookStore,
|
|
116
|
-
capsuleStore,
|
|
117
|
-
privateEventStore,
|
|
118
|
-
jobId,
|
|
119
|
-
log,
|
|
120
|
-
scopes,
|
|
121
|
-
);
|
|
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;
|
|
122
109
|
}
|
|
123
110
|
|
|
124
111
|
public getPrivateContextInputs(): PrivateContextInputs {
|
|
125
|
-
return new PrivateContextInputs(
|
|
112
|
+
return new PrivateContextInputs(
|
|
113
|
+
this.callContext,
|
|
114
|
+
this.anchorBlockHeader,
|
|
115
|
+
this.txContext,
|
|
116
|
+
this.initialSideEffectCounter,
|
|
117
|
+
);
|
|
126
118
|
}
|
|
127
119
|
|
|
128
120
|
// We still need this function until we can get user-defined ordering of structs for fn arguments
|
|
@@ -169,17 +161,10 @@ export class PrivateExecutionOracle extends UtilityExecutionOracle implements IP
|
|
|
169
161
|
}
|
|
170
162
|
|
|
171
163
|
/**
|
|
172
|
-
*
|
|
164
|
+
* Returns the tagging index ranges that were used in this execution (and that need to be stored in the db).
|
|
173
165
|
*/
|
|
174
|
-
public
|
|
175
|
-
return this.
|
|
176
|
-
}
|
|
177
|
-
|
|
178
|
-
/**
|
|
179
|
-
* Returns the pre-tags that were used in this execution (and that need to be stored in the db).
|
|
180
|
-
*/
|
|
181
|
-
public getUsedPreTags(): PreTag[] {
|
|
182
|
-
return this.taggingIndexCache.getUsedPreTags();
|
|
166
|
+
public getUsedTaggingIndexRanges(): TaggingIndexRange[] {
|
|
167
|
+
return this.taggingIndexCache.getUsedTaggingIndexRanges();
|
|
183
168
|
}
|
|
184
169
|
|
|
185
170
|
/**
|
|
@@ -196,11 +181,10 @@ export class PrivateExecutionOracle extends UtilityExecutionOracle implements IP
|
|
|
196
181
|
* for a tag in order to emit a log. Constrained tagging should not use this as there is no
|
|
197
182
|
* guarantee that the recipient knows about the sender, and hence about the shared secret.
|
|
198
183
|
*
|
|
199
|
-
*
|
|
200
|
-
* 'senderForTags' value (unless it is replaced).
|
|
184
|
+
* Returns `currentSenderForTags` if set (via `setSenderForTags`), otherwise `defaultSenderForTags`.
|
|
201
185
|
*/
|
|
202
|
-
public
|
|
203
|
-
return Promise.resolve(this.
|
|
186
|
+
public getSenderForTags(): Promise<AztecAddress | undefined> {
|
|
187
|
+
return Promise.resolve(this.currentSenderForTags ?? this.defaultSenderForTags);
|
|
204
188
|
}
|
|
205
189
|
|
|
206
190
|
/**
|
|
@@ -210,12 +194,14 @@ export class PrivateExecutionOracle extends UtilityExecutionOracle implements IP
|
|
|
210
194
|
* for a tag in order to emit a log. Constrained tagging should not use this as there is no
|
|
211
195
|
* guarantee that the recipient knows about the sender, and hence about the shared secret.
|
|
212
196
|
*
|
|
213
|
-
*
|
|
214
|
-
*
|
|
215
|
-
* 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.
|
|
216
199
|
*/
|
|
217
|
-
public
|
|
218
|
-
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;
|
|
219
205
|
return Promise.resolve();
|
|
220
206
|
}
|
|
221
207
|
|
|
@@ -225,26 +211,40 @@ export class PrivateExecutionOracle extends UtilityExecutionOracle implements IP
|
|
|
225
211
|
* @param recipient - The address receiving the log
|
|
226
212
|
* @returns An app tag to be used in a log.
|
|
227
213
|
*/
|
|
228
|
-
public async
|
|
229
|
-
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
|
+
}
|
|
230
230
|
|
|
231
|
-
const index = await this.#getIndexToUseForSecret(
|
|
232
|
-
this.
|
|
231
|
+
const index = await this.#getIndexToUseForSecret(extendedSecret);
|
|
232
|
+
this.logger.debug(
|
|
233
233
|
`Incrementing tagging index for sender: ${sender}, recipient: ${recipient}, contract: ${this.contractAddress} to ${index}`,
|
|
234
234
|
);
|
|
235
|
-
this.taggingIndexCache.setLastUsedIndex(
|
|
235
|
+
this.taggingIndexCache.setLastUsedIndex(extendedSecret, index);
|
|
236
236
|
|
|
237
|
-
return Tag.compute({
|
|
237
|
+
return Tag.compute({ extendedSecret, index });
|
|
238
238
|
}
|
|
239
239
|
|
|
240
|
-
async #
|
|
240
|
+
async #calculateExtendedDirectionalAppTaggingSecret(
|
|
241
241
|
contractAddress: AztecAddress,
|
|
242
242
|
sender: AztecAddress,
|
|
243
243
|
recipient: AztecAddress,
|
|
244
244
|
) {
|
|
245
|
-
const senderCompleteAddress = await this.
|
|
245
|
+
const senderCompleteAddress = await this.getCompleteAddressOrFail(sender);
|
|
246
246
|
const senderIvsk = await this.keyStore.getMasterIncomingViewingSecretKey(sender);
|
|
247
|
-
return
|
|
247
|
+
return ExtendedDirectionalAppTaggingSecret.compute(
|
|
248
248
|
senderCompleteAddress,
|
|
249
249
|
senderIvsk,
|
|
250
250
|
recipient,
|
|
@@ -253,7 +253,7 @@ export class PrivateExecutionOracle extends UtilityExecutionOracle implements IP
|
|
|
253
253
|
);
|
|
254
254
|
}
|
|
255
255
|
|
|
256
|
-
async #getIndexToUseForSecret(secret:
|
|
256
|
+
async #getIndexToUseForSecret(secret: ExtendedDirectionalAppTaggingSecret): Promise<number> {
|
|
257
257
|
// If we have the tagging index in the cache, we use it. If not we obtain it from the execution data provider.
|
|
258
258
|
const lastUsedIndexInTx = this.taggingIndexCache.getLastUsedIndex(secret);
|
|
259
259
|
|
|
@@ -265,7 +265,6 @@ export class PrivateExecutionOracle extends UtilityExecutionOracle implements IP
|
|
|
265
265
|
// that'd be wasteful as most tagging secrets are not used in each tx.
|
|
266
266
|
await syncSenderTaggingIndexes(
|
|
267
267
|
secret,
|
|
268
|
-
this.contractAddress,
|
|
269
268
|
this.aztecNode,
|
|
270
269
|
this.senderTaggingStore,
|
|
271
270
|
await this.anchorBlockHeader.hash(),
|
|
@@ -284,7 +283,7 @@ export class PrivateExecutionOracle extends UtilityExecutionOracle implements IP
|
|
|
284
283
|
* @param values - Values to store.
|
|
285
284
|
* @returns The hash of the values.
|
|
286
285
|
*/
|
|
287
|
-
public
|
|
286
|
+
public setHashPreimage(values: Fr[], hash: Fr) {
|
|
288
287
|
return this.executionCache.store(values, hash);
|
|
289
288
|
}
|
|
290
289
|
|
|
@@ -293,7 +292,7 @@ export class PrivateExecutionOracle extends UtilityExecutionOracle implements IP
|
|
|
293
292
|
* @param hash - Hash of the values.
|
|
294
293
|
* @returns The values.
|
|
295
294
|
*/
|
|
296
|
-
public
|
|
295
|
+
public getHashPreimage(hash: Fr): Promise<Fr[]> {
|
|
297
296
|
const preimage = this.executionCache.getPreimage(hash);
|
|
298
297
|
if (!preimage) {
|
|
299
298
|
throw new Error(`Preimage for hash ${hash.toString()} not found in cache`);
|
|
@@ -301,12 +300,12 @@ export class PrivateExecutionOracle extends UtilityExecutionOracle implements IP
|
|
|
301
300
|
return Promise.resolve(preimage);
|
|
302
301
|
}
|
|
303
302
|
|
|
304
|
-
override async
|
|
303
|
+
override async doesNullifierExist(innerNullifier: Fr): Promise<boolean> {
|
|
305
304
|
// This oracle must be overridden because while utility execution can only meaningfully check if a nullifier exists
|
|
306
305
|
// in the synched block, during private execution there's also the possibility of it being pending, i.e. created
|
|
307
306
|
// in the current transaction.
|
|
308
307
|
|
|
309
|
-
this.
|
|
308
|
+
this.logger.debug(`Checking existence of inner nullifier ${innerNullifier}`, {
|
|
310
309
|
contractAddress: this.contractAddress,
|
|
311
310
|
});
|
|
312
311
|
|
|
@@ -314,7 +313,7 @@ export class PrivateExecutionOracle extends UtilityExecutionOracle implements IP
|
|
|
314
313
|
|
|
315
314
|
return (
|
|
316
315
|
this.noteCache.getNullifiers(this.contractAddress).has(nullifier) ||
|
|
317
|
-
(await super.
|
|
316
|
+
(await super.doesNullifierExist(innerNullifier))
|
|
318
317
|
);
|
|
319
318
|
}
|
|
320
319
|
|
|
@@ -339,7 +338,7 @@ export class PrivateExecutionOracle extends UtilityExecutionOracle implements IP
|
|
|
339
338
|
* @param status - The status of notes to fetch.
|
|
340
339
|
* @returns Array of note data.
|
|
341
340
|
*/
|
|
342
|
-
public override async
|
|
341
|
+
public override async getNotes(
|
|
343
342
|
owner: AztecAddress | undefined,
|
|
344
343
|
storageSlot: Fr,
|
|
345
344
|
numSelects: number,
|
|
@@ -385,7 +384,7 @@ export class PrivateExecutionOracle extends UtilityExecutionOracle implements IP
|
|
|
385
384
|
offset,
|
|
386
385
|
});
|
|
387
386
|
|
|
388
|
-
this.
|
|
387
|
+
this.logger.debug(
|
|
389
388
|
`Returning ${notes.length} notes for ${this.callContext.contractAddress} at ${storageSlot}: ${notes
|
|
390
389
|
.map(n => `${n.noteNonce.toString()}:[${n.note.items.map(i => i.toString()).join(',')}]`)
|
|
391
390
|
.join(', ')}`,
|
|
@@ -405,7 +404,7 @@ export class PrivateExecutionOracle extends UtilityExecutionOracle implements IP
|
|
|
405
404
|
* @param noteHash - A hash of the new note.
|
|
406
405
|
* @returns
|
|
407
406
|
*/
|
|
408
|
-
public
|
|
407
|
+
public notifyCreatedNote(
|
|
409
408
|
owner: AztecAddress,
|
|
410
409
|
storageSlot: Fr,
|
|
411
410
|
randomness: Fr,
|
|
@@ -414,7 +413,7 @@ export class PrivateExecutionOracle extends UtilityExecutionOracle implements IP
|
|
|
414
413
|
noteHash: Fr,
|
|
415
414
|
counter: number,
|
|
416
415
|
) {
|
|
417
|
-
this.
|
|
416
|
+
this.logger.debug(`Notified of new note with inner hash ${noteHash}`, {
|
|
418
417
|
contractAddress: this.callContext.contractAddress,
|
|
419
418
|
storageSlot,
|
|
420
419
|
randomness,
|
|
@@ -446,7 +445,7 @@ export class PrivateExecutionOracle extends UtilityExecutionOracle implements IP
|
|
|
446
445
|
* @param innerNullifier - The pending nullifier to add in the list (not yet siloed by contract address).
|
|
447
446
|
* @param noteHash - A hash of the new note.
|
|
448
447
|
*/
|
|
449
|
-
public async
|
|
448
|
+
public async notifyNullifiedNote(innerNullifier: Fr, noteHash: Fr, counter: number) {
|
|
450
449
|
const nullifiedNoteHashCounter = await this.noteCache.nullifyNote(
|
|
451
450
|
this.callContext.contractAddress,
|
|
452
451
|
innerNullifier,
|
|
@@ -463,19 +462,19 @@ export class PrivateExecutionOracle extends UtilityExecutionOracle implements IP
|
|
|
463
462
|
* @param innerNullifier - The pending nullifier to add in the list (not yet siloed by contract address).
|
|
464
463
|
* @param noteHash - A hash of the new note.
|
|
465
464
|
*/
|
|
466
|
-
public
|
|
467
|
-
this.
|
|
465
|
+
public notifyCreatedNullifier(innerNullifier: Fr) {
|
|
466
|
+
this.logger.debug(`Notified of new inner nullifier ${innerNullifier}`, { contractAddress: this.contractAddress });
|
|
468
467
|
return this.noteCache.nullifierCreated(this.callContext.contractAddress, innerNullifier);
|
|
469
468
|
}
|
|
470
469
|
|
|
471
470
|
/**
|
|
472
|
-
* 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
|
|
473
472
|
* called for this inner nullifier from the contract with the specified address.
|
|
474
473
|
* @param innerNullifier - The inner nullifier to check.
|
|
475
474
|
* @param contractAddress - Address of the contract that emitted the nullifier.
|
|
476
475
|
* @returns A boolean indicating whether the nullifier is pending or not.
|
|
477
476
|
*/
|
|
478
|
-
public async
|
|
477
|
+
public async isNullifierPending(innerNullifier: Fr, contractAddress: AztecAddress): Promise<boolean> {
|
|
479
478
|
const siloedNullifier = await siloNullifier(contractAddress, innerNullifier);
|
|
480
479
|
const isNullifierPending = this.noteCache.getNullifiers(contractAddress).has(siloedNullifier.toBigInt());
|
|
481
480
|
return Promise.resolve(isNullifierPending);
|
|
@@ -488,10 +487,10 @@ export class PrivateExecutionOracle extends UtilityExecutionOracle implements IP
|
|
|
488
487
|
* @param log - The contract class log to be emitted.
|
|
489
488
|
* @param counter - The contract class log's counter.
|
|
490
489
|
*/
|
|
491
|
-
public
|
|
490
|
+
public notifyCreatedContractClassLog(log: ContractClassLog, counter: number) {
|
|
492
491
|
this.contractClassLogs.push(new CountedContractClassLog(log, counter));
|
|
493
492
|
const text = log.toBuffer().toString('hex');
|
|
494
|
-
this.
|
|
493
|
+
this.logger.verbose(
|
|
495
494
|
`Emitted log from ContractClassRegistry: "${text.length > 100 ? text.slice(0, 100) + '...' : text}"`,
|
|
496
495
|
);
|
|
497
496
|
}
|
|
@@ -517,7 +516,7 @@ export class PrivateExecutionOracle extends UtilityExecutionOracle implements IP
|
|
|
517
516
|
* @param isStaticCall - Whether the call is a static call.
|
|
518
517
|
* @returns The execution result.
|
|
519
518
|
*/
|
|
520
|
-
async
|
|
519
|
+
async callPrivateFunction(
|
|
521
520
|
targetContractAddress: AztecAddress,
|
|
522
521
|
functionSelector: FunctionSelector,
|
|
523
522
|
argsHash: Fr,
|
|
@@ -531,19 +530,19 @@ export class PrivateExecutionOracle extends UtilityExecutionOracle implements IP
|
|
|
531
530
|
}
|
|
532
531
|
|
|
533
532
|
const simulatorSetupTimer = new Timer();
|
|
534
|
-
this.
|
|
533
|
+
this.logger.debug(
|
|
535
534
|
`Calling private function ${targetContractAddress}:${functionSelector} from ${this.callContext.contractAddress}`,
|
|
536
535
|
);
|
|
537
536
|
|
|
538
537
|
isStaticCall = isStaticCall || this.callContext.isStaticCall;
|
|
539
538
|
|
|
540
|
-
await ensureContractSynced(
|
|
539
|
+
await this.contractSyncService.ensureContractSynced(
|
|
541
540
|
targetContractAddress,
|
|
542
541
|
functionSelector,
|
|
543
542
|
this.utilityExecutor,
|
|
544
|
-
this.aztecNode,
|
|
545
|
-
this.contractStore,
|
|
546
543
|
this.anchorBlockHeader,
|
|
544
|
+
this.jobId,
|
|
545
|
+
this.scopes,
|
|
547
546
|
);
|
|
548
547
|
|
|
549
548
|
const targetArtifact = await this.contractStore.getFunctionArtifactWithDebugMetadata(
|
|
@@ -555,46 +554,52 @@ export class PrivateExecutionOracle extends UtilityExecutionOracle implements IP
|
|
|
555
554
|
|
|
556
555
|
const derivedCallContext = await this.deriveCallContext(targetContractAddress, targetArtifact, isStaticCall);
|
|
557
556
|
|
|
558
|
-
const privateExecutionOracle = new PrivateExecutionOracle(
|
|
557
|
+
const privateExecutionOracle = new PrivateExecutionOracle({
|
|
559
558
|
argsHash,
|
|
560
|
-
derivedTxContext,
|
|
561
|
-
derivedCallContext,
|
|
562
|
-
this.anchorBlockHeader,
|
|
563
|
-
this.utilityExecutor,
|
|
564
|
-
this.authWitnesses,
|
|
565
|
-
this.capsules,
|
|
566
|
-
this.executionCache,
|
|
567
|
-
this.noteCache,
|
|
568
|
-
this.taggingIndexCache,
|
|
569
|
-
this.contractStore,
|
|
570
|
-
this.noteStore,
|
|
571
|
-
this.keyStore,
|
|
572
|
-
this.addressStore,
|
|
573
|
-
this.aztecNode,
|
|
574
|
-
this.senderTaggingStore,
|
|
575
|
-
this.recipientTaggingStore,
|
|
576
|
-
this.senderAddressBookStore,
|
|
577
|
-
this.
|
|
578
|
-
this.privateEventStore,
|
|
579
|
-
this.
|
|
580
|
-
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,
|
|
581
582
|
sideEffectCounter,
|
|
582
|
-
this.
|
|
583
|
-
this.scopes,
|
|
584
|
-
this.
|
|
585
|
-
this.simulator
|
|
586
|
-
|
|
583
|
+
log: this.logger,
|
|
584
|
+
scopes: this.scopes,
|
|
585
|
+
senderForTags: this.defaultSenderForTags,
|
|
586
|
+
simulator: this.simulator!,
|
|
587
|
+
l2TipsStore: this.l2TipsStore,
|
|
588
|
+
});
|
|
587
589
|
|
|
588
590
|
const setupTime = simulatorSetupTimer.ms();
|
|
589
591
|
|
|
590
592
|
const childExecutionResult = await executePrivateFunction(
|
|
591
|
-
this.simulator
|
|
593
|
+
this.simulator!,
|
|
592
594
|
privateExecutionOracle,
|
|
593
595
|
targetArtifact,
|
|
594
596
|
targetContractAddress,
|
|
595
597
|
functionSelector,
|
|
596
598
|
);
|
|
597
599
|
|
|
600
|
+
// Propagate the nested call's calldata count so the parent sees its increments on subsequent enqueues.
|
|
601
|
+
this.totalPublicCalldataCount = privateExecutionOracle.getTotalPublicCalldataCount();
|
|
602
|
+
|
|
598
603
|
if (isStaticCall) {
|
|
599
604
|
this.#checkValidStaticCall(childExecutionResult);
|
|
600
605
|
}
|
|
@@ -614,7 +619,8 @@ export class PrivateExecutionOracle extends UtilityExecutionOracle implements IP
|
|
|
614
619
|
};
|
|
615
620
|
}
|
|
616
621
|
|
|
617
|
-
|
|
622
|
+
/** Validates the calldata preimage exists in the cache and checks cumulative calldata size is within limits. */
|
|
623
|
+
public assertValidPublicCalldata(calldataHash: Fr) {
|
|
618
624
|
const calldata = this.executionCache.getPreimage(calldataHash);
|
|
619
625
|
if (!calldata) {
|
|
620
626
|
throw new Error('Calldata for public call not found in cache');
|
|
@@ -624,47 +630,18 @@ export class PrivateExecutionOracle extends UtilityExecutionOracle implements IP
|
|
|
624
630
|
if (this.totalPublicCalldataCount > MAX_FR_CALLDATA_TO_ALL_ENQUEUED_CALLS) {
|
|
625
631
|
throw new Error(`Too many total args to all enqueued public calls! (> ${MAX_FR_CALLDATA_TO_ALL_ENQUEUED_CALLS})`);
|
|
626
632
|
}
|
|
627
|
-
}
|
|
628
|
-
|
|
629
|
-
/**
|
|
630
|
-
* Verify relevant information when a public function is enqueued.
|
|
631
|
-
* @param targetContractAddress - The address of the contract to call.
|
|
632
|
-
* @param calldataHash - The hash of the function selector and arguments.
|
|
633
|
-
* @param sideEffectCounter - The side effect counter at the start of the call.
|
|
634
|
-
* @param isStaticCall - Whether the call is a static call.
|
|
635
|
-
*/
|
|
636
|
-
public privateNotifyEnqueuedPublicFunctionCall(
|
|
637
|
-
_targetContractAddress: AztecAddress,
|
|
638
|
-
calldataHash: Fr,
|
|
639
|
-
_sideEffectCounter: number,
|
|
640
|
-
_isStaticCall: boolean,
|
|
641
|
-
) {
|
|
642
|
-
this.#onNewPublicFunctionCall(calldataHash);
|
|
643
633
|
return Promise.resolve();
|
|
644
634
|
}
|
|
645
635
|
|
|
646
|
-
|
|
647
|
-
|
|
648
|
-
* @param targetContractAddress - The address of the contract to call.
|
|
649
|
-
* @param argsHash - The arguments hash to pass to the function.
|
|
650
|
-
* @param sideEffectCounter - The side effect counter at the start of the call.
|
|
651
|
-
* @param isStaticCall - Whether the call is a static call.
|
|
652
|
-
*/
|
|
653
|
-
public privateNotifySetPublicTeardownFunctionCall(
|
|
654
|
-
_targetContractAddress: AztecAddress,
|
|
655
|
-
calldataHash: Fr,
|
|
656
|
-
_sideEffectCounter: number,
|
|
657
|
-
_isStaticCall: boolean,
|
|
658
|
-
) {
|
|
659
|
-
this.#onNewPublicFunctionCall(calldataHash);
|
|
660
|
-
return Promise.resolve();
|
|
636
|
+
public getTotalPublicCalldataCount(): number {
|
|
637
|
+
return this.totalPublicCalldataCount;
|
|
661
638
|
}
|
|
662
639
|
|
|
663
|
-
public
|
|
640
|
+
public notifyRevertiblePhaseStart(minRevertibleSideEffectCounter: number): Promise<void> {
|
|
664
641
|
return this.noteCache.setMinRevertibleSideEffectCounter(minRevertibleSideEffectCounter);
|
|
665
642
|
}
|
|
666
643
|
|
|
667
|
-
public
|
|
644
|
+
public isExecutionInRevertiblePhase(sideEffectCounter: number): Promise<boolean> {
|
|
668
645
|
return Promise.resolve(this.noteCache.isSideEffectCounterRevertible(sideEffectCounter));
|
|
669
646
|
}
|
|
670
647
|
|
|
@@ -691,9 +668,4 @@ export class PrivateExecutionOracle extends UtilityExecutionOracle implements IP
|
|
|
691
668
|
public getDebugFunctionName() {
|
|
692
669
|
return this.contractStore.getDebugFunctionName(this.contractAddress, this.callContext.functionSelector);
|
|
693
670
|
}
|
|
694
|
-
|
|
695
|
-
public utilityEmitOffchainEffect(data: Fr[]): Promise<void> {
|
|
696
|
-
this.offchainEffects.push({ data });
|
|
697
|
-
return Promise.resolve();
|
|
698
|
-
}
|
|
699
671
|
}
|