@aztec/pxe 0.0.1-commit.86469d5 → 0.0.1-commit.88c5703d4
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/block_synchronizer/block_synchronizer.d.ts +4 -2
- package/dest/block_synchronizer/block_synchronizer.d.ts.map +1 -1
- package/dest/block_synchronizer/block_synchronizer.js +7 -1
- 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 +61 -29
- package/dest/contract_function_simulator/contract_function_simulator.d.ts.map +1 -1
- package/dest/contract_function_simulator/contract_function_simulator.js +185 -72
- 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 +2 -3
- 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 +5 -4
- 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/message_tx_context.d.ts +16 -0
- package/dest/contract_function_simulator/noir-structs/message_tx_context.d.ts.map +1 -0
- package/dest/contract_function_simulator/noir-structs/message_tx_context.js +57 -0
- package/dest/contract_function_simulator/noir-structs/note_validation_request.d.ts +2 -4
- 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 +3 -5
- package/dest/contract_function_simulator/oracle/interfaces.d.ts +49 -45
- package/dest/contract_function_simulator/oracle/interfaces.d.ts.map +1 -1
- package/dest/contract_function_simulator/oracle/legacy_oracle_mappings.d.ts +9 -0
- package/dest/contract_function_simulator/oracle/legacy_oracle_mappings.d.ts.map +1 -0
- package/dest/contract_function_simulator/oracle/legacy_oracle_mappings.js +52 -0
- package/dest/contract_function_simulator/oracle/oracle.d.ts +44 -44
- package/dest/contract_function_simulator/oracle/oracle.d.ts.map +1 -1
- package/dest/contract_function_simulator/oracle/oracle.js +161 -100
- package/dest/contract_function_simulator/oracle/private_execution.js +5 -3
- package/dest/contract_function_simulator/oracle/private_execution_oracle.d.ts +57 -78
- package/dest/contract_function_simulator/oracle/private_execution_oracle.d.ts.map +1 -1
- package/dest/contract_function_simulator/oracle/private_execution_oracle.js +101 -86
- package/dest/contract_function_simulator/oracle/utility_execution_oracle.d.ts +75 -45
- package/dest/contract_function_simulator/oracle/utility_execution_oracle.d.ts.map +1 -1
- package/dest/contract_function_simulator/oracle/utility_execution_oracle.js +147 -75
- 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/{index.js → helpers.js} +8 -14
- package/dest/debug/pxe_debug_utils.d.ts +14 -10
- package/dest/debug/pxe_debug_utils.d.ts.map +1 -1
- package/dest/debug/pxe_debug_utils.js +16 -15
- package/dest/entrypoints/client/bundle/index.d.ts +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 +9 -1
- 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 +1 -1
- package/dest/entrypoints/client/lazy/utils.d.ts.map +1 -1
- package/dest/entrypoints/client/lazy/utils.js +9 -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.js +9 -1
- package/dest/logs/log_service.d.ts +3 -2
- package/dest/logs/log_service.d.ts.map +1 -1
- package/dest/logs/log_service.js +9 -14
- package/dest/messages/message_context_service.d.ts +17 -0
- package/dest/messages/message_context_service.d.ts.map +1 -0
- package/dest/messages/message_context_service.js +36 -0
- package/dest/notes/note_service.d.ts +4 -3
- package/dest/notes/note_service.d.ts.map +1 -1
- package/dest/notes/note_service.js +3 -2
- 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 +2 -2
- package/dest/oracle_version.js +3 -3
- package/dest/private_kernel/hints/compute_tx_expiration_timestamp.d.ts +4 -0
- package/dest/private_kernel/hints/compute_tx_expiration_timestamp.d.ts.map +1 -0
- package/dest/private_kernel/hints/{compute_tx_include_by_timestamp.js → compute_tx_expiration_timestamp.js} +12 -12
- package/dest/private_kernel/hints/index.d.ts +1 -1
- package/dest/private_kernel/hints/index.js +1 -1
- package/dest/private_kernel/hints/private_kernel_reset_private_inputs_builder.d.ts +4 -3
- package/dest/private_kernel/hints/private_kernel_reset_private_inputs_builder.d.ts.map +1 -1
- package/dest/private_kernel/hints/private_kernel_reset_private_inputs_builder.js +129 -68
- package/dest/private_kernel/hints/test_utils.d.ts +122 -0
- package/dest/private_kernel/hints/test_utils.d.ts.map +1 -0
- package/dest/private_kernel/hints/test_utils.js +203 -0
- package/dest/private_kernel/private_kernel_execution_prover.d.ts +1 -1
- package/dest/private_kernel/private_kernel_execution_prover.d.ts.map +1 -1
- package/dest/private_kernel/private_kernel_execution_prover.js +19 -11
- package/dest/private_kernel/private_kernel_oracle.d.ts +6 -2
- 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 +72 -24
- package/dest/pxe.d.ts.map +1 -1
- package/dest/pxe.js +118 -71
- 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 +145 -69
- package/dest/storage/metadata.d.ts +1 -1
- package/dest/storage/metadata.js +1 -1
- package/dest/storage/note_store/note_store.d.ts +3 -3
- package/dest/storage/note_store/note_store.d.ts.map +1 -1
- package/dest/storage/note_store/note_store.js +6 -4
- package/dest/storage/tagging_store/recipient_tagging_store.d.ts +6 -6
- package/dest/storage/tagging_store/recipient_tagging_store.d.ts.map +1 -1
- package/dest/storage/tagging_store/sender_tagging_store.d.ts +29 -28
- package/dest/storage/tagging_store/sender_tagging_store.d.ts.map +1 -1
- package/dest/storage/tagging_store/sender_tagging_store.js +141 -115
- package/dest/tagging/get_all_logs_by_tags.d.ts +1 -1
- package/dest/tagging/get_all_logs_by_tags.d.ts.map +1 -1
- package/dest/tagging/get_all_logs_by_tags.js +17 -3
- package/dest/tagging/index.d.ts +3 -3
- package/dest/tagging/index.d.ts.map +1 -1
- package/dest/tagging/index.js +1 -1
- package/dest/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.d.ts +4 -5
- package/dest/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.d.ts.map +1 -1
- package/dest/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.js +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 +6 -7
- package/dest/tagging/recipient_sync/utils/load_logs_for_range.d.ts.map +1 -1
- package/dest/tagging/recipient_sync/utils/load_logs_for_range.js +12 -11
- package/dest/tagging/sender_sync/sync_sender_tagging_indexes.d.ts +4 -8
- package/dest/tagging/sender_sync/sync_sender_tagging_indexes.d.ts.map +1 -1
- package/dest/tagging/sender_sync/sync_sender_tagging_indexes.js +13 -7
- package/dest/tagging/sender_sync/utils/get_status_change_of_pending.d.ts +4 -3
- package/dest/tagging/sender_sync/utils/get_status_change_of_pending.d.ts.map +1 -1
- package/dest/tagging/sender_sync/utils/get_status_change_of_pending.js +20 -10
- package/dest/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.d.ts +5 -7
- package/dest/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.d.ts.map +1 -1
- package/dest/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.js +36 -24
- package/package.json +25 -16
- package/src/access_scopes.ts +9 -0
- package/src/block_synchronizer/block_synchronizer.ts +6 -0
- package/src/config/index.ts +1 -1
- package/src/config/package_info.ts +1 -1
- package/src/contract_function_simulator/contract_function_simulator.ts +338 -133
- 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 +8 -5
- package/src/contract_function_simulator/noir-structs/log_retrieval_response.ts +1 -4
- package/src/contract_function_simulator/noir-structs/message_tx_context.ts +55 -0
- package/src/contract_function_simulator/noir-structs/note_validation_request.ts +3 -6
- package/src/contract_function_simulator/oracle/interfaces.ts +53 -54
- package/src/contract_function_simulator/oracle/legacy_oracle_mappings.ts +77 -0
- package/src/contract_function_simulator/oracle/oracle.ts +165 -140
- package/src/contract_function_simulator/oracle/private_execution.ts +4 -4
- package/src/contract_function_simulator/oracle/private_execution_oracle.ts +128 -180
- package/src/contract_function_simulator/oracle/utility_execution_oracle.ts +222 -82
- package/src/contract_logging.ts +39 -0
- package/src/contract_sync/contract_sync_service.ts +152 -0
- package/src/contract_sync/{index.ts → helpers.ts} +13 -34
- package/src/debug/pxe_debug_utils.ts +48 -18
- package/src/entrypoints/client/bundle/index.ts +3 -0
- package/src/entrypoints/client/bundle/utils.ts +9 -1
- package/src/entrypoints/client/lazy/index.ts +3 -0
- package/src/entrypoints/client/lazy/utils.ts +9 -1
- package/src/entrypoints/server/index.ts +3 -1
- package/src/entrypoints/server/utils.ts +7 -7
- package/src/logs/log_service.ts +17 -24
- package/src/messages/message_context_service.ts +45 -0
- package/src/notes/note_service.ts +4 -3
- package/src/notes_filter.ts +26 -0
- package/src/oracle_version.ts +3 -3
- 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 +19 -12
- package/src/private_kernel/private_kernel_oracle.ts +7 -7
- package/src/pxe.ts +207 -124
- package/src/storage/contract_store/contract_store.ts +174 -75
- package/src/storage/metadata.ts +1 -1
- package/src/storage/note_store/note_store.ts +12 -5
- package/src/storage/tagging_store/recipient_tagging_store.ts +9 -5
- package/src/storage/tagging_store/sender_tagging_store.ts +185 -138
- package/src/tagging/get_all_logs_by_tags.ts +28 -4
- package/src/tagging/index.ts +2 -2
- package/src/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.ts +7 -10
- package/src/tagging/recipient_sync/utils/find_highest_indexes.ts +2 -2
- package/src/tagging/recipient_sync/utils/load_logs_for_range.ts +10 -15
- package/src/tagging/sender_sync/sync_sender_tagging_indexes.ts +23 -10
- package/src/tagging/sender_sync/utils/get_status_change_of_pending.ts +26 -11
- package/src/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.ts +27 -26
- package/dest/contract_sync/index.d.ts +0 -24
- 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
|
@@ -6,11 +6,10 @@ import { toACVMWitness } from '@aztec/simulator/client';
|
|
|
6
6
|
import { FunctionSelector, countArgumentsSize } from '@aztec/stdlib/abi';
|
|
7
7
|
import { siloNullifier } from '@aztec/stdlib/hash';
|
|
8
8
|
import { PrivateContextInputs } from '@aztec/stdlib/kernel';
|
|
9
|
-
import {
|
|
9
|
+
import { ExtendedDirectionalAppTaggingSecret } from '@aztec/stdlib/logs';
|
|
10
10
|
import { Tag } from '@aztec/stdlib/logs';
|
|
11
11
|
import { Note } from '@aztec/stdlib/note';
|
|
12
12
|
import { CallContext, CountedContractClassLog, NoteAndSlot } from '@aztec/stdlib/tx';
|
|
13
|
-
import { ensureContractSynced } from '../../contract_sync/index.js';
|
|
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';
|
|
@@ -19,34 +18,50 @@ 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;
|
|
41
|
+
contractSyncService;
|
|
31
42
|
totalPublicCalldataCount;
|
|
32
43
|
sideEffectCounter;
|
|
33
44
|
senderForTags;
|
|
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.contractSyncService = args.contractSyncService;
|
|
61
|
+
this.totalPublicCalldataCount = args.totalPublicCalldataCount ?? 0;
|
|
62
|
+
this.sideEffectCounter = args.sideEffectCounter ?? 0;
|
|
63
|
+
this.senderForTags = args.senderForTags;
|
|
64
|
+
this.simulator = args.simulator;
|
|
50
65
|
}
|
|
51
66
|
getPrivateContextInputs() {
|
|
52
67
|
return new PrivateContextInputs(this.callContext, this.anchorBlockHeader, this.txContext, this.sideEffectCounter);
|
|
@@ -87,14 +102,9 @@ import { UtilityExecutionOracle } from './utility_execution_oracle.js';
|
|
|
87
102
|
return this.contractClassLogs;
|
|
88
103
|
}
|
|
89
104
|
/**
|
|
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();
|
|
105
|
+
* Returns the tagging index ranges that were used in this execution (and that need to be stored in the db).
|
|
106
|
+
*/ getUsedTaggingIndexRanges() {
|
|
107
|
+
return this.taggingIndexCache.getUsedTaggingIndexRanges();
|
|
98
108
|
}
|
|
99
109
|
/**
|
|
100
110
|
* Return the nested execution results during this execution.
|
|
@@ -110,7 +120,7 @@ import { UtilityExecutionOracle } from './utility_execution_oracle.js';
|
|
|
110
120
|
*
|
|
111
121
|
* The value persists through nested calls, meaning all calls down the stack will use the same
|
|
112
122
|
* 'senderForTags' value (unless it is replaced).
|
|
113
|
-
*/
|
|
123
|
+
*/ getSenderForTags() {
|
|
114
124
|
return Promise.resolve(this.senderForTags);
|
|
115
125
|
}
|
|
116
126
|
/**
|
|
@@ -123,7 +133,7 @@ import { UtilityExecutionOracle } from './utility_execution_oracle.js';
|
|
|
123
133
|
* Account contracts typically set this value before calling other contracts. The value persists
|
|
124
134
|
* through nested calls, meaning all calls down the stack will use the same 'senderForTags'
|
|
125
135
|
* value (unless it is replaced by another call to this setter).
|
|
126
|
-
*/
|
|
136
|
+
*/ setSenderForTags(senderForTags) {
|
|
127
137
|
this.senderForTags = senderForTags;
|
|
128
138
|
return Promise.resolve();
|
|
129
139
|
}
|
|
@@ -132,20 +142,20 @@ import { UtilityExecutionOracle } from './utility_execution_oracle.js';
|
|
|
132
142
|
* @param sender - The address sending the log
|
|
133
143
|
* @param recipient - The address receiving the log
|
|
134
144
|
* @returns An app tag to be used in a log.
|
|
135
|
-
*/ async
|
|
136
|
-
const
|
|
137
|
-
const index = await this.#getIndexToUseForSecret(
|
|
138
|
-
this.
|
|
139
|
-
this.taggingIndexCache.setLastUsedIndex(
|
|
145
|
+
*/ async getNextAppTagAsSender(sender, recipient) {
|
|
146
|
+
const extendedSecret = await this.#calculateExtendedDirectionalAppTaggingSecret(this.contractAddress, sender, recipient);
|
|
147
|
+
const index = await this.#getIndexToUseForSecret(extendedSecret);
|
|
148
|
+
this.logger.debug(`Incrementing tagging index for sender: ${sender}, recipient: ${recipient}, contract: ${this.contractAddress} to ${index}`);
|
|
149
|
+
this.taggingIndexCache.setLastUsedIndex(extendedSecret, index);
|
|
140
150
|
return Tag.compute({
|
|
141
|
-
|
|
151
|
+
extendedSecret,
|
|
142
152
|
index
|
|
143
153
|
});
|
|
144
154
|
}
|
|
145
|
-
async #
|
|
146
|
-
const senderCompleteAddress = await this.
|
|
155
|
+
async #calculateExtendedDirectionalAppTaggingSecret(contractAddress, sender, recipient) {
|
|
156
|
+
const senderCompleteAddress = await this.getCompleteAddressOrFail(sender);
|
|
147
157
|
const senderIvsk = await this.keyStore.getMasterIncomingViewingSecretKey(sender);
|
|
148
|
-
return
|
|
158
|
+
return ExtendedDirectionalAppTaggingSecret.compute(senderCompleteAddress, senderIvsk, recipient, contractAddress, recipient);
|
|
149
159
|
}
|
|
150
160
|
async #getIndexToUseForSecret(secret) {
|
|
151
161
|
// If we have the tagging index in the cache, we use it. If not we obtain it from the execution data provider.
|
|
@@ -156,7 +166,7 @@ import { UtilityExecutionOracle } from './utility_execution_oracle.js';
|
|
|
156
166
|
// This is a tagging secret we've not yet used in this tx, so first sync our store to make sure its indices
|
|
157
167
|
// are up to date. We do this here because this store is not synced as part of the global sync because
|
|
158
168
|
// that'd be wasteful as most tagging secrets are not used in each tx.
|
|
159
|
-
await syncSenderTaggingIndexes(secret, this.
|
|
169
|
+
await syncSenderTaggingIndexes(secret, this.aztecNode, this.senderTaggingStore, await this.anchorBlockHeader.hash(), this.jobId);
|
|
160
170
|
const lastUsedIndex = await this.senderTaggingStore.getLastUsedIndex(secret, this.jobId);
|
|
161
171
|
// If lastUsedIndex is undefined, we've never used this secret, so start from 0
|
|
162
172
|
// Otherwise, the next index to use is one past the last used index
|
|
@@ -167,29 +177,29 @@ import { UtilityExecutionOracle } from './utility_execution_oracle.js';
|
|
|
167
177
|
* Store values in the execution cache.
|
|
168
178
|
* @param values - Values to store.
|
|
169
179
|
* @returns The hash of the values.
|
|
170
|
-
*/
|
|
180
|
+
*/ storeInExecutionCache(values, hash) {
|
|
171
181
|
return this.executionCache.store(values, hash);
|
|
172
182
|
}
|
|
173
183
|
/**
|
|
174
184
|
* Gets values from the execution cache.
|
|
175
185
|
* @param hash - Hash of the values.
|
|
176
186
|
* @returns The values.
|
|
177
|
-
*/
|
|
187
|
+
*/ loadFromExecutionCache(hash) {
|
|
178
188
|
const preimage = this.executionCache.getPreimage(hash);
|
|
179
189
|
if (!preimage) {
|
|
180
190
|
throw new Error(`Preimage for hash ${hash.toString()} not found in cache`);
|
|
181
191
|
}
|
|
182
192
|
return Promise.resolve(preimage);
|
|
183
193
|
}
|
|
184
|
-
async
|
|
194
|
+
async checkNullifierExists(innerNullifier) {
|
|
185
195
|
// This oracle must be overridden because while utility execution can only meaningfully check if a nullifier exists
|
|
186
196
|
// in the synched block, during private execution there's also the possibility of it being pending, i.e. created
|
|
187
197
|
// in the current transaction.
|
|
188
|
-
this.
|
|
198
|
+
this.logger.debug(`Checking existence of inner nullifier ${innerNullifier}`, {
|
|
189
199
|
contractAddress: this.contractAddress
|
|
190
200
|
});
|
|
191
201
|
const nullifier = (await siloNullifier(this.contractAddress, innerNullifier)).toBigInt();
|
|
192
|
-
return this.noteCache.getNullifiers(this.contractAddress).has(nullifier) || await super.
|
|
202
|
+
return this.noteCache.getNullifiers(this.contractAddress).has(nullifier) || await super.checkNullifierExists(innerNullifier);
|
|
193
203
|
}
|
|
194
204
|
/**
|
|
195
205
|
* Gets some notes for a storage slot.
|
|
@@ -211,7 +221,7 @@ import { UtilityExecutionOracle } from './utility_execution_oracle.js';
|
|
|
211
221
|
* @param offset - The starting index for pagination.
|
|
212
222
|
* @param status - The status of notes to fetch.
|
|
213
223
|
* @returns Array of note data.
|
|
214
|
-
*/ async
|
|
224
|
+
*/ async getNotes(owner, storageSlot, numSelects, selectByIndexes, selectByOffsets, selectByLengths, selectValues, selectComparators, sortByIndexes, sortByOffsets, sortByLengths, sortOrder, limit, offset, status) {
|
|
215
225
|
// Nullified pending notes are already removed from the list.
|
|
216
226
|
const pendingNotes = this.noteCache.getNotes(this.callContext.contractAddress, owner, storageSlot);
|
|
217
227
|
const pendingNullifiers = this.noteCache.getNullifiers(this.callContext.contractAddress);
|
|
@@ -242,7 +252,7 @@ import { UtilityExecutionOracle } from './utility_execution_oracle.js';
|
|
|
242
252
|
limit,
|
|
243
253
|
offset
|
|
244
254
|
});
|
|
245
|
-
this.
|
|
255
|
+
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(', ')}`);
|
|
246
256
|
return notes;
|
|
247
257
|
}
|
|
248
258
|
/**
|
|
@@ -255,8 +265,8 @@ import { UtilityExecutionOracle } from './utility_execution_oracle.js';
|
|
|
255
265
|
* @param noteItems - The items to be included in a Note.
|
|
256
266
|
* @param noteHash - A hash of the new note.
|
|
257
267
|
* @returns
|
|
258
|
-
*/
|
|
259
|
-
this.
|
|
268
|
+
*/ notifyCreatedNote(owner, storageSlot, randomness, noteTypeId, noteItems, noteHash, counter) {
|
|
269
|
+
this.logger.debug(`Notified of new note with inner hash ${noteHash}`, {
|
|
260
270
|
contractAddress: this.callContext.contractAddress,
|
|
261
271
|
storageSlot,
|
|
262
272
|
randomness,
|
|
@@ -287,7 +297,7 @@ import { UtilityExecutionOracle } from './utility_execution_oracle.js';
|
|
|
287
297
|
* within the current transaction/execution.
|
|
288
298
|
* @param innerNullifier - The pending nullifier to add in the list (not yet siloed by contract address).
|
|
289
299
|
* @param noteHash - A hash of the new note.
|
|
290
|
-
*/ async
|
|
300
|
+
*/ async notifyNullifiedNote(innerNullifier, noteHash, counter) {
|
|
291
301
|
const nullifiedNoteHashCounter = await this.noteCache.nullifyNote(this.callContext.contractAddress, innerNullifier, noteHash);
|
|
292
302
|
if (nullifiedNoteHashCounter !== undefined) {
|
|
293
303
|
this.noteHashNullifierCounterMap.set(nullifiedNoteHashCounter, counter);
|
|
@@ -298,19 +308,19 @@ import { UtilityExecutionOracle } from './utility_execution_oracle.js';
|
|
|
298
308
|
* within the current transaction/execution.
|
|
299
309
|
* @param innerNullifier - The pending nullifier to add in the list (not yet siloed by contract address).
|
|
300
310
|
* @param noteHash - A hash of the new note.
|
|
301
|
-
*/
|
|
302
|
-
this.
|
|
311
|
+
*/ notifyCreatedNullifier(innerNullifier) {
|
|
312
|
+
this.logger.debug(`Notified of new inner nullifier ${innerNullifier}`, {
|
|
303
313
|
contractAddress: this.contractAddress
|
|
304
314
|
});
|
|
305
315
|
return this.noteCache.nullifierCreated(this.callContext.contractAddress, innerNullifier);
|
|
306
316
|
}
|
|
307
317
|
/**
|
|
308
|
-
* Check if a nullifier has been emitted in the same transaction, i.e. if
|
|
318
|
+
* Check if a nullifier has been emitted in the same transaction, i.e. if notifyCreatedNullifier has been
|
|
309
319
|
* called for this inner nullifier from the contract with the specified address.
|
|
310
320
|
* @param innerNullifier - The inner nullifier to check.
|
|
311
321
|
* @param contractAddress - Address of the contract that emitted the nullifier.
|
|
312
322
|
* @returns A boolean indicating whether the nullifier is pending or not.
|
|
313
|
-
*/ async
|
|
323
|
+
*/ async isNullifierPending(innerNullifier, contractAddress) {
|
|
314
324
|
const siloedNullifier = await siloNullifier(contractAddress, innerNullifier);
|
|
315
325
|
const isNullifierPending = this.noteCache.getNullifiers(contractAddress).has(siloedNullifier.toBigInt());
|
|
316
326
|
return Promise.resolve(isNullifierPending);
|
|
@@ -321,10 +331,10 @@ import { UtilityExecutionOracle } from './utility_execution_oracle.js';
|
|
|
321
331
|
* keep the preimage in ts for later.
|
|
322
332
|
* @param log - The contract class log to be emitted.
|
|
323
333
|
* @param counter - The contract class log's counter.
|
|
324
|
-
*/
|
|
334
|
+
*/ notifyCreatedContractClassLog(log, counter) {
|
|
325
335
|
this.contractClassLogs.push(new CountedContractClassLog(log, counter));
|
|
326
336
|
const text = log.toBuffer().toString('hex');
|
|
327
|
-
this.
|
|
337
|
+
this.logger.verbose(`Emitted log from ContractClassRegistry: "${text.length > 100 ? text.slice(0, 100) + '...' : text}"`);
|
|
328
338
|
}
|
|
329
339
|
#checkValidStaticCall(childExecutionResult) {
|
|
330
340
|
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) {
|
|
@@ -339,20 +349,50 @@ import { UtilityExecutionOracle } from './utility_execution_oracle.js';
|
|
|
339
349
|
* @param sideEffectCounter - The side effect counter at the start of the call.
|
|
340
350
|
* @param isStaticCall - Whether the call is a static call.
|
|
341
351
|
* @returns The execution result.
|
|
342
|
-
*/ async
|
|
352
|
+
*/ async callPrivateFunction(targetContractAddress, functionSelector, argsHash, sideEffectCounter, isStaticCall) {
|
|
343
353
|
if (!this.simulator) {
|
|
344
354
|
// In practice it is only when creating inline private contexts in a Noir test using TXE that we create an
|
|
345
355
|
// instance of this class without a simulator.
|
|
346
356
|
throw new Error('No simulator provided, cannot perform a nested private call');
|
|
347
357
|
}
|
|
348
358
|
const simulatorSetupTimer = new Timer();
|
|
349
|
-
this.
|
|
359
|
+
this.logger.debug(`Calling private function ${targetContractAddress}:${functionSelector} from ${this.callContext.contractAddress}`);
|
|
350
360
|
isStaticCall = isStaticCall || this.callContext.isStaticCall;
|
|
351
|
-
await ensureContractSynced(targetContractAddress, functionSelector, this.utilityExecutor, this.
|
|
361
|
+
await this.contractSyncService.ensureContractSynced(targetContractAddress, functionSelector, this.utilityExecutor, this.anchorBlockHeader, this.jobId, this.scopes);
|
|
352
362
|
const targetArtifact = await this.contractStore.getFunctionArtifactWithDebugMetadata(targetContractAddress, functionSelector);
|
|
353
363
|
const derivedTxContext = this.txContext.clone();
|
|
354
364
|
const derivedCallContext = await this.deriveCallContext(targetContractAddress, targetArtifact, isStaticCall);
|
|
355
|
-
const privateExecutionOracle = new PrivateExecutionOracle(
|
|
365
|
+
const privateExecutionOracle = new PrivateExecutionOracle({
|
|
366
|
+
argsHash,
|
|
367
|
+
txContext: derivedTxContext,
|
|
368
|
+
callContext: derivedCallContext,
|
|
369
|
+
anchorBlockHeader: this.anchorBlockHeader,
|
|
370
|
+
utilityExecutor: this.utilityExecutor,
|
|
371
|
+
authWitnesses: this.authWitnesses,
|
|
372
|
+
capsules: this.capsules,
|
|
373
|
+
executionCache: this.executionCache,
|
|
374
|
+
noteCache: this.noteCache,
|
|
375
|
+
taggingIndexCache: this.taggingIndexCache,
|
|
376
|
+
contractStore: this.contractStore,
|
|
377
|
+
noteStore: this.noteStore,
|
|
378
|
+
keyStore: this.keyStore,
|
|
379
|
+
addressStore: this.addressStore,
|
|
380
|
+
aztecNode: this.aztecNode,
|
|
381
|
+
senderTaggingStore: this.senderTaggingStore,
|
|
382
|
+
recipientTaggingStore: this.recipientTaggingStore,
|
|
383
|
+
senderAddressBookStore: this.senderAddressBookStore,
|
|
384
|
+
capsuleStore: this.capsuleStore,
|
|
385
|
+
privateEventStore: this.privateEventStore,
|
|
386
|
+
messageContextService: this.messageContextService,
|
|
387
|
+
contractSyncService: this.contractSyncService,
|
|
388
|
+
jobId: this.jobId,
|
|
389
|
+
totalPublicCalldataCount: this.totalPublicCalldataCount,
|
|
390
|
+
sideEffectCounter,
|
|
391
|
+
log: this.logger,
|
|
392
|
+
scopes: this.scopes,
|
|
393
|
+
senderForTags: this.senderForTags,
|
|
394
|
+
simulator: this.simulator
|
|
395
|
+
});
|
|
356
396
|
const setupTime = simulatorSetupTimer.ms();
|
|
357
397
|
const childExecutionResult = await executePrivateFunction(this.simulator, privateExecutionOracle, targetArtifact, targetContractAddress, functionSelector);
|
|
358
398
|
if (isStaticCall) {
|
|
@@ -369,7 +409,7 @@ import { UtilityExecutionOracle } from './utility_execution_oracle.js';
|
|
|
369
409
|
returnsHash: publicInputs.returnsHash
|
|
370
410
|
};
|
|
371
411
|
}
|
|
372
|
-
|
|
412
|
+
/** Validates the calldata preimage exists in the cache and checks cumulative calldata size is within limits. */ validatePublicCalldata(calldataHash) {
|
|
373
413
|
const calldata = this.executionCache.getPreimage(calldataHash);
|
|
374
414
|
if (!calldata) {
|
|
375
415
|
throw new Error('Calldata for public call not found in cache');
|
|
@@ -378,31 +418,12 @@ import { UtilityExecutionOracle } from './utility_execution_oracle.js';
|
|
|
378
418
|
if (this.totalPublicCalldataCount > MAX_FR_CALLDATA_TO_ALL_ENQUEUED_CALLS) {
|
|
379
419
|
throw new Error(`Too many total args to all enqueued public calls! (> ${MAX_FR_CALLDATA_TO_ALL_ENQUEUED_CALLS})`);
|
|
380
420
|
}
|
|
381
|
-
}
|
|
382
|
-
/**
|
|
383
|
-
* Verify relevant information when a public function is enqueued.
|
|
384
|
-
* @param targetContractAddress - The address of the contract to call.
|
|
385
|
-
* @param calldataHash - The hash of the function selector and arguments.
|
|
386
|
-
* @param sideEffectCounter - The side effect counter at the start of the call.
|
|
387
|
-
* @param isStaticCall - Whether the call is a static call.
|
|
388
|
-
*/ privateNotifyEnqueuedPublicFunctionCall(_targetContractAddress, calldataHash, _sideEffectCounter, _isStaticCall) {
|
|
389
|
-
this.#onNewPublicFunctionCall(calldataHash);
|
|
390
|
-
return Promise.resolve();
|
|
391
|
-
}
|
|
392
|
-
/**
|
|
393
|
-
* Verify relevant information when a public teardown function is set.
|
|
394
|
-
* @param targetContractAddress - The address of the contract to call.
|
|
395
|
-
* @param argsHash - The arguments hash to pass to the function.
|
|
396
|
-
* @param sideEffectCounter - The side effect counter at the start of the call.
|
|
397
|
-
* @param isStaticCall - Whether the call is a static call.
|
|
398
|
-
*/ privateNotifySetPublicTeardownFunctionCall(_targetContractAddress, calldataHash, _sideEffectCounter, _isStaticCall) {
|
|
399
|
-
this.#onNewPublicFunctionCall(calldataHash);
|
|
400
421
|
return Promise.resolve();
|
|
401
422
|
}
|
|
402
|
-
|
|
423
|
+
notifyRevertiblePhaseStart(minRevertibleSideEffectCounter) {
|
|
403
424
|
return this.noteCache.setMinRevertibleSideEffectCounter(minRevertibleSideEffectCounter);
|
|
404
425
|
}
|
|
405
|
-
|
|
426
|
+
inRevertiblePhase(sideEffectCounter) {
|
|
406
427
|
return Promise.resolve(this.noteCache.isSideEffectCounterRevertible(sideEffectCounter));
|
|
407
428
|
}
|
|
408
429
|
/**
|
|
@@ -417,10 +438,4 @@ import { UtilityExecutionOracle } from './utility_execution_oracle.js';
|
|
|
417
438
|
getDebugFunctionName() {
|
|
418
439
|
return this.contractStore.getDebugFunctionName(this.contractAddress, this.callContext.functionSelector);
|
|
419
440
|
}
|
|
420
|
-
utilityEmitOffchainEffect(data) {
|
|
421
|
-
this.offchainEffects.push({
|
|
422
|
-
data
|
|
423
|
-
});
|
|
424
|
-
return Promise.resolve();
|
|
425
|
-
}
|
|
426
441
|
}
|