@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
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
import { AVM_EMITNOTEHASH_BASE_L2_GAS, AVM_EMITNULLIFIER_BASE_L2_GAS, AVM_SENDL2TOL1MSG_BASE_L2_GAS,
|
|
1
|
+
import { AVM_EMITNOTEHASH_BASE_L2_GAS, AVM_EMITNULLIFIER_BASE_L2_GAS, AVM_SENDL2TOL1MSG_BASE_L2_GAS, DA_GAS_PER_FIELD, FIXED_AVM_STARTUP_L2_GAS, L2_GAS_PER_CONTRACT_CLASS_LOG, L2_GAS_PER_L2_TO_L1_MSG, L2_GAS_PER_NOTE_HASH, L2_GAS_PER_NULLIFIER, L2_GAS_PER_PRIVATE_LOG, MAX_CONTRACT_CLASS_LOGS_PER_TX, MAX_ENQUEUED_CALLS_PER_TX, MAX_L2_TO_L1_MSGS_PER_TX, MAX_NOTE_HASHES_PER_TX, MAX_NOTE_HASH_READ_REQUESTS_PER_TX, MAX_NULLIFIERS_PER_TX, MAX_NULLIFIER_READ_REQUESTS_PER_TX, MAX_PRIVATE_LOGS_PER_TX, PRIVATE_TX_L2_GAS_OVERHEAD, PUBLIC_TX_L2_GAS_OVERHEAD, TX_DA_GAS_OVERHEAD } from '@aztec/constants';
|
|
2
2
|
import { arrayNonEmptyLength, padArrayEnd } from '@aztec/foundation/collection';
|
|
3
|
-
import { poseidon2HashWithSeparator } from '@aztec/foundation/crypto/poseidon';
|
|
4
3
|
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
5
4
|
import { createLogger } from '@aztec/foundation/log';
|
|
6
5
|
import { Timer } from '@aztec/foundation/timer';
|
|
@@ -10,12 +9,12 @@ import { ExecutionError, createSimulationError, extractCallStack, resolveAsserti
|
|
|
10
9
|
import { FunctionSelector, FunctionType } from '@aztec/stdlib/abi';
|
|
11
10
|
import { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
12
11
|
import { Gas } from '@aztec/stdlib/gas';
|
|
13
|
-
import { computeNoteHashNonce, computeProtocolNullifier, computeUniqueNoteHash, siloNoteHash, siloNullifier } from '@aztec/stdlib/hash';
|
|
14
|
-
import { PartialPrivateTailPublicInputsForPublic, PartialPrivateTailPublicInputsForRollup, PrivateKernelTailCircuitPublicInputs, PrivateToPublicAccumulatedData, PrivateToRollupAccumulatedData, PublicCallRequest, ScopedLogHash } from '@aztec/stdlib/kernel';
|
|
12
|
+
import { computeNoteHashNonce, computeProtocolNullifier, computeSiloedPrivateLogFirstField, computeUniqueNoteHash, siloNoteHash, siloNullifier } from '@aztec/stdlib/hash';
|
|
13
|
+
import { ClaimedLengthArray, PartialPrivateTailPublicInputsForPublic, PartialPrivateTailPublicInputsForRollup, PrivateKernelTailCircuitPublicInputs, PrivateToPublicAccumulatedData, PrivateToRollupAccumulatedData, PublicCallRequest, ReadRequestActionEnum, ScopedLogHash, ScopedNoteHash, ScopedNullifier, ScopedReadRequest, buildTransientDataHints, getNoteHashReadRequestResetActions, getNullifierReadRequestResetActions } from '@aztec/stdlib/kernel';
|
|
15
14
|
import { PrivateLog } from '@aztec/stdlib/logs';
|
|
16
15
|
import { ScopedL2ToL1Message } from '@aztec/stdlib/messaging';
|
|
17
16
|
import { ChonkProof } from '@aztec/stdlib/proofs';
|
|
18
|
-
import { CallContext, HashedValues, PrivateExecutionResult, TxConstantData, collectNested, getFinalMinRevertibleSideEffectCounter } from '@aztec/stdlib/tx';
|
|
17
|
+
import { CallContext, HashedValues, PrivateExecutionResult, TxConstantData, collectNested, collectNoteHashNullifierCounterMap, getFinalMinRevertibleSideEffectCounter } from '@aztec/stdlib/tx';
|
|
19
18
|
import { ExecutionNoteCache } from './execution_note_cache.js';
|
|
20
19
|
import { ExecutionTaggingIndexCache } from './execution_tagging_index_cache.js';
|
|
21
20
|
import { HashedValuesCache } from './hashed_values_cache.js';
|
|
@@ -26,6 +25,7 @@ import { UtilityExecutionOracle } from './oracle/utility_execution_oracle.js';
|
|
|
26
25
|
/**
|
|
27
26
|
* The contract function simulator.
|
|
28
27
|
*/ export class ContractFunctionSimulator {
|
|
28
|
+
log;
|
|
29
29
|
contractStore;
|
|
30
30
|
noteStore;
|
|
31
31
|
keyStore;
|
|
@@ -37,35 +37,28 @@ import { UtilityExecutionOracle } from './oracle/utility_execution_oracle.js';
|
|
|
37
37
|
capsuleStore;
|
|
38
38
|
privateEventStore;
|
|
39
39
|
simulator;
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
this.
|
|
44
|
-
this.
|
|
45
|
-
this.
|
|
46
|
-
this.
|
|
47
|
-
this.
|
|
48
|
-
this.
|
|
49
|
-
this.
|
|
50
|
-
this.
|
|
51
|
-
this.
|
|
52
|
-
this.
|
|
40
|
+
contractSyncService;
|
|
41
|
+
messageContextService;
|
|
42
|
+
constructor(args){
|
|
43
|
+
this.contractStore = args.contractStore;
|
|
44
|
+
this.noteStore = args.noteStore;
|
|
45
|
+
this.keyStore = args.keyStore;
|
|
46
|
+
this.addressStore = args.addressStore;
|
|
47
|
+
this.aztecNode = args.aztecNode;
|
|
48
|
+
this.senderTaggingStore = args.senderTaggingStore;
|
|
49
|
+
this.recipientTaggingStore = args.recipientTaggingStore;
|
|
50
|
+
this.senderAddressBookStore = args.senderAddressBookStore;
|
|
51
|
+
this.capsuleStore = args.capsuleStore;
|
|
52
|
+
this.privateEventStore = args.privateEventStore;
|
|
53
|
+
this.simulator = args.simulator;
|
|
54
|
+
this.contractSyncService = args.contractSyncService;
|
|
55
|
+
this.messageContextService = args.messageContextService;
|
|
53
56
|
this.log = createLogger('simulator');
|
|
54
57
|
}
|
|
55
58
|
/**
|
|
56
59
|
* Runs a private function.
|
|
57
60
|
* @param request - The transaction request.
|
|
58
|
-
|
|
59
|
-
* @param contractAddress - The address of the contract (should match request.origin)
|
|
60
|
-
* @param msgSender - The address calling the function. This can be replaced to simulate a call from another contract
|
|
61
|
-
* or a specific account.
|
|
62
|
-
* @param anchorBlockHeader - The block header to use as base state for this run.
|
|
63
|
-
* @param senderForTags - The address that is used as a tagging sender when emitting private logs. Returned from
|
|
64
|
-
* the `privateGetSenderForTags` oracle.
|
|
65
|
-
* @param scopes - The accounts whose notes we can access in this call. Currently optional and will default to all.
|
|
66
|
-
* @param jobId - The job ID for staged writes.
|
|
67
|
-
* @returns The result of the execution.
|
|
68
|
-
*/ async run(request, contractAddress, selector, msgSender = AztecAddress.fromField(Fr.MAX_FIELD_VALUE), anchorBlockHeader, senderForTags, scopes, jobId) {
|
|
61
|
+
*/ async run(request, { contractAddress, selector, msgSender = AztecAddress.fromField(Fr.MAX_FIELD_VALUE), anchorBlockHeader, senderForTags, scopes, jobId }) {
|
|
69
62
|
const simulatorSetupTimer = new Timer();
|
|
70
63
|
const entryPointArtifact = await this.contractStore.getFunctionArtifactWithDebugMetadata(contractAddress, selector);
|
|
71
64
|
if (entryPointArtifact.functionType !== FunctionType.PRIVATE) {
|
|
@@ -80,9 +73,38 @@ import { UtilityExecutionOracle } from './oracle/utility_execution_oracle.js';
|
|
|
80
73
|
const protocolNullifier = await computeProtocolNullifier(await request.toTxRequest().hash());
|
|
81
74
|
const noteCache = new ExecutionNoteCache(protocolNullifier);
|
|
82
75
|
const taggingIndexCache = new ExecutionTaggingIndexCache();
|
|
83
|
-
const privateExecutionOracle = new PrivateExecutionOracle(
|
|
84
|
-
|
|
85
|
-
|
|
76
|
+
const privateExecutionOracle = new PrivateExecutionOracle({
|
|
77
|
+
argsHash: request.firstCallArgsHash,
|
|
78
|
+
txContext: request.txContext,
|
|
79
|
+
callContext,
|
|
80
|
+
anchorBlockHeader,
|
|
81
|
+
utilityExecutor: async (call, execScopes)=>{
|
|
82
|
+
await this.runUtility(call, [], anchorBlockHeader, execScopes, jobId);
|
|
83
|
+
},
|
|
84
|
+
authWitnesses: request.authWitnesses,
|
|
85
|
+
capsules: request.capsules,
|
|
86
|
+
executionCache: HashedValuesCache.create(request.argsOfCalls),
|
|
87
|
+
noteCache,
|
|
88
|
+
taggingIndexCache,
|
|
89
|
+
contractStore: this.contractStore,
|
|
90
|
+
noteStore: this.noteStore,
|
|
91
|
+
keyStore: this.keyStore,
|
|
92
|
+
addressStore: this.addressStore,
|
|
93
|
+
aztecNode: this.aztecNode,
|
|
94
|
+
senderTaggingStore: this.senderTaggingStore,
|
|
95
|
+
recipientTaggingStore: this.recipientTaggingStore,
|
|
96
|
+
senderAddressBookStore: this.senderAddressBookStore,
|
|
97
|
+
capsuleStore: this.capsuleStore,
|
|
98
|
+
privateEventStore: this.privateEventStore,
|
|
99
|
+
messageContextService: this.messageContextService,
|
|
100
|
+
contractSyncService: this.contractSyncService,
|
|
101
|
+
jobId,
|
|
102
|
+
totalPublicCalldataCount: 0,
|
|
103
|
+
sideEffectCounter: startSideEffectCounter,
|
|
104
|
+
scopes,
|
|
105
|
+
senderForTags,
|
|
106
|
+
simulator: this.simulator
|
|
107
|
+
});
|
|
86
108
|
const setupTime = simulatorSetupTimer.ms();
|
|
87
109
|
try {
|
|
88
110
|
// Note: any nested private function calls are made recursively within this
|
|
@@ -99,7 +121,7 @@ import { UtilityExecutionOracle } from './oracle/utility_execution_oracle.js';
|
|
|
99
121
|
r.publicInputs.publicTeardownCallRequest
|
|
100
122
|
]));
|
|
101
123
|
const publicFunctionsCalldata = await Promise.all(publicCallRequests.map(async (r)=>{
|
|
102
|
-
const calldata = await privateExecutionOracle.
|
|
124
|
+
const calldata = await privateExecutionOracle.loadFromExecutionCache(r.calldataHash);
|
|
103
125
|
return new HashedValues(calldata, r.calldataHash);
|
|
104
126
|
}));
|
|
105
127
|
const teardownTime = simulatorTeardownTimer.ms();
|
|
@@ -129,7 +151,24 @@ import { UtilityExecutionOracle } from './oracle/utility_execution_oracle.js';
|
|
|
129
151
|
if (entryPointArtifact.functionType !== FunctionType.UTILITY) {
|
|
130
152
|
throw new Error(`Cannot run ${entryPointArtifact.functionType} function as utility`);
|
|
131
153
|
}
|
|
132
|
-
const oracle = new UtilityExecutionOracle(
|
|
154
|
+
const oracle = new UtilityExecutionOracle({
|
|
155
|
+
contractAddress: call.to,
|
|
156
|
+
authWitnesses: authwits,
|
|
157
|
+
capsules: [],
|
|
158
|
+
anchorBlockHeader,
|
|
159
|
+
contractStore: this.contractStore,
|
|
160
|
+
noteStore: this.noteStore,
|
|
161
|
+
keyStore: this.keyStore,
|
|
162
|
+
addressStore: this.addressStore,
|
|
163
|
+
aztecNode: this.aztecNode,
|
|
164
|
+
recipientTaggingStore: this.recipientTaggingStore,
|
|
165
|
+
senderAddressBookStore: this.senderAddressBookStore,
|
|
166
|
+
capsuleStore: this.capsuleStore,
|
|
167
|
+
privateEventStore: this.privateEventStore,
|
|
168
|
+
messageContextService: this.messageContextService,
|
|
169
|
+
jobId,
|
|
170
|
+
scopes
|
|
171
|
+
});
|
|
133
172
|
try {
|
|
134
173
|
this.log.verbose(`Executing utility function ${entryPointArtifact.name}`, {
|
|
135
174
|
contract: call.to,
|
|
@@ -145,8 +184,11 @@ import { UtilityExecutionOracle } from './oracle/utility_execution_oracle.js';
|
|
|
145
184
|
cause: err
|
|
146
185
|
});
|
|
147
186
|
});
|
|
148
|
-
this.log.verbose(`Utility
|
|
149
|
-
return
|
|
187
|
+
this.log.verbose(`Utility execution for ${call.to}.${call.selector} completed`);
|
|
188
|
+
return {
|
|
189
|
+
result: witnessMapToFields(acirExecutionResult.returnWitness),
|
|
190
|
+
offchainEffects: oracle.getOffchainEffects()
|
|
191
|
+
};
|
|
150
192
|
} catch (err) {
|
|
151
193
|
throw createSimulationError(err instanceof Error ? err : new Error('Unknown error during private execution'));
|
|
152
194
|
}
|
|
@@ -185,18 +227,24 @@ class OrderedSideEffect {
|
|
|
185
227
|
* (allowing state overrides) and is much faster, while still generating a valid
|
|
186
228
|
* output that can be sent to the node for public simulation
|
|
187
229
|
* @param privateExecutionResult - The result of the private execution.
|
|
188
|
-
* @param
|
|
230
|
+
* @param debugFunctionNameGetter - A provider for contract data in order to get function names and debug info.
|
|
231
|
+
* @param node - AztecNode for verifying settled read requests against the note hash and nullifier trees.
|
|
189
232
|
* @param minRevertibleSideEffectCounterOverride - Optional override for the min revertible side effect counter.
|
|
190
233
|
* Used by TXE to simulate account contract behavior (setting the counter before app execution).
|
|
191
234
|
* @returns The simulated proving result.
|
|
192
|
-
*/ export async function generateSimulatedProvingResult(privateExecutionResult,
|
|
193
|
-
const siloedNoteHashes = [];
|
|
194
|
-
const nullifiers = [];
|
|
235
|
+
*/ export async function generateSimulatedProvingResult(privateExecutionResult, debugFunctionNameGetter, node, minRevertibleSideEffectCounterOverride) {
|
|
195
236
|
const taggedPrivateLogs = [];
|
|
196
237
|
const l2ToL1Messages = [];
|
|
197
238
|
const contractClassLogsHashes = [];
|
|
198
239
|
const publicCallRequests = [];
|
|
199
240
|
const executionSteps = [];
|
|
241
|
+
// Unsiloed scoped arrays — used for squashing, read request verification,
|
|
242
|
+
// and siloed at the end only for the surviving items
|
|
243
|
+
const scopedNoteHashes = [];
|
|
244
|
+
const scopedNullifiers = [];
|
|
245
|
+
// Read requests for verification
|
|
246
|
+
const noteHashReadRequests = [];
|
|
247
|
+
const nullifierReadRequests = [];
|
|
200
248
|
let publicTeardownCallRequest;
|
|
201
249
|
const executions = [
|
|
202
250
|
privateExecutionResult.entrypoint
|
|
@@ -205,18 +253,14 @@ class OrderedSideEffect {
|
|
|
205
253
|
const execution = executions.shift();
|
|
206
254
|
executions.unshift(...execution.nestedExecutionResults);
|
|
207
255
|
const { contractAddress } = execution.publicInputs.callContext;
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
metadata.log.fields[0] = await
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
}));
|
|
217
|
-
siloedNoteHashes.push(...noteHashesFromExecution);
|
|
218
|
-
taggedPrivateLogs.push(...privateLogsFromExecution);
|
|
219
|
-
nullifiers.push(...nullifiersFromExecution);
|
|
256
|
+
scopedNoteHashes.push(...execution.publicInputs.noteHashes.getActiveItems().filter((nh)=>!nh.isEmpty()).map((nh)=>nh.scope(contractAddress)));
|
|
257
|
+
scopedNullifiers.push(...execution.publicInputs.nullifiers.getActiveItems().map((n)=>n.scope(contractAddress)));
|
|
258
|
+
taggedPrivateLogs.push(...await Promise.all(execution.publicInputs.privateLogs.getActiveItems().map(async (metadata)=>{
|
|
259
|
+
metadata.log.fields[0] = await computeSiloedPrivateLogFirstField(contractAddress, metadata.log.fields[0]);
|
|
260
|
+
return new OrderedSideEffect(metadata, metadata.counter);
|
|
261
|
+
})));
|
|
262
|
+
noteHashReadRequests.push(...execution.publicInputs.noteHashReadRequests.getActiveItems());
|
|
263
|
+
nullifierReadRequests.push(...execution.publicInputs.nullifierReadRequests.getActiveItems());
|
|
220
264
|
l2ToL1Messages.push(...execution.publicInputs.l2ToL1Msgs.getActiveItems().map((message)=>new OrderedSideEffect(message.message.scope(contractAddress), message.counter)));
|
|
221
265
|
contractClassLogsHashes.push(...execution.publicInputs.contractClassLogsHashes.getActiveItems().map((contractClassLogHash)=>new OrderedSideEffect(contractClassLogHash.logHash.scope(contractAddress), contractClassLogHash.counter)));
|
|
222
266
|
publicCallRequests.push(...execution.publicInputs.publicCallRequests.getActiveItems().map((callRequest)=>new OrderedSideEffect(callRequest.inner, callRequest.counter)));
|
|
@@ -225,7 +269,7 @@ class OrderedSideEffect {
|
|
|
225
269
|
}
|
|
226
270
|
publicTeardownCallRequest = execution.publicInputs.publicTeardownCallRequest.isEmpty() ? publicTeardownCallRequest : execution.publicInputs.publicTeardownCallRequest;
|
|
227
271
|
executionSteps.push({
|
|
228
|
-
functionName: await
|
|
272
|
+
functionName: await debugFunctionNameGetter(execution.publicInputs.callContext.contractAddress, execution.publicInputs.callContext.functionSelector),
|
|
229
273
|
timings: execution.profileResult?.timings ?? {
|
|
230
274
|
witgen: 0,
|
|
231
275
|
oracles: {}
|
|
@@ -235,6 +279,14 @@ class OrderedSideEffect {
|
|
|
235
279
|
witness: execution.partialWitness
|
|
236
280
|
});
|
|
237
281
|
}
|
|
282
|
+
const noteHashNullifierCounterMap = collectNoteHashNullifierCounterMap(privateExecutionResult);
|
|
283
|
+
const minRevertibleSideEffectCounter = minRevertibleSideEffectCounterOverride ?? getFinalMinRevertibleSideEffectCounter(privateExecutionResult);
|
|
284
|
+
const scopedNoteHashesCLA = new ClaimedLengthArray(padArrayEnd(scopedNoteHashes, ScopedNoteHash.empty(), MAX_NOTE_HASHES_PER_TX), scopedNoteHashes.length);
|
|
285
|
+
const scopedNullifiersCLA = new ClaimedLengthArray(padArrayEnd(scopedNullifiers, ScopedNullifier.empty(), MAX_NULLIFIERS_PER_TX), scopedNullifiers.length);
|
|
286
|
+
const { filteredNoteHashes, filteredNullifiers, filteredPrivateLogs } = squashTransientSideEffects(taggedPrivateLogs, scopedNoteHashesCLA, scopedNullifiersCLA, noteHashNullifierCounterMap, minRevertibleSideEffectCounter);
|
|
287
|
+
await verifyReadRequests(node, await privateExecutionResult.entrypoint.publicInputs.anchorBlockHeader.hash(), noteHashReadRequests, nullifierReadRequests, scopedNoteHashesCLA, scopedNullifiersCLA);
|
|
288
|
+
const siloedNoteHashes = await Promise.all(filteredNoteHashes.sort((a, b)=>a.counter - b.counter).map(async (nh)=>new OrderedSideEffect(await siloNoteHash(nh.contractAddress, nh.value), nh.counter)));
|
|
289
|
+
const siloedNullifiers = await Promise.all(filteredNullifiers.sort((a, b)=>a.counter - b.counter).map(async (n)=>new OrderedSideEffect(await siloNullifier(n.contractAddress, n.value), n.counter)));
|
|
238
290
|
const constantData = new TxConstantData(privateExecutionResult.entrypoint.publicInputs.anchorBlockHeader, privateExecutionResult.entrypoint.publicInputs.txContext, getVKTreeRoot(), protocolContractsHash);
|
|
239
291
|
const hasPublicCalls = privateExecutionResult.publicFunctionCalldata.length !== 0;
|
|
240
292
|
let inputsForRollup;
|
|
@@ -243,8 +295,7 @@ class OrderedSideEffect {
|
|
|
243
295
|
const sortByCounter = (a, b)=>a.counter - b.counter;
|
|
244
296
|
const getEffect = (orderedSideEffect)=>orderedSideEffect.sideEffect;
|
|
245
297
|
const isPrivateOnlyTx = privateExecutionResult.publicFunctionCalldata.length === 0;
|
|
246
|
-
const
|
|
247
|
-
const [nonRevertibleNullifiers, revertibleNullifiers] = splitOrderedSideEffects(nullifiers.sort(sortByCounter), minRevertibleSideEffectCounter);
|
|
298
|
+
const [nonRevertibleNullifiers, revertibleNullifiers] = splitOrderedSideEffects(siloedNullifiers, minRevertibleSideEffectCounter);
|
|
248
299
|
const nonceGenerator = privateExecutionResult.firstNullifier;
|
|
249
300
|
if (nonRevertibleNullifiers.length === 0) {
|
|
250
301
|
nonRevertibleNullifiers.push(nonceGenerator);
|
|
@@ -254,43 +305,102 @@ class OrderedSideEffect {
|
|
|
254
305
|
if (isPrivateOnlyTx) {
|
|
255
306
|
// We must make the note hashes unique by using the
|
|
256
307
|
// nonce generator and their index in the tx.
|
|
257
|
-
const uniqueNoteHashes = await Promise.all(siloedNoteHashes.
|
|
308
|
+
const uniqueNoteHashes = await Promise.all(siloedNoteHashes.map(async (orderedSideEffect, i)=>{
|
|
258
309
|
const siloedNoteHash = orderedSideEffect.sideEffect;
|
|
259
310
|
const nonce = await computeNoteHashNonce(nonceGenerator, i);
|
|
260
311
|
const uniqueNoteHash = await computeUniqueNoteHash(nonce, siloedNoteHash);
|
|
261
312
|
return uniqueNoteHash;
|
|
262
313
|
}));
|
|
263
|
-
const accumulatedDataForRollup = new PrivateToRollupAccumulatedData(padArrayEnd(uniqueNoteHashes, Fr.ZERO, MAX_NOTE_HASHES_PER_TX), padArrayEnd(nonRevertibleNullifiers.concat(revertibleNullifiers), Fr.ZERO, MAX_NULLIFIERS_PER_TX), padArrayEnd(l2ToL1Messages.sort(sortByCounter).map(getEffect), ScopedL2ToL1Message.empty(), MAX_L2_TO_L1_MSGS_PER_TX), padArrayEnd(
|
|
264
|
-
gasUsed = meterGasUsed(accumulatedDataForRollup);
|
|
314
|
+
const accumulatedDataForRollup = new PrivateToRollupAccumulatedData(padArrayEnd(uniqueNoteHashes, Fr.ZERO, MAX_NOTE_HASHES_PER_TX), padArrayEnd(nonRevertibleNullifiers.concat(revertibleNullifiers), Fr.ZERO, MAX_NULLIFIERS_PER_TX), padArrayEnd(l2ToL1Messages.sort(sortByCounter).map(getEffect), ScopedL2ToL1Message.empty(), MAX_L2_TO_L1_MSGS_PER_TX), padArrayEnd(filteredPrivateLogs.sort(sortByCounter).map(getEffect), PrivateLog.empty(), MAX_PRIVATE_LOGS_PER_TX), padArrayEnd(contractClassLogsHashes.sort(sortByCounter).map(getEffect), ScopedLogHash.empty(), MAX_CONTRACT_CLASS_LOGS_PER_TX));
|
|
315
|
+
gasUsed = meterGasUsed(accumulatedDataForRollup, isPrivateOnlyTx);
|
|
265
316
|
inputsForRollup = new PartialPrivateTailPublicInputsForRollup(accumulatedDataForRollup);
|
|
266
317
|
} else {
|
|
267
|
-
const [nonRevertibleNoteHashes, revertibleNoteHashes] = splitOrderedSideEffects(siloedNoteHashes
|
|
318
|
+
const [nonRevertibleNoteHashes, revertibleNoteHashes] = splitOrderedSideEffects(siloedNoteHashes, minRevertibleSideEffectCounter);
|
|
268
319
|
const nonRevertibleUniqueNoteHashes = await Promise.all(nonRevertibleNoteHashes.map(async (noteHash, i)=>{
|
|
269
320
|
const nonce = await computeNoteHashNonce(nonceGenerator, i);
|
|
270
321
|
return await computeUniqueNoteHash(nonce, noteHash);
|
|
271
322
|
}));
|
|
272
323
|
const [nonRevertibleL2ToL1Messages, revertibleL2ToL1Messages] = splitOrderedSideEffects(l2ToL1Messages.sort(sortByCounter), minRevertibleSideEffectCounter);
|
|
273
|
-
const [nonRevertibleTaggedPrivateLogs, revertibleTaggedPrivateLogs] = splitOrderedSideEffects(
|
|
324
|
+
const [nonRevertibleTaggedPrivateLogs, revertibleTaggedPrivateLogs] = splitOrderedSideEffects(filteredPrivateLogs, minRevertibleSideEffectCounter);
|
|
274
325
|
const [nonRevertibleContractClassLogHashes, revertibleContractClassLogHashes] = splitOrderedSideEffects(contractClassLogsHashes.sort(sortByCounter), minRevertibleSideEffectCounter);
|
|
275
326
|
const [nonRevertiblePublicCallRequests, revertiblePublicCallRequests] = splitOrderedSideEffects(publicCallRequests.sort(sortByCounter), minRevertibleSideEffectCounter);
|
|
276
327
|
const nonRevertibleData = new PrivateToPublicAccumulatedData(padArrayEnd(nonRevertibleUniqueNoteHashes, Fr.ZERO, MAX_NOTE_HASHES_PER_TX), padArrayEnd(nonRevertibleNullifiers, Fr.ZERO, MAX_NULLIFIERS_PER_TX), padArrayEnd(nonRevertibleL2ToL1Messages, ScopedL2ToL1Message.empty(), MAX_L2_TO_L1_MSGS_PER_TX), padArrayEnd(nonRevertibleTaggedPrivateLogs, PrivateLog.empty(), MAX_PRIVATE_LOGS_PER_TX), padArrayEnd(nonRevertibleContractClassLogHashes, ScopedLogHash.empty(), MAX_CONTRACT_CLASS_LOGS_PER_TX), padArrayEnd(nonRevertiblePublicCallRequests, PublicCallRequest.empty(), MAX_ENQUEUED_CALLS_PER_TX));
|
|
277
328
|
const revertibleData = new PrivateToPublicAccumulatedData(padArrayEnd(revertibleNoteHashes, Fr.ZERO, MAX_NOTE_HASHES_PER_TX), padArrayEnd(revertibleNullifiers, Fr.ZERO, MAX_NULLIFIERS_PER_TX), padArrayEnd(revertibleL2ToL1Messages, ScopedL2ToL1Message.empty(), MAX_L2_TO_L1_MSGS_PER_TX), padArrayEnd(revertibleTaggedPrivateLogs, PrivateLog.empty(), MAX_PRIVATE_LOGS_PER_TX), padArrayEnd(revertibleContractClassLogHashes, ScopedLogHash.empty(), MAX_CONTRACT_CLASS_LOGS_PER_TX), padArrayEnd(revertiblePublicCallRequests, PublicCallRequest.empty(), MAX_ENQUEUED_CALLS_PER_TX));
|
|
278
|
-
gasUsed = meterGasUsed(revertibleData).add(meterGasUsed(nonRevertibleData));
|
|
329
|
+
gasUsed = meterGasUsed(revertibleData, isPrivateOnlyTx).add(meterGasUsed(nonRevertibleData, isPrivateOnlyTx));
|
|
279
330
|
if (publicTeardownCallRequest) {
|
|
280
|
-
gasUsed.add(privateExecutionResult.entrypoint.publicInputs.txContext.gasSettings.teardownGasLimits);
|
|
331
|
+
gasUsed = gasUsed.add(privateExecutionResult.entrypoint.publicInputs.txContext.gasSettings.teardownGasLimits);
|
|
281
332
|
}
|
|
282
333
|
inputsForPublic = new PartialPrivateTailPublicInputsForPublic(nonRevertibleData, revertibleData, publicTeardownCallRequest ?? PublicCallRequest.empty());
|
|
283
334
|
}
|
|
284
335
|
const publicInputs = new PrivateKernelTailCircuitPublicInputs(constantData, /*gasUsed=*/ gasUsed.add(Gas.from({
|
|
285
|
-
l2Gas:
|
|
286
|
-
daGas:
|
|
287
|
-
})), /*feePayer=*/ AztecAddress.zero(), /*
|
|
336
|
+
l2Gas: isPrivateOnlyTx ? PRIVATE_TX_L2_GAS_OVERHEAD : PUBLIC_TX_L2_GAS_OVERHEAD,
|
|
337
|
+
daGas: TX_DA_GAS_OVERHEAD
|
|
338
|
+
})), /*feePayer=*/ AztecAddress.zero(), /*expirationTimestamp=*/ 0n, hasPublicCalls ? inputsForPublic : undefined, !hasPublicCalls ? inputsForRollup : undefined);
|
|
288
339
|
return {
|
|
289
340
|
publicInputs,
|
|
290
341
|
chonkProof: ChonkProof.empty(),
|
|
291
342
|
executionSteps
|
|
292
343
|
};
|
|
293
344
|
}
|
|
345
|
+
/**
|
|
346
|
+
* Squashes transient note hashes and nullifiers, mimicking the behavior
|
|
347
|
+
* of the reset kernels. Returns the filtered (surviving) scoped items and private logs.
|
|
348
|
+
*/ function squashTransientSideEffects(taggedPrivateLogs, scopedNoteHashesCLA, scopedNullifiersCLA, noteHashNullifierCounterMap, minRevertibleSideEffectCounter) {
|
|
349
|
+
const { numTransientData, hints: transientDataHints } = buildTransientDataHints(scopedNoteHashesCLA, scopedNullifiersCLA, /*futureNoteHashReads=*/ [], /*futureNullifierReads=*/ [], /*futureLogs=*/ [], noteHashNullifierCounterMap, minRevertibleSideEffectCounter);
|
|
350
|
+
const squashedNoteHashCounters = new Set();
|
|
351
|
+
const squashedNullifierCounters = new Set();
|
|
352
|
+
for(let i = 0; i < numTransientData; i++){
|
|
353
|
+
const hint = transientDataHints[i];
|
|
354
|
+
squashedNoteHashCounters.add(scopedNoteHashesCLA.array[hint.noteHashIndex].counter);
|
|
355
|
+
squashedNullifierCounters.add(scopedNullifiersCLA.array[hint.nullifierIndex].counter);
|
|
356
|
+
}
|
|
357
|
+
return {
|
|
358
|
+
filteredNoteHashes: scopedNoteHashesCLA.getActiveItems().filter((nh)=>!squashedNoteHashCounters.has(nh.counter)),
|
|
359
|
+
filteredNullifiers: scopedNullifiersCLA.getActiveItems().filter((n)=>!squashedNullifierCounters.has(n.counter)),
|
|
360
|
+
filteredPrivateLogs: taggedPrivateLogs.filter((item)=>!squashedNoteHashCounters.has(item.sideEffect.noteHashCounter)).map((item)=>new OrderedSideEffect(item.sideEffect.log, item.counter))
|
|
361
|
+
};
|
|
362
|
+
}
|
|
363
|
+
/**
|
|
364
|
+
* Verifies settled read requests by checking membership in the note hash and nullifier trees
|
|
365
|
+
* at the tx's anchor block, mimicking the behavior of the kernels
|
|
366
|
+
*/ async function verifyReadRequests(node, anchorBlockHash, noteHashReadRequests, nullifierReadRequests, scopedNoteHashesCLA, scopedNullifiersCLA) {
|
|
367
|
+
const noteHashReadRequestsCLA = new ClaimedLengthArray(padArrayEnd(noteHashReadRequests, ScopedReadRequest.empty(), MAX_NOTE_HASH_READ_REQUESTS_PER_TX), noteHashReadRequests.length);
|
|
368
|
+
const nullifierReadRequestsCLA = new ClaimedLengthArray(padArrayEnd(nullifierReadRequests, ScopedReadRequest.empty(), MAX_NULLIFIER_READ_REQUESTS_PER_TX), nullifierReadRequests.length);
|
|
369
|
+
const noteHashResetActions = getNoteHashReadRequestResetActions(noteHashReadRequestsCLA, scopedNoteHashesCLA);
|
|
370
|
+
const nullifierResetActions = getNullifierReadRequestResetActions(nullifierReadRequestsCLA, scopedNullifiersCLA);
|
|
371
|
+
const settledNoteHashReads = [];
|
|
372
|
+
for(let i = 0; i < noteHashResetActions.actions.length; i++){
|
|
373
|
+
if (noteHashResetActions.actions[i] === ReadRequestActionEnum.READ_AS_SETTLED) {
|
|
374
|
+
settledNoteHashReads.push({
|
|
375
|
+
index: i,
|
|
376
|
+
value: noteHashReadRequests[i].value
|
|
377
|
+
});
|
|
378
|
+
}
|
|
379
|
+
}
|
|
380
|
+
const settledNullifierReads = [];
|
|
381
|
+
for(let i = 0; i < nullifierResetActions.actions.length; i++){
|
|
382
|
+
if (nullifierResetActions.actions[i] === ReadRequestActionEnum.READ_AS_SETTLED) {
|
|
383
|
+
settledNullifierReads.push({
|
|
384
|
+
index: i,
|
|
385
|
+
value: nullifierReadRequests[i].value
|
|
386
|
+
});
|
|
387
|
+
}
|
|
388
|
+
}
|
|
389
|
+
const [noteHashWitnesses, nullifierWitnesses] = await Promise.all([
|
|
390
|
+
Promise.all(settledNoteHashReads.map(({ value })=>node.getNoteHashMembershipWitness(anchorBlockHash, value))),
|
|
391
|
+
Promise.all(settledNullifierReads.map(({ value })=>node.getNullifierMembershipWitness(anchorBlockHash, value)))
|
|
392
|
+
]);
|
|
393
|
+
for(let i = 0; i < settledNoteHashReads.length; i++){
|
|
394
|
+
if (!noteHashWitnesses[i]) {
|
|
395
|
+
throw new Error(`Note hash read request at index ${settledNoteHashReads[i].index} is reading an unknown note hash: ${settledNoteHashReads[i].value}`);
|
|
396
|
+
}
|
|
397
|
+
}
|
|
398
|
+
for(let i = 0; i < settledNullifierReads.length; i++){
|
|
399
|
+
if (!nullifierWitnesses[i]) {
|
|
400
|
+
throw new Error(`Nullifier read request at index ${settledNullifierReads[i].index} is reading an unknown nullifier: ${settledNullifierReads[i].value}`);
|
|
401
|
+
}
|
|
402
|
+
}
|
|
403
|
+
}
|
|
294
404
|
function splitOrderedSideEffects(effects, minRevertibleSideEffectCounter) {
|
|
295
405
|
const revertibleSideEffects = [];
|
|
296
406
|
const nonRevertibleSideEffects = [];
|
|
@@ -306,27 +416,30 @@ function splitOrderedSideEffects(effects, minRevertibleSideEffectCounter) {
|
|
|
306
416
|
revertibleSideEffects
|
|
307
417
|
];
|
|
308
418
|
}
|
|
309
|
-
function meterGasUsed(data) {
|
|
419
|
+
function meterGasUsed(data, isPrivateOnlyTx) {
|
|
310
420
|
let meteredDAFields = 0;
|
|
311
421
|
let meteredL2Gas = 0;
|
|
312
422
|
const numNoteHashes = arrayNonEmptyLength(data.noteHashes, (hash)=>hash.isEmpty());
|
|
313
423
|
meteredDAFields += numNoteHashes;
|
|
314
|
-
|
|
424
|
+
const noteHashBaseGas = isPrivateOnlyTx ? L2_GAS_PER_NOTE_HASH : AVM_EMITNOTEHASH_BASE_L2_GAS;
|
|
425
|
+
meteredL2Gas += numNoteHashes * noteHashBaseGas;
|
|
315
426
|
const numNullifiers = arrayNonEmptyLength(data.nullifiers, (nullifier)=>nullifier.isEmpty());
|
|
316
427
|
meteredDAFields += numNullifiers;
|
|
317
|
-
|
|
428
|
+
const nullifierBaseGas = isPrivateOnlyTx ? L2_GAS_PER_NULLIFIER : AVM_EMITNULLIFIER_BASE_L2_GAS;
|
|
429
|
+
meteredL2Gas += numNullifiers * nullifierBaseGas;
|
|
318
430
|
const numL2toL1Messages = arrayNonEmptyLength(data.l2ToL1Msgs, (msg)=>msg.isEmpty());
|
|
319
431
|
meteredDAFields += numL2toL1Messages;
|
|
320
|
-
|
|
432
|
+
const l2ToL1MessageBaseGas = isPrivateOnlyTx ? L2_GAS_PER_L2_TO_L1_MSG : AVM_SENDL2TOL1MSG_BASE_L2_GAS;
|
|
433
|
+
meteredL2Gas += numL2toL1Messages * l2ToL1MessageBaseGas;
|
|
321
434
|
const numPrivatelogs = arrayNonEmptyLength(data.privateLogs, (log)=>log.isEmpty());
|
|
322
435
|
// Every private log emits its length as an additional field
|
|
323
436
|
meteredDAFields += data.privateLogs.reduce((acc, log)=>!log.isEmpty() ? acc + log.emittedLength + 1 : acc, 0);
|
|
324
437
|
meteredL2Gas += numPrivatelogs * L2_GAS_PER_PRIVATE_LOG;
|
|
325
438
|
const numContractClassLogs = arrayNonEmptyLength(data.contractClassLogsHashes, (log)=>log.isEmpty());
|
|
326
|
-
// Every contract class log emits its
|
|
327
|
-
meteredDAFields += data.contractClassLogsHashes.reduce((acc, log)=>!log.isEmpty() ? acc + log.logHash.length +
|
|
439
|
+
// Every contract class log emits its contract address as an additional field
|
|
440
|
+
meteredDAFields += data.contractClassLogsHashes.reduce((acc, log)=>!log.isEmpty() ? acc + log.logHash.length + 1 : acc, 0);
|
|
328
441
|
meteredL2Gas += numContractClassLogs * L2_GAS_PER_CONTRACT_CLASS_LOG;
|
|
329
|
-
const meteredDAGas = meteredDAFields *
|
|
442
|
+
const meteredDAGas = meteredDAFields * DA_GAS_PER_FIELD;
|
|
330
443
|
if (data.publicCallRequests) {
|
|
331
444
|
const dataForPublic = data;
|
|
332
445
|
const numPublicCallRequests = arrayNonEmptyLength(dataForPublic.publicCallRequests, (req)=>req.isEmpty());
|
|
@@ -1,16 +1,16 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { ExtendedDirectionalAppTaggingSecret, type TaggingIndexRange } from '@aztec/stdlib/logs';
|
|
2
2
|
/**
|
|
3
|
-
* A map that stores the tagging index for a given directional app tagging secret.
|
|
3
|
+
* A map that stores the tagging index range for a given extended directional app tagging secret.
|
|
4
4
|
* Note: The directional app tagging secret is unique for a (sender, recipient, contract) tuple while the direction
|
|
5
5
|
* of sender -> recipient matters.
|
|
6
6
|
*/
|
|
7
7
|
export declare class ExecutionTaggingIndexCache {
|
|
8
8
|
private taggingIndexMap;
|
|
9
|
-
getLastUsedIndex(secret:
|
|
10
|
-
setLastUsedIndex(secret:
|
|
9
|
+
getLastUsedIndex(secret: ExtendedDirectionalAppTaggingSecret): number | undefined;
|
|
10
|
+
setLastUsedIndex(secret: ExtendedDirectionalAppTaggingSecret, index: number): void;
|
|
11
11
|
/**
|
|
12
|
-
* Returns the
|
|
12
|
+
* Returns the tagging index ranges that were used in this execution (and that need to be stored in the db).
|
|
13
13
|
*/
|
|
14
|
-
|
|
14
|
+
getUsedTaggingIndexRanges(): TaggingIndexRange[];
|
|
15
15
|
}
|
|
16
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
16
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhlY3V0aW9uX3RhZ2dpbmdfaW5kZXhfY2FjaGUuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb250cmFjdF9mdW5jdGlvbl9zaW11bGF0b3IvZXhlY3V0aW9uX3RhZ2dpbmdfaW5kZXhfY2FjaGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLG1DQUFtQyxFQUFFLEtBQUssaUJBQWlCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUVqRzs7OztHQUlHO0FBQ0gscUJBQWEsMEJBQTBCO0lBQ3JDLE9BQU8sQ0FBQyxlQUFlLENBQXlFO0lBRXpGLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxtQ0FBbUMsR0FBRyxNQUFNLEdBQUcsU0FBUyxDQUV2RjtJQUVNLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxtQ0FBbUMsRUFBRSxLQUFLLEVBQUUsTUFBTSxRQVVqRjtJQUVEOztPQUVHO0lBQ0kseUJBQXlCLElBQUksaUJBQWlCLEVBQUUsQ0FNdEQ7Q0FDRiJ9
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"execution_tagging_index_cache.d.ts","sourceRoot":"","sources":["../../src/contract_function_simulator/execution_tagging_index_cache.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"execution_tagging_index_cache.d.ts","sourceRoot":"","sources":["../../src/contract_function_simulator/execution_tagging_index_cache.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mCAAmC,EAAE,KAAK,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAEjG;;;;GAIG;AACH,qBAAa,0BAA0B;IACrC,OAAO,CAAC,eAAe,CAAyE;IAEzF,gBAAgB,CAAC,MAAM,EAAE,mCAAmC,GAAG,MAAM,GAAG,SAAS,CAEvF;IAEM,gBAAgB,CAAC,MAAM,EAAE,mCAAmC,EAAE,KAAK,EAAE,MAAM,QAUjF;IAED;;OAEG;IACI,yBAAyB,IAAI,iBAAiB,EAAE,CAMtD;CACF"}
|
|
@@ -1,26 +1,34 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { ExtendedDirectionalAppTaggingSecret } from '@aztec/stdlib/logs';
|
|
2
2
|
/**
|
|
3
|
-
* A map that stores the tagging index for a given directional app tagging secret.
|
|
3
|
+
* A map that stores the tagging index range for a given extended directional app tagging secret.
|
|
4
4
|
* Note: The directional app tagging secret is unique for a (sender, recipient, contract) tuple while the direction
|
|
5
5
|
* of sender -> recipient matters.
|
|
6
6
|
*/ export class ExecutionTaggingIndexCache {
|
|
7
7
|
taggingIndexMap = new Map();
|
|
8
8
|
getLastUsedIndex(secret) {
|
|
9
|
-
return this.taggingIndexMap.get(secret.toString());
|
|
9
|
+
return this.taggingIndexMap.get(secret.toString())?.highestIndex;
|
|
10
10
|
}
|
|
11
11
|
setLastUsedIndex(secret, index) {
|
|
12
12
|
const currentValue = this.taggingIndexMap.get(secret.toString());
|
|
13
|
-
if (currentValue !== undefined && currentValue !== index - 1) {
|
|
14
|
-
throw new Error(`Invalid tagging index update. Current value: ${currentValue}, new value: ${index}`);
|
|
13
|
+
if (currentValue !== undefined && currentValue.highestIndex !== index - 1) {
|
|
14
|
+
throw new Error(`Invalid tagging index update. Current value: ${currentValue.highestIndex}, new value: ${index}`);
|
|
15
|
+
}
|
|
16
|
+
if (currentValue !== undefined) {
|
|
17
|
+
currentValue.highestIndex = index;
|
|
18
|
+
} else {
|
|
19
|
+
this.taggingIndexMap.set(secret.toString(), {
|
|
20
|
+
lowestIndex: index,
|
|
21
|
+
highestIndex: index
|
|
22
|
+
});
|
|
15
23
|
}
|
|
16
|
-
this.taggingIndexMap.set(secret.toString(), index);
|
|
17
24
|
}
|
|
18
25
|
/**
|
|
19
|
-
* Returns the
|
|
20
|
-
*/
|
|
21
|
-
return Array.from(this.taggingIndexMap.entries()).map(([secret,
|
|
22
|
-
|
|
23
|
-
|
|
26
|
+
* Returns the tagging index ranges that were used in this execution (and that need to be stored in the db).
|
|
27
|
+
*/ getUsedTaggingIndexRanges() {
|
|
28
|
+
return Array.from(this.taggingIndexMap.entries()).map(([secret, { lowestIndex, highestIndex }])=>({
|
|
29
|
+
extendedSecret: ExtendedDirectionalAppTaggingSecret.fromString(secret),
|
|
30
|
+
lowestIndex,
|
|
31
|
+
highestIndex
|
|
24
32
|
}));
|
|
25
33
|
}
|
|
26
34
|
}
|
|
@@ -4,6 +4,7 @@ export { HashedValuesCache } from './hashed_values_cache.js';
|
|
|
4
4
|
export { pickNotes } from './pick_notes.js';
|
|
5
5
|
export type { NoteData, IMiscOracle, IUtilityExecutionOracle, IPrivateExecutionOracle } from './oracle/interfaces.js';
|
|
6
6
|
export { MessageLoadOracleInputs } from './oracle/message_load_oracle_inputs.js';
|
|
7
|
+
export { MessageContextService } from '../messages/message_context_service.js';
|
|
7
8
|
export { UtilityExecutionOracle } from './oracle/utility_execution_oracle.js';
|
|
8
9
|
export { PrivateExecutionOracle } from './oracle/private_execution_oracle.js';
|
|
9
10
|
export { Oracle } from './oracle/oracle.js';
|
|
@@ -11,4 +12,4 @@ export { executePrivateFunction, extractPrivateCircuitPublicInputs } from './ora
|
|
|
11
12
|
export { generateSimulatedProvingResult } from './contract_function_simulator.js';
|
|
12
13
|
export { packAsHintedNote } from './oracle/note_packing_utils.js';
|
|
13
14
|
export { UtilityContext } from './noir-structs/utility_context.js';
|
|
14
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
15
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb250cmFjdF9mdW5jdGlvbl9zaW11bGF0b3IvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDL0QsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDaEYsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDN0QsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzVDLFlBQVksRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLHVCQUF1QixFQUFFLHVCQUF1QixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdEgsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDakYsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDL0UsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDOUUsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDOUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQzVDLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxpQ0FBaUMsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQzFHLE9BQU8sRUFBRSw4QkFBOEIsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ2xGLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ2xFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQyJ9
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/contract_function_simulator/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,0BAA0B,EAAE,MAAM,oCAAoC,CAAC;AAChF,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,YAAY,EAAE,QAAQ,EAAE,WAAW,EAAE,uBAAuB,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AACtH,OAAO,EAAE,uBAAuB,EAAE,MAAM,wCAAwC,CAAC;AACjF,OAAO,EAAE,sBAAsB,EAAE,MAAM,sCAAsC,CAAC;AAC9E,OAAO,EAAE,sBAAsB,EAAE,MAAM,sCAAsC,CAAC;AAC9E,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,sBAAsB,EAAE,iCAAiC,EAAE,MAAM,+BAA+B,CAAC;AAC1G,OAAO,EAAE,8BAA8B,EAAE,MAAM,kCAAkC,CAAC;AAClF,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAClE,OAAO,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/contract_function_simulator/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,0BAA0B,EAAE,MAAM,oCAAoC,CAAC;AAChF,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,YAAY,EAAE,QAAQ,EAAE,WAAW,EAAE,uBAAuB,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AACtH,OAAO,EAAE,uBAAuB,EAAE,MAAM,wCAAwC,CAAC;AACjF,OAAO,EAAE,qBAAqB,EAAE,MAAM,wCAAwC,CAAC;AAC/E,OAAO,EAAE,sBAAsB,EAAE,MAAM,sCAAsC,CAAC;AAC9E,OAAO,EAAE,sBAAsB,EAAE,MAAM,sCAAsC,CAAC;AAC9E,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,sBAAsB,EAAE,iCAAiC,EAAE,MAAM,+BAA+B,CAAC;AAC1G,OAAO,EAAE,8BAA8B,EAAE,MAAM,kCAAkC,CAAC;AAClF,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAClE,OAAO,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAC"}
|
|
@@ -3,6 +3,7 @@ export { ExecutionTaggingIndexCache } from './execution_tagging_index_cache.js';
|
|
|
3
3
|
export { HashedValuesCache } from './hashed_values_cache.js';
|
|
4
4
|
export { pickNotes } from './pick_notes.js';
|
|
5
5
|
export { MessageLoadOracleInputs } from './oracle/message_load_oracle_inputs.js';
|
|
6
|
+
export { MessageContextService } from '../messages/message_context_service.js';
|
|
6
7
|
export { UtilityExecutionOracle } from './oracle/utility_execution_oracle.js';
|
|
7
8
|
export { PrivateExecutionOracle } from './oracle/private_execution_oracle.js';
|
|
8
9
|
export { Oracle } from './oracle/oracle.js';
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
2
|
-
import { FieldReader } from '@aztec/foundation/serialize';
|
|
3
2
|
import { EventSelector } from '@aztec/stdlib/abi';
|
|
4
3
|
import { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
5
4
|
import { TxHash } from '@aztec/stdlib/tx';
|
|
@@ -16,6 +15,6 @@ export declare class EventValidationRequest {
|
|
|
16
15
|
txHash: TxHash;
|
|
17
16
|
recipient: AztecAddress;
|
|
18
17
|
constructor(contractAddress: AztecAddress, eventTypeId: EventSelector, randomness: Fr, serializedEvent: Fr[], eventCommitment: Fr, txHash: TxHash, recipient: AztecAddress);
|
|
19
|
-
static fromFields(fields: Fr[]
|
|
18
|
+
static fromFields(fields: Fr[], maxEventSerializedLen: number): EventValidationRequest;
|
|
20
19
|
}
|
|
21
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
20
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZlbnRfdmFsaWRhdGlvbl9yZXF1ZXN0LmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29udHJhY3RfZnVuY3Rpb25fc2ltdWxhdG9yL25vaXItc3RydWN0cy9ldmVudF92YWxpZGF0aW9uX3JlcXVlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBRXBELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNsRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDM0QsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRTFDOzs7R0FHRztBQUNILHFCQUFhLHNCQUFzQjtJQUV4QixlQUFlLEVBQUUsWUFBWTtJQUM3QixXQUFXLEVBQUUsYUFBYTtJQUMxQixVQUFVLEVBQUUsRUFBRTtJQUNkLGVBQWUsRUFBRSxFQUFFLEVBQUU7SUFDckIsZUFBZSxFQUFFLEVBQUU7SUFDbkIsTUFBTSxFQUFFLE1BQU07SUFDZCxTQUFTLEVBQUUsWUFBWTtJQVBoQyxZQUNTLGVBQWUsRUFBRSxZQUFZLEVBQzdCLFdBQVcsRUFBRSxhQUFhLEVBQzFCLFVBQVUsRUFBRSxFQUFFLEVBQ2QsZUFBZSxFQUFFLEVBQUUsRUFBRSxFQUNyQixlQUFlLEVBQUUsRUFBRSxFQUNuQixNQUFNLEVBQUUsTUFBTSxFQUNkLFNBQVMsRUFBRSxZQUFZLEVBQzVCO0lBRUosTUFBTSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxHQUFHLHNCQUFzQixDQStCckY7Q0FDRiJ9
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"event_validation_request.d.ts","sourceRoot":"","sources":["../../../src/contract_function_simulator/noir-structs/event_validation_request.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,gCAAgC,CAAC;
|
|
1
|
+
{"version":3,"file":"event_validation_request.d.ts","sourceRoot":"","sources":["../../../src/contract_function_simulator/noir-structs/event_validation_request.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,gCAAgC,CAAC;AAEpD,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC3D,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAE1C;;;GAGG;AACH,qBAAa,sBAAsB;IAExB,eAAe,EAAE,YAAY;IAC7B,WAAW,EAAE,aAAa;IAC1B,UAAU,EAAE,EAAE;IACd,eAAe,EAAE,EAAE,EAAE;IACrB,eAAe,EAAE,EAAE;IACnB,MAAM,EAAE,MAAM;IACd,SAAS,EAAE,YAAY;IAPhC,YACS,eAAe,EAAE,YAAY,EAC7B,WAAW,EAAE,aAAa,EAC1B,UAAU,EAAE,EAAE,EACd,eAAe,EAAE,EAAE,EAAE,EACrB,eAAe,EAAE,EAAE,EACnB,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,YAAY,EAC5B;IAEJ,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,EAAE,EAAE,EAAE,qBAAqB,EAAE,MAAM,GAAG,sBAAsB,CA+BrF;CACF"}
|
|
@@ -2,8 +2,6 @@ import { FieldReader } from '@aztec/foundation/serialize';
|
|
|
2
2
|
import { EventSelector } from '@aztec/stdlib/abi';
|
|
3
3
|
import { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
4
4
|
import { TxHash } from '@aztec/stdlib/tx';
|
|
5
|
-
// TODO(#14617): should we compute this from constants? This value is aztec-nr specific.
|
|
6
|
-
const MAX_EVENT_SERIALIZED_LEN = 12;
|
|
7
5
|
/**
|
|
8
6
|
* Intermediate struct used to perform batch event validation by PXE. The `utilityValidateAndStoreEnqueuedNotesAndEvents` oracle
|
|
9
7
|
* expects for values of this type to be stored in a `CapsuleArray`.
|
|
@@ -24,17 +22,20 @@ const MAX_EVENT_SERIALIZED_LEN = 12;
|
|
|
24
22
|
this.txHash = txHash;
|
|
25
23
|
this.recipient = recipient;
|
|
26
24
|
}
|
|
27
|
-
static fromFields(fields) {
|
|
25
|
+
static fromFields(fields, maxEventSerializedLen) {
|
|
28
26
|
const reader = FieldReader.asReader(fields);
|
|
29
27
|
const contractAddress = AztecAddress.fromField(reader.readField());
|
|
30
28
|
const eventTypeId = EventSelector.fromField(reader.readField());
|
|
31
29
|
const randomness = reader.readField();
|
|
32
|
-
const eventStorage = reader.readFieldArray(
|
|
30
|
+
const eventStorage = reader.readFieldArray(maxEventSerializedLen);
|
|
33
31
|
const eventLen = reader.readField().toNumber();
|
|
34
32
|
const serializedEvent = eventStorage.slice(0, eventLen);
|
|
35
33
|
const eventCommitment = reader.readField();
|
|
36
34
|
const txHash = TxHash.fromField(reader.readField());
|
|
37
35
|
const recipient = AztecAddress.fromField(reader.readField());
|
|
36
|
+
if (reader.remainingFields() !== 0) {
|
|
37
|
+
throw new Error(`Error converting array of fields to EventValidationRequest: expected ${reader.cursor} fields but received ${fields.length} (maxEventSerializedLen=${maxEventSerializedLen}).`);
|
|
38
|
+
}
|
|
38
39
|
return new EventValidationRequest(contractAddress, eventTypeId, randomness, serializedEvent, eventCommitment, txHash, recipient);
|
|
39
40
|
}
|
|
40
41
|
}
|
|
@@ -14,4 +14,4 @@ export declare class LogRetrievalResponse {
|
|
|
14
14
|
static toEmptyFields(): Fr[];
|
|
15
15
|
static toSerializedOption(response: LogRetrievalResponse | null): Fr[];
|
|
16
16
|
}
|
|
17
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
17
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9nX3JldHJpZXZhbF9yZXNwb25zZS5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbnRyYWN0X2Z1bmN0aW9uX3NpbXVsYXRvci9ub2lyLXN0cnVjdHMvbG9nX3JldHJpZXZhbF9yZXNwb25zZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDcEQsT0FBTyxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFJL0M7OztHQUdHO0FBQ0gscUJBQWEsb0JBQW9CO0lBRXRCLFVBQVUsRUFBRSxFQUFFLEVBQUU7SUFDaEIsTUFBTSxFQUFFLE1BQU07SUFDZCxvQkFBb0IsRUFBRSxFQUFFLEVBQUU7SUFDMUIsa0JBQWtCLEVBQUUsRUFBRTtJQUovQixZQUNTLFVBQVUsRUFBRSxFQUFFLEVBQUUsRUFDaEIsTUFBTSxFQUFFLE1BQU0sRUFDZCxvQkFBb0IsRUFBRSxFQUFFLEVBQUUsRUFDMUIsa0JBQWtCLEVBQUUsRUFBRSxFQUMzQjtJQUVKLFFBQVEsSUFBSSxFQUFFLEVBQUUsQ0FTZjtJQUVELE1BQU0sQ0FBQyxhQUFhLElBQUksRUFBRSxFQUFFLENBUzNCO0lBRUQsTUFBTSxDQUFDLGtCQUFrQixDQUFDLFFBQVEsRUFBRSxvQkFBb0IsR0FBRyxJQUFJLEdBQUcsRUFBRSxFQUFFLENBTXJFO0NBQ0YifQ==
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"log_retrieval_response.d.ts","sourceRoot":"","sources":["../../../src/contract_function_simulator/noir-structs/log_retrieval_response.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,EAAE,EAAE,MAAM,gCAAgC,CAAC;AACpD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"log_retrieval_response.d.ts","sourceRoot":"","sources":["../../../src/contract_function_simulator/noir-structs/log_retrieval_response.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,EAAE,EAAE,MAAM,gCAAgC,CAAC;AACpD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAI/C;;;GAGG;AACH,qBAAa,oBAAoB;IAEtB,UAAU,EAAE,EAAE,EAAE;IAChB,MAAM,EAAE,MAAM;IACd,oBAAoB,EAAE,EAAE,EAAE;IAC1B,kBAAkB,EAAE,EAAE;IAJ/B,YACS,UAAU,EAAE,EAAE,EAAE,EAChB,MAAM,EAAE,MAAM,EACd,oBAAoB,EAAE,EAAE,EAAE,EAC1B,kBAAkB,EAAE,EAAE,EAC3B;IAEJ,QAAQ,IAAI,EAAE,EAAE,CASf;IAED,MAAM,CAAC,aAAa,IAAI,EAAE,EAAE,CAS3B;IAED,MAAM,CAAC,kBAAkB,CAAC,QAAQ,EAAE,oBAAoB,GAAG,IAAI,GAAG,EAAE,EAAE,CAMrE;CACF"}
|