@aztec/pxe 0.0.1-commit.d1f2d6c → 0.0.1-commit.d20b825a7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dest/bin/check_oracle_version.js +5 -5
- package/dest/block_synchronizer/block_synchronizer.d.ts +10 -4
- package/dest/block_synchronizer/block_synchronizer.d.ts.map +1 -1
- package/dest/block_synchronizer/block_synchronizer.js +30 -6
- package/dest/config/index.d.ts +2 -2
- package/dest/config/index.d.ts.map +1 -1
- package/dest/config/index.js +8 -15
- package/dest/config/package_info.js +1 -1
- package/dest/contract_function_simulator/contract_function_simulator.d.ts +63 -31
- package/dest/contract_function_simulator/contract_function_simulator.d.ts.map +1 -1
- package/dest/contract_function_simulator/contract_function_simulator.js +206 -77
- package/dest/contract_function_simulator/ephemeral_array_service.d.ts +28 -0
- package/dest/contract_function_simulator/ephemeral_array_service.d.ts.map +1 -0
- package/dest/contract_function_simulator/ephemeral_array_service.js +78 -0
- package/dest/contract_function_simulator/execution_tagging_index_cache.d.ts +7 -7
- package/dest/contract_function_simulator/execution_tagging_index_cache.d.ts.map +1 -1
- package/dest/contract_function_simulator/execution_tagging_index_cache.js +19 -11
- package/dest/contract_function_simulator/index.d.ts +2 -1
- package/dest/contract_function_simulator/index.d.ts.map +1 -1
- package/dest/contract_function_simulator/index.js +1 -0
- package/dest/contract_function_simulator/noir-structs/event_validation_request.d.ts +5 -7
- package/dest/contract_function_simulator/noir-structs/event_validation_request.d.ts.map +1 -1
- package/dest/contract_function_simulator/noir-structs/event_validation_request.js +9 -11
- package/dest/contract_function_simulator/noir-structs/log_retrieval_request.d.ts +1 -1
- package/dest/contract_function_simulator/noir-structs/log_retrieval_request.js +1 -1
- package/dest/contract_function_simulator/noir-structs/log_retrieval_response.d.ts +2 -2
- package/dest/contract_function_simulator/noir-structs/log_retrieval_response.d.ts.map +1 -1
- package/dest/contract_function_simulator/noir-structs/log_retrieval_response.js +2 -4
- package/dest/contract_function_simulator/noir-structs/note_validation_request.d.ts +5 -8
- package/dest/contract_function_simulator/noir-structs/note_validation_request.d.ts.map +1 -1
- package/dest/contract_function_simulator/noir-structs/note_validation_request.js +7 -12
- package/dest/contract_function_simulator/oracle/interfaces.d.ts +62 -46
- package/dest/contract_function_simulator/oracle/interfaces.d.ts.map +1 -1
- package/dest/contract_function_simulator/oracle/legacy_oracle_mappings.d.ts +9 -0
- package/dest/contract_function_simulator/oracle/legacy_oracle_mappings.d.ts.map +1 -0
- package/dest/contract_function_simulator/oracle/legacy_oracle_mappings.js +47 -0
- package/dest/contract_function_simulator/oracle/oracle.d.ts +75 -44
- package/dest/contract_function_simulator/oracle/oracle.d.ts.map +1 -1
- package/dest/contract_function_simulator/oracle/oracle.js +310 -113
- package/dest/contract_function_simulator/oracle/private_execution.d.ts +3 -22
- package/dest/contract_function_simulator/oracle/private_execution.d.ts.map +1 -1
- package/dest/contract_function_simulator/oracle/private_execution.js +5 -49
- package/dest/contract_function_simulator/oracle/private_execution_oracle.d.ts +60 -84
- package/dest/contract_function_simulator/oracle/private_execution_oracle.d.ts.map +1 -1
- package/dest/contract_function_simulator/oracle/private_execution_oracle.js +125 -98
- package/dest/contract_function_simulator/oracle/utility_execution_oracle.d.ts +128 -70
- package/dest/contract_function_simulator/oracle/utility_execution_oracle.d.ts.map +1 -1
- package/dest/contract_function_simulator/oracle/utility_execution_oracle.js +330 -143
- package/dest/contract_function_simulator/pick_notes.d.ts +1 -1
- package/dest/contract_function_simulator/pick_notes.d.ts.map +1 -1
- package/dest/contract_function_simulator/pick_notes.js +20 -3
- package/dest/contract_function_simulator/proxied_contract_data_source.d.ts +1 -1
- package/dest/contract_function_simulator/proxied_contract_data_source.d.ts.map +1 -1
- package/dest/contract_function_simulator/proxied_contract_data_source.js +3 -0
- package/dest/contract_logging.d.ts +27 -0
- package/dest/contract_logging.d.ts.map +1 -0
- package/dest/contract_logging.js +38 -0
- package/dest/contract_sync/contract_sync_service.d.ts +44 -0
- package/dest/contract_sync/contract_sync_service.d.ts.map +1 -0
- package/dest/contract_sync/contract_sync_service.js +116 -0
- package/dest/contract_sync/helpers.d.ts +28 -0
- package/dest/contract_sync/helpers.d.ts.map +1 -0
- package/dest/contract_sync/helpers.js +60 -0
- package/dest/debug/pxe_debug_utils.d.ts +24 -10
- package/dest/debug/pxe_debug_utils.d.ts.map +1 -1
- package/dest/debug/pxe_debug_utils.js +28 -18
- package/dest/entrypoints/client/bundle/index.d.ts +3 -1
- package/dest/entrypoints/client/bundle/index.d.ts.map +1 -1
- package/dest/entrypoints/client/bundle/index.js +2 -0
- package/dest/entrypoints/client/bundle/utils.d.ts +2 -2
- package/dest/entrypoints/client/bundle/utils.d.ts.map +1 -1
- package/dest/entrypoints/client/bundle/utils.js +23 -9
- package/dest/entrypoints/client/lazy/index.d.ts +3 -1
- package/dest/entrypoints/client/lazy/index.d.ts.map +1 -1
- package/dest/entrypoints/client/lazy/index.js +2 -0
- package/dest/entrypoints/client/lazy/utils.d.ts +3 -3
- package/dest/entrypoints/client/lazy/utils.d.ts.map +1 -1
- package/dest/entrypoints/client/lazy/utils.js +24 -10
- package/dest/entrypoints/pxe_creation_options.d.ts +5 -2
- package/dest/entrypoints/pxe_creation_options.d.ts.map +1 -1
- package/dest/entrypoints/pxe_creation_options.js +3 -1
- package/dest/entrypoints/server/index.d.ts +4 -2
- package/dest/entrypoints/server/index.d.ts.map +1 -1
- package/dest/entrypoints/server/index.js +3 -1
- package/dest/entrypoints/server/utils.d.ts +2 -2
- package/dest/entrypoints/server/utils.d.ts.map +1 -1
- package/dest/entrypoints/server/utils.js +30 -11
- package/dest/events/event_service.d.ts +6 -6
- package/dest/events/event_service.d.ts.map +1 -1
- package/dest/events/event_service.js +31 -11
- package/dest/events/private_event_filter_validator.d.ts +3 -2
- package/dest/events/private_event_filter_validator.d.ts.map +1 -1
- package/dest/events/private_event_filter_validator.js +15 -0
- package/dest/job_coordinator/job_coordinator.d.ts +3 -2
- package/dest/job_coordinator/job_coordinator.d.ts.map +1 -1
- package/dest/job_coordinator/job_coordinator.js +3 -2
- package/dest/logs/log_service.d.ts +10 -9
- package/dest/logs/log_service.d.ts.map +1 -1
- package/dest/logs/log_service.js +41 -62
- package/dest/messages/message_context_service.d.ts +17 -0
- package/dest/messages/message_context_service.d.ts.map +1 -0
- package/dest/messages/message_context_service.js +36 -0
- package/dest/notes/note_service.d.ts +7 -8
- package/dest/notes/note_service.d.ts.map +1 -1
- package/dest/notes/note_service.js +23 -15
- package/dest/notes_filter.d.ts +24 -0
- package/dest/notes_filter.d.ts.map +1 -0
- package/dest/notes_filter.js +4 -0
- package/dest/oracle_version.d.ts +4 -3
- package/dest/oracle_version.d.ts.map +1 -1
- package/dest/oracle_version.js +20 -10
- package/dest/private_kernel/hints/compute_tx_expiration_timestamp.d.ts +4 -0
- package/dest/private_kernel/hints/compute_tx_expiration_timestamp.d.ts.map +1 -0
- package/dest/private_kernel/hints/{compute_tx_include_by_timestamp.js → compute_tx_expiration_timestamp.js} +12 -12
- package/dest/private_kernel/hints/index.d.ts +1 -1
- package/dest/private_kernel/hints/index.js +1 -1
- package/dest/private_kernel/hints/private_kernel_reset_private_inputs_builder.d.ts +4 -3
- package/dest/private_kernel/hints/private_kernel_reset_private_inputs_builder.d.ts.map +1 -1
- package/dest/private_kernel/hints/private_kernel_reset_private_inputs_builder.js +129 -68
- package/dest/private_kernel/hints/test_utils.d.ts +122 -0
- package/dest/private_kernel/hints/test_utils.d.ts.map +1 -0
- package/dest/private_kernel/hints/test_utils.js +203 -0
- package/dest/private_kernel/private_kernel_execution_prover.d.ts +3 -2
- package/dest/private_kernel/private_kernel_execution_prover.d.ts.map +1 -1
- package/dest/private_kernel/private_kernel_execution_prover.js +20 -15
- package/dest/private_kernel/private_kernel_oracle.d.ts +10 -6
- package/dest/private_kernel/private_kernel_oracle.d.ts.map +1 -1
- package/dest/private_kernel/private_kernel_oracle.js +19 -18
- package/dest/pxe.d.ts +85 -24
- package/dest/pxe.d.ts.map +1 -1
- package/dest/pxe.js +169 -87
- package/dest/storage/address_store/address_store.d.ts +1 -1
- package/dest/storage/address_store/address_store.d.ts.map +1 -1
- package/dest/storage/address_store/address_store.js +12 -11
- package/dest/storage/anchor_block_store/anchor_block_store.d.ts +9 -1
- package/dest/storage/anchor_block_store/anchor_block_store.d.ts.map +1 -1
- package/dest/storage/anchor_block_store/anchor_block_store.js +9 -2
- package/dest/storage/capsule_store/capsule_service.d.ts +21 -0
- package/dest/storage/capsule_store/capsule_service.d.ts.map +1 -0
- package/dest/storage/capsule_store/capsule_service.js +50 -0
- package/dest/storage/capsule_store/capsule_store.d.ts +9 -9
- package/dest/storage/capsule_store/capsule_store.d.ts.map +1 -1
- package/dest/storage/capsule_store/capsule_store.js +42 -36
- package/dest/storage/capsule_store/index.d.ts +2 -1
- package/dest/storage/capsule_store/index.d.ts.map +1 -1
- package/dest/storage/capsule_store/index.js +1 -0
- package/dest/storage/contract_store/contract_store.d.ts +42 -16
- package/dest/storage/contract_store/contract_store.d.ts.map +1 -1
- package/dest/storage/contract_store/contract_store.js +160 -85
- package/dest/storage/metadata.d.ts +1 -1
- package/dest/storage/metadata.js +1 -1
- package/dest/storage/note_store/note_store.d.ts +14 -4
- package/dest/storage/note_store/note_store.d.ts.map +1 -1
- package/dest/storage/note_store/note_store.js +149 -109
- package/dest/storage/private_event_store/private_event_store.d.ts +1 -1
- package/dest/storage/private_event_store/private_event_store.d.ts.map +1 -1
- package/dest/storage/private_event_store/private_event_store.js +87 -61
- package/dest/storage/private_event_store/stored_private_event.d.ts +4 -4
- package/dest/storage/private_event_store/stored_private_event.d.ts.map +1 -1
- package/dest/storage/private_event_store/stored_private_event.js +2 -2
- package/dest/storage/tagging_store/recipient_tagging_store.d.ts +6 -6
- package/dest/storage/tagging_store/recipient_tagging_store.d.ts.map +1 -1
- package/dest/storage/tagging_store/recipient_tagging_store.js +31 -19
- package/dest/storage/tagging_store/sender_address_book_store.d.ts +1 -1
- package/dest/storage/tagging_store/sender_address_book_store.d.ts.map +1 -1
- package/dest/storage/tagging_store/sender_address_book_store.js +20 -14
- package/dest/storage/tagging_store/sender_tagging_store.d.ts +29 -28
- package/dest/storage/tagging_store/sender_tagging_store.d.ts.map +1 -1
- package/dest/storage/tagging_store/sender_tagging_store.js +233 -137
- package/dest/tagging/get_all_logs_by_tags.d.ts +4 -4
- package/dest/tagging/get_all_logs_by_tags.d.ts.map +1 -1
- package/dest/tagging/get_all_logs_by_tags.js +17 -3
- package/dest/tagging/index.d.ts +3 -3
- package/dest/tagging/index.d.ts.map +1 -1
- package/dest/tagging/index.js +1 -1
- package/dest/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.d.ts +5 -6
- package/dest/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.d.ts.map +1 -1
- package/dest/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.js +8 -22
- package/dest/tagging/recipient_sync/utils/find_highest_indexes.js +2 -2
- package/dest/tagging/recipient_sync/utils/load_logs_for_range.d.ts +7 -8
- package/dest/tagging/recipient_sync/utils/load_logs_for_range.d.ts.map +1 -1
- package/dest/tagging/recipient_sync/utils/load_logs_for_range.js +12 -11
- package/dest/tagging/sender_sync/sync_sender_tagging_indexes.d.ts +5 -9
- package/dest/tagging/sender_sync/sync_sender_tagging_indexes.d.ts.map +1 -1
- package/dest/tagging/sender_sync/sync_sender_tagging_indexes.js +13 -7
- package/dest/tagging/sender_sync/utils/get_status_change_of_pending.d.ts +4 -3
- package/dest/tagging/sender_sync/utils/get_status_change_of_pending.d.ts.map +1 -1
- package/dest/tagging/sender_sync/utils/get_status_change_of_pending.js +20 -10
- package/dest/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.d.ts +6 -8
- package/dest/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.d.ts.map +1 -1
- package/dest/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.js +36 -24
- package/package.json +25 -16
- package/src/bin/check_oracle_version.ts +5 -4
- package/src/block_synchronizer/block_synchronizer.ts +45 -21
- package/src/config/index.ts +3 -9
- package/src/config/package_info.ts +1 -1
- package/src/contract_function_simulator/contract_function_simulator.ts +366 -136
- package/src/contract_function_simulator/ephemeral_array_service.ts +110 -0
- package/src/contract_function_simulator/execution_tagging_index_cache.ts +19 -14
- package/src/contract_function_simulator/index.ts +1 -0
- package/src/contract_function_simulator/noir-structs/event_validation_request.ts +10 -10
- package/src/contract_function_simulator/noir-structs/log_retrieval_request.ts +1 -1
- package/src/contract_function_simulator/noir-structs/log_retrieval_response.ts +2 -5
- package/src/contract_function_simulator/noir-structs/note_validation_request.ts +5 -11
- package/src/contract_function_simulator/oracle/interfaces.ts +90 -62
- package/src/contract_function_simulator/oracle/legacy_oracle_mappings.ts +104 -0
- package/src/contract_function_simulator/oracle/oracle.ts +391 -150
- package/src/contract_function_simulator/oracle/private_execution.ts +5 -83
- package/src/contract_function_simulator/oracle/private_execution_oracle.ts +160 -193
- package/src/contract_function_simulator/oracle/utility_execution_oracle.ts +552 -179
- package/src/contract_function_simulator/pick_notes.ts +22 -3
- package/src/contract_function_simulator/proxied_contract_data_source.ts +8 -1
- package/src/contract_logging.ts +52 -0
- package/src/contract_sync/contract_sync_service.ts +176 -0
- package/src/contract_sync/helpers.ts +98 -0
- package/src/debug/pxe_debug_utils.ts +63 -19
- package/src/entrypoints/client/bundle/index.ts +2 -0
- package/src/entrypoints/client/bundle/utils.ts +18 -18
- package/src/entrypoints/client/lazy/index.ts +2 -0
- package/src/entrypoints/client/lazy/utils.ts +19 -18
- package/src/entrypoints/pxe_creation_options.ts +9 -1
- package/src/entrypoints/server/index.ts +3 -1
- package/src/entrypoints/server/utils.ts +24 -29
- package/src/events/event_service.ts +35 -12
- package/src/events/private_event_filter_validator.ts +21 -1
- package/src/job_coordinator/job_coordinator.ts +4 -3
- package/src/logs/log_service.ts +77 -106
- package/src/messages/message_context_service.ts +44 -0
- package/src/notes/note_service.ts +25 -17
- package/src/notes_filter.ts +24 -0
- package/src/oracle_version.ts +20 -10
- package/src/private_kernel/hints/{compute_tx_include_by_timestamp.ts → compute_tx_expiration_timestamp.ts} +13 -13
- package/src/private_kernel/hints/index.ts +1 -1
- package/src/private_kernel/hints/private_kernel_reset_private_inputs_builder.ts +164 -117
- package/src/private_kernel/hints/test_utils.ts +325 -0
- package/src/private_kernel/private_kernel_execution_prover.ts +24 -19
- package/src/private_kernel/private_kernel_oracle.ts +21 -21
- package/src/pxe.ts +318 -144
- package/src/storage/address_store/address_store.ts +15 -15
- package/src/storage/anchor_block_store/anchor_block_store.ts +9 -1
- package/src/storage/capsule_store/capsule_service.ts +90 -0
- package/src/storage/capsule_store/capsule_store.ts +52 -34
- package/src/storage/capsule_store/index.ts +1 -0
- package/src/storage/contract_store/contract_store.ts +193 -101
- package/src/storage/metadata.ts +1 -1
- package/src/storage/note_store/note_store.ts +168 -134
- package/src/storage/private_event_store/private_event_store.ts +106 -81
- package/src/storage/private_event_store/stored_private_event.ts +3 -3
- package/src/storage/tagging_store/recipient_tagging_store.ts +38 -24
- package/src/storage/tagging_store/sender_address_book_store.ts +20 -14
- package/src/storage/tagging_store/sender_tagging_store.ts +287 -156
- package/src/tagging/get_all_logs_by_tags.ts +31 -7
- package/src/tagging/index.ts +2 -2
- package/src/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.ts +14 -27
- package/src/tagging/recipient_sync/utils/find_highest_indexes.ts +2 -2
- package/src/tagging/recipient_sync/utils/load_logs_for_range.ts +12 -17
- package/src/tagging/sender_sync/sync_sender_tagging_indexes.ts +25 -12
- package/src/tagging/sender_sync/utils/get_status_change_of_pending.ts +26 -11
- package/src/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.ts +30 -29
- package/dest/private_kernel/hints/compute_tx_include_by_timestamp.d.ts +0 -4
- package/dest/private_kernel/hints/compute_tx_include_by_timestamp.d.ts.map +0 -1
|
@@ -4,52 +4,66 @@ import { createLogger } from '@aztec/foundation/log';
|
|
|
4
4
|
import { Timer } from '@aztec/foundation/timer';
|
|
5
5
|
import { toACVMWitness } from '@aztec/simulator/client';
|
|
6
6
|
import { FunctionSelector, countArgumentsSize } from '@aztec/stdlib/abi';
|
|
7
|
-
import { L2BlockHash } from '@aztec/stdlib/block';
|
|
8
7
|
import { siloNullifier } from '@aztec/stdlib/hash';
|
|
9
8
|
import { PrivateContextInputs } from '@aztec/stdlib/kernel';
|
|
10
|
-
import {
|
|
9
|
+
import { ExtendedDirectionalAppTaggingSecret } from '@aztec/stdlib/logs';
|
|
11
10
|
import { Tag } from '@aztec/stdlib/logs';
|
|
12
11
|
import { Note } from '@aztec/stdlib/note';
|
|
13
12
|
import { CallContext, CountedContractClassLog, NoteAndSlot } from '@aztec/stdlib/tx';
|
|
14
13
|
import { NoteService } from '../../notes/note_service.js';
|
|
15
14
|
import { syncSenderTaggingIndexes } from '../../tagging/index.js';
|
|
16
15
|
import { pickNotes } from '../pick_notes.js';
|
|
17
|
-
import {
|
|
16
|
+
import { executePrivateFunction } from './private_execution.js';
|
|
18
17
|
import { UtilityExecutionOracle } from './utility_execution_oracle.js';
|
|
19
18
|
/**
|
|
20
19
|
* The execution oracle for the private part of a transaction.
|
|
21
20
|
*/ export class PrivateExecutionOracle extends UtilityExecutionOracle {
|
|
21
|
+
isPrivate = true;
|
|
22
|
+
/**
|
|
23
|
+
* New notes created during this execution.
|
|
24
|
+
* It's possible that a note in this list has been nullified (in the same or other executions) and doesn't exist in
|
|
25
|
+
* the ExecutionNoteCache and the final proof data. But we still include those notes in the execution result because
|
|
26
|
+
* their commitments are still in the public inputs of this execution.
|
|
27
|
+
* This information is only for references (currently used for tests), and is not used for any sort of constrains.
|
|
28
|
+
* Users can also use this to get a clearer idea of what's happened during a simulation.
|
|
29
|
+
*/ newNotes = [];
|
|
30
|
+
noteHashNullifierCounterMap = new Map();
|
|
31
|
+
contractClassLogs = [];
|
|
32
|
+
nestedExecutionResults = [];
|
|
22
33
|
argsHash;
|
|
23
34
|
txContext;
|
|
24
35
|
callContext;
|
|
25
|
-
anchorBlockHeader;
|
|
26
36
|
utilityExecutor;
|
|
27
37
|
executionCache;
|
|
28
38
|
noteCache;
|
|
29
39
|
taggingIndexCache;
|
|
30
40
|
senderTaggingStore;
|
|
31
41
|
totalPublicCalldataCount;
|
|
32
|
-
|
|
33
|
-
|
|
42
|
+
initialSideEffectCounter;
|
|
43
|
+
/** Sender for tags passed in at oracle construction time. Returned by `getSenderForTags` unless overridden. */ defaultSenderForTags;
|
|
44
|
+
/** Per-call sender-for-tags override, set by `setSenderForTags`. Takes precedence over `defaultSenderForTags`. */ currentSenderForTags;
|
|
34
45
|
simulator;
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
46
|
+
constructor(args){
|
|
47
|
+
super({
|
|
48
|
+
...args,
|
|
49
|
+
contractAddress: args.callContext.contractAddress,
|
|
50
|
+
log: args.log ?? createLogger('simulator:client_execution_context')
|
|
51
|
+
});
|
|
52
|
+
this.argsHash = args.argsHash;
|
|
53
|
+
this.txContext = args.txContext;
|
|
54
|
+
this.callContext = args.callContext;
|
|
55
|
+
this.utilityExecutor = args.utilityExecutor;
|
|
56
|
+
this.executionCache = args.executionCache;
|
|
57
|
+
this.noteCache = args.noteCache;
|
|
58
|
+
this.taggingIndexCache = args.taggingIndexCache;
|
|
59
|
+
this.senderTaggingStore = args.senderTaggingStore;
|
|
60
|
+
this.totalPublicCalldataCount = args.totalPublicCalldataCount ?? 0;
|
|
61
|
+
this.initialSideEffectCounter = args.sideEffectCounter ?? 0;
|
|
62
|
+
this.defaultSenderForTags = args.senderForTags;
|
|
63
|
+
this.simulator = args.simulator;
|
|
50
64
|
}
|
|
51
65
|
getPrivateContextInputs() {
|
|
52
|
-
return new PrivateContextInputs(this.callContext, this.anchorBlockHeader, this.txContext, this.
|
|
66
|
+
return new PrivateContextInputs(this.callContext, this.anchorBlockHeader, this.txContext, this.initialSideEffectCounter);
|
|
53
67
|
}
|
|
54
68
|
// We still need this function until we can get user-defined ordering of structs for fn arguments
|
|
55
69
|
// TODO When that is sorted out on noir side, we can use instead the utilities in serialize.ts
|
|
@@ -87,14 +101,9 @@ import { UtilityExecutionOracle } from './utility_execution_oracle.js';
|
|
|
87
101
|
return this.contractClassLogs;
|
|
88
102
|
}
|
|
89
103
|
/**
|
|
90
|
-
*
|
|
91
|
-
*/
|
|
92
|
-
return this.
|
|
93
|
-
}
|
|
94
|
-
/**
|
|
95
|
-
* Returns the pre-tags that were used in this execution (and that need to be stored in the db).
|
|
96
|
-
*/ getUsedPreTags() {
|
|
97
|
-
return this.taggingIndexCache.getUsedPreTags();
|
|
104
|
+
* Returns the tagging index ranges that were used in this execution (and that need to be stored in the db).
|
|
105
|
+
*/ getUsedTaggingIndexRanges() {
|
|
106
|
+
return this.taggingIndexCache.getUsedTaggingIndexRanges();
|
|
98
107
|
}
|
|
99
108
|
/**
|
|
100
109
|
* Return the nested execution results during this execution.
|
|
@@ -108,10 +117,9 @@ import { UtilityExecutionOracle } from './utility_execution_oracle.js';
|
|
|
108
117
|
* for a tag in order to emit a log. Constrained tagging should not use this as there is no
|
|
109
118
|
* guarantee that the recipient knows about the sender, and hence about the shared secret.
|
|
110
119
|
*
|
|
111
|
-
*
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
return Promise.resolve(this.senderForTags);
|
|
120
|
+
* Returns `currentSenderForTags` if set (via `setSenderForTags`), otherwise `defaultSenderForTags`.
|
|
121
|
+
*/ getSenderForTags() {
|
|
122
|
+
return Promise.resolve(this.currentSenderForTags ?? this.defaultSenderForTags);
|
|
115
123
|
}
|
|
116
124
|
/**
|
|
117
125
|
* Set the sender for tags.
|
|
@@ -120,11 +128,11 @@ import { UtilityExecutionOracle } from './utility_execution_oracle.js';
|
|
|
120
128
|
* for a tag in order to emit a log. Constrained tagging should not use this as there is no
|
|
121
129
|
* guarantee that the recipient knows about the sender, and hence about the shared secret.
|
|
122
130
|
*
|
|
123
|
-
*
|
|
124
|
-
*
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
this.
|
|
131
|
+
* Overrides `defaultSenderForTags` for the remainder of this call. Each oracle instance is
|
|
132
|
+
* independent, so this has no effect on any other call in the execution.
|
|
133
|
+
*/ setSenderForTags(senderForTags) {
|
|
134
|
+
this.logger.debug(`Sender for tags switched to ${senderForTags} by contract ${this.contractAddress} (default was ${this.defaultSenderForTags})`);
|
|
135
|
+
this.currentSenderForTags = senderForTags;
|
|
128
136
|
return Promise.resolve();
|
|
129
137
|
}
|
|
130
138
|
/**
|
|
@@ -132,20 +140,29 @@ import { UtilityExecutionOracle } from './utility_execution_oracle.js';
|
|
|
132
140
|
* @param sender - The address sending the log
|
|
133
141
|
* @param recipient - The address receiving the log
|
|
134
142
|
* @returns An app tag to be used in a log.
|
|
135
|
-
*/ async
|
|
136
|
-
const
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
143
|
+
*/ async getNextAppTagAsSender(sender, recipient) {
|
|
144
|
+
const extendedSecret = await this.#calculateExtendedDirectionalAppTaggingSecret(this.contractAddress, sender, recipient);
|
|
145
|
+
if (!extendedSecret) {
|
|
146
|
+
// We'd only fail to compute an extended secret if the recipient is an invalid address. To prevent
|
|
147
|
+
// king-of-the-hill attacks, instead of failing we use a random tag. By including a correct-looking tag in the
|
|
148
|
+
// log, the transaction shape is preserved and no privacy is leaked, even if the tag is bogus.
|
|
149
|
+
this.logger.warn(`Computing a tag for invalid recipient ${recipient} - returning a random tag instead`, {
|
|
150
|
+
contractAddress: this.contractAddress
|
|
151
|
+
});
|
|
152
|
+
return Tag.random();
|
|
153
|
+
}
|
|
154
|
+
const index = await this.#getIndexToUseForSecret(extendedSecret);
|
|
155
|
+
this.logger.debug(`Incrementing tagging index for sender: ${sender}, recipient: ${recipient}, contract: ${this.contractAddress} to ${index}`);
|
|
156
|
+
this.taggingIndexCache.setLastUsedIndex(extendedSecret, index);
|
|
140
157
|
return Tag.compute({
|
|
141
|
-
|
|
158
|
+
extendedSecret,
|
|
142
159
|
index
|
|
143
160
|
});
|
|
144
161
|
}
|
|
145
|
-
async #
|
|
146
|
-
const senderCompleteAddress = await this.
|
|
162
|
+
async #calculateExtendedDirectionalAppTaggingSecret(contractAddress, sender, recipient) {
|
|
163
|
+
const senderCompleteAddress = await this.getCompleteAddressOrFail(sender);
|
|
147
164
|
const senderIvsk = await this.keyStore.getMasterIncomingViewingSecretKey(sender);
|
|
148
|
-
return
|
|
165
|
+
return ExtendedDirectionalAppTaggingSecret.compute(senderCompleteAddress, senderIvsk, recipient, contractAddress, recipient);
|
|
149
166
|
}
|
|
150
167
|
async #getIndexToUseForSecret(secret) {
|
|
151
168
|
// If we have the tagging index in the cache, we use it. If not we obtain it from the execution data provider.
|
|
@@ -156,8 +173,7 @@ import { UtilityExecutionOracle } from './utility_execution_oracle.js';
|
|
|
156
173
|
// This is a tagging secret we've not yet used in this tx, so first sync our store to make sure its indices
|
|
157
174
|
// are up to date. We do this here because this store is not synced as part of the global sync because
|
|
158
175
|
// that'd be wasteful as most tagging secrets are not used in each tx.
|
|
159
|
-
|
|
160
|
-
await syncSenderTaggingIndexes(secret, this.contractAddress, this.aztecNode, this.senderTaggingStore, anchorBlockHash, this.jobId);
|
|
176
|
+
await syncSenderTaggingIndexes(secret, this.aztecNode, this.senderTaggingStore, await this.anchorBlockHeader.hash(), this.jobId);
|
|
161
177
|
const lastUsedIndex = await this.senderTaggingStore.getLastUsedIndex(secret, this.jobId);
|
|
162
178
|
// If lastUsedIndex is undefined, we've never used this secret, so start from 0
|
|
163
179
|
// Otherwise, the next index to use is one past the last used index
|
|
@@ -168,29 +184,29 @@ import { UtilityExecutionOracle } from './utility_execution_oracle.js';
|
|
|
168
184
|
* Store values in the execution cache.
|
|
169
185
|
* @param values - Values to store.
|
|
170
186
|
* @returns The hash of the values.
|
|
171
|
-
*/
|
|
187
|
+
*/ setHashPreimage(values, hash) {
|
|
172
188
|
return this.executionCache.store(values, hash);
|
|
173
189
|
}
|
|
174
190
|
/**
|
|
175
191
|
* Gets values from the execution cache.
|
|
176
192
|
* @param hash - Hash of the values.
|
|
177
193
|
* @returns The values.
|
|
178
|
-
*/
|
|
194
|
+
*/ getHashPreimage(hash) {
|
|
179
195
|
const preimage = this.executionCache.getPreimage(hash);
|
|
180
196
|
if (!preimage) {
|
|
181
197
|
throw new Error(`Preimage for hash ${hash.toString()} not found in cache`);
|
|
182
198
|
}
|
|
183
199
|
return Promise.resolve(preimage);
|
|
184
200
|
}
|
|
185
|
-
async
|
|
201
|
+
async doesNullifierExist(innerNullifier) {
|
|
186
202
|
// This oracle must be overridden because while utility execution can only meaningfully check if a nullifier exists
|
|
187
203
|
// in the synched block, during private execution there's also the possibility of it being pending, i.e. created
|
|
188
204
|
// in the current transaction.
|
|
189
|
-
this.
|
|
205
|
+
this.logger.debug(`Checking existence of inner nullifier ${innerNullifier}`, {
|
|
190
206
|
contractAddress: this.contractAddress
|
|
191
207
|
});
|
|
192
208
|
const nullifier = (await siloNullifier(this.contractAddress, innerNullifier)).toBigInt();
|
|
193
|
-
return this.noteCache.getNullifiers(this.contractAddress).has(nullifier) || await super.
|
|
209
|
+
return this.noteCache.getNullifiers(this.contractAddress).has(nullifier) || await super.doesNullifierExist(innerNullifier);
|
|
194
210
|
}
|
|
195
211
|
/**
|
|
196
212
|
* Gets some notes for a storage slot.
|
|
@@ -212,11 +228,11 @@ import { UtilityExecutionOracle } from './utility_execution_oracle.js';
|
|
|
212
228
|
* @param offset - The starting index for pagination.
|
|
213
229
|
* @param status - The status of notes to fetch.
|
|
214
230
|
* @returns Array of note data.
|
|
215
|
-
*/ async
|
|
231
|
+
*/ async getNotes(owner, storageSlot, numSelects, selectByIndexes, selectByOffsets, selectByLengths, selectValues, selectComparators, sortByIndexes, sortByOffsets, sortByLengths, sortOrder, limit, offset, status) {
|
|
216
232
|
// Nullified pending notes are already removed from the list.
|
|
217
233
|
const pendingNotes = this.noteCache.getNotes(this.callContext.contractAddress, owner, storageSlot);
|
|
218
234
|
const pendingNullifiers = this.noteCache.getNullifiers(this.callContext.contractAddress);
|
|
219
|
-
const noteService = new NoteService(this.noteStore, this.aztecNode, this.
|
|
235
|
+
const noteService = new NoteService(this.noteStore, this.aztecNode, this.anchorBlockHeader, this.jobId);
|
|
220
236
|
const dbNotes = await noteService.getNotes(this.callContext.contractAddress, owner, storageSlot, status, this.scopes);
|
|
221
237
|
const dbNotesFiltered = dbNotes.filter((n)=>!pendingNullifiers.has(n.siloedNullifier.value));
|
|
222
238
|
const notes = pickNotes([
|
|
@@ -243,7 +259,7 @@ import { UtilityExecutionOracle } from './utility_execution_oracle.js';
|
|
|
243
259
|
limit,
|
|
244
260
|
offset
|
|
245
261
|
});
|
|
246
|
-
this.
|
|
262
|
+
this.logger.debug(`Returning ${notes.length} notes for ${this.callContext.contractAddress} at ${storageSlot}: ${notes.map((n)=>`${n.noteNonce.toString()}:[${n.note.items.map((i)=>i.toString()).join(',')}]`).join(', ')}`);
|
|
247
263
|
return notes;
|
|
248
264
|
}
|
|
249
265
|
/**
|
|
@@ -256,8 +272,8 @@ import { UtilityExecutionOracle } from './utility_execution_oracle.js';
|
|
|
256
272
|
* @param noteItems - The items to be included in a Note.
|
|
257
273
|
* @param noteHash - A hash of the new note.
|
|
258
274
|
* @returns
|
|
259
|
-
*/
|
|
260
|
-
this.
|
|
275
|
+
*/ notifyCreatedNote(owner, storageSlot, randomness, noteTypeId, noteItems, noteHash, counter) {
|
|
276
|
+
this.logger.debug(`Notified of new note with inner hash ${noteHash}`, {
|
|
261
277
|
contractAddress: this.callContext.contractAddress,
|
|
262
278
|
storageSlot,
|
|
263
279
|
randomness,
|
|
@@ -288,7 +304,7 @@ import { UtilityExecutionOracle } from './utility_execution_oracle.js';
|
|
|
288
304
|
* within the current transaction/execution.
|
|
289
305
|
* @param innerNullifier - The pending nullifier to add in the list (not yet siloed by contract address).
|
|
290
306
|
* @param noteHash - A hash of the new note.
|
|
291
|
-
*/ async
|
|
307
|
+
*/ async notifyNullifiedNote(innerNullifier, noteHash, counter) {
|
|
292
308
|
const nullifiedNoteHashCounter = await this.noteCache.nullifyNote(this.callContext.contractAddress, innerNullifier, noteHash);
|
|
293
309
|
if (nullifiedNoteHashCounter !== undefined) {
|
|
294
310
|
this.noteHashNullifierCounterMap.set(nullifiedNoteHashCounter, counter);
|
|
@@ -299,19 +315,19 @@ import { UtilityExecutionOracle } from './utility_execution_oracle.js';
|
|
|
299
315
|
* within the current transaction/execution.
|
|
300
316
|
* @param innerNullifier - The pending nullifier to add in the list (not yet siloed by contract address).
|
|
301
317
|
* @param noteHash - A hash of the new note.
|
|
302
|
-
*/
|
|
303
|
-
this.
|
|
318
|
+
*/ notifyCreatedNullifier(innerNullifier) {
|
|
319
|
+
this.logger.debug(`Notified of new inner nullifier ${innerNullifier}`, {
|
|
304
320
|
contractAddress: this.contractAddress
|
|
305
321
|
});
|
|
306
322
|
return this.noteCache.nullifierCreated(this.callContext.contractAddress, innerNullifier);
|
|
307
323
|
}
|
|
308
324
|
/**
|
|
309
|
-
* Check if a nullifier has been emitted in the same transaction, i.e. if
|
|
325
|
+
* Check if a nullifier has been emitted in the same transaction, i.e. if notifyCreatedNullifier has been
|
|
310
326
|
* called for this inner nullifier from the contract with the specified address.
|
|
311
327
|
* @param innerNullifier - The inner nullifier to check.
|
|
312
328
|
* @param contractAddress - Address of the contract that emitted the nullifier.
|
|
313
329
|
* @returns A boolean indicating whether the nullifier is pending or not.
|
|
314
|
-
*/ async
|
|
330
|
+
*/ async isNullifierPending(innerNullifier, contractAddress) {
|
|
315
331
|
const siloedNullifier = await siloNullifier(contractAddress, innerNullifier);
|
|
316
332
|
const isNullifierPending = this.noteCache.getNullifiers(contractAddress).has(siloedNullifier.toBigInt());
|
|
317
333
|
return Promise.resolve(isNullifierPending);
|
|
@@ -322,10 +338,10 @@ import { UtilityExecutionOracle } from './utility_execution_oracle.js';
|
|
|
322
338
|
* keep the preimage in ts for later.
|
|
323
339
|
* @param log - The contract class log to be emitted.
|
|
324
340
|
* @param counter - The contract class log's counter.
|
|
325
|
-
*/
|
|
341
|
+
*/ notifyCreatedContractClassLog(log, counter) {
|
|
326
342
|
this.contractClassLogs.push(new CountedContractClassLog(log, counter));
|
|
327
343
|
const text = log.toBuffer().toString('hex');
|
|
328
|
-
this.
|
|
344
|
+
this.logger.verbose(`Emitted log from ContractClassRegistry: "${text.length > 100 ? text.slice(0, 100) + '...' : text}"`);
|
|
329
345
|
}
|
|
330
346
|
#checkValidStaticCall(childExecutionResult) {
|
|
331
347
|
if (childExecutionResult.publicInputs.noteHashes.claimedLength > 0 || childExecutionResult.publicInputs.nullifiers.claimedLength > 0 || childExecutionResult.publicInputs.l2ToL1Msgs.claimedLength > 0 || childExecutionResult.publicInputs.privateLogs.claimedLength > 0 || childExecutionResult.publicInputs.contractClassLogsHashes.claimedLength > 0) {
|
|
@@ -340,22 +356,55 @@ import { UtilityExecutionOracle } from './utility_execution_oracle.js';
|
|
|
340
356
|
* @param sideEffectCounter - The side effect counter at the start of the call.
|
|
341
357
|
* @param isStaticCall - Whether the call is a static call.
|
|
342
358
|
* @returns The execution result.
|
|
343
|
-
*/ async
|
|
359
|
+
*/ async callPrivateFunction(targetContractAddress, functionSelector, argsHash, sideEffectCounter, isStaticCall) {
|
|
344
360
|
if (!this.simulator) {
|
|
345
361
|
// In practice it is only when creating inline private contexts in a Noir test using TXE that we create an
|
|
346
362
|
// instance of this class without a simulator.
|
|
347
363
|
throw new Error('No simulator provided, cannot perform a nested private call');
|
|
348
364
|
}
|
|
349
365
|
const simulatorSetupTimer = new Timer();
|
|
350
|
-
this.
|
|
366
|
+
this.logger.debug(`Calling private function ${targetContractAddress}:${functionSelector} from ${this.callContext.contractAddress}`);
|
|
351
367
|
isStaticCall = isStaticCall || this.callContext.isStaticCall;
|
|
352
|
-
await ensureContractSynced(targetContractAddress, functionSelector, this.utilityExecutor, this.
|
|
368
|
+
await this.contractSyncService.ensureContractSynced(targetContractAddress, functionSelector, this.utilityExecutor, this.anchorBlockHeader, this.jobId, this.scopes);
|
|
353
369
|
const targetArtifact = await this.contractStore.getFunctionArtifactWithDebugMetadata(targetContractAddress, functionSelector);
|
|
354
370
|
const derivedTxContext = this.txContext.clone();
|
|
355
371
|
const derivedCallContext = await this.deriveCallContext(targetContractAddress, targetArtifact, isStaticCall);
|
|
356
|
-
const privateExecutionOracle = new PrivateExecutionOracle(
|
|
372
|
+
const privateExecutionOracle = new PrivateExecutionOracle({
|
|
373
|
+
argsHash,
|
|
374
|
+
txContext: derivedTxContext,
|
|
375
|
+
callContext: derivedCallContext,
|
|
376
|
+
anchorBlockHeader: this.anchorBlockHeader,
|
|
377
|
+
utilityExecutor: this.utilityExecutor,
|
|
378
|
+
authWitnesses: this.authWitnesses,
|
|
379
|
+
capsules: this.capsules,
|
|
380
|
+
executionCache: this.executionCache,
|
|
381
|
+
noteCache: this.noteCache,
|
|
382
|
+
taggingIndexCache: this.taggingIndexCache,
|
|
383
|
+
contractStore: this.contractStore,
|
|
384
|
+
noteStore: this.noteStore,
|
|
385
|
+
keyStore: this.keyStore,
|
|
386
|
+
addressStore: this.addressStore,
|
|
387
|
+
aztecNode: this.aztecNode,
|
|
388
|
+
senderTaggingStore: this.senderTaggingStore,
|
|
389
|
+
recipientTaggingStore: this.recipientTaggingStore,
|
|
390
|
+
senderAddressBookStore: this.senderAddressBookStore,
|
|
391
|
+
capsuleService: this.capsuleService,
|
|
392
|
+
privateEventStore: this.privateEventStore,
|
|
393
|
+
messageContextService: this.messageContextService,
|
|
394
|
+
contractSyncService: this.contractSyncService,
|
|
395
|
+
jobId: this.jobId,
|
|
396
|
+
totalPublicCalldataCount: this.totalPublicCalldataCount,
|
|
397
|
+
sideEffectCounter,
|
|
398
|
+
log: this.logger,
|
|
399
|
+
scopes: this.scopes,
|
|
400
|
+
senderForTags: this.defaultSenderForTags,
|
|
401
|
+
simulator: this.simulator,
|
|
402
|
+
l2TipsStore: this.l2TipsStore
|
|
403
|
+
});
|
|
357
404
|
const setupTime = simulatorSetupTimer.ms();
|
|
358
405
|
const childExecutionResult = await executePrivateFunction(this.simulator, privateExecutionOracle, targetArtifact, targetContractAddress, functionSelector);
|
|
406
|
+
// Propagate the nested call's calldata count so the parent sees its increments on subsequent enqueues.
|
|
407
|
+
this.totalPublicCalldataCount = privateExecutionOracle.getTotalPublicCalldataCount();
|
|
359
408
|
if (isStaticCall) {
|
|
360
409
|
this.#checkValidStaticCall(childExecutionResult);
|
|
361
410
|
}
|
|
@@ -370,7 +419,7 @@ import { UtilityExecutionOracle } from './utility_execution_oracle.js';
|
|
|
370
419
|
returnsHash: publicInputs.returnsHash
|
|
371
420
|
};
|
|
372
421
|
}
|
|
373
|
-
|
|
422
|
+
/** Validates the calldata preimage exists in the cache and checks cumulative calldata size is within limits. */ assertValidPublicCalldata(calldataHash) {
|
|
374
423
|
const calldata = this.executionCache.getPreimage(calldataHash);
|
|
375
424
|
if (!calldata) {
|
|
376
425
|
throw new Error('Calldata for public call not found in cache');
|
|
@@ -379,31 +428,15 @@ import { UtilityExecutionOracle } from './utility_execution_oracle.js';
|
|
|
379
428
|
if (this.totalPublicCalldataCount > MAX_FR_CALLDATA_TO_ALL_ENQUEUED_CALLS) {
|
|
380
429
|
throw new Error(`Too many total args to all enqueued public calls! (> ${MAX_FR_CALLDATA_TO_ALL_ENQUEUED_CALLS})`);
|
|
381
430
|
}
|
|
382
|
-
}
|
|
383
|
-
/**
|
|
384
|
-
* Verify relevant information when a public function is enqueued.
|
|
385
|
-
* @param targetContractAddress - The address of the contract to call.
|
|
386
|
-
* @param calldataHash - The hash of the function selector and arguments.
|
|
387
|
-
* @param sideEffectCounter - The side effect counter at the start of the call.
|
|
388
|
-
* @param isStaticCall - Whether the call is a static call.
|
|
389
|
-
*/ privateNotifyEnqueuedPublicFunctionCall(_targetContractAddress, calldataHash, _sideEffectCounter, _isStaticCall) {
|
|
390
|
-
this.#onNewPublicFunctionCall(calldataHash);
|
|
391
431
|
return Promise.resolve();
|
|
392
432
|
}
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
* @param targetContractAddress - The address of the contract to call.
|
|
396
|
-
* @param argsHash - The arguments hash to pass to the function.
|
|
397
|
-
* @param sideEffectCounter - The side effect counter at the start of the call.
|
|
398
|
-
* @param isStaticCall - Whether the call is a static call.
|
|
399
|
-
*/ privateNotifySetPublicTeardownFunctionCall(_targetContractAddress, calldataHash, _sideEffectCounter, _isStaticCall) {
|
|
400
|
-
this.#onNewPublicFunctionCall(calldataHash);
|
|
401
|
-
return Promise.resolve();
|
|
433
|
+
getTotalPublicCalldataCount() {
|
|
434
|
+
return this.totalPublicCalldataCount;
|
|
402
435
|
}
|
|
403
|
-
|
|
436
|
+
notifyRevertiblePhaseStart(minRevertibleSideEffectCounter) {
|
|
404
437
|
return this.noteCache.setMinRevertibleSideEffectCounter(minRevertibleSideEffectCounter);
|
|
405
438
|
}
|
|
406
|
-
|
|
439
|
+
isExecutionInRevertiblePhase(sideEffectCounter) {
|
|
407
440
|
return Promise.resolve(this.noteCache.isSideEffectCounterRevertible(sideEffectCounter));
|
|
408
441
|
}
|
|
409
442
|
/**
|
|
@@ -418,10 +451,4 @@ import { UtilityExecutionOracle } from './utility_execution_oracle.js';
|
|
|
418
451
|
getDebugFunctionName() {
|
|
419
452
|
return this.contractStore.getDebugFunctionName(this.contractAddress, this.callContext.functionSelector);
|
|
420
453
|
}
|
|
421
|
-
utilityEmitOffchainEffect(data) {
|
|
422
|
-
this.offchainEffects.push({
|
|
423
|
-
data
|
|
424
|
-
});
|
|
425
|
-
return Promise.resolve();
|
|
426
|
-
}
|
|
427
454
|
}
|