@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.
Files changed (200) hide show
  1. package/dest/access_scopes.d.ts +9 -0
  2. package/dest/access_scopes.d.ts.map +1 -0
  3. package/dest/access_scopes.js +6 -0
  4. package/dest/block_synchronizer/block_synchronizer.d.ts +4 -2
  5. package/dest/block_synchronizer/block_synchronizer.d.ts.map +1 -1
  6. package/dest/block_synchronizer/block_synchronizer.js +7 -1
  7. package/dest/config/index.d.ts +2 -2
  8. package/dest/config/index.d.ts.map +1 -1
  9. package/dest/config/index.js +1 -1
  10. package/dest/config/package_info.js +1 -1
  11. package/dest/contract_function_simulator/contract_function_simulator.d.ts +61 -29
  12. package/dest/contract_function_simulator/contract_function_simulator.d.ts.map +1 -1
  13. package/dest/contract_function_simulator/contract_function_simulator.js +185 -72
  14. package/dest/contract_function_simulator/execution_tagging_index_cache.d.ts +7 -7
  15. package/dest/contract_function_simulator/execution_tagging_index_cache.d.ts.map +1 -1
  16. package/dest/contract_function_simulator/execution_tagging_index_cache.js +19 -11
  17. package/dest/contract_function_simulator/index.d.ts +2 -1
  18. package/dest/contract_function_simulator/index.d.ts.map +1 -1
  19. package/dest/contract_function_simulator/index.js +1 -0
  20. package/dest/contract_function_simulator/noir-structs/event_validation_request.d.ts +2 -3
  21. package/dest/contract_function_simulator/noir-structs/event_validation_request.d.ts.map +1 -1
  22. package/dest/contract_function_simulator/noir-structs/event_validation_request.js +5 -4
  23. package/dest/contract_function_simulator/noir-structs/log_retrieval_response.d.ts +1 -1
  24. package/dest/contract_function_simulator/noir-structs/log_retrieval_response.d.ts.map +1 -1
  25. package/dest/contract_function_simulator/noir-structs/log_retrieval_response.js +1 -3
  26. package/dest/contract_function_simulator/noir-structs/message_tx_context.d.ts +16 -0
  27. package/dest/contract_function_simulator/noir-structs/message_tx_context.d.ts.map +1 -0
  28. package/dest/contract_function_simulator/noir-structs/message_tx_context.js +57 -0
  29. package/dest/contract_function_simulator/noir-structs/note_validation_request.d.ts +2 -4
  30. package/dest/contract_function_simulator/noir-structs/note_validation_request.d.ts.map +1 -1
  31. package/dest/contract_function_simulator/noir-structs/note_validation_request.js +3 -5
  32. package/dest/contract_function_simulator/oracle/interfaces.d.ts +49 -45
  33. package/dest/contract_function_simulator/oracle/interfaces.d.ts.map +1 -1
  34. package/dest/contract_function_simulator/oracle/legacy_oracle_mappings.d.ts +9 -0
  35. package/dest/contract_function_simulator/oracle/legacy_oracle_mappings.d.ts.map +1 -0
  36. package/dest/contract_function_simulator/oracle/legacy_oracle_mappings.js +52 -0
  37. package/dest/contract_function_simulator/oracle/oracle.d.ts +44 -44
  38. package/dest/contract_function_simulator/oracle/oracle.d.ts.map +1 -1
  39. package/dest/contract_function_simulator/oracle/oracle.js +161 -100
  40. package/dest/contract_function_simulator/oracle/private_execution.js +5 -3
  41. package/dest/contract_function_simulator/oracle/private_execution_oracle.d.ts +57 -78
  42. package/dest/contract_function_simulator/oracle/private_execution_oracle.d.ts.map +1 -1
  43. package/dest/contract_function_simulator/oracle/private_execution_oracle.js +101 -86
  44. package/dest/contract_function_simulator/oracle/utility_execution_oracle.d.ts +75 -45
  45. package/dest/contract_function_simulator/oracle/utility_execution_oracle.d.ts.map +1 -1
  46. package/dest/contract_function_simulator/oracle/utility_execution_oracle.js +147 -75
  47. package/dest/contract_logging.d.ts +22 -0
  48. package/dest/contract_logging.d.ts.map +1 -0
  49. package/dest/contract_logging.js +23 -0
  50. package/dest/contract_sync/contract_sync_service.d.ts +43 -0
  51. package/dest/contract_sync/contract_sync_service.d.ts.map +1 -0
  52. package/dest/contract_sync/contract_sync_service.js +97 -0
  53. package/dest/contract_sync/helpers.d.ts +29 -0
  54. package/dest/contract_sync/helpers.d.ts.map +1 -0
  55. package/dest/contract_sync/{index.js → helpers.js} +8 -14
  56. package/dest/debug/pxe_debug_utils.d.ts +14 -10
  57. package/dest/debug/pxe_debug_utils.d.ts.map +1 -1
  58. package/dest/debug/pxe_debug_utils.js +16 -15
  59. package/dest/entrypoints/client/bundle/index.d.ts +4 -1
  60. package/dest/entrypoints/client/bundle/index.d.ts.map +1 -1
  61. package/dest/entrypoints/client/bundle/index.js +3 -0
  62. package/dest/entrypoints/client/bundle/utils.d.ts +1 -1
  63. package/dest/entrypoints/client/bundle/utils.d.ts.map +1 -1
  64. package/dest/entrypoints/client/bundle/utils.js +9 -1
  65. package/dest/entrypoints/client/lazy/index.d.ts +4 -1
  66. package/dest/entrypoints/client/lazy/index.d.ts.map +1 -1
  67. package/dest/entrypoints/client/lazy/index.js +3 -0
  68. package/dest/entrypoints/client/lazy/utils.d.ts +1 -1
  69. package/dest/entrypoints/client/lazy/utils.d.ts.map +1 -1
  70. package/dest/entrypoints/client/lazy/utils.js +9 -1
  71. package/dest/entrypoints/server/index.d.ts +4 -2
  72. package/dest/entrypoints/server/index.d.ts.map +1 -1
  73. package/dest/entrypoints/server/index.js +3 -1
  74. package/dest/entrypoints/server/utils.js +9 -1
  75. package/dest/logs/log_service.d.ts +3 -2
  76. package/dest/logs/log_service.d.ts.map +1 -1
  77. package/dest/logs/log_service.js +9 -14
  78. package/dest/messages/message_context_service.d.ts +17 -0
  79. package/dest/messages/message_context_service.d.ts.map +1 -0
  80. package/dest/messages/message_context_service.js +36 -0
  81. package/dest/notes/note_service.d.ts +4 -3
  82. package/dest/notes/note_service.d.ts.map +1 -1
  83. package/dest/notes/note_service.js +3 -2
  84. package/dest/notes_filter.d.ts +25 -0
  85. package/dest/notes_filter.d.ts.map +1 -0
  86. package/dest/notes_filter.js +4 -0
  87. package/dest/oracle_version.d.ts +2 -2
  88. package/dest/oracle_version.js +3 -3
  89. package/dest/private_kernel/hints/compute_tx_expiration_timestamp.d.ts +4 -0
  90. package/dest/private_kernel/hints/compute_tx_expiration_timestamp.d.ts.map +1 -0
  91. package/dest/private_kernel/hints/{compute_tx_include_by_timestamp.js → compute_tx_expiration_timestamp.js} +12 -12
  92. package/dest/private_kernel/hints/index.d.ts +1 -1
  93. package/dest/private_kernel/hints/index.js +1 -1
  94. package/dest/private_kernel/hints/private_kernel_reset_private_inputs_builder.d.ts +4 -3
  95. package/dest/private_kernel/hints/private_kernel_reset_private_inputs_builder.d.ts.map +1 -1
  96. package/dest/private_kernel/hints/private_kernel_reset_private_inputs_builder.js +129 -68
  97. package/dest/private_kernel/hints/test_utils.d.ts +122 -0
  98. package/dest/private_kernel/hints/test_utils.d.ts.map +1 -0
  99. package/dest/private_kernel/hints/test_utils.js +203 -0
  100. package/dest/private_kernel/private_kernel_execution_prover.d.ts +1 -1
  101. package/dest/private_kernel/private_kernel_execution_prover.d.ts.map +1 -1
  102. package/dest/private_kernel/private_kernel_execution_prover.js +19 -11
  103. package/dest/private_kernel/private_kernel_oracle.d.ts +6 -2
  104. package/dest/private_kernel/private_kernel_oracle.d.ts.map +1 -1
  105. package/dest/private_kernel/private_kernel_oracle.js +7 -3
  106. package/dest/pxe.d.ts +72 -24
  107. package/dest/pxe.d.ts.map +1 -1
  108. package/dest/pxe.js +118 -71
  109. package/dest/storage/contract_store/contract_store.d.ts +42 -15
  110. package/dest/storage/contract_store/contract_store.d.ts.map +1 -1
  111. package/dest/storage/contract_store/contract_store.js +145 -69
  112. package/dest/storage/metadata.d.ts +1 -1
  113. package/dest/storage/metadata.js +1 -1
  114. package/dest/storage/note_store/note_store.d.ts +3 -3
  115. package/dest/storage/note_store/note_store.d.ts.map +1 -1
  116. package/dest/storage/note_store/note_store.js +6 -4
  117. package/dest/storage/tagging_store/recipient_tagging_store.d.ts +6 -6
  118. package/dest/storage/tagging_store/recipient_tagging_store.d.ts.map +1 -1
  119. package/dest/storage/tagging_store/sender_tagging_store.d.ts +29 -28
  120. package/dest/storage/tagging_store/sender_tagging_store.d.ts.map +1 -1
  121. package/dest/storage/tagging_store/sender_tagging_store.js +141 -115
  122. package/dest/tagging/get_all_logs_by_tags.d.ts +1 -1
  123. package/dest/tagging/get_all_logs_by_tags.d.ts.map +1 -1
  124. package/dest/tagging/get_all_logs_by_tags.js +17 -3
  125. package/dest/tagging/index.d.ts +3 -3
  126. package/dest/tagging/index.d.ts.map +1 -1
  127. package/dest/tagging/index.js +1 -1
  128. package/dest/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.d.ts +4 -5
  129. package/dest/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.d.ts.map +1 -1
  130. package/dest/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.js +7 -7
  131. package/dest/tagging/recipient_sync/utils/find_highest_indexes.js +2 -2
  132. package/dest/tagging/recipient_sync/utils/load_logs_for_range.d.ts +6 -7
  133. package/dest/tagging/recipient_sync/utils/load_logs_for_range.d.ts.map +1 -1
  134. package/dest/tagging/recipient_sync/utils/load_logs_for_range.js +12 -11
  135. package/dest/tagging/sender_sync/sync_sender_tagging_indexes.d.ts +4 -8
  136. package/dest/tagging/sender_sync/sync_sender_tagging_indexes.d.ts.map +1 -1
  137. package/dest/tagging/sender_sync/sync_sender_tagging_indexes.js +13 -7
  138. package/dest/tagging/sender_sync/utils/get_status_change_of_pending.d.ts +4 -3
  139. package/dest/tagging/sender_sync/utils/get_status_change_of_pending.d.ts.map +1 -1
  140. package/dest/tagging/sender_sync/utils/get_status_change_of_pending.js +20 -10
  141. package/dest/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.d.ts +5 -7
  142. package/dest/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.d.ts.map +1 -1
  143. package/dest/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.js +36 -24
  144. package/package.json +25 -16
  145. package/src/access_scopes.ts +9 -0
  146. package/src/block_synchronizer/block_synchronizer.ts +6 -0
  147. package/src/config/index.ts +1 -1
  148. package/src/config/package_info.ts +1 -1
  149. package/src/contract_function_simulator/contract_function_simulator.ts +338 -133
  150. package/src/contract_function_simulator/execution_tagging_index_cache.ts +19 -14
  151. package/src/contract_function_simulator/index.ts +1 -0
  152. package/src/contract_function_simulator/noir-structs/event_validation_request.ts +8 -5
  153. package/src/contract_function_simulator/noir-structs/log_retrieval_response.ts +1 -4
  154. package/src/contract_function_simulator/noir-structs/message_tx_context.ts +55 -0
  155. package/src/contract_function_simulator/noir-structs/note_validation_request.ts +3 -6
  156. package/src/contract_function_simulator/oracle/interfaces.ts +53 -54
  157. package/src/contract_function_simulator/oracle/legacy_oracle_mappings.ts +77 -0
  158. package/src/contract_function_simulator/oracle/oracle.ts +165 -140
  159. package/src/contract_function_simulator/oracle/private_execution.ts +4 -4
  160. package/src/contract_function_simulator/oracle/private_execution_oracle.ts +128 -180
  161. package/src/contract_function_simulator/oracle/utility_execution_oracle.ts +222 -82
  162. package/src/contract_logging.ts +39 -0
  163. package/src/contract_sync/contract_sync_service.ts +152 -0
  164. package/src/contract_sync/{index.ts → helpers.ts} +13 -34
  165. package/src/debug/pxe_debug_utils.ts +48 -18
  166. package/src/entrypoints/client/bundle/index.ts +3 -0
  167. package/src/entrypoints/client/bundle/utils.ts +9 -1
  168. package/src/entrypoints/client/lazy/index.ts +3 -0
  169. package/src/entrypoints/client/lazy/utils.ts +9 -1
  170. package/src/entrypoints/server/index.ts +3 -1
  171. package/src/entrypoints/server/utils.ts +7 -7
  172. package/src/logs/log_service.ts +17 -24
  173. package/src/messages/message_context_service.ts +45 -0
  174. package/src/notes/note_service.ts +4 -3
  175. package/src/notes_filter.ts +26 -0
  176. package/src/oracle_version.ts +3 -3
  177. package/src/private_kernel/hints/{compute_tx_include_by_timestamp.ts → compute_tx_expiration_timestamp.ts} +13 -13
  178. package/src/private_kernel/hints/index.ts +1 -1
  179. package/src/private_kernel/hints/private_kernel_reset_private_inputs_builder.ts +164 -117
  180. package/src/private_kernel/hints/test_utils.ts +325 -0
  181. package/src/private_kernel/private_kernel_execution_prover.ts +19 -12
  182. package/src/private_kernel/private_kernel_oracle.ts +7 -7
  183. package/src/pxe.ts +207 -124
  184. package/src/storage/contract_store/contract_store.ts +174 -75
  185. package/src/storage/metadata.ts +1 -1
  186. package/src/storage/note_store/note_store.ts +12 -5
  187. package/src/storage/tagging_store/recipient_tagging_store.ts +9 -5
  188. package/src/storage/tagging_store/sender_tagging_store.ts +185 -138
  189. package/src/tagging/get_all_logs_by_tags.ts +28 -4
  190. package/src/tagging/index.ts +2 -2
  191. package/src/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.ts +7 -10
  192. package/src/tagging/recipient_sync/utils/find_highest_indexes.ts +2 -2
  193. package/src/tagging/recipient_sync/utils/load_logs_for_range.ts +10 -15
  194. package/src/tagging/sender_sync/sync_sender_tagging_indexes.ts +23 -10
  195. package/src/tagging/sender_sync/utils/get_status_change_of_pending.ts +26 -11
  196. package/src/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.ts +27 -26
  197. package/dest/contract_sync/index.d.ts +0 -24
  198. package/dest/contract_sync/index.d.ts.map +0 -1
  199. package/dest/private_kernel/hints/compute_tx_include_by_timestamp.d.ts +0 -4
  200. 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, DA_BYTES_PER_FIELD, DA_GAS_PER_BYTE, FIXED_AVM_STARTUP_L2_GAS, FIXED_DA_GAS, FIXED_L2_GAS, GeneratorIndex, L2_GAS_PER_CONTRACT_CLASS_LOG, 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_NULLIFIERS_PER_TX, MAX_PRIVATE_LOGS_PER_TX } from '@aztec/constants';
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
- log;
41
- constructor(contractStore, noteStore, keyStore, addressStore, aztecNode, senderTaggingStore, recipientTaggingStore, senderAddressBookStore, capsuleStore, privateEventStore, simulator){
42
- this.contractStore = contractStore;
43
- this.noteStore = noteStore;
44
- this.keyStore = keyStore;
45
- this.addressStore = addressStore;
46
- this.aztecNode = aztecNode;
47
- this.senderTaggingStore = senderTaggingStore;
48
- this.recipientTaggingStore = recipientTaggingStore;
49
- this.senderAddressBookStore = senderAddressBookStore;
50
- this.capsuleStore = capsuleStore;
51
- this.privateEventStore = privateEventStore;
52
- this.simulator = simulator;
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
- * @param entryPointArtifact - The artifact of the entry point function.
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(request.firstCallArgsHash, request.txContext, callContext, anchorBlockHeader, async (call)=>{
84
- await this.runUtility(call, [], anchorBlockHeader, scopes, jobId);
85
- }, request.authWitnesses, request.capsules, HashedValuesCache.create(request.argsOfCalls), noteCache, taggingIndexCache, this.contractStore, this.noteStore, this.keyStore, this.addressStore, this.aztecNode, this.senderTaggingStore, this.recipientTaggingStore, this.senderAddressBookStore, this.capsuleStore, this.privateEventStore, jobId, 0, startSideEffectCounter, undefined, scopes, senderForTags, this.simulator);
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.privateLoadFromExecutionCache(r.calldataHash);
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(call.to, authwits, [], anchorBlockHeader, this.contractStore, this.noteStore, this.keyStore, this.addressStore, this.aztecNode, this.recipientTaggingStore, this.senderAddressBookStore, this.capsuleStore, this.privateEventStore, jobId, undefined, scopes);
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 simulation for ${call.to}.${call.selector} completed`);
149
- return witnessMapToFields(acirExecutionResult.returnWitness);
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 contractStore - A provider for contract data in order to get function names and debug info.
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, contractStore, minRevertibleSideEffectCounterOverride) {
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
- const noteHashesFromExecution = await Promise.all(execution.publicInputs.noteHashes.getActiveItems().filter((noteHash)=>!noteHash.isEmpty()).map(async (noteHash)=>new OrderedSideEffect(await siloNoteHash(contractAddress, noteHash.value), noteHash.counter)));
209
- const nullifiersFromExecution = await Promise.all(execution.publicInputs.nullifiers.getActiveItems().map(async (nullifier)=>new OrderedSideEffect(await siloNullifier(contractAddress, nullifier.value), nullifier.counter)));
210
- const privateLogsFromExecution = await Promise.all(execution.publicInputs.privateLogs.getActiveItems().map(async (metadata)=>{
211
- metadata.log.fields[0] = await poseidon2HashWithSeparator([
212
- contractAddress,
213
- metadata.log.fields[0]
214
- ], GeneratorIndex.PRIVATE_LOG_FIRST_FIELD);
215
- return new OrderedSideEffect(metadata.log, metadata.counter);
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 contractStore.getDebugFunctionName(execution.publicInputs.callContext.contractAddress, execution.publicInputs.callContext.functionSelector),
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 minRevertibleSideEffectCounter = minRevertibleSideEffectCounterOverride ?? getFinalMinRevertibleSideEffectCounter(privateExecutionResult);
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.sort(sortByCounter).map(async (orderedSideEffect, i)=>{
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(taggedPrivateLogs.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));
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.sort(sortByCounter), minRevertibleSideEffectCounter);
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(taggedPrivateLogs, minRevertibleSideEffectCounter);
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: FIXED_L2_GAS,
286
- daGas: FIXED_DA_GAS
287
- })), /*feePayer=*/ AztecAddress.zero(), /*includeByTimestamp=*/ 0n, hasPublicCalls ? inputsForPublic : undefined, !hasPublicCalls ? inputsForRollup : undefined);
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
- meteredL2Gas += numNoteHashes * AVM_EMITNOTEHASH_BASE_L2_GAS;
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
- meteredL2Gas += numNullifiers * AVM_EMITNULLIFIER_BASE_L2_GAS;
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
- meteredL2Gas += numL2toL1Messages * AVM_SENDL2TOL1MSG_BASE_L2_GAS;
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 length and contract address as additional fields
327
- meteredDAFields += data.contractClassLogsHashes.reduce((acc, log)=>!log.isEmpty() ? acc + log.logHash.length + 2 : acc, 0);
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 * DA_BYTES_PER_FIELD * DA_GAS_PER_BYTE;
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 { DirectionalAppTaggingSecret, type PreTag } from '@aztec/stdlib/logs';
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: DirectionalAppTaggingSecret): number | undefined;
10
- setLastUsedIndex(secret: DirectionalAppTaggingSecret, index: number): void;
9
+ getLastUsedIndex(secret: ExtendedDirectionalAppTaggingSecret): number | undefined;
10
+ setLastUsedIndex(secret: ExtendedDirectionalAppTaggingSecret, index: number): void;
11
11
  /**
12
- * Returns the pre-tags that were used in this execution (and that need to be stored in the db).
12
+ * Returns the tagging index ranges that were used in this execution (and that need to be stored in the db).
13
13
  */
14
- getUsedPreTags(): PreTag[];
14
+ getUsedTaggingIndexRanges(): TaggingIndexRange[];
15
15
  }
16
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhlY3V0aW9uX3RhZ2dpbmdfaW5kZXhfY2FjaGUuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb250cmFjdF9mdW5jdGlvbl9zaW11bGF0b3IvZXhlY3V0aW9uX3RhZ2dpbmdfaW5kZXhfY2FjaGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLDJCQUEyQixFQUFFLEtBQUssTUFBTSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFOUU7Ozs7R0FJRztBQUNILHFCQUFhLDBCQUEwQjtJQUNyQyxPQUFPLENBQUMsZUFBZSxDQUFrQztJQUVsRCxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsMkJBQTJCLEdBQUcsTUFBTSxHQUFHLFNBQVMsQ0FFL0U7SUFFTSxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsMkJBQTJCLEVBQUUsS0FBSyxFQUFFLE1BQU0sUUFNekU7SUFFRDs7T0FFRztJQUNJLGNBQWMsSUFBSSxNQUFNLEVBQUUsQ0FLaEM7Q0FDRiJ9
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,2BAA2B,EAAE,KAAK,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAE9E;;;;GAIG;AACH,qBAAa,0BAA0B;IACrC,OAAO,CAAC,eAAe,CAAkC;IAElD,gBAAgB,CAAC,MAAM,EAAE,2BAA2B,GAAG,MAAM,GAAG,SAAS,CAE/E;IAEM,gBAAgB,CAAC,MAAM,EAAE,2BAA2B,EAAE,KAAK,EAAE,MAAM,QAMzE;IAED;;OAEG;IACI,cAAc,IAAI,MAAM,EAAE,CAKhC;CACF"}
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 { DirectionalAppTaggingSecret } from '@aztec/stdlib/logs';
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 pre-tags that were used in this execution (and that need to be stored in the db).
20
- */ getUsedPreTags() {
21
- return Array.from(this.taggingIndexMap.entries()).map(([secret, index])=>({
22
- secret: DirectionalAppTaggingSecret.fromString(secret),
23
- index
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb250cmFjdF9mdW5jdGlvbl9zaW11bGF0b3IvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDL0QsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDaEYsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDN0QsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzVDLFlBQVksRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLHVCQUF1QixFQUFFLHVCQUF1QixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdEgsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDakYsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDOUUsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDOUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQzVDLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxpQ0FBaUMsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQzFHLE9BQU8sRUFBRSw4QkFBOEIsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ2xGLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ2xFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQyJ9
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[] | FieldReader): EventValidationRequest;
18
+ static fromFields(fields: Fr[], maxEventSerializedLen: number): EventValidationRequest;
20
19
  }
21
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZlbnRfdmFsaWRhdGlvbl9yZXF1ZXN0LmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29udHJhY3RfZnVuY3Rpb25fc2ltdWxhdG9yL25vaXItc3RydWN0cy9ldmVudF92YWxpZGF0aW9uX3JlcXVlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3BELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDbEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzNELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUsxQzs7O0dBR0c7QUFDSCxxQkFBYSxzQkFBc0I7SUFFeEIsZUFBZSxFQUFFLFlBQVk7SUFDN0IsV0FBVyxFQUFFLGFBQWE7SUFDMUIsVUFBVSxFQUFFLEVBQUU7SUFDZCxlQUFlLEVBQUUsRUFBRSxFQUFFO0lBQ3JCLGVBQWUsRUFBRSxFQUFFO0lBQ25CLE1BQU0sRUFBRSxNQUFNO0lBQ2QsU0FBUyxFQUFFLFlBQVk7SUFQaEMsWUFDUyxlQUFlLEVBQUUsWUFBWSxFQUM3QixXQUFXLEVBQUUsYUFBYSxFQUMxQixVQUFVLEVBQUUsRUFBRSxFQUNkLGVBQWUsRUFBRSxFQUFFLEVBQUUsRUFDckIsZUFBZSxFQUFFLEVBQUUsRUFDbkIsTUFBTSxFQUFFLE1BQU0sRUFDZCxTQUFTLEVBQUUsWUFBWSxFQUM1QjtJQUVKLE1BQU0sQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFLEVBQUUsRUFBRSxHQUFHLFdBQVcsR0FBRyxzQkFBc0IsQ0F5QnBFO0NBQ0YifQ==
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;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC3D,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAK1C;;;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,GAAG,WAAW,GAAG,sBAAsB,CAyBpE;CACF"}
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(MAX_EVENT_SERIALIZED_LEN);
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9nX3JldHJpZXZhbF9yZXNwb25zZS5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbnRyYWN0X2Z1bmN0aW9uX3NpbXVsYXRvci9ub2lyLXN0cnVjdHMvbG9nX3JldHJpZXZhbF9yZXNwb25zZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDcEQsT0FBTyxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFPL0M7OztHQUdHO0FBQ0gscUJBQWEsb0JBQW9CO0lBRXRCLFVBQVUsRUFBRSxFQUFFLEVBQUU7SUFDaEIsTUFBTSxFQUFFLE1BQU07SUFDZCxvQkFBb0IsRUFBRSxFQUFFLEVBQUU7SUFDMUIsa0JBQWtCLEVBQUUsRUFBRTtJQUovQixZQUNTLFVBQVUsRUFBRSxFQUFFLEVBQUUsRUFDaEIsTUFBTSxFQUFFLE1BQU0sRUFDZCxvQkFBb0IsRUFBRSxFQUFFLEVBQUUsRUFDMUIsa0JBQWtCLEVBQUUsRUFBRSxFQUMzQjtJQUVKLFFBQVEsSUFBSSxFQUFFLEVBQUUsQ0FTZjtJQUVELE1BQU0sQ0FBQyxhQUFhLElBQUksRUFBRSxFQUFFLENBUzNCO0lBRUQsTUFBTSxDQUFDLGtCQUFrQixDQUFDLFFBQVEsRUFBRSxvQkFBb0IsR0FBRyxJQUFJLEdBQUcsRUFBRSxFQUFFLENBTXJFO0NBQ0YifQ==
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;AAO/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"}
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"}