@aztec/pxe 0.0.1-commit.e6bd8901 → 0.0.1-commit.ec7ac5448
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dest/bin/check_oracle_version.js +4 -4
- package/dest/block_synchronizer/block_synchronizer.d.ts +5 -3
- package/dest/block_synchronizer/block_synchronizer.d.ts.map +1 -1
- package/dest/block_synchronizer/block_synchronizer.js +17 -5
- package/dest/config/index.d.ts +2 -2
- package/dest/config/index.d.ts.map +1 -1
- package/dest/config/index.js +1 -1
- package/dest/config/package_info.js +1 -1
- package/dest/contract_function_simulator/contract_function_simulator.d.ts +60 -31
- package/dest/contract_function_simulator/contract_function_simulator.d.ts.map +1 -1
- package/dest/contract_function_simulator/contract_function_simulator.js +201 -74
- package/dest/contract_function_simulator/ephemeral_array_service.d.ts +28 -0
- package/dest/contract_function_simulator/ephemeral_array_service.d.ts.map +1 -0
- package/dest/contract_function_simulator/ephemeral_array_service.js +78 -0
- package/dest/contract_function_simulator/execution_tagging_index_cache.d.ts +7 -7
- package/dest/contract_function_simulator/execution_tagging_index_cache.d.ts.map +1 -1
- package/dest/contract_function_simulator/execution_tagging_index_cache.js +19 -11
- package/dest/contract_function_simulator/index.d.ts +2 -1
- package/dest/contract_function_simulator/index.d.ts.map +1 -1
- package/dest/contract_function_simulator/index.js +1 -0
- package/dest/contract_function_simulator/noir-structs/event_validation_request.d.ts +4 -6
- package/dest/contract_function_simulator/noir-structs/event_validation_request.d.ts.map +1 -1
- package/dest/contract_function_simulator/noir-structs/event_validation_request.js +8 -10
- package/dest/contract_function_simulator/noir-structs/log_retrieval_request.d.ts +1 -1
- package/dest/contract_function_simulator/noir-structs/log_retrieval_request.js +1 -1
- package/dest/contract_function_simulator/noir-structs/log_retrieval_response.d.ts +2 -2
- package/dest/contract_function_simulator/noir-structs/log_retrieval_response.d.ts.map +1 -1
- package/dest/contract_function_simulator/noir-structs/log_retrieval_response.js +2 -4
- package/dest/contract_function_simulator/noir-structs/note_validation_request.d.ts +4 -7
- package/dest/contract_function_simulator/noir-structs/note_validation_request.d.ts.map +1 -1
- package/dest/contract_function_simulator/noir-structs/note_validation_request.js +6 -11
- package/dest/contract_function_simulator/oracle/interfaces.d.ts +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.js +5 -3
- package/dest/contract_function_simulator/oracle/private_execution_oracle.d.ts +53 -79
- package/dest/contract_function_simulator/oracle/private_execution_oracle.d.ts.map +1 -1
- package/dest/contract_function_simulator/oracle/private_execution_oracle.js +109 -89
- package/dest/contract_function_simulator/oracle/utility_execution_oracle.d.ts +124 -67
- package/dest/contract_function_simulator/oracle/utility_execution_oracle.d.ts.map +1 -1
- package/dest/contract_function_simulator/oracle/utility_execution_oracle.js +326 -140
- 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 +9 -2
- 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 +104 -0
- package/dest/contract_sync/helpers.d.ts +28 -0
- package/dest/contract_sync/helpers.d.ts.map +1 -0
- package/dest/contract_sync/{index.js → helpers.js} +20 -16
- 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 -3
- package/dest/entrypoints/server/index.d.ts.map +1 -1
- package/dest/entrypoints/server/index.js +3 -2
- package/dest/entrypoints/server/utils.d.ts +2 -2
- package/dest/entrypoints/server/utils.d.ts.map +1 -1
- package/dest/entrypoints/server/utils.js +30 -11
- package/dest/events/event_service.d.ts +5 -5
- package/dest/events/event_service.d.ts.map +1 -1
- package/dest/events/event_service.js +20 -9
- 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 -9
- package/dest/logs/log_service.d.ts.map +1 -1
- package/dest/logs/log_service.js +38 -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 +21 -13
- package/dest/private_kernel/private_kernel_oracle.d.ts +8 -4
- package/dest/private_kernel/private_kernel_oracle.d.ts.map +1 -1
- package/dest/private_kernel/private_kernel_oracle.js +7 -3
- package/dest/pxe.d.ts +73 -24
- package/dest/pxe.d.ts.map +1 -1
- package/dest/pxe.js +131 -78
- 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_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 +39 -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 -15
- package/dest/storage/contract_store/contract_store.d.ts.map +1 -1
- package/dest/storage/contract_store/contract_store.js +157 -72
- package/dest/storage/metadata.d.ts +1 -1
- package/dest/storage/metadata.js +1 -1
- package/dest/storage/note_store/note_store.d.ts +13 -3
- package/dest/storage/note_store/note_store.d.ts.map +1 -1
- package/dest/storage/note_store/note_store.js +147 -107
- 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 +84 -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 +7 -7
- 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 +4 -4
- package/src/block_synchronizer/block_synchronizer.ts +29 -19
- package/src/config/index.ts +1 -1
- package/src/config/package_info.ts +1 -1
- package/src/contract_function_simulator/contract_function_simulator.ts +360 -133
- package/src/contract_function_simulator/ephemeral_array_service.ts +110 -0
- package/src/contract_function_simulator/execution_tagging_index_cache.ts +19 -14
- package/src/contract_function_simulator/index.ts +1 -0
- package/src/contract_function_simulator/noir-structs/event_validation_request.ts +9 -9
- package/src/contract_function_simulator/noir-structs/log_retrieval_request.ts +1 -1
- package/src/contract_function_simulator/noir-structs/log_retrieval_response.ts +2 -5
- package/src/contract_function_simulator/noir-structs/note_validation_request.ts +4 -10
- package/src/contract_function_simulator/oracle/interfaces.ts +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 +4 -4
- package/src/contract_function_simulator/oracle/private_execution_oracle.ts +136 -187
- package/src/contract_function_simulator/oracle/utility_execution_oracle.ts +544 -174
- package/src/contract_function_simulator/pick_notes.ts +9 -2
- 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 +170 -0
- package/src/contract_sync/{index.ts → helpers.ts} +23 -25
- 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 -2
- package/src/entrypoints/server/utils.ts +24 -29
- package/src/events/event_service.ts +21 -10
- package/src/job_coordinator/job_coordinator.ts +4 -3
- package/src/logs/log_service.ts +72 -106
- package/src/messages/message_context_service.ts +44 -0
- package/src/notes/note_service.ts +24 -16
- 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 +25 -15
- package/src/private_kernel/private_kernel_oracle.ts +9 -9
- package/src/pxe.ts +243 -131
- 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_service.ts +90 -0
- package/src/storage/capsule_store/capsule_store.ts +42 -34
- package/src/storage/capsule_store/index.ts +1 -0
- package/src/storage/contract_store/contract_store.ts +186 -76
- package/src/storage/metadata.ts +1 -1
- package/src/storage/note_store/note_store.ts +166 -132
- package/src/storage/private_event_store/private_event_store.ts +102 -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 +9 -12
- 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/contract_sync/index.d.ts +0 -23
- package/dest/contract_sync/index.d.ts.map +0 -1
- package/dest/private_kernel/hints/compute_tx_include_by_timestamp.d.ts +0 -4
- package/dest/private_kernel/hints/compute_tx_include_by_timestamp.d.ts.map +0 -1
|
@@ -4,14 +4,12 @@ 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
|
-
import { ensureContractSynced } from '../../contract_sync/index.js';
|
|
15
13
|
import { NoteService } from '../../notes/note_service.js';
|
|
16
14
|
import { syncSenderTaggingIndexes } from '../../tagging/index.js';
|
|
17
15
|
import { pickNotes } from '../pick_notes.js';
|
|
@@ -20,10 +18,21 @@ import { UtilityExecutionOracle } from './utility_execution_oracle.js';
|
|
|
20
18
|
/**
|
|
21
19
|
* The execution oracle for the private part of a transaction.
|
|
22
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 = [];
|
|
23
33
|
argsHash;
|
|
24
34
|
txContext;
|
|
25
35
|
callContext;
|
|
26
|
-
anchorBlockHeader;
|
|
27
36
|
utilityExecutor;
|
|
28
37
|
executionCache;
|
|
29
38
|
noteCache;
|
|
@@ -33,21 +42,24 @@ import { UtilityExecutionOracle } from './utility_execution_oracle.js';
|
|
|
33
42
|
sideEffectCounter;
|
|
34
43
|
senderForTags;
|
|
35
44
|
simulator;
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
45
|
+
constructor(args){
|
|
46
|
+
super({
|
|
47
|
+
...args,
|
|
48
|
+
contractAddress: args.callContext.contractAddress,
|
|
49
|
+
log: args.log ?? createLogger('simulator:client_execution_context')
|
|
50
|
+
});
|
|
51
|
+
this.argsHash = args.argsHash;
|
|
52
|
+
this.txContext = args.txContext;
|
|
53
|
+
this.callContext = args.callContext;
|
|
54
|
+
this.utilityExecutor = args.utilityExecutor;
|
|
55
|
+
this.executionCache = args.executionCache;
|
|
56
|
+
this.noteCache = args.noteCache;
|
|
57
|
+
this.taggingIndexCache = args.taggingIndexCache;
|
|
58
|
+
this.senderTaggingStore = args.senderTaggingStore;
|
|
59
|
+
this.totalPublicCalldataCount = args.totalPublicCalldataCount ?? 0;
|
|
60
|
+
this.sideEffectCounter = args.sideEffectCounter ?? 0;
|
|
61
|
+
this.senderForTags = args.senderForTags;
|
|
62
|
+
this.simulator = args.simulator;
|
|
51
63
|
}
|
|
52
64
|
getPrivateContextInputs() {
|
|
53
65
|
return new PrivateContextInputs(this.callContext, this.anchorBlockHeader, this.txContext, this.sideEffectCounter);
|
|
@@ -88,14 +100,9 @@ import { UtilityExecutionOracle } from './utility_execution_oracle.js';
|
|
|
88
100
|
return this.contractClassLogs;
|
|
89
101
|
}
|
|
90
102
|
/**
|
|
91
|
-
*
|
|
92
|
-
*/
|
|
93
|
-
return this.
|
|
94
|
-
}
|
|
95
|
-
/**
|
|
96
|
-
* Returns the pre-tags that were used in this execution (and that need to be stored in the db).
|
|
97
|
-
*/ getUsedPreTags() {
|
|
98
|
-
return this.taggingIndexCache.getUsedPreTags();
|
|
103
|
+
* Returns the tagging index ranges that were used in this execution (and that need to be stored in the db).
|
|
104
|
+
*/ getUsedTaggingIndexRanges() {
|
|
105
|
+
return this.taggingIndexCache.getUsedTaggingIndexRanges();
|
|
99
106
|
}
|
|
100
107
|
/**
|
|
101
108
|
* Return the nested execution results during this execution.
|
|
@@ -111,7 +118,7 @@ import { UtilityExecutionOracle } from './utility_execution_oracle.js';
|
|
|
111
118
|
*
|
|
112
119
|
* The value persists through nested calls, meaning all calls down the stack will use the same
|
|
113
120
|
* 'senderForTags' value (unless it is replaced).
|
|
114
|
-
*/
|
|
121
|
+
*/ getSenderForTags() {
|
|
115
122
|
return Promise.resolve(this.senderForTags);
|
|
116
123
|
}
|
|
117
124
|
/**
|
|
@@ -124,7 +131,7 @@ import { UtilityExecutionOracle } from './utility_execution_oracle.js';
|
|
|
124
131
|
* Account contracts typically set this value before calling other contracts. The value persists
|
|
125
132
|
* through nested calls, meaning all calls down the stack will use the same 'senderForTags'
|
|
126
133
|
* value (unless it is replaced by another call to this setter).
|
|
127
|
-
*/
|
|
134
|
+
*/ setSenderForTags(senderForTags) {
|
|
128
135
|
this.senderForTags = senderForTags;
|
|
129
136
|
return Promise.resolve();
|
|
130
137
|
}
|
|
@@ -133,20 +140,29 @@ import { UtilityExecutionOracle } from './utility_execution_oracle.js';
|
|
|
133
140
|
* @param sender - The address sending the log
|
|
134
141
|
* @param recipient - The address receiving the log
|
|
135
142
|
* @returns An app tag to be used in a log.
|
|
136
|
-
*/ async
|
|
137
|
-
const
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
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 new Tag(Fr.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);
|
|
141
157
|
return Tag.compute({
|
|
142
|
-
|
|
158
|
+
extendedSecret,
|
|
143
159
|
index
|
|
144
160
|
});
|
|
145
161
|
}
|
|
146
|
-
async #
|
|
147
|
-
const senderCompleteAddress = await this.
|
|
162
|
+
async #calculateExtendedDirectionalAppTaggingSecret(contractAddress, sender, recipient) {
|
|
163
|
+
const senderCompleteAddress = await this.getCompleteAddressOrFail(sender);
|
|
148
164
|
const senderIvsk = await this.keyStore.getMasterIncomingViewingSecretKey(sender);
|
|
149
|
-
return
|
|
165
|
+
return ExtendedDirectionalAppTaggingSecret.compute(senderCompleteAddress, senderIvsk, recipient, contractAddress, recipient);
|
|
150
166
|
}
|
|
151
167
|
async #getIndexToUseForSecret(secret) {
|
|
152
168
|
// If we have the tagging index in the cache, we use it. If not we obtain it from the execution data provider.
|
|
@@ -157,8 +173,7 @@ import { UtilityExecutionOracle } from './utility_execution_oracle.js';
|
|
|
157
173
|
// This is a tagging secret we've not yet used in this tx, so first sync our store to make sure its indices
|
|
158
174
|
// are up to date. We do this here because this store is not synced as part of the global sync because
|
|
159
175
|
// that'd be wasteful as most tagging secrets are not used in each tx.
|
|
160
|
-
|
|
161
|
-
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);
|
|
162
177
|
const lastUsedIndex = await this.senderTaggingStore.getLastUsedIndex(secret, this.jobId);
|
|
163
178
|
// If lastUsedIndex is undefined, we've never used this secret, so start from 0
|
|
164
179
|
// Otherwise, the next index to use is one past the last used index
|
|
@@ -169,29 +184,29 @@ import { UtilityExecutionOracle } from './utility_execution_oracle.js';
|
|
|
169
184
|
* Store values in the execution cache.
|
|
170
185
|
* @param values - Values to store.
|
|
171
186
|
* @returns The hash of the values.
|
|
172
|
-
*/
|
|
187
|
+
*/ setHashPreimage(values, hash) {
|
|
173
188
|
return this.executionCache.store(values, hash);
|
|
174
189
|
}
|
|
175
190
|
/**
|
|
176
191
|
* Gets values from the execution cache.
|
|
177
192
|
* @param hash - Hash of the values.
|
|
178
193
|
* @returns The values.
|
|
179
|
-
*/
|
|
194
|
+
*/ getHashPreimage(hash) {
|
|
180
195
|
const preimage = this.executionCache.getPreimage(hash);
|
|
181
196
|
if (!preimage) {
|
|
182
197
|
throw new Error(`Preimage for hash ${hash.toString()} not found in cache`);
|
|
183
198
|
}
|
|
184
199
|
return Promise.resolve(preimage);
|
|
185
200
|
}
|
|
186
|
-
async
|
|
201
|
+
async doesNullifierExist(innerNullifier) {
|
|
187
202
|
// This oracle must be overridden because while utility execution can only meaningfully check if a nullifier exists
|
|
188
203
|
// in the synched block, during private execution there's also the possibility of it being pending, i.e. created
|
|
189
204
|
// in the current transaction.
|
|
190
|
-
this.
|
|
205
|
+
this.logger.debug(`Checking existence of inner nullifier ${innerNullifier}`, {
|
|
191
206
|
contractAddress: this.contractAddress
|
|
192
207
|
});
|
|
193
208
|
const nullifier = (await siloNullifier(this.contractAddress, innerNullifier)).toBigInt();
|
|
194
|
-
return this.noteCache.getNullifiers(this.contractAddress).has(nullifier) || await super.
|
|
209
|
+
return this.noteCache.getNullifiers(this.contractAddress).has(nullifier) || await super.doesNullifierExist(innerNullifier);
|
|
195
210
|
}
|
|
196
211
|
/**
|
|
197
212
|
* Gets some notes for a storage slot.
|
|
@@ -213,11 +228,11 @@ import { UtilityExecutionOracle } from './utility_execution_oracle.js';
|
|
|
213
228
|
* @param offset - The starting index for pagination.
|
|
214
229
|
* @param status - The status of notes to fetch.
|
|
215
230
|
* @returns Array of note data.
|
|
216
|
-
*/ async
|
|
231
|
+
*/ async getNotes(owner, storageSlot, numSelects, selectByIndexes, selectByOffsets, selectByLengths, selectValues, selectComparators, sortByIndexes, sortByOffsets, sortByLengths, sortOrder, limit, offset, status) {
|
|
217
232
|
// Nullified pending notes are already removed from the list.
|
|
218
233
|
const pendingNotes = this.noteCache.getNotes(this.callContext.contractAddress, owner, storageSlot);
|
|
219
234
|
const pendingNullifiers = this.noteCache.getNullifiers(this.callContext.contractAddress);
|
|
220
|
-
const noteService = new NoteService(this.noteStore, this.aztecNode, this.
|
|
235
|
+
const noteService = new NoteService(this.noteStore, this.aztecNode, this.anchorBlockHeader, this.jobId);
|
|
221
236
|
const dbNotes = await noteService.getNotes(this.callContext.contractAddress, owner, storageSlot, status, this.scopes);
|
|
222
237
|
const dbNotesFiltered = dbNotes.filter((n)=>!pendingNullifiers.has(n.siloedNullifier.value));
|
|
223
238
|
const notes = pickNotes([
|
|
@@ -244,7 +259,7 @@ import { UtilityExecutionOracle } from './utility_execution_oracle.js';
|
|
|
244
259
|
limit,
|
|
245
260
|
offset
|
|
246
261
|
});
|
|
247
|
-
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(', ')}`);
|
|
248
263
|
return notes;
|
|
249
264
|
}
|
|
250
265
|
/**
|
|
@@ -257,8 +272,8 @@ import { UtilityExecutionOracle } from './utility_execution_oracle.js';
|
|
|
257
272
|
* @param noteItems - The items to be included in a Note.
|
|
258
273
|
* @param noteHash - A hash of the new note.
|
|
259
274
|
* @returns
|
|
260
|
-
*/
|
|
261
|
-
this.
|
|
275
|
+
*/ notifyCreatedNote(owner, storageSlot, randomness, noteTypeId, noteItems, noteHash, counter) {
|
|
276
|
+
this.logger.debug(`Notified of new note with inner hash ${noteHash}`, {
|
|
262
277
|
contractAddress: this.callContext.contractAddress,
|
|
263
278
|
storageSlot,
|
|
264
279
|
randomness,
|
|
@@ -289,7 +304,7 @@ import { UtilityExecutionOracle } from './utility_execution_oracle.js';
|
|
|
289
304
|
* within the current transaction/execution.
|
|
290
305
|
* @param innerNullifier - The pending nullifier to add in the list (not yet siloed by contract address).
|
|
291
306
|
* @param noteHash - A hash of the new note.
|
|
292
|
-
*/ async
|
|
307
|
+
*/ async notifyNullifiedNote(innerNullifier, noteHash, counter) {
|
|
293
308
|
const nullifiedNoteHashCounter = await this.noteCache.nullifyNote(this.callContext.contractAddress, innerNullifier, noteHash);
|
|
294
309
|
if (nullifiedNoteHashCounter !== undefined) {
|
|
295
310
|
this.noteHashNullifierCounterMap.set(nullifiedNoteHashCounter, counter);
|
|
@@ -300,19 +315,19 @@ import { UtilityExecutionOracle } from './utility_execution_oracle.js';
|
|
|
300
315
|
* within the current transaction/execution.
|
|
301
316
|
* @param innerNullifier - The pending nullifier to add in the list (not yet siloed by contract address).
|
|
302
317
|
* @param noteHash - A hash of the new note.
|
|
303
|
-
*/
|
|
304
|
-
this.
|
|
318
|
+
*/ notifyCreatedNullifier(innerNullifier) {
|
|
319
|
+
this.logger.debug(`Notified of new inner nullifier ${innerNullifier}`, {
|
|
305
320
|
contractAddress: this.contractAddress
|
|
306
321
|
});
|
|
307
322
|
return this.noteCache.nullifierCreated(this.callContext.contractAddress, innerNullifier);
|
|
308
323
|
}
|
|
309
324
|
/**
|
|
310
|
-
* 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
|
|
311
326
|
* called for this inner nullifier from the contract with the specified address.
|
|
312
327
|
* @param innerNullifier - The inner nullifier to check.
|
|
313
328
|
* @param contractAddress - Address of the contract that emitted the nullifier.
|
|
314
329
|
* @returns A boolean indicating whether the nullifier is pending or not.
|
|
315
|
-
*/ async
|
|
330
|
+
*/ async isNullifierPending(innerNullifier, contractAddress) {
|
|
316
331
|
const siloedNullifier = await siloNullifier(contractAddress, innerNullifier);
|
|
317
332
|
const isNullifierPending = this.noteCache.getNullifiers(contractAddress).has(siloedNullifier.toBigInt());
|
|
318
333
|
return Promise.resolve(isNullifierPending);
|
|
@@ -323,10 +338,10 @@ import { UtilityExecutionOracle } from './utility_execution_oracle.js';
|
|
|
323
338
|
* keep the preimage in ts for later.
|
|
324
339
|
* @param log - The contract class log to be emitted.
|
|
325
340
|
* @param counter - The contract class log's counter.
|
|
326
|
-
*/
|
|
341
|
+
*/ notifyCreatedContractClassLog(log, counter) {
|
|
327
342
|
this.contractClassLogs.push(new CountedContractClassLog(log, counter));
|
|
328
343
|
const text = log.toBuffer().toString('hex');
|
|
329
|
-
this.
|
|
344
|
+
this.logger.verbose(`Emitted log from ContractClassRegistry: "${text.length > 100 ? text.slice(0, 100) + '...' : text}"`);
|
|
330
345
|
}
|
|
331
346
|
#checkValidStaticCall(childExecutionResult) {
|
|
332
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) {
|
|
@@ -341,20 +356,50 @@ import { UtilityExecutionOracle } from './utility_execution_oracle.js';
|
|
|
341
356
|
* @param sideEffectCounter - The side effect counter at the start of the call.
|
|
342
357
|
* @param isStaticCall - Whether the call is a static call.
|
|
343
358
|
* @returns The execution result.
|
|
344
|
-
*/ async
|
|
359
|
+
*/ async callPrivateFunction(targetContractAddress, functionSelector, argsHash, sideEffectCounter, isStaticCall) {
|
|
345
360
|
if (!this.simulator) {
|
|
346
361
|
// In practice it is only when creating inline private contexts in a Noir test using TXE that we create an
|
|
347
362
|
// instance of this class without a simulator.
|
|
348
363
|
throw new Error('No simulator provided, cannot perform a nested private call');
|
|
349
364
|
}
|
|
350
365
|
const simulatorSetupTimer = new Timer();
|
|
351
|
-
this.
|
|
366
|
+
this.logger.debug(`Calling private function ${targetContractAddress}:${functionSelector} from ${this.callContext.contractAddress}`);
|
|
352
367
|
isStaticCall = isStaticCall || this.callContext.isStaticCall;
|
|
353
|
-
await ensureContractSynced(targetContractAddress, functionSelector, this.utilityExecutor, this.
|
|
368
|
+
await this.contractSyncService.ensureContractSynced(targetContractAddress, functionSelector, this.utilityExecutor, this.anchorBlockHeader, this.jobId, this.scopes);
|
|
354
369
|
const targetArtifact = await this.contractStore.getFunctionArtifactWithDebugMetadata(targetContractAddress, functionSelector);
|
|
355
370
|
const derivedTxContext = this.txContext.clone();
|
|
356
371
|
const derivedCallContext = await this.deriveCallContext(targetContractAddress, targetArtifact, isStaticCall);
|
|
357
|
-
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.senderForTags,
|
|
401
|
+
simulator: this.simulator
|
|
402
|
+
});
|
|
358
403
|
const setupTime = simulatorSetupTimer.ms();
|
|
359
404
|
const childExecutionResult = await executePrivateFunction(this.simulator, privateExecutionOracle, targetArtifact, targetContractAddress, functionSelector);
|
|
360
405
|
if (isStaticCall) {
|
|
@@ -371,7 +416,7 @@ import { UtilityExecutionOracle } from './utility_execution_oracle.js';
|
|
|
371
416
|
returnsHash: publicInputs.returnsHash
|
|
372
417
|
};
|
|
373
418
|
}
|
|
374
|
-
|
|
419
|
+
/** Validates the calldata preimage exists in the cache and checks cumulative calldata size is within limits. */ assertValidPublicCalldata(calldataHash) {
|
|
375
420
|
const calldata = this.executionCache.getPreimage(calldataHash);
|
|
376
421
|
if (!calldata) {
|
|
377
422
|
throw new Error('Calldata for public call not found in cache');
|
|
@@ -380,31 +425,12 @@ import { UtilityExecutionOracle } from './utility_execution_oracle.js';
|
|
|
380
425
|
if (this.totalPublicCalldataCount > MAX_FR_CALLDATA_TO_ALL_ENQUEUED_CALLS) {
|
|
381
426
|
throw new Error(`Too many total args to all enqueued public calls! (> ${MAX_FR_CALLDATA_TO_ALL_ENQUEUED_CALLS})`);
|
|
382
427
|
}
|
|
383
|
-
}
|
|
384
|
-
/**
|
|
385
|
-
* Verify relevant information when a public function is enqueued.
|
|
386
|
-
* @param targetContractAddress - The address of the contract to call.
|
|
387
|
-
* @param calldataHash - The hash of the function selector and arguments.
|
|
388
|
-
* @param sideEffectCounter - The side effect counter at the start of the call.
|
|
389
|
-
* @param isStaticCall - Whether the call is a static call.
|
|
390
|
-
*/ privateNotifyEnqueuedPublicFunctionCall(_targetContractAddress, calldataHash, _sideEffectCounter, _isStaticCall) {
|
|
391
|
-
this.#onNewPublicFunctionCall(calldataHash);
|
|
392
428
|
return Promise.resolve();
|
|
393
429
|
}
|
|
394
|
-
|
|
395
|
-
* Verify relevant information when a public teardown function is set.
|
|
396
|
-
* @param targetContractAddress - The address of the contract to call.
|
|
397
|
-
* @param argsHash - The arguments hash to pass to the function.
|
|
398
|
-
* @param sideEffectCounter - The side effect counter at the start of the call.
|
|
399
|
-
* @param isStaticCall - Whether the call is a static call.
|
|
400
|
-
*/ privateNotifySetPublicTeardownFunctionCall(_targetContractAddress, calldataHash, _sideEffectCounter, _isStaticCall) {
|
|
401
|
-
this.#onNewPublicFunctionCall(calldataHash);
|
|
402
|
-
return Promise.resolve();
|
|
403
|
-
}
|
|
404
|
-
privateNotifySetMinRevertibleSideEffectCounter(minRevertibleSideEffectCounter) {
|
|
430
|
+
notifyRevertiblePhaseStart(minRevertibleSideEffectCounter) {
|
|
405
431
|
return this.noteCache.setMinRevertibleSideEffectCounter(minRevertibleSideEffectCounter);
|
|
406
432
|
}
|
|
407
|
-
|
|
433
|
+
isExecutionInRevertiblePhase(sideEffectCounter) {
|
|
408
434
|
return Promise.resolve(this.noteCache.isSideEffectCounterRevertible(sideEffectCounter));
|
|
409
435
|
}
|
|
410
436
|
/**
|
|
@@ -419,10 +445,4 @@ import { UtilityExecutionOracle } from './utility_execution_oracle.js';
|
|
|
419
445
|
getDebugFunctionName() {
|
|
420
446
|
return this.contractStore.getDebugFunctionName(this.contractAddress, this.callContext.functionSelector);
|
|
421
447
|
}
|
|
422
|
-
utilityEmitOffchainEffect(data) {
|
|
423
|
-
this.offchainEffects.push({
|
|
424
|
-
data
|
|
425
|
-
});
|
|
426
|
-
return Promise.resolve();
|
|
427
|
-
}
|
|
428
448
|
}
|