@aztec/pxe 0.0.1-commit.7d4e6cd → 0.0.1-commit.7ffbba4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dest/access_scopes.d.ts +9 -0
- package/dest/access_scopes.d.ts.map +1 -0
- package/dest/access_scopes.js +6 -0
- package/dest/bin/check_oracle_version.js +1 -1
- package/dest/block_synchronizer/block_synchronizer.d.ts +11 -5
- package/dest/block_synchronizer/block_synchronizer.d.ts.map +1 -1
- package/dest/block_synchronizer/block_synchronizer.js +72 -21
- package/dest/config/index.d.ts +4 -2
- package/dest/config/index.d.ts.map +1 -1
- package/dest/config/index.js +18 -1
- package/dest/config/package_info.js +1 -1
- package/dest/contract_function_simulator/benchmarked_node.d.ts +9 -0
- package/dest/contract_function_simulator/benchmarked_node.d.ts.map +1 -0
- package/dest/contract_function_simulator/benchmarked_node.js +77 -0
- package/dest/contract_function_simulator/contract_function_simulator.d.ts +57 -35
- package/dest/contract_function_simulator/contract_function_simulator.d.ts.map +1 -1
- package/dest/contract_function_simulator/contract_function_simulator.js +201 -87
- package/dest/contract_function_simulator/execution_note_cache.d.ts +18 -9
- package/dest/contract_function_simulator/execution_note_cache.d.ts.map +1 -1
- package/dest/contract_function_simulator/execution_note_cache.js +45 -28
- package/dest/contract_function_simulator/execution_tagging_index_cache.d.ts +5 -5
- package/dest/contract_function_simulator/execution_tagging_index_cache.d.ts.map +1 -1
- package/dest/contract_function_simulator/execution_tagging_index_cache.js +3 -3
- package/dest/contract_function_simulator/index.d.ts +2 -2
- package/dest/contract_function_simulator/index.d.ts.map +1 -1
- package/dest/contract_function_simulator/index.js +1 -1
- package/dest/contract_function_simulator/noir-structs/event_validation_request.d.ts +3 -4
- 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 +6 -5
- package/dest/contract_function_simulator/noir-structs/log_retrieval_response.d.ts +1 -1
- 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 +1 -3
- package/dest/contract_function_simulator/noir-structs/note_validation_request.d.ts +3 -5
- 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 +4 -6
- package/dest/contract_function_simulator/noir-structs/utility_context.d.ts +4 -10
- package/dest/contract_function_simulator/noir-structs/utility_context.d.ts.map +1 -1
- package/dest/contract_function_simulator/noir-structs/utility_context.js +7 -18
- package/dest/contract_function_simulator/oracle/interfaces.d.ts +54 -47
- package/dest/contract_function_simulator/oracle/interfaces.d.ts.map +1 -1
- package/dest/contract_function_simulator/oracle/message_load_oracle_inputs.d.ts +3 -1
- package/dest/contract_function_simulator/oracle/message_load_oracle_inputs.d.ts.map +1 -1
- package/dest/contract_function_simulator/oracle/note_packing_utils.d.ts +6 -6
- package/dest/contract_function_simulator/oracle/note_packing_utils.d.ts.map +1 -1
- package/dest/contract_function_simulator/oracle/note_packing_utils.js +8 -8
- package/dest/contract_function_simulator/oracle/oracle.d.ts +43 -42
- package/dest/contract_function_simulator/oracle/oracle.d.ts.map +1 -1
- package/dest/contract_function_simulator/oracle/oracle.js +175 -114
- package/dest/contract_function_simulator/oracle/private_execution.d.ts +2 -26
- package/dest/contract_function_simulator/oracle/private_execution.d.ts.map +1 -1
- package/dest/contract_function_simulator/oracle/private_execution.js +1 -36
- package/dest/contract_function_simulator/oracle/private_execution_oracle.d.ts +61 -66
- package/dest/contract_function_simulator/oracle/private_execution_oracle.d.ts.map +1 -1
- package/dest/contract_function_simulator/oracle/private_execution_oracle.js +113 -75
- package/dest/contract_function_simulator/oracle/utility_execution_oracle.d.ts +90 -55
- package/dest/contract_function_simulator/oracle/utility_execution_oracle.d.ts.map +1 -1
- package/dest/contract_function_simulator/oracle/utility_execution_oracle.js +156 -136
- package/dest/contract_logging.d.ts +22 -0
- package/dest/contract_logging.d.ts.map +1 -0
- package/dest/contract_logging.js +23 -0
- package/dest/contract_sync/contract_sync_service.d.ts +43 -0
- package/dest/contract_sync/contract_sync_service.d.ts.map +1 -0
- package/dest/contract_sync/contract_sync_service.js +97 -0
- package/dest/contract_sync/helpers.d.ts +29 -0
- package/dest/contract_sync/helpers.d.ts.map +1 -0
- package/dest/contract_sync/helpers.js +55 -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 -17
- package/dest/entrypoints/client/bundle/index.d.ts +4 -1
- package/dest/entrypoints/client/bundle/index.d.ts.map +1 -1
- package/dest/entrypoints/client/bundle/index.js +3 -0
- package/dest/entrypoints/client/bundle/utils.d.ts +1 -1
- package/dest/entrypoints/client/bundle/utils.d.ts.map +1 -1
- package/dest/entrypoints/client/bundle/utils.js +21 -7
- package/dest/entrypoints/client/lazy/index.d.ts +4 -1
- package/dest/entrypoints/client/lazy/index.d.ts.map +1 -1
- package/dest/entrypoints/client/lazy/index.js +3 -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 +22 -8
- package/dest/entrypoints/pxe_creation_options.d.ts +3 -2
- package/dest/entrypoints/pxe_creation_options.d.ts.map +1 -1
- package/dest/entrypoints/server/index.d.ts +5 -1
- package/dest/entrypoints/server/index.d.ts.map +1 -1
- package/dest/entrypoints/server/index.js +4 -0
- package/dest/entrypoints/server/utils.d.ts +1 -1
- package/dest/entrypoints/server/utils.d.ts.map +1 -1
- package/dest/entrypoints/server/utils.js +28 -9
- package/dest/events/event_service.d.ts +6 -6
- package/dest/events/event_service.d.ts.map +1 -1
- package/dest/events/event_service.js +19 -22
- package/dest/events/private_event_filter_validator.d.ts +5 -5
- package/dest/events/private_event_filter_validator.d.ts.map +1 -1
- package/dest/events/private_event_filter_validator.js +5 -6
- 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 +8 -5
- package/dest/logs/log_service.d.ts.map +1 -1
- package/dest/logs/log_service.js +31 -33
- package/dest/notes/note_service.d.ts +10 -9
- package/dest/notes/note_service.d.ts.map +1 -1
- package/dest/notes/note_service.js +34 -38
- package/dest/notes_filter.d.ts +25 -0
- package/dest/notes_filter.d.ts.map +1 -0
- package/dest/notes_filter.js +4 -0
- package/dest/oracle_version.d.ts +3 -3
- package/dest/oracle_version.d.ts.map +1 -1
- package/dest/oracle_version.js +5 -4
- 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 +3 -3
- package/dest/private_kernel/hints/index.d.ts.map +1 -1
- package/dest/private_kernel/hints/index.js +2 -2
- package/dest/private_kernel/hints/private_kernel_reset_private_inputs_builder.d.ts +29 -0
- package/dest/private_kernel/hints/private_kernel_reset_private_inputs_builder.d.ts.map +1 -0
- package/dest/private_kernel/hints/{build_private_kernel_reset_private_inputs.js → private_kernel_reset_private_inputs_builder.js} +140 -73
- 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 +22 -14
- package/dest/private_kernel/private_kernel_oracle.d.ts +23 -24
- package/dest/private_kernel/private_kernel_oracle.d.ts.map +1 -1
- package/dest/private_kernel/private_kernel_oracle.js +94 -2
- package/dest/pxe.d.ts +77 -59
- package/dest/pxe.d.ts.map +1 -1
- package/dest/pxe.js +132 -136
- package/dest/storage/address_store/address_store.d.ts +1 -1
- package/dest/storage/address_store/address_store.d.ts.map +1 -1
- package/dest/storage/address_store/address_store.js +12 -11
- package/dest/storage/anchor_block_store/anchor_block_store.d.ts +9 -1
- package/dest/storage/anchor_block_store/anchor_block_store.d.ts.map +1 -1
- package/dest/storage/anchor_block_store/anchor_block_store.js +8 -1
- package/dest/storage/capsule_store/capsule_store.d.ts +24 -9
- package/dest/storage/capsule_store/capsule_store.d.ts.map +1 -1
- package/dest/storage/capsule_store/capsule_store.js +130 -23
- 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 +157 -84
- package/dest/storage/metadata.d.ts +1 -1
- package/dest/storage/metadata.js +1 -1
- package/dest/storage/note_store/note_store.d.ts +50 -51
- package/dest/storage/note_store/note_store.d.ts.map +1 -1
- package/dest/storage/note_store/note_store.js +284 -263
- package/dest/storage/note_store/stored_note.d.ts +16 -0
- package/dest/storage/note_store/stored_note.d.ts.map +1 -0
- package/dest/storage/note_store/stored_note.js +43 -0
- package/dest/storage/private_event_store/private_event_store.d.ts +43 -8
- package/dest/storage/private_event_store/private_event_store.d.ts.map +1 -1
- package/dest/storage/private_event_store/private_event_store.js +226 -111
- package/dest/storage/private_event_store/stored_private_event.d.ts +23 -0
- package/dest/storage/private_event_store/stored_private_event.d.ts.map +1 -0
- package/dest/storage/private_event_store/stored_private_event.js +56 -0
- package/dest/storage/tagging_store/recipient_tagging_store.d.ts +16 -9
- package/dest/storage/tagging_store/recipient_tagging_store.d.ts.map +1 -1
- package/dest/storage/tagging_store/recipient_tagging_store.js +88 -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 +20 -10
- package/dest/storage/tagging_store/sender_tagging_store.d.ts.map +1 -1
- package/dest/storage/tagging_store/sender_tagging_store.js +253 -101
- package/dest/tagging/get_all_logs_by_tags.d.ts +24 -0
- package/dest/tagging/get_all_logs_by_tags.d.ts.map +1 -0
- package/dest/tagging/get_all_logs_by_tags.js +60 -0
- package/dest/tagging/index.d.ts +3 -2
- package/dest/tagging/index.d.ts.map +1 -1
- package/dest/tagging/index.js +2 -1
- package/dest/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.d.ts +5 -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 +11 -11
- 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 -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 +16 -12
- package/dest/tagging/sender_sync/sync_sender_tagging_indexes.d.ts +5 -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 +8 -11
- package/dest/tagging/sender_sync/utils/get_status_change_of_pending.d.ts +1 -1
- package/dest/tagging/sender_sync/utils/get_status_change_of_pending.d.ts.map +1 -1
- package/dest/tagging/sender_sync/utils/get_status_change_of_pending.js +5 -8
- package/dest/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.d.ts +7 -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 +23 -19
- package/package.json +27 -18
- package/src/access_scopes.ts +9 -0
- package/src/bin/check_oracle_version.ts +1 -0
- package/src/block_synchronizer/block_synchronizer.ts +91 -33
- package/src/config/index.ts +15 -1
- package/src/config/package_info.ts +1 -1
- package/src/contract_function_simulator/benchmarked_node.ts +103 -0
- package/src/contract_function_simulator/contract_function_simulator.ts +352 -151
- package/src/contract_function_simulator/execution_note_cache.ts +44 -25
- package/src/contract_function_simulator/execution_tagging_index_cache.ts +5 -5
- package/src/contract_function_simulator/index.ts +1 -1
- package/src/contract_function_simulator/noir-structs/event_validation_request.ts +9 -6
- package/src/contract_function_simulator/noir-structs/log_retrieval_response.ts +1 -4
- package/src/contract_function_simulator/noir-structs/note_validation_request.ts +4 -7
- package/src/contract_function_simulator/noir-structs/utility_context.ts +6 -25
- package/src/contract_function_simulator/oracle/interfaces.ts +63 -59
- package/src/contract_function_simulator/oracle/note_packing_utils.ts +10 -10
- package/src/contract_function_simulator/oracle/oracle.ts +195 -163
- package/src/contract_function_simulator/oracle/private_execution.ts +2 -68
- package/src/contract_function_simulator/oracle/private_execution_oracle.ts +154 -169
- package/src/contract_function_simulator/oracle/utility_execution_oracle.ts +229 -153
- package/src/contract_logging.ts +39 -0
- package/src/contract_sync/contract_sync_service.ts +152 -0
- package/src/contract_sync/helpers.ts +98 -0
- package/src/debug/pxe_debug_utils.ts +63 -18
- package/src/entrypoints/client/bundle/index.ts +3 -0
- package/src/entrypoints/client/bundle/utils.ts +16 -15
- package/src/entrypoints/client/lazy/index.ts +3 -0
- package/src/entrypoints/client/lazy/utils.ts +17 -15
- package/src/entrypoints/pxe_creation_options.ts +2 -1
- package/src/entrypoints/server/index.ts +4 -0
- package/src/entrypoints/server/utils.ts +22 -26
- package/src/events/event_service.ts +17 -25
- package/src/events/private_event_filter_validator.ts +3 -5
- package/src/job_coordinator/job_coordinator.ts +4 -3
- package/src/logs/log_service.ts +51 -40
- package/src/notes/note_service.ts +41 -45
- package/src/notes_filter.ts +26 -0
- package/src/oracle_version.ts +5 -4
- 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 +2 -2
- package/src/private_kernel/hints/{build_private_kernel_reset_private_inputs.ts → private_kernel_reset_private_inputs_builder.ts} +195 -136
- package/src/private_kernel/hints/test_utils.ts +325 -0
- package/src/private_kernel/private_kernel_execution_prover.ts +26 -16
- package/src/private_kernel/private_kernel_oracle.ts +116 -37
- package/src/pxe.ts +243 -213
- package/src/storage/address_store/address_store.ts +15 -15
- package/src/storage/anchor_block_store/anchor_block_store.ts +8 -0
- package/src/storage/capsule_store/capsule_store.ts +159 -23
- package/src/storage/contract_store/contract_store.ts +186 -96
- package/src/storage/metadata.ts +1 -1
- package/src/storage/note_store/note_store.ts +326 -320
- package/src/storage/note_store/stored_note.ts +48 -0
- package/src/storage/private_event_store/private_event_store.ts +292 -124
- package/src/storage/private_event_store/stored_private_event.ts +73 -0
- package/src/storage/tagging_store/recipient_tagging_store.ts +111 -21
- package/src/storage/tagging_store/sender_address_book_store.ts +20 -14
- package/src/storage/tagging_store/sender_tagging_store.ts +296 -111
- package/src/tagging/get_all_logs_by_tags.ts +92 -0
- package/src/tagging/index.ts +2 -1
- package/src/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.ts +22 -14
- package/src/tagging/recipient_sync/utils/find_highest_indexes.ts +2 -2
- package/src/tagging/recipient_sync/utils/load_logs_for_range.ts +17 -16
- package/src/tagging/sender_sync/sync_sender_tagging_indexes.ts +12 -14
- package/src/tagging/sender_sync/utils/get_status_change_of_pending.ts +5 -17
- package/src/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.ts +26 -23
- package/dest/contract_function_simulator/proxied_node.d.ts +0 -9
- package/dest/contract_function_simulator/proxied_node.d.ts.map +0 -1
- package/dest/contract_function_simulator/proxied_node.js +0 -27
- package/dest/private_kernel/hints/build_private_kernel_reset_private_inputs.d.ts +0 -28
- package/dest/private_kernel/hints/build_private_kernel_reset_private_inputs.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
- package/dest/private_kernel/private_kernel_oracle_impl.d.ts +0 -46
- package/dest/private_kernel/private_kernel_oracle_impl.d.ts.map +0 -1
- package/dest/private_kernel/private_kernel_oracle_impl.js +0 -85
- package/dest/public_storage/public_storage_service.d.ts +0 -24
- package/dest/public_storage/public_storage_service.d.ts.map +0 -1
- package/dest/public_storage/public_storage_service.js +0 -26
- package/dest/tree_membership/tree_membership_service.d.ts +0 -52
- package/dest/tree_membership/tree_membership_service.d.ts.map +0 -1
- package/dest/tree_membership/tree_membership_service.js +0 -84
- package/src/contract_function_simulator/proxied_node.ts +0 -33
- package/src/private_kernel/private_kernel_oracle_impl.ts +0 -127
- package/src/public_storage/public_storage_service.ts +0 -33
- package/src/tree_membership/tree_membership_service.ts +0 -112
|
@@ -1,9 +1,7 @@
|
|
|
1
1
|
import { PRIVATE_CIRCUIT_PUBLIC_INPUTS_LENGTH, PRIVATE_CONTEXT_INPUTS_LENGTH } from '@aztec/constants';
|
|
2
|
-
import { BlockNumber } from '@aztec/foundation/branded-types';
|
|
3
2
|
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
4
3
|
import { createLogger } from '@aztec/foundation/log';
|
|
5
4
|
import { Timer } from '@aztec/foundation/timer';
|
|
6
|
-
import { ProtocolContractAddress } from '@aztec/protocol-contracts';
|
|
7
5
|
import {
|
|
8
6
|
type ACVMWitness,
|
|
9
7
|
type CircuitSimulator,
|
|
@@ -19,15 +17,10 @@ import {
|
|
|
19
17
|
countArgumentsSize,
|
|
20
18
|
} from '@aztec/stdlib/abi';
|
|
21
19
|
import type { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
22
|
-
import type { ContractInstance } from '@aztec/stdlib/contract';
|
|
23
|
-
import { DelayedPublicMutableValues, DelayedPublicMutableValuesWithHash } from '@aztec/stdlib/delayed-public-mutable';
|
|
24
|
-
import type { AztecNode } from '@aztec/stdlib/interfaces/client';
|
|
25
20
|
import { PrivateCircuitPublicInputs } from '@aztec/stdlib/kernel';
|
|
26
21
|
import type { CircuitWitnessGenerationStats } from '@aztec/stdlib/stats';
|
|
27
|
-
import {
|
|
28
|
-
import type { UInt64 } from '@aztec/stdlib/types';
|
|
22
|
+
import { PrivateCallExecutionResult } from '@aztec/stdlib/tx';
|
|
29
23
|
|
|
30
|
-
import { ContractStore } from '../../storage/contract_store/index.js';
|
|
31
24
|
import { Oracle } from './oracle.js';
|
|
32
25
|
import type { PrivateExecutionOracle } from './private_execution_oracle.js';
|
|
33
26
|
|
|
@@ -83,7 +76,7 @@ export async function executePrivateFunction(
|
|
|
83
76
|
|
|
84
77
|
const contractClassLogs = privateExecutionOracle.getContractClassLogs();
|
|
85
78
|
|
|
86
|
-
const rawReturnValues = await privateExecutionOracle.
|
|
79
|
+
const rawReturnValues = await privateExecutionOracle.loadFromExecutionCache(publicInputs.returnsHash);
|
|
87
80
|
|
|
88
81
|
const newNotes = privateExecutionOracle.getNewNotes();
|
|
89
82
|
const noteHashNullifierCounterMap = privateExecutionOracle.getNoteHashNullifierCounterMap();
|
|
@@ -146,62 +139,3 @@ export function extractPrivateCircuitPublicInputs(
|
|
|
146
139
|
}
|
|
147
140
|
return PrivateCircuitPublicInputs.fromFields(returnData);
|
|
148
141
|
}
|
|
149
|
-
|
|
150
|
-
/**
|
|
151
|
-
* Read the current class id of a contract from the execution data provider or AztecNode. If not found, class id
|
|
152
|
-
* from the instance is used.
|
|
153
|
-
* @param contractAddress - The address of the contract to read the class id for.
|
|
154
|
-
* @param instance - The instance of the contract.
|
|
155
|
-
* @param executionStore - The execution data provider.
|
|
156
|
-
* @param blockNumber - The block number at which to load the DelayedPublicMutable storing the class id.
|
|
157
|
-
* @param timestamp - The timestamp at which to obtain the class id from the DelayedPublicMutable.
|
|
158
|
-
* @returns The current class id.
|
|
159
|
-
*/
|
|
160
|
-
export async function readCurrentClassId(
|
|
161
|
-
contractAddress: AztecAddress,
|
|
162
|
-
instance: ContractInstance,
|
|
163
|
-
aztecNode: AztecNode,
|
|
164
|
-
blockNumber: BlockNumber,
|
|
165
|
-
timestamp: UInt64,
|
|
166
|
-
) {
|
|
167
|
-
const { delayedPublicMutableSlot } = await DelayedPublicMutableValuesWithHash.getContractUpdateSlots(contractAddress);
|
|
168
|
-
const delayedPublicMutableValues = await DelayedPublicMutableValues.readFromTree(delayedPublicMutableSlot, slot =>
|
|
169
|
-
aztecNode.getPublicStorageAt(blockNumber, ProtocolContractAddress.ContractInstanceRegistry, slot),
|
|
170
|
-
);
|
|
171
|
-
let currentClassId = delayedPublicMutableValues.svc.getCurrentAt(timestamp)[0];
|
|
172
|
-
if (currentClassId.isZero()) {
|
|
173
|
-
currentClassId = instance.originalContractClassId;
|
|
174
|
-
}
|
|
175
|
-
return currentClassId;
|
|
176
|
-
}
|
|
177
|
-
|
|
178
|
-
/**
|
|
179
|
-
* Verify that the current class id of a contract obtained from AztecNode is the same as the one in contract data
|
|
180
|
-
* provider (i.e. PXE's own storage).
|
|
181
|
-
* @param header - The header of the block at which to verify the current class id. If not provided, the anchor block
|
|
182
|
-
* header of the execution data provider is used.
|
|
183
|
-
*/
|
|
184
|
-
export async function verifyCurrentClassId(
|
|
185
|
-
contractAddress: AztecAddress,
|
|
186
|
-
aztecNode: AztecNode,
|
|
187
|
-
contractStore: ContractStore,
|
|
188
|
-
header: BlockHeader,
|
|
189
|
-
) {
|
|
190
|
-
const instance = await contractStore.getContractInstance(contractAddress);
|
|
191
|
-
if (!instance) {
|
|
192
|
-
throw new Error(`No contract instance found for address ${contractAddress.toString()}`);
|
|
193
|
-
}
|
|
194
|
-
|
|
195
|
-
const currentClassId = await readCurrentClassId(
|
|
196
|
-
contractAddress,
|
|
197
|
-
instance,
|
|
198
|
-
aztecNode,
|
|
199
|
-
header.globalVariables.blockNumber,
|
|
200
|
-
header.globalVariables.timestamp,
|
|
201
|
-
);
|
|
202
|
-
if (!instance.currentContractClassId.equals(currentClassId)) {
|
|
203
|
-
throw new Error(
|
|
204
|
-
`Contract ${contractAddress} is outdated, current class id is ${currentClassId}, local class id is ${instance.currentContractClassId}`,
|
|
205
|
-
);
|
|
206
|
-
}
|
|
207
|
-
}
|
|
@@ -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,23 @@ 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 PreTag } 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
|
|
|
28
|
+
import type { AccessScopes } from '../../access_scopes.js';
|
|
29
|
+
import type { ContractSyncService } from '../../contract_sync/contract_sync_service.js';
|
|
33
30
|
import { NoteService } from '../../notes/note_service.js';
|
|
34
|
-
import type { AddressStore } from '../../storage/address_store/address_store.js';
|
|
35
|
-
import type { AnchorBlockStore } from '../../storage/anchor_block_store/anchor_block_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
31
|
import type { SenderTaggingStore } from '../../storage/tagging_store/sender_tagging_store.js';
|
|
43
32
|
import { syncSenderTaggingIndexes } from '../../tagging/index.js';
|
|
44
33
|
import type { ExecutionNoteCache } from '../execution_note_cache.js';
|
|
@@ -46,8 +35,26 @@ import { ExecutionTaggingIndexCache } from '../execution_tagging_index_cache.js'
|
|
|
46
35
|
import type { HashedValuesCache } from '../hashed_values_cache.js';
|
|
47
36
|
import { pickNotes } from '../pick_notes.js';
|
|
48
37
|
import type { IPrivateExecutionOracle, NoteData } from './interfaces.js';
|
|
49
|
-
import { executePrivateFunction
|
|
50
|
-
import { UtilityExecutionOracle } from './utility_execution_oracle.js';
|
|
38
|
+
import { executePrivateFunction } from './private_execution.js';
|
|
39
|
+
import { UtilityExecutionOracle, type UtilityExecutionOracleArgs } from './utility_execution_oracle.js';
|
|
40
|
+
|
|
41
|
+
/** Args for PrivateExecutionOracle constructor. */
|
|
42
|
+
export type PrivateExecutionOracleArgs = Omit<UtilityExecutionOracleArgs, 'contractAddress'> & {
|
|
43
|
+
argsHash: Fr;
|
|
44
|
+
txContext: TxContext;
|
|
45
|
+
callContext: CallContext;
|
|
46
|
+
/** Needed to trigger contract synchronization before nested calls */
|
|
47
|
+
utilityExecutor: (call: FunctionCall, scopes: AccessScopes) => Promise<void>;
|
|
48
|
+
executionCache: HashedValuesCache;
|
|
49
|
+
noteCache: ExecutionNoteCache;
|
|
50
|
+
taggingIndexCache: ExecutionTaggingIndexCache;
|
|
51
|
+
senderTaggingStore: SenderTaggingStore;
|
|
52
|
+
contractSyncService: ContractSyncService;
|
|
53
|
+
totalPublicCalldataCount?: number;
|
|
54
|
+
sideEffectCounter?: number;
|
|
55
|
+
senderForTags?: AztecAddress;
|
|
56
|
+
simulator?: CircuitSimulator;
|
|
57
|
+
};
|
|
51
58
|
|
|
52
59
|
/**
|
|
53
60
|
* The execution oracle for the private part of a transaction.
|
|
@@ -69,58 +76,39 @@ export class PrivateExecutionOracle extends UtilityExecutionOracle implements IP
|
|
|
69
76
|
private offchainEffects: { data: Fr[] }[] = [];
|
|
70
77
|
private nestedExecutionResults: PrivateCallExecutionResult[] = [];
|
|
71
78
|
|
|
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
|
-
super(
|
|
106
|
-
callContext.contractAddress,
|
|
107
|
-
authWitnesses,
|
|
108
|
-
capsules,
|
|
109
|
-
anchorBlockHeader,
|
|
110
|
-
contractStore,
|
|
111
|
-
noteStore,
|
|
112
|
-
keyStore,
|
|
113
|
-
addressStore,
|
|
114
|
-
aztecNode,
|
|
115
|
-
anchorBlockStore,
|
|
116
|
-
recipientTaggingStore,
|
|
117
|
-
senderAddressBookStore,
|
|
118
|
-
capsuleStore,
|
|
119
|
-
privateEventStore,
|
|
120
|
-
jobId,
|
|
121
|
-
log,
|
|
122
|
-
scopes,
|
|
123
|
-
);
|
|
79
|
+
private readonly argsHash: Fr;
|
|
80
|
+
private readonly txContext: TxContext;
|
|
81
|
+
private readonly callContext: CallContext;
|
|
82
|
+
private readonly utilityExecutor: (call: FunctionCall, scopes: AccessScopes) => Promise<void>;
|
|
83
|
+
private readonly executionCache: HashedValuesCache;
|
|
84
|
+
private readonly noteCache: ExecutionNoteCache;
|
|
85
|
+
private readonly taggingIndexCache: ExecutionTaggingIndexCache;
|
|
86
|
+
private readonly senderTaggingStore: SenderTaggingStore;
|
|
87
|
+
private readonly contractSyncService: ContractSyncService;
|
|
88
|
+
private totalPublicCalldataCount: number;
|
|
89
|
+
protected sideEffectCounter: number;
|
|
90
|
+
private senderForTags?: AztecAddress;
|
|
91
|
+
private readonly simulator?: CircuitSimulator;
|
|
92
|
+
|
|
93
|
+
constructor(args: PrivateExecutionOracleArgs) {
|
|
94
|
+
super({
|
|
95
|
+
...args,
|
|
96
|
+
contractAddress: args.callContext.contractAddress,
|
|
97
|
+
log: args.log ?? createLogger('simulator:client_execution_context'),
|
|
98
|
+
});
|
|
99
|
+
this.argsHash = args.argsHash;
|
|
100
|
+
this.txContext = args.txContext;
|
|
101
|
+
this.callContext = args.callContext;
|
|
102
|
+
this.utilityExecutor = args.utilityExecutor;
|
|
103
|
+
this.executionCache = args.executionCache;
|
|
104
|
+
this.noteCache = args.noteCache;
|
|
105
|
+
this.taggingIndexCache = args.taggingIndexCache;
|
|
106
|
+
this.senderTaggingStore = args.senderTaggingStore;
|
|
107
|
+
this.contractSyncService = args.contractSyncService;
|
|
108
|
+
this.totalPublicCalldataCount = args.totalPublicCalldataCount ?? 0;
|
|
109
|
+
this.sideEffectCounter = args.sideEffectCounter ?? 0;
|
|
110
|
+
this.senderForTags = args.senderForTags;
|
|
111
|
+
this.simulator = args.simulator;
|
|
124
112
|
}
|
|
125
113
|
|
|
126
114
|
public getPrivateContextInputs(): PrivateContextInputs {
|
|
@@ -201,7 +189,7 @@ export class PrivateExecutionOracle extends UtilityExecutionOracle implements IP
|
|
|
201
189
|
* The value persists through nested calls, meaning all calls down the stack will use the same
|
|
202
190
|
* 'senderForTags' value (unless it is replaced).
|
|
203
191
|
*/
|
|
204
|
-
public
|
|
192
|
+
public getSenderForTags(): Promise<AztecAddress | undefined> {
|
|
205
193
|
return Promise.resolve(this.senderForTags);
|
|
206
194
|
}
|
|
207
195
|
|
|
@@ -216,7 +204,7 @@ export class PrivateExecutionOracle extends UtilityExecutionOracle implements IP
|
|
|
216
204
|
* through nested calls, meaning all calls down the stack will use the same 'senderForTags'
|
|
217
205
|
* value (unless it is replaced by another call to this setter).
|
|
218
206
|
*/
|
|
219
|
-
public
|
|
207
|
+
public setSenderForTags(senderForTags: AztecAddress): Promise<void> {
|
|
220
208
|
this.senderForTags = senderForTags;
|
|
221
209
|
return Promise.resolve();
|
|
222
210
|
}
|
|
@@ -227,26 +215,30 @@ export class PrivateExecutionOracle extends UtilityExecutionOracle implements IP
|
|
|
227
215
|
* @param recipient - The address receiving the log
|
|
228
216
|
* @returns An app tag to be used in a log.
|
|
229
217
|
*/
|
|
230
|
-
public async
|
|
231
|
-
const
|
|
218
|
+
public async getNextAppTagAsSender(sender: AztecAddress, recipient: AztecAddress): Promise<Tag> {
|
|
219
|
+
const extendedSecret = await this.#calculateExtendedDirectionalAppTaggingSecret(
|
|
220
|
+
this.contractAddress,
|
|
221
|
+
sender,
|
|
222
|
+
recipient,
|
|
223
|
+
);
|
|
232
224
|
|
|
233
|
-
const index = await this.#getIndexToUseForSecret(
|
|
234
|
-
this.
|
|
225
|
+
const index = await this.#getIndexToUseForSecret(extendedSecret);
|
|
226
|
+
this.logger.debug(
|
|
235
227
|
`Incrementing tagging index for sender: ${sender}, recipient: ${recipient}, contract: ${this.contractAddress} to ${index}`,
|
|
236
228
|
);
|
|
237
|
-
this.taggingIndexCache.setLastUsedIndex(
|
|
229
|
+
this.taggingIndexCache.setLastUsedIndex(extendedSecret, index);
|
|
238
230
|
|
|
239
|
-
return Tag.compute({
|
|
231
|
+
return Tag.compute({ extendedSecret, index });
|
|
240
232
|
}
|
|
241
233
|
|
|
242
|
-
async #
|
|
234
|
+
async #calculateExtendedDirectionalAppTaggingSecret(
|
|
243
235
|
contractAddress: AztecAddress,
|
|
244
236
|
sender: AztecAddress,
|
|
245
237
|
recipient: AztecAddress,
|
|
246
238
|
) {
|
|
247
|
-
const senderCompleteAddress = await this.
|
|
239
|
+
const senderCompleteAddress = await this.getCompleteAddressOrFail(sender);
|
|
248
240
|
const senderIvsk = await this.keyStore.getMasterIncomingViewingSecretKey(sender);
|
|
249
|
-
return
|
|
241
|
+
return ExtendedDirectionalAppTaggingSecret.compute(
|
|
250
242
|
senderCompleteAddress,
|
|
251
243
|
senderIvsk,
|
|
252
244
|
recipient,
|
|
@@ -255,7 +247,7 @@ export class PrivateExecutionOracle extends UtilityExecutionOracle implements IP
|
|
|
255
247
|
);
|
|
256
248
|
}
|
|
257
249
|
|
|
258
|
-
async #getIndexToUseForSecret(secret:
|
|
250
|
+
async #getIndexToUseForSecret(secret: ExtendedDirectionalAppTaggingSecret): Promise<number> {
|
|
259
251
|
// If we have the tagging index in the cache, we use it. If not we obtain it from the execution data provider.
|
|
260
252
|
const lastUsedIndexInTx = this.taggingIndexCache.getLastUsedIndex(secret);
|
|
261
253
|
|
|
@@ -265,9 +257,15 @@ export class PrivateExecutionOracle extends UtilityExecutionOracle implements IP
|
|
|
265
257
|
// This is a tagging secret we've not yet used in this tx, so first sync our store to make sure its indices
|
|
266
258
|
// are up to date. We do this here because this store is not synced as part of the global sync because
|
|
267
259
|
// that'd be wasteful as most tagging secrets are not used in each tx.
|
|
268
|
-
await syncSenderTaggingIndexes(
|
|
269
|
-
|
|
270
|
-
|
|
260
|
+
await syncSenderTaggingIndexes(
|
|
261
|
+
secret,
|
|
262
|
+
this.aztecNode,
|
|
263
|
+
this.senderTaggingStore,
|
|
264
|
+
await this.anchorBlockHeader.hash(),
|
|
265
|
+
this.jobId,
|
|
266
|
+
);
|
|
267
|
+
|
|
268
|
+
const lastUsedIndex = await this.senderTaggingStore.getLastUsedIndex(secret, this.jobId);
|
|
271
269
|
// If lastUsedIndex is undefined, we've never used this secret, so start from 0
|
|
272
270
|
// Otherwise, the next index to use is one past the last used index
|
|
273
271
|
return lastUsedIndex === undefined ? 0 : lastUsedIndex + 1;
|
|
@@ -279,7 +277,7 @@ export class PrivateExecutionOracle extends UtilityExecutionOracle implements IP
|
|
|
279
277
|
* @param values - Values to store.
|
|
280
278
|
* @returns The hash of the values.
|
|
281
279
|
*/
|
|
282
|
-
public
|
|
280
|
+
public storeInExecutionCache(values: Fr[], hash: Fr) {
|
|
283
281
|
return this.executionCache.store(values, hash);
|
|
284
282
|
}
|
|
285
283
|
|
|
@@ -288,7 +286,7 @@ export class PrivateExecutionOracle extends UtilityExecutionOracle implements IP
|
|
|
288
286
|
* @param hash - Hash of the values.
|
|
289
287
|
* @returns The values.
|
|
290
288
|
*/
|
|
291
|
-
public
|
|
289
|
+
public loadFromExecutionCache(hash: Fr): Promise<Fr[]> {
|
|
292
290
|
const preimage = this.executionCache.getPreimage(hash);
|
|
293
291
|
if (!preimage) {
|
|
294
292
|
throw new Error(`Preimage for hash ${hash.toString()} not found in cache`);
|
|
@@ -296,12 +294,12 @@ export class PrivateExecutionOracle extends UtilityExecutionOracle implements IP
|
|
|
296
294
|
return Promise.resolve(preimage);
|
|
297
295
|
}
|
|
298
296
|
|
|
299
|
-
override async
|
|
297
|
+
override async checkNullifierExists(innerNullifier: Fr): Promise<boolean> {
|
|
300
298
|
// This oracle must be overridden because while utility execution can only meaningfully check if a nullifier exists
|
|
301
299
|
// in the synched block, during private execution there's also the possibility of it being pending, i.e. created
|
|
302
300
|
// in the current transaction.
|
|
303
301
|
|
|
304
|
-
this.
|
|
302
|
+
this.logger.debug(`Checking existence of inner nullifier ${innerNullifier}`, {
|
|
305
303
|
contractAddress: this.contractAddress,
|
|
306
304
|
});
|
|
307
305
|
|
|
@@ -309,7 +307,7 @@ export class PrivateExecutionOracle extends UtilityExecutionOracle implements IP
|
|
|
309
307
|
|
|
310
308
|
return (
|
|
311
309
|
this.noteCache.getNullifiers(this.contractAddress).has(nullifier) ||
|
|
312
|
-
(await super.
|
|
310
|
+
(await super.checkNullifierExists(innerNullifier))
|
|
313
311
|
);
|
|
314
312
|
}
|
|
315
313
|
|
|
@@ -334,7 +332,7 @@ export class PrivateExecutionOracle extends UtilityExecutionOracle implements IP
|
|
|
334
332
|
* @param status - The status of notes to fetch.
|
|
335
333
|
* @returns Array of note data.
|
|
336
334
|
*/
|
|
337
|
-
public override async
|
|
335
|
+
public override async getNotes(
|
|
338
336
|
owner: AztecAddress | undefined,
|
|
339
337
|
storageSlot: Fr,
|
|
340
338
|
numSelects: number,
|
|
@@ -356,7 +354,7 @@ export class PrivateExecutionOracle extends UtilityExecutionOracle implements IP
|
|
|
356
354
|
|
|
357
355
|
const pendingNullifiers = this.noteCache.getNullifiers(this.callContext.contractAddress);
|
|
358
356
|
|
|
359
|
-
const noteService = new NoteService(this.noteStore, this.aztecNode, this.
|
|
357
|
+
const noteService = new NoteService(this.noteStore, this.aztecNode, this.anchorBlockHeader, this.jobId);
|
|
360
358
|
const dbNotes = await noteService.getNotes(
|
|
361
359
|
this.callContext.contractAddress,
|
|
362
360
|
owner,
|
|
@@ -380,7 +378,7 @@ export class PrivateExecutionOracle extends UtilityExecutionOracle implements IP
|
|
|
380
378
|
offset,
|
|
381
379
|
});
|
|
382
380
|
|
|
383
|
-
this.
|
|
381
|
+
this.logger.debug(
|
|
384
382
|
`Returning ${notes.length} notes for ${this.callContext.contractAddress} at ${storageSlot}: ${notes
|
|
385
383
|
.map(n => `${n.noteNonce.toString()}:[${n.note.items.map(i => i.toString()).join(',')}]`)
|
|
386
384
|
.join(', ')}`,
|
|
@@ -400,7 +398,7 @@ export class PrivateExecutionOracle extends UtilityExecutionOracle implements IP
|
|
|
400
398
|
* @param noteHash - A hash of the new note.
|
|
401
399
|
* @returns
|
|
402
400
|
*/
|
|
403
|
-
public
|
|
401
|
+
public notifyCreatedNote(
|
|
404
402
|
owner: AztecAddress,
|
|
405
403
|
storageSlot: Fr,
|
|
406
404
|
randomness: Fr,
|
|
@@ -409,7 +407,7 @@ export class PrivateExecutionOracle extends UtilityExecutionOracle implements IP
|
|
|
409
407
|
noteHash: Fr,
|
|
410
408
|
counter: number,
|
|
411
409
|
) {
|
|
412
|
-
this.
|
|
410
|
+
this.logger.debug(`Notified of new note with inner hash ${noteHash}`, {
|
|
413
411
|
contractAddress: this.callContext.contractAddress,
|
|
414
412
|
storageSlot,
|
|
415
413
|
randomness,
|
|
@@ -428,6 +426,7 @@ export class PrivateExecutionOracle extends UtilityExecutionOracle implements IP
|
|
|
428
426
|
note,
|
|
429
427
|
siloedNullifier: undefined, // Siloed nullifier cannot be known for newly created note.
|
|
430
428
|
noteHash,
|
|
429
|
+
isPending: true, // This note has just been created and hence is not settled yet.
|
|
431
430
|
},
|
|
432
431
|
counter,
|
|
433
432
|
);
|
|
@@ -440,7 +439,7 @@ export class PrivateExecutionOracle extends UtilityExecutionOracle implements IP
|
|
|
440
439
|
* @param innerNullifier - The pending nullifier to add in the list (not yet siloed by contract address).
|
|
441
440
|
* @param noteHash - A hash of the new note.
|
|
442
441
|
*/
|
|
443
|
-
public async
|
|
442
|
+
public async notifyNullifiedNote(innerNullifier: Fr, noteHash: Fr, counter: number) {
|
|
444
443
|
const nullifiedNoteHashCounter = await this.noteCache.nullifyNote(
|
|
445
444
|
this.callContext.contractAddress,
|
|
446
445
|
innerNullifier,
|
|
@@ -457,11 +456,24 @@ export class PrivateExecutionOracle extends UtilityExecutionOracle implements IP
|
|
|
457
456
|
* @param innerNullifier - The pending nullifier to add in the list (not yet siloed by contract address).
|
|
458
457
|
* @param noteHash - A hash of the new note.
|
|
459
458
|
*/
|
|
460
|
-
public
|
|
461
|
-
this.
|
|
459
|
+
public notifyCreatedNullifier(innerNullifier: Fr) {
|
|
460
|
+
this.logger.debug(`Notified of new inner nullifier ${innerNullifier}`, { contractAddress: this.contractAddress });
|
|
462
461
|
return this.noteCache.nullifierCreated(this.callContext.contractAddress, innerNullifier);
|
|
463
462
|
}
|
|
464
463
|
|
|
464
|
+
/**
|
|
465
|
+
* Check if a nullifier has been emitted in the same transaction, i.e. if notifyCreatedNullifier has been
|
|
466
|
+
* called for this inner nullifier from the contract with the specified address.
|
|
467
|
+
* @param innerNullifier - The inner nullifier to check.
|
|
468
|
+
* @param contractAddress - Address of the contract that emitted the nullifier.
|
|
469
|
+
* @returns A boolean indicating whether the nullifier is pending or not.
|
|
470
|
+
*/
|
|
471
|
+
public async isNullifierPending(innerNullifier: Fr, contractAddress: AztecAddress): Promise<boolean> {
|
|
472
|
+
const siloedNullifier = await siloNullifier(contractAddress, innerNullifier);
|
|
473
|
+
const isNullifierPending = this.noteCache.getNullifiers(contractAddress).has(siloedNullifier.toBigInt());
|
|
474
|
+
return Promise.resolve(isNullifierPending);
|
|
475
|
+
}
|
|
476
|
+
|
|
465
477
|
/**
|
|
466
478
|
* Emit a contract class log.
|
|
467
479
|
* This fn exists because we only carry a poseidon hash through the kernels, and need to
|
|
@@ -469,10 +481,10 @@ export class PrivateExecutionOracle extends UtilityExecutionOracle implements IP
|
|
|
469
481
|
* @param log - The contract class log to be emitted.
|
|
470
482
|
* @param counter - The contract class log's counter.
|
|
471
483
|
*/
|
|
472
|
-
public
|
|
484
|
+
public notifyCreatedContractClassLog(log: ContractClassLog, counter: number) {
|
|
473
485
|
this.contractClassLogs.push(new CountedContractClassLog(log, counter));
|
|
474
486
|
const text = log.toBuffer().toString('hex');
|
|
475
|
-
this.
|
|
487
|
+
this.logger.verbose(
|
|
476
488
|
`Emitted log from ContractClassRegistry: "${text.length > 100 ? text.slice(0, 100) + '...' : text}"`,
|
|
477
489
|
);
|
|
478
490
|
}
|
|
@@ -498,7 +510,7 @@ export class PrivateExecutionOracle extends UtilityExecutionOracle implements IP
|
|
|
498
510
|
* @param isStaticCall - Whether the call is a static call.
|
|
499
511
|
* @returns The execution result.
|
|
500
512
|
*/
|
|
501
|
-
async
|
|
513
|
+
async callPrivateFunction(
|
|
502
514
|
targetContractAddress: AztecAddress,
|
|
503
515
|
functionSelector: FunctionSelector,
|
|
504
516
|
argsHash: Fr,
|
|
@@ -512,15 +524,20 @@ export class PrivateExecutionOracle extends UtilityExecutionOracle implements IP
|
|
|
512
524
|
}
|
|
513
525
|
|
|
514
526
|
const simulatorSetupTimer = new Timer();
|
|
515
|
-
this.
|
|
527
|
+
this.logger.debug(
|
|
516
528
|
`Calling private function ${targetContractAddress}:${functionSelector} from ${this.callContext.contractAddress}`,
|
|
517
529
|
);
|
|
518
530
|
|
|
519
531
|
isStaticCall = isStaticCall || this.callContext.isStaticCall;
|
|
520
532
|
|
|
521
|
-
await
|
|
522
|
-
|
|
523
|
-
|
|
533
|
+
await this.contractSyncService.ensureContractSynced(
|
|
534
|
+
targetContractAddress,
|
|
535
|
+
functionSelector,
|
|
536
|
+
this.utilityExecutor,
|
|
537
|
+
this.anchorBlockHeader,
|
|
538
|
+
this.jobId,
|
|
539
|
+
this.scopes,
|
|
540
|
+
);
|
|
524
541
|
|
|
525
542
|
const targetArtifact = await this.contractStore.getFunctionArtifactWithDebugMetadata(
|
|
526
543
|
targetContractAddress,
|
|
@@ -531,41 +548,41 @@ export class PrivateExecutionOracle extends UtilityExecutionOracle implements IP
|
|
|
531
548
|
|
|
532
549
|
const derivedCallContext = await this.deriveCallContext(targetContractAddress, targetArtifact, isStaticCall);
|
|
533
550
|
|
|
534
|
-
const privateExecutionOracle = new PrivateExecutionOracle(
|
|
551
|
+
const privateExecutionOracle = new PrivateExecutionOracle({
|
|
535
552
|
argsHash,
|
|
536
|
-
derivedTxContext,
|
|
537
|
-
derivedCallContext,
|
|
538
|
-
this.anchorBlockHeader,
|
|
539
|
-
this.utilityExecutor,
|
|
540
|
-
this.authWitnesses,
|
|
541
|
-
this.capsules,
|
|
542
|
-
this.executionCache,
|
|
543
|
-
this.noteCache,
|
|
544
|
-
this.taggingIndexCache,
|
|
545
|
-
this.contractStore,
|
|
546
|
-
this.noteStore,
|
|
547
|
-
this.keyStore,
|
|
548
|
-
this.addressStore,
|
|
549
|
-
this.aztecNode,
|
|
550
|
-
this.
|
|
551
|
-
this.
|
|
552
|
-
this.
|
|
553
|
-
this.
|
|
554
|
-
this.
|
|
555
|
-
this.
|
|
556
|
-
this.jobId,
|
|
557
|
-
this.totalPublicCalldataCount,
|
|
553
|
+
txContext: derivedTxContext,
|
|
554
|
+
callContext: derivedCallContext,
|
|
555
|
+
anchorBlockHeader: this.anchorBlockHeader,
|
|
556
|
+
utilityExecutor: this.utilityExecutor,
|
|
557
|
+
authWitnesses: this.authWitnesses,
|
|
558
|
+
capsules: this.capsules,
|
|
559
|
+
executionCache: this.executionCache,
|
|
560
|
+
noteCache: this.noteCache,
|
|
561
|
+
taggingIndexCache: this.taggingIndexCache,
|
|
562
|
+
contractStore: this.contractStore,
|
|
563
|
+
noteStore: this.noteStore,
|
|
564
|
+
keyStore: this.keyStore,
|
|
565
|
+
addressStore: this.addressStore,
|
|
566
|
+
aztecNode: this.aztecNode,
|
|
567
|
+
senderTaggingStore: this.senderTaggingStore,
|
|
568
|
+
recipientTaggingStore: this.recipientTaggingStore,
|
|
569
|
+
senderAddressBookStore: this.senderAddressBookStore,
|
|
570
|
+
capsuleStore: this.capsuleStore,
|
|
571
|
+
privateEventStore: this.privateEventStore,
|
|
572
|
+
contractSyncService: this.contractSyncService,
|
|
573
|
+
jobId: this.jobId,
|
|
574
|
+
totalPublicCalldataCount: this.totalPublicCalldataCount,
|
|
558
575
|
sideEffectCounter,
|
|
559
|
-
this.
|
|
560
|
-
this.scopes,
|
|
561
|
-
this.senderForTags,
|
|
562
|
-
this.simulator
|
|
563
|
-
);
|
|
576
|
+
log: this.logger,
|
|
577
|
+
scopes: this.scopes,
|
|
578
|
+
senderForTags: this.senderForTags,
|
|
579
|
+
simulator: this.simulator!,
|
|
580
|
+
});
|
|
564
581
|
|
|
565
582
|
const setupTime = simulatorSetupTimer.ms();
|
|
566
583
|
|
|
567
584
|
const childExecutionResult = await executePrivateFunction(
|
|
568
|
-
this.simulator
|
|
585
|
+
this.simulator!,
|
|
569
586
|
privateExecutionOracle,
|
|
570
587
|
targetArtifact,
|
|
571
588
|
targetContractAddress,
|
|
@@ -591,7 +608,8 @@ export class PrivateExecutionOracle extends UtilityExecutionOracle implements IP
|
|
|
591
608
|
};
|
|
592
609
|
}
|
|
593
610
|
|
|
594
|
-
|
|
611
|
+
/** Validates the calldata preimage exists in the cache and checks cumulative calldata size is within limits. */
|
|
612
|
+
public validatePublicCalldata(calldataHash: Fr) {
|
|
595
613
|
const calldata = this.executionCache.getPreimage(calldataHash);
|
|
596
614
|
if (!calldata) {
|
|
597
615
|
throw new Error('Calldata for public call not found in cache');
|
|
@@ -601,47 +619,14 @@ export class PrivateExecutionOracle extends UtilityExecutionOracle implements IP
|
|
|
601
619
|
if (this.totalPublicCalldataCount > MAX_FR_CALLDATA_TO_ALL_ENQUEUED_CALLS) {
|
|
602
620
|
throw new Error(`Too many total args to all enqueued public calls! (> ${MAX_FR_CALLDATA_TO_ALL_ENQUEUED_CALLS})`);
|
|
603
621
|
}
|
|
604
|
-
}
|
|
605
|
-
|
|
606
|
-
/**
|
|
607
|
-
* Verify relevant information when a public function is enqueued.
|
|
608
|
-
* @param targetContractAddress - The address of the contract to call.
|
|
609
|
-
* @param calldataHash - The hash of the function selector and arguments.
|
|
610
|
-
* @param sideEffectCounter - The side effect counter at the start of the call.
|
|
611
|
-
* @param isStaticCall - Whether the call is a static call.
|
|
612
|
-
*/
|
|
613
|
-
public privateNotifyEnqueuedPublicFunctionCall(
|
|
614
|
-
_targetContractAddress: AztecAddress,
|
|
615
|
-
calldataHash: Fr,
|
|
616
|
-
_sideEffectCounter: number,
|
|
617
|
-
_isStaticCall: boolean,
|
|
618
|
-
) {
|
|
619
|
-
this.#onNewPublicFunctionCall(calldataHash);
|
|
620
|
-
return Promise.resolve();
|
|
621
|
-
}
|
|
622
|
-
|
|
623
|
-
/**
|
|
624
|
-
* Verify relevant information when a public teardown function is set.
|
|
625
|
-
* @param targetContractAddress - The address of the contract to call.
|
|
626
|
-
* @param argsHash - The arguments hash to pass to the function.
|
|
627
|
-
* @param sideEffectCounter - The side effect counter at the start of the call.
|
|
628
|
-
* @param isStaticCall - Whether the call is a static call.
|
|
629
|
-
*/
|
|
630
|
-
public privateNotifySetPublicTeardownFunctionCall(
|
|
631
|
-
_targetContractAddress: AztecAddress,
|
|
632
|
-
calldataHash: Fr,
|
|
633
|
-
_sideEffectCounter: number,
|
|
634
|
-
_isStaticCall: boolean,
|
|
635
|
-
) {
|
|
636
|
-
this.#onNewPublicFunctionCall(calldataHash);
|
|
637
622
|
return Promise.resolve();
|
|
638
623
|
}
|
|
639
624
|
|
|
640
|
-
public
|
|
625
|
+
public notifyRevertiblePhaseStart(minRevertibleSideEffectCounter: number): Promise<void> {
|
|
641
626
|
return this.noteCache.setMinRevertibleSideEffectCounter(minRevertibleSideEffectCounter);
|
|
642
627
|
}
|
|
643
628
|
|
|
644
|
-
public
|
|
629
|
+
public inRevertiblePhase(sideEffectCounter: number): Promise<boolean> {
|
|
645
630
|
return Promise.resolve(this.noteCache.isSideEffectCounterRevertible(sideEffectCounter));
|
|
646
631
|
}
|
|
647
632
|
|
|
@@ -669,7 +654,7 @@ export class PrivateExecutionOracle extends UtilityExecutionOracle implements IP
|
|
|
669
654
|
return this.contractStore.getDebugFunctionName(this.contractAddress, this.callContext.functionSelector);
|
|
670
655
|
}
|
|
671
656
|
|
|
672
|
-
public
|
|
657
|
+
public emitOffchainEffect(data: Fr[]): Promise<void> {
|
|
673
658
|
this.offchainEffects.push({ data });
|
|
674
659
|
return Promise.resolve();
|
|
675
660
|
}
|