@aztec/pxe 0.0.1-commit.64b6bbb → 0.0.1-commit.69c59a8b3

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 (238) hide show
  1. package/dest/bin/check_oracle_version.js +4 -4
  2. package/dest/block_synchronizer/block_synchronizer.d.ts +1 -1
  3. package/dest/block_synchronizer/block_synchronizer.d.ts.map +1 -1
  4. package/dest/block_synchronizer/block_synchronizer.js +6 -0
  5. package/dest/config/index.d.ts +2 -2
  6. package/dest/config/index.d.ts.map +1 -1
  7. package/dest/config/index.js +8 -15
  8. package/dest/config/package_info.js +1 -1
  9. package/dest/contract_function_simulator/contract_function_simulator.d.ts +17 -7
  10. package/dest/contract_function_simulator/contract_function_simulator.d.ts.map +1 -1
  11. package/dest/contract_function_simulator/contract_function_simulator.js +145 -48
  12. package/dest/contract_function_simulator/ephemeral_array_service.d.ts +28 -0
  13. package/dest/contract_function_simulator/ephemeral_array_service.d.ts.map +1 -0
  14. package/dest/contract_function_simulator/ephemeral_array_service.js +78 -0
  15. package/dest/contract_function_simulator/execution_tagging_index_cache.d.ts +7 -7
  16. package/dest/contract_function_simulator/execution_tagging_index_cache.d.ts.map +1 -1
  17. package/dest/contract_function_simulator/execution_tagging_index_cache.js +19 -11
  18. package/dest/contract_function_simulator/index.d.ts +2 -1
  19. package/dest/contract_function_simulator/index.d.ts.map +1 -1
  20. package/dest/contract_function_simulator/index.js +1 -0
  21. package/dest/contract_function_simulator/noir-structs/event_validation_request.d.ts +4 -6
  22. package/dest/contract_function_simulator/noir-structs/event_validation_request.d.ts.map +1 -1
  23. package/dest/contract_function_simulator/noir-structs/event_validation_request.js +8 -10
  24. package/dest/contract_function_simulator/noir-structs/log_retrieval_request.d.ts +1 -1
  25. package/dest/contract_function_simulator/noir-structs/log_retrieval_request.js +1 -1
  26. package/dest/contract_function_simulator/noir-structs/log_retrieval_response.d.ts +2 -2
  27. package/dest/contract_function_simulator/noir-structs/log_retrieval_response.d.ts.map +1 -1
  28. package/dest/contract_function_simulator/noir-structs/log_retrieval_response.js +2 -4
  29. package/dest/contract_function_simulator/noir-structs/note_validation_request.d.ts +4 -7
  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 +6 -11
  32. package/dest/contract_function_simulator/oracle/interfaces.d.ts +61 -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 +47 -0
  37. package/dest/contract_function_simulator/oracle/oracle.d.ts +75 -44
  38. package/dest/contract_function_simulator/oracle/oracle.d.ts.map +1 -1
  39. package/dest/contract_function_simulator/oracle/oracle.js +281 -96
  40. package/dest/contract_function_simulator/oracle/private_execution.js +5 -3
  41. package/dest/contract_function_simulator/oracle/private_execution_oracle.d.ts +23 -48
  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 +51 -73
  44. package/dest/contract_function_simulator/oracle/utility_execution_oracle.d.ts +92 -56
  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 +275 -106
  47. package/dest/contract_function_simulator/pick_notes.d.ts +1 -1
  48. package/dest/contract_function_simulator/pick_notes.d.ts.map +1 -1
  49. package/dest/contract_function_simulator/pick_notes.js +14 -3
  50. package/dest/contract_function_simulator/proxied_contract_data_source.d.ts +1 -1
  51. package/dest/contract_function_simulator/proxied_contract_data_source.d.ts.map +1 -1
  52. package/dest/contract_function_simulator/proxied_contract_data_source.js +3 -0
  53. package/dest/contract_logging.d.ts +27 -0
  54. package/dest/contract_logging.d.ts.map +1 -0
  55. package/dest/contract_logging.js +38 -0
  56. package/dest/contract_sync/contract_sync_service.d.ts +7 -4
  57. package/dest/contract_sync/contract_sync_service.d.ts.map +1 -1
  58. package/dest/contract_sync/contract_sync_service.js +69 -35
  59. package/dest/contract_sync/helpers.d.ts +2 -2
  60. package/dest/contract_sync/helpers.d.ts.map +1 -1
  61. package/dest/contract_sync/helpers.js +9 -4
  62. package/dest/debug/pxe_debug_utils.d.ts +4 -3
  63. package/dest/debug/pxe_debug_utils.d.ts.map +1 -1
  64. package/dest/debug/pxe_debug_utils.js +4 -4
  65. package/dest/entrypoints/client/bundle/index.d.ts +3 -1
  66. package/dest/entrypoints/client/bundle/index.d.ts.map +1 -1
  67. package/dest/entrypoints/client/bundle/index.js +2 -0
  68. package/dest/entrypoints/client/bundle/utils.d.ts +2 -2
  69. package/dest/entrypoints/client/bundle/utils.d.ts.map +1 -1
  70. package/dest/entrypoints/client/bundle/utils.js +2 -2
  71. package/dest/entrypoints/client/lazy/index.d.ts +3 -1
  72. package/dest/entrypoints/client/lazy/index.d.ts.map +1 -1
  73. package/dest/entrypoints/client/lazy/index.js +2 -0
  74. package/dest/entrypoints/client/lazy/utils.d.ts +2 -2
  75. package/dest/entrypoints/client/lazy/utils.d.ts.map +1 -1
  76. package/dest/entrypoints/client/lazy/utils.js +2 -2
  77. package/dest/entrypoints/pxe_creation_options.d.ts +3 -1
  78. package/dest/entrypoints/pxe_creation_options.d.ts.map +1 -1
  79. package/dest/entrypoints/pxe_creation_options.js +3 -1
  80. package/dest/entrypoints/server/index.d.ts +3 -2
  81. package/dest/entrypoints/server/index.d.ts.map +1 -1
  82. package/dest/entrypoints/server/index.js +2 -1
  83. package/dest/entrypoints/server/utils.d.ts +2 -2
  84. package/dest/entrypoints/server/utils.d.ts.map +1 -1
  85. package/dest/entrypoints/server/utils.js +2 -2
  86. package/dest/events/event_service.d.ts +3 -2
  87. package/dest/events/event_service.d.ts.map +1 -1
  88. package/dest/events/event_service.js +16 -4
  89. package/dest/events/private_event_filter_validator.d.ts +3 -2
  90. package/dest/events/private_event_filter_validator.d.ts.map +1 -1
  91. package/dest/events/private_event_filter_validator.js +15 -0
  92. package/dest/logs/log_service.d.ts +7 -7
  93. package/dest/logs/log_service.d.ts.map +1 -1
  94. package/dest/logs/log_service.js +33 -48
  95. package/dest/messages/message_context_service.d.ts +17 -0
  96. package/dest/messages/message_context_service.d.ts.map +1 -0
  97. package/dest/messages/message_context_service.js +36 -0
  98. package/dest/notes/note_service.d.ts +4 -4
  99. package/dest/notes/note_service.d.ts.map +1 -1
  100. package/dest/notes/note_service.js +17 -7
  101. package/dest/notes_filter.d.ts +24 -0
  102. package/dest/notes_filter.d.ts.map +1 -0
  103. package/dest/notes_filter.js +4 -0
  104. package/dest/oracle_version.d.ts +4 -3
  105. package/dest/oracle_version.d.ts.map +1 -1
  106. package/dest/oracle_version.js +20 -10
  107. package/dest/private_kernel/hints/compute_tx_expiration_timestamp.d.ts +4 -0
  108. package/dest/private_kernel/hints/compute_tx_expiration_timestamp.d.ts.map +1 -0
  109. package/dest/private_kernel/hints/{compute_tx_include_by_timestamp.js → compute_tx_expiration_timestamp.js} +12 -12
  110. package/dest/private_kernel/hints/index.d.ts +1 -1
  111. package/dest/private_kernel/hints/index.js +1 -1
  112. package/dest/private_kernel/hints/private_kernel_reset_private_inputs_builder.d.ts +4 -3
  113. package/dest/private_kernel/hints/private_kernel_reset_private_inputs_builder.d.ts.map +1 -1
  114. package/dest/private_kernel/hints/private_kernel_reset_private_inputs_builder.js +129 -68
  115. package/dest/private_kernel/hints/test_utils.d.ts +122 -0
  116. package/dest/private_kernel/hints/test_utils.d.ts.map +1 -0
  117. package/dest/private_kernel/hints/test_utils.js +203 -0
  118. package/dest/private_kernel/private_kernel_execution_prover.d.ts +1 -1
  119. package/dest/private_kernel/private_kernel_execution_prover.d.ts.map +1 -1
  120. package/dest/private_kernel/private_kernel_execution_prover.js +18 -13
  121. package/dest/private_kernel/private_kernel_oracle.d.ts +6 -2
  122. package/dest/private_kernel/private_kernel_oracle.d.ts.map +1 -1
  123. package/dest/private_kernel/private_kernel_oracle.js +7 -3
  124. package/dest/pxe.d.ts +23 -15
  125. package/dest/pxe.d.ts.map +1 -1
  126. package/dest/pxe.js +87 -54
  127. package/dest/storage/anchor_block_store/anchor_block_store.js +1 -1
  128. package/dest/storage/capsule_store/capsule_service.d.ts +21 -0
  129. package/dest/storage/capsule_store/capsule_service.d.ts.map +1 -0
  130. package/dest/storage/capsule_store/capsule_service.js +50 -0
  131. package/dest/storage/capsule_store/capsule_store.d.ts +9 -9
  132. package/dest/storage/capsule_store/capsule_store.d.ts.map +1 -1
  133. package/dest/storage/capsule_store/capsule_store.js +36 -28
  134. package/dest/storage/capsule_store/index.d.ts +2 -1
  135. package/dest/storage/capsule_store/index.d.ts.map +1 -1
  136. package/dest/storage/capsule_store/index.js +1 -0
  137. package/dest/storage/contract_store/contract_store.d.ts +42 -15
  138. package/dest/storage/contract_store/contract_store.d.ts.map +1 -1
  139. package/dest/storage/contract_store/contract_store.js +143 -65
  140. package/dest/storage/metadata.d.ts +1 -1
  141. package/dest/storage/metadata.js +1 -1
  142. package/dest/storage/note_store/note_store.d.ts +3 -3
  143. package/dest/storage/note_store/note_store.d.ts.map +1 -1
  144. package/dest/storage/note_store/note_store.js +3 -4
  145. package/dest/storage/private_event_store/stored_private_event.js +1 -1
  146. package/dest/storage/tagging_store/recipient_tagging_store.d.ts +6 -6
  147. package/dest/storage/tagging_store/recipient_tagging_store.d.ts.map +1 -1
  148. package/dest/storage/tagging_store/sender_tagging_store.d.ts +29 -28
  149. package/dest/storage/tagging_store/sender_tagging_store.d.ts.map +1 -1
  150. package/dest/storage/tagging_store/sender_tagging_store.js +141 -115
  151. package/dest/tagging/get_all_logs_by_tags.d.ts +1 -1
  152. package/dest/tagging/get_all_logs_by_tags.d.ts.map +1 -1
  153. package/dest/tagging/get_all_logs_by_tags.js +17 -3
  154. package/dest/tagging/index.d.ts +3 -3
  155. package/dest/tagging/index.d.ts.map +1 -1
  156. package/dest/tagging/index.js +1 -1
  157. package/dest/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.d.ts +4 -5
  158. package/dest/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.d.ts.map +1 -1
  159. package/dest/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.js +7 -21
  160. package/dest/tagging/recipient_sync/utils/find_highest_indexes.js +2 -2
  161. package/dest/tagging/recipient_sync/utils/load_logs_for_range.d.ts +6 -7
  162. package/dest/tagging/recipient_sync/utils/load_logs_for_range.d.ts.map +1 -1
  163. package/dest/tagging/recipient_sync/utils/load_logs_for_range.js +12 -11
  164. package/dest/tagging/sender_sync/sync_sender_tagging_indexes.d.ts +4 -8
  165. package/dest/tagging/sender_sync/sync_sender_tagging_indexes.d.ts.map +1 -1
  166. package/dest/tagging/sender_sync/sync_sender_tagging_indexes.js +13 -7
  167. package/dest/tagging/sender_sync/utils/get_status_change_of_pending.d.ts +4 -3
  168. package/dest/tagging/sender_sync/utils/get_status_change_of_pending.d.ts.map +1 -1
  169. package/dest/tagging/sender_sync/utils/get_status_change_of_pending.js +20 -10
  170. package/dest/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.d.ts +5 -7
  171. package/dest/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.d.ts.map +1 -1
  172. package/dest/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.js +36 -24
  173. package/package.json +16 -16
  174. package/src/bin/check_oracle_version.ts +4 -4
  175. package/src/block_synchronizer/block_synchronizer.ts +6 -0
  176. package/src/config/index.ts +3 -9
  177. package/src/config/package_info.ts +1 -1
  178. package/src/contract_function_simulator/contract_function_simulator.ts +261 -67
  179. package/src/contract_function_simulator/ephemeral_array_service.ts +110 -0
  180. package/src/contract_function_simulator/execution_tagging_index_cache.ts +19 -14
  181. package/src/contract_function_simulator/index.ts +1 -0
  182. package/src/contract_function_simulator/noir-structs/event_validation_request.ts +9 -9
  183. package/src/contract_function_simulator/noir-structs/log_retrieval_request.ts +1 -1
  184. package/src/contract_function_simulator/noir-structs/log_retrieval_response.ts +2 -5
  185. package/src/contract_function_simulator/noir-structs/note_validation_request.ts +4 -10
  186. package/src/contract_function_simulator/oracle/interfaces.ts +82 -54
  187. package/src/contract_function_simulator/oracle/legacy_oracle_mappings.ts +104 -0
  188. package/src/contract_function_simulator/oracle/oracle.ts +363 -139
  189. package/src/contract_function_simulator/oracle/private_execution.ts +4 -4
  190. package/src/contract_function_simulator/oracle/private_execution_oracle.ts +58 -91
  191. package/src/contract_function_simulator/oracle/utility_execution_oracle.ts +455 -143
  192. package/src/contract_function_simulator/pick_notes.ts +14 -3
  193. package/src/contract_function_simulator/proxied_contract_data_source.ts +8 -1
  194. package/src/contract_logging.ts +52 -0
  195. package/src/contract_sync/contract_sync_service.ts +102 -55
  196. package/src/contract_sync/helpers.ts +8 -3
  197. package/src/debug/pxe_debug_utils.ts +10 -8
  198. package/src/entrypoints/client/bundle/index.ts +2 -0
  199. package/src/entrypoints/client/bundle/utils.ts +2 -3
  200. package/src/entrypoints/client/lazy/index.ts +2 -0
  201. package/src/entrypoints/client/lazy/utils.ts +2 -3
  202. package/src/entrypoints/pxe_creation_options.ts +7 -0
  203. package/src/entrypoints/server/index.ts +2 -1
  204. package/src/entrypoints/server/utils.ts +2 -3
  205. package/src/events/event_service.ts +17 -4
  206. package/src/events/private_event_filter_validator.ts +21 -1
  207. package/src/logs/log_service.ts +63 -91
  208. package/src/messages/message_context_service.ts +44 -0
  209. package/src/notes/note_service.ts +19 -8
  210. package/src/notes_filter.ts +24 -0
  211. package/src/oracle_version.ts +20 -10
  212. package/src/private_kernel/hints/{compute_tx_include_by_timestamp.ts → compute_tx_expiration_timestamp.ts} +13 -13
  213. package/src/private_kernel/hints/index.ts +1 -1
  214. package/src/private_kernel/hints/private_kernel_reset_private_inputs_builder.ts +164 -117
  215. package/src/private_kernel/hints/test_utils.ts +325 -0
  216. package/src/private_kernel/private_kernel_execution_prover.ts +18 -16
  217. package/src/private_kernel/private_kernel_oracle.ts +7 -7
  218. package/src/pxe.ts +129 -72
  219. package/src/storage/anchor_block_store/anchor_block_store.ts +1 -1
  220. package/src/storage/capsule_store/capsule_service.ts +90 -0
  221. package/src/storage/capsule_store/capsule_store.ts +44 -26
  222. package/src/storage/capsule_store/index.ts +1 -0
  223. package/src/storage/contract_store/contract_store.ts +177 -76
  224. package/src/storage/metadata.ts +1 -1
  225. package/src/storage/note_store/note_store.ts +5 -5
  226. package/src/storage/private_event_store/stored_private_event.ts +1 -1
  227. package/src/storage/tagging_store/recipient_tagging_store.ts +9 -5
  228. package/src/storage/tagging_store/sender_tagging_store.ts +185 -138
  229. package/src/tagging/get_all_logs_by_tags.ts +28 -4
  230. package/src/tagging/index.ts +2 -2
  231. package/src/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.ts +9 -24
  232. package/src/tagging/recipient_sync/utils/find_highest_indexes.ts +2 -2
  233. package/src/tagging/recipient_sync/utils/load_logs_for_range.ts +10 -15
  234. package/src/tagging/sender_sync/sync_sender_tagging_indexes.ts +23 -10
  235. package/src/tagging/sender_sync/utils/get_status_change_of_pending.ts +26 -11
  236. package/src/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.ts +27 -26
  237. package/dest/private_kernel/hints/compute_tx_include_by_timestamp.d.ts +0 -4
  238. 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, MAX_TX_LIFETIME, 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,13 @@ 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';
18
+ import { CapsuleService } from '../storage/capsule_store/capsule_service.js';
19
19
  import { ExecutionNoteCache } from './execution_note_cache.js';
20
20
  import { ExecutionTaggingIndexCache } from './execution_tagging_index_cache.js';
21
21
  import { HashedValuesCache } from './hashed_values_cache.js';
@@ -32,6 +32,7 @@ import { UtilityExecutionOracle } from './oracle/utility_execution_oracle.js';
32
32
  keyStore;
33
33
  addressStore;
34
34
  aztecNode;
35
+ l2TipsStore;
35
36
  senderTaggingStore;
36
37
  recipientTaggingStore;
37
38
  senderAddressBookStore;
@@ -39,12 +40,14 @@ import { UtilityExecutionOracle } from './oracle/utility_execution_oracle.js';
39
40
  privateEventStore;
40
41
  simulator;
41
42
  contractSyncService;
43
+ messageContextService;
42
44
  constructor(args){
43
45
  this.contractStore = args.contractStore;
44
46
  this.noteStore = args.noteStore;
45
47
  this.keyStore = args.keyStore;
46
48
  this.addressStore = args.addressStore;
47
49
  this.aztecNode = args.aztecNode;
50
+ this.l2TipsStore = args.l2TipsStore;
48
51
  this.senderTaggingStore = args.senderTaggingStore;
49
52
  this.recipientTaggingStore = args.recipientTaggingStore;
50
53
  this.senderAddressBookStore = args.senderAddressBookStore;
@@ -52,6 +55,7 @@ import { UtilityExecutionOracle } from './oracle/utility_execution_oracle.js';
52
55
  this.privateEventStore = args.privateEventStore;
53
56
  this.simulator = args.simulator;
54
57
  this.contractSyncService = args.contractSyncService;
58
+ this.messageContextService = args.messageContextService;
55
59
  this.log = createLogger('simulator');
56
60
  }
57
61
  /**
@@ -77,8 +81,8 @@ import { UtilityExecutionOracle } from './oracle/utility_execution_oracle.js';
77
81
  txContext: request.txContext,
78
82
  callContext,
79
83
  anchorBlockHeader,
80
- utilityExecutor: async (call)=>{
81
- await this.runUtility(call, [], anchorBlockHeader, scopes, jobId);
84
+ utilityExecutor: async (call, execScopes)=>{
85
+ await this.runUtility(call, [], anchorBlockHeader, execScopes, jobId);
82
86
  },
83
87
  authWitnesses: request.authWitnesses,
84
88
  capsules: request.capsules,
@@ -93,15 +97,17 @@ import { UtilityExecutionOracle } from './oracle/utility_execution_oracle.js';
93
97
  senderTaggingStore: this.senderTaggingStore,
94
98
  recipientTaggingStore: this.recipientTaggingStore,
95
99
  senderAddressBookStore: this.senderAddressBookStore,
96
- capsuleStore: this.capsuleStore,
100
+ capsuleService: new CapsuleService(this.capsuleStore, scopes),
97
101
  privateEventStore: this.privateEventStore,
102
+ messageContextService: this.messageContextService,
98
103
  contractSyncService: this.contractSyncService,
99
104
  jobId,
100
105
  totalPublicCalldataCount: 0,
101
106
  sideEffectCounter: startSideEffectCounter,
102
107
  scopes,
103
108
  senderForTags,
104
- simulator: this.simulator
109
+ simulator: this.simulator,
110
+ l2TipsStore: this.l2TipsStore
105
111
  });
106
112
  const setupTime = simulatorSetupTimer.ms();
107
113
  try {
@@ -119,7 +125,7 @@ import { UtilityExecutionOracle } from './oracle/utility_execution_oracle.js';
119
125
  r.publicInputs.publicTeardownCallRequest
120
126
  ]));
121
127
  const publicFunctionsCalldata = await Promise.all(publicCallRequests.map(async (r)=>{
122
- const calldata = await privateExecutionOracle.privateLoadFromExecutionCache(r.calldataHash);
128
+ const calldata = await privateExecutionOracle.getHashPreimage(r.calldataHash);
123
129
  return new HashedValues(calldata, r.calldataHash);
124
130
  }));
125
131
  const teardownTime = simulatorTeardownTimer.ms();
@@ -161,8 +167,11 @@ import { UtilityExecutionOracle } from './oracle/utility_execution_oracle.js';
161
167
  aztecNode: this.aztecNode,
162
168
  recipientTaggingStore: this.recipientTaggingStore,
163
169
  senderAddressBookStore: this.senderAddressBookStore,
164
- capsuleStore: this.capsuleStore,
170
+ capsuleService: new CapsuleService(this.capsuleStore, scopes),
165
171
  privateEventStore: this.privateEventStore,
172
+ messageContextService: this.messageContextService,
173
+ contractSyncService: this.contractSyncService,
174
+ l2TipsStore: this.l2TipsStore,
166
175
  jobId,
167
176
  scopes
168
177
  });
@@ -181,8 +190,11 @@ import { UtilityExecutionOracle } from './oracle/utility_execution_oracle.js';
181
190
  cause: err
182
191
  });
183
192
  });
184
- this.log.verbose(`Utility simulation for ${call.to}.${call.selector} completed`);
185
- return witnessMapToFields(acirExecutionResult.returnWitness);
193
+ this.log.verbose(`Utility execution for ${call.to}.${call.selector} completed`);
194
+ return {
195
+ result: witnessMapToFields(acirExecutionResult.returnWitness),
196
+ offchainEffects: oracle.getOffchainEffects()
197
+ };
186
198
  } catch (err) {
187
199
  throw createSimulationError(err instanceof Error ? err : new Error('Unknown error during private execution'));
188
200
  }
@@ -221,38 +233,54 @@ class OrderedSideEffect {
221
233
  * (allowing state overrides) and is much faster, while still generating a valid
222
234
  * output that can be sent to the node for public simulation
223
235
  * @param privateExecutionResult - The result of the private execution.
224
- * @param contractStore - A provider for contract data in order to get function names and debug info.
236
+ * @param debugFunctionNameGetter - A provider for contract data in order to get function names and debug info.
237
+ * @param node - AztecNode for verifying settled read requests against the note hash and nullifier trees.
225
238
  * @param minRevertibleSideEffectCounterOverride - Optional override for the min revertible side effect counter.
226
239
  * Used by TXE to simulate account contract behavior (setting the counter before app execution).
227
240
  * @returns The simulated proving result.
228
- */ export async function generateSimulatedProvingResult(privateExecutionResult, debugFunctionNameGetter, minRevertibleSideEffectCounterOverride) {
229
- const siloedNoteHashes = [];
230
- const nullifiers = [];
241
+ */ export async function generateSimulatedProvingResult(privateExecutionResult, debugFunctionNameGetter, node, minRevertibleSideEffectCounterOverride) {
231
242
  const taggedPrivateLogs = [];
232
243
  const l2ToL1Messages = [];
233
244
  const contractClassLogsHashes = [];
234
245
  const publicCallRequests = [];
235
246
  const executionSteps = [];
247
+ // Unsiloed scoped arrays — used for squashing, read request verification,
248
+ // and siloed at the end only for the surviving items
249
+ const scopedNoteHashes = [];
250
+ const scopedNullifiers = [];
251
+ // Read requests for verification
252
+ const noteHashReadRequests = [];
253
+ const nullifierReadRequests = [];
236
254
  let publicTeardownCallRequest;
255
+ // We set expiration timestamp to anchor_block_timestamp + MAX_TX_LIFETIME (24h) just like kernels do
256
+ let expirationTimestamp = privateExecutionResult.entrypoint.publicInputs.anchorBlockHeader.globalVariables.timestamp + BigInt(MAX_TX_LIFETIME);
257
+ let feePayer = AztecAddress.zero();
237
258
  const executions = [
238
259
  privateExecutionResult.entrypoint
239
260
  ];
240
261
  while(executions.length !== 0){
241
262
  const execution = executions.shift();
242
263
  executions.unshift(...execution.nestedExecutionResults);
264
+ // Just like kernels we overwrite the default value if the call sets it.
265
+ const callExpirationTimestamp = execution.publicInputs.expirationTimestamp;
266
+ if (callExpirationTimestamp !== 0n && callExpirationTimestamp < expirationTimestamp) {
267
+ expirationTimestamp = callExpirationTimestamp;
268
+ }
243
269
  const { contractAddress } = execution.publicInputs.callContext;
244
- 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)));
245
- const nullifiersFromExecution = await Promise.all(execution.publicInputs.nullifiers.getActiveItems().map(async (nullifier)=>new OrderedSideEffect(await siloNullifier(contractAddress, nullifier.value), nullifier.counter)));
246
- const privateLogsFromExecution = await Promise.all(execution.publicInputs.privateLogs.getActiveItems().map(async (metadata)=>{
247
- metadata.log.fields[0] = await poseidon2HashWithSeparator([
248
- contractAddress,
249
- metadata.log.fields[0]
250
- ], GeneratorIndex.PRIVATE_LOG_FIRST_FIELD);
251
- return new OrderedSideEffect(metadata.log, metadata.counter);
252
- }));
253
- siloedNoteHashes.push(...noteHashesFromExecution);
254
- taggedPrivateLogs.push(...privateLogsFromExecution);
255
- nullifiers.push(...nullifiersFromExecution);
270
+ if (execution.publicInputs.isFeePayer) {
271
+ if (!feePayer.isZero()) {
272
+ throw new Error('Multiple fee payers found in private execution result');
273
+ }
274
+ feePayer = contractAddress;
275
+ }
276
+ scopedNoteHashes.push(...execution.publicInputs.noteHashes.getActiveItems().filter((nh)=>!nh.isEmpty()).map((nh)=>nh.scope(contractAddress)));
277
+ scopedNullifiers.push(...execution.publicInputs.nullifiers.getActiveItems().map((n)=>n.scope(contractAddress)));
278
+ taggedPrivateLogs.push(...await Promise.all(execution.publicInputs.privateLogs.getActiveItems().map(async (metadata)=>{
279
+ metadata.log.fields[0] = await computeSiloedPrivateLogFirstField(contractAddress, metadata.log.fields[0]);
280
+ return new OrderedSideEffect(metadata, metadata.counter);
281
+ })));
282
+ noteHashReadRequests.push(...execution.publicInputs.noteHashReadRequests.getActiveItems());
283
+ nullifierReadRequests.push(...execution.publicInputs.nullifierReadRequests.getActiveItems());
256
284
  l2ToL1Messages.push(...execution.publicInputs.l2ToL1Msgs.getActiveItems().map((message)=>new OrderedSideEffect(message.message.scope(contractAddress), message.counter)));
257
285
  contractClassLogsHashes.push(...execution.publicInputs.contractClassLogsHashes.getActiveItems().map((contractClassLogHash)=>new OrderedSideEffect(contractClassLogHash.logHash.scope(contractAddress), contractClassLogHash.counter)));
258
286
  publicCallRequests.push(...execution.publicInputs.publicCallRequests.getActiveItems().map((callRequest)=>new OrderedSideEffect(callRequest.inner, callRequest.counter)));
@@ -271,6 +299,14 @@ class OrderedSideEffect {
271
299
  witness: execution.partialWitness
272
300
  });
273
301
  }
302
+ const noteHashNullifierCounterMap = collectNoteHashNullifierCounterMap(privateExecutionResult);
303
+ const minRevertibleSideEffectCounter = minRevertibleSideEffectCounterOverride ?? getFinalMinRevertibleSideEffectCounter(privateExecutionResult);
304
+ const scopedNoteHashesCLA = new ClaimedLengthArray(padArrayEnd(scopedNoteHashes, ScopedNoteHash.empty(), MAX_NOTE_HASHES_PER_TX), scopedNoteHashes.length);
305
+ const scopedNullifiersCLA = new ClaimedLengthArray(padArrayEnd(scopedNullifiers, ScopedNullifier.empty(), MAX_NULLIFIERS_PER_TX), scopedNullifiers.length);
306
+ const { filteredNoteHashes, filteredNullifiers, filteredPrivateLogs } = squashTransientSideEffects(taggedPrivateLogs, scopedNoteHashesCLA, scopedNullifiersCLA, noteHashNullifierCounterMap, minRevertibleSideEffectCounter);
307
+ await verifyReadRequests(node, await privateExecutionResult.entrypoint.publicInputs.anchorBlockHeader.hash(), noteHashReadRequests, nullifierReadRequests, scopedNoteHashesCLA, scopedNullifiersCLA);
308
+ 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)));
309
+ 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)));
274
310
  const constantData = new TxConstantData(privateExecutionResult.entrypoint.publicInputs.anchorBlockHeader, privateExecutionResult.entrypoint.publicInputs.txContext, getVKTreeRoot(), protocolContractsHash);
275
311
  const hasPublicCalls = privateExecutionResult.publicFunctionCalldata.length !== 0;
276
312
  let inputsForRollup;
@@ -279,8 +315,7 @@ class OrderedSideEffect {
279
315
  const sortByCounter = (a, b)=>a.counter - b.counter;
280
316
  const getEffect = (orderedSideEffect)=>orderedSideEffect.sideEffect;
281
317
  const isPrivateOnlyTx = privateExecutionResult.publicFunctionCalldata.length === 0;
282
- const minRevertibleSideEffectCounter = minRevertibleSideEffectCounterOverride ?? getFinalMinRevertibleSideEffectCounter(privateExecutionResult);
283
- const [nonRevertibleNullifiers, revertibleNullifiers] = splitOrderedSideEffects(nullifiers.sort(sortByCounter), minRevertibleSideEffectCounter);
318
+ const [nonRevertibleNullifiers, revertibleNullifiers] = splitOrderedSideEffects(siloedNullifiers, minRevertibleSideEffectCounter);
284
319
  const nonceGenerator = privateExecutionResult.firstNullifier;
285
320
  if (nonRevertibleNullifiers.length === 0) {
286
321
  nonRevertibleNullifiers.push(nonceGenerator);
@@ -290,43 +325,102 @@ class OrderedSideEffect {
290
325
  if (isPrivateOnlyTx) {
291
326
  // We must make the note hashes unique by using the
292
327
  // nonce generator and their index in the tx.
293
- const uniqueNoteHashes = await Promise.all(siloedNoteHashes.sort(sortByCounter).map(async (orderedSideEffect, i)=>{
328
+ const uniqueNoteHashes = await Promise.all(siloedNoteHashes.map(async (orderedSideEffect, i)=>{
294
329
  const siloedNoteHash = orderedSideEffect.sideEffect;
295
330
  const nonce = await computeNoteHashNonce(nonceGenerator, i);
296
331
  const uniqueNoteHash = await computeUniqueNoteHash(nonce, siloedNoteHash);
297
332
  return uniqueNoteHash;
298
333
  }));
299
- 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));
300
- gasUsed = meterGasUsed(accumulatedDataForRollup);
334
+ 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));
335
+ gasUsed = meterGasUsed(accumulatedDataForRollup, isPrivateOnlyTx);
301
336
  inputsForRollup = new PartialPrivateTailPublicInputsForRollup(accumulatedDataForRollup);
302
337
  } else {
303
- const [nonRevertibleNoteHashes, revertibleNoteHashes] = splitOrderedSideEffects(siloedNoteHashes.sort(sortByCounter), minRevertibleSideEffectCounter);
338
+ const [nonRevertibleNoteHashes, revertibleNoteHashes] = splitOrderedSideEffects(siloedNoteHashes, minRevertibleSideEffectCounter);
304
339
  const nonRevertibleUniqueNoteHashes = await Promise.all(nonRevertibleNoteHashes.map(async (noteHash, i)=>{
305
340
  const nonce = await computeNoteHashNonce(nonceGenerator, i);
306
341
  return await computeUniqueNoteHash(nonce, noteHash);
307
342
  }));
308
343
  const [nonRevertibleL2ToL1Messages, revertibleL2ToL1Messages] = splitOrderedSideEffects(l2ToL1Messages.sort(sortByCounter), minRevertibleSideEffectCounter);
309
- const [nonRevertibleTaggedPrivateLogs, revertibleTaggedPrivateLogs] = splitOrderedSideEffects(taggedPrivateLogs, minRevertibleSideEffectCounter);
344
+ const [nonRevertibleTaggedPrivateLogs, revertibleTaggedPrivateLogs] = splitOrderedSideEffects(filteredPrivateLogs, minRevertibleSideEffectCounter);
310
345
  const [nonRevertibleContractClassLogHashes, revertibleContractClassLogHashes] = splitOrderedSideEffects(contractClassLogsHashes.sort(sortByCounter), minRevertibleSideEffectCounter);
311
346
  const [nonRevertiblePublicCallRequests, revertiblePublicCallRequests] = splitOrderedSideEffects(publicCallRequests.sort(sortByCounter), minRevertibleSideEffectCounter);
312
347
  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));
313
348
  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));
314
- gasUsed = meterGasUsed(revertibleData).add(meterGasUsed(nonRevertibleData));
349
+ gasUsed = meterGasUsed(revertibleData, isPrivateOnlyTx).add(meterGasUsed(nonRevertibleData, isPrivateOnlyTx));
315
350
  if (publicTeardownCallRequest) {
316
- gasUsed.add(privateExecutionResult.entrypoint.publicInputs.txContext.gasSettings.teardownGasLimits);
351
+ gasUsed = gasUsed.add(privateExecutionResult.entrypoint.publicInputs.txContext.gasSettings.teardownGasLimits);
317
352
  }
318
353
  inputsForPublic = new PartialPrivateTailPublicInputsForPublic(nonRevertibleData, revertibleData, publicTeardownCallRequest ?? PublicCallRequest.empty());
319
354
  }
320
355
  const publicInputs = new PrivateKernelTailCircuitPublicInputs(constantData, /*gasUsed=*/ gasUsed.add(Gas.from({
321
- l2Gas: FIXED_L2_GAS,
322
- daGas: FIXED_DA_GAS
323
- })), /*feePayer=*/ AztecAddress.zero(), /*includeByTimestamp=*/ 0n, hasPublicCalls ? inputsForPublic : undefined, !hasPublicCalls ? inputsForRollup : undefined);
356
+ l2Gas: isPrivateOnlyTx ? PRIVATE_TX_L2_GAS_OVERHEAD : PUBLIC_TX_L2_GAS_OVERHEAD,
357
+ daGas: TX_DA_GAS_OVERHEAD
358
+ })), /*feePayer=*/ feePayer, /*expirationTimestamp=*/ expirationTimestamp, hasPublicCalls ? inputsForPublic : undefined, !hasPublicCalls ? inputsForRollup : undefined);
324
359
  return {
325
360
  publicInputs,
326
361
  chonkProof: ChonkProof.empty(),
327
362
  executionSteps
328
363
  };
329
364
  }
365
+ /**
366
+ * Squashes transient note hashes and nullifiers, mimicking the behavior
367
+ * of the reset kernels. Returns the filtered (surviving) scoped items and private logs.
368
+ */ function squashTransientSideEffects(taggedPrivateLogs, scopedNoteHashesCLA, scopedNullifiersCLA, noteHashNullifierCounterMap, minRevertibleSideEffectCounter) {
369
+ const { numTransientData, hints: transientDataHints } = buildTransientDataHints(scopedNoteHashesCLA, scopedNullifiersCLA, /*futureNoteHashReads=*/ [], /*futureNullifierReads=*/ [], /*futureLogs=*/ [], noteHashNullifierCounterMap, minRevertibleSideEffectCounter);
370
+ const squashedNoteHashCounters = new Set();
371
+ const squashedNullifierCounters = new Set();
372
+ for(let i = 0; i < numTransientData; i++){
373
+ const hint = transientDataHints[i];
374
+ squashedNoteHashCounters.add(scopedNoteHashesCLA.array[hint.noteHashIndex].counter);
375
+ squashedNullifierCounters.add(scopedNullifiersCLA.array[hint.nullifierIndex].counter);
376
+ }
377
+ return {
378
+ filteredNoteHashes: scopedNoteHashesCLA.getActiveItems().filter((nh)=>!squashedNoteHashCounters.has(nh.counter)),
379
+ filteredNullifiers: scopedNullifiersCLA.getActiveItems().filter((n)=>!squashedNullifierCounters.has(n.counter)),
380
+ filteredPrivateLogs: taggedPrivateLogs.filter((item)=>!squashedNoteHashCounters.has(item.sideEffect.noteHashCounter)).map((item)=>new OrderedSideEffect(item.sideEffect.log, item.counter))
381
+ };
382
+ }
383
+ /**
384
+ * Verifies settled read requests by checking membership in the note hash and nullifier trees
385
+ * at the tx's anchor block, mimicking the behavior of the kernels
386
+ */ async function verifyReadRequests(node, anchorBlockHash, noteHashReadRequests, nullifierReadRequests, scopedNoteHashesCLA, scopedNullifiersCLA) {
387
+ const noteHashReadRequestsCLA = new ClaimedLengthArray(padArrayEnd(noteHashReadRequests, ScopedReadRequest.empty(), MAX_NOTE_HASH_READ_REQUESTS_PER_TX), noteHashReadRequests.length);
388
+ const nullifierReadRequestsCLA = new ClaimedLengthArray(padArrayEnd(nullifierReadRequests, ScopedReadRequest.empty(), MAX_NULLIFIER_READ_REQUESTS_PER_TX), nullifierReadRequests.length);
389
+ const noteHashResetActions = getNoteHashReadRequestResetActions(noteHashReadRequestsCLA, scopedNoteHashesCLA);
390
+ const nullifierResetActions = getNullifierReadRequestResetActions(nullifierReadRequestsCLA, scopedNullifiersCLA);
391
+ const settledNoteHashReads = [];
392
+ for(let i = 0; i < noteHashResetActions.actions.length; i++){
393
+ if (noteHashResetActions.actions[i] === ReadRequestActionEnum.READ_AS_SETTLED) {
394
+ settledNoteHashReads.push({
395
+ index: i,
396
+ value: noteHashReadRequests[i].value
397
+ });
398
+ }
399
+ }
400
+ const settledNullifierReads = [];
401
+ for(let i = 0; i < nullifierResetActions.actions.length; i++){
402
+ if (nullifierResetActions.actions[i] === ReadRequestActionEnum.READ_AS_SETTLED) {
403
+ settledNullifierReads.push({
404
+ index: i,
405
+ value: nullifierReadRequests[i].value
406
+ });
407
+ }
408
+ }
409
+ const [noteHashWitnesses, nullifierWitnesses] = await Promise.all([
410
+ Promise.all(settledNoteHashReads.map(({ value })=>node.getNoteHashMembershipWitness(anchorBlockHash, value))),
411
+ Promise.all(settledNullifierReads.map(({ value })=>node.getNullifierMembershipWitness(anchorBlockHash, value)))
412
+ ]);
413
+ for(let i = 0; i < settledNoteHashReads.length; i++){
414
+ if (!noteHashWitnesses[i]) {
415
+ throw new Error(`Note hash read request at index ${settledNoteHashReads[i].index} is reading an unknown note hash: ${settledNoteHashReads[i].value}`);
416
+ }
417
+ }
418
+ for(let i = 0; i < settledNullifierReads.length; i++){
419
+ if (!nullifierWitnesses[i]) {
420
+ throw new Error(`Nullifier read request at index ${settledNullifierReads[i].index} is reading an unknown nullifier: ${settledNullifierReads[i].value}`);
421
+ }
422
+ }
423
+ }
330
424
  function splitOrderedSideEffects(effects, minRevertibleSideEffectCounter) {
331
425
  const revertibleSideEffects = [];
332
426
  const nonRevertibleSideEffects = [];
@@ -342,27 +436,30 @@ function splitOrderedSideEffects(effects, minRevertibleSideEffectCounter) {
342
436
  revertibleSideEffects
343
437
  ];
344
438
  }
345
- function meterGasUsed(data) {
439
+ function meterGasUsed(data, isPrivateOnlyTx) {
346
440
  let meteredDAFields = 0;
347
441
  let meteredL2Gas = 0;
348
442
  const numNoteHashes = arrayNonEmptyLength(data.noteHashes, (hash)=>hash.isEmpty());
349
443
  meteredDAFields += numNoteHashes;
350
- meteredL2Gas += numNoteHashes * AVM_EMITNOTEHASH_BASE_L2_GAS;
444
+ const noteHashBaseGas = isPrivateOnlyTx ? L2_GAS_PER_NOTE_HASH : AVM_EMITNOTEHASH_BASE_L2_GAS;
445
+ meteredL2Gas += numNoteHashes * noteHashBaseGas;
351
446
  const numNullifiers = arrayNonEmptyLength(data.nullifiers, (nullifier)=>nullifier.isEmpty());
352
447
  meteredDAFields += numNullifiers;
353
- meteredL2Gas += numNullifiers * AVM_EMITNULLIFIER_BASE_L2_GAS;
448
+ const nullifierBaseGas = isPrivateOnlyTx ? L2_GAS_PER_NULLIFIER : AVM_EMITNULLIFIER_BASE_L2_GAS;
449
+ meteredL2Gas += numNullifiers * nullifierBaseGas;
354
450
  const numL2toL1Messages = arrayNonEmptyLength(data.l2ToL1Msgs, (msg)=>msg.isEmpty());
355
451
  meteredDAFields += numL2toL1Messages;
356
- meteredL2Gas += numL2toL1Messages * AVM_SENDL2TOL1MSG_BASE_L2_GAS;
452
+ const l2ToL1MessageBaseGas = isPrivateOnlyTx ? L2_GAS_PER_L2_TO_L1_MSG : AVM_SENDL2TOL1MSG_BASE_L2_GAS;
453
+ meteredL2Gas += numL2toL1Messages * l2ToL1MessageBaseGas;
357
454
  const numPrivatelogs = arrayNonEmptyLength(data.privateLogs, (log)=>log.isEmpty());
358
455
  // Every private log emits its length as an additional field
359
456
  meteredDAFields += data.privateLogs.reduce((acc, log)=>!log.isEmpty() ? acc + log.emittedLength + 1 : acc, 0);
360
457
  meteredL2Gas += numPrivatelogs * L2_GAS_PER_PRIVATE_LOG;
361
458
  const numContractClassLogs = arrayNonEmptyLength(data.contractClassLogsHashes, (log)=>log.isEmpty());
362
- // Every contract class log emits its length and contract address as additional fields
363
- meteredDAFields += data.contractClassLogsHashes.reduce((acc, log)=>!log.isEmpty() ? acc + log.logHash.length + 2 : acc, 0);
459
+ // Every contract class log emits its contract address as an additional field
460
+ meteredDAFields += data.contractClassLogsHashes.reduce((acc, log)=>!log.isEmpty() ? acc + log.logHash.length + 1 : acc, 0);
364
461
  meteredL2Gas += numContractClassLogs * L2_GAS_PER_CONTRACT_CLASS_LOG;
365
- const meteredDAGas = meteredDAFields * DA_BYTES_PER_FIELD * DA_GAS_PER_BYTE;
462
+ const meteredDAGas = meteredDAFields * DA_GAS_PER_FIELD;
366
463
  if (data.publicCallRequests) {
367
464
  const dataForPublic = data;
368
465
  const numPublicCallRequests = arrayNonEmptyLength(dataForPublic.publicCallRequests, (req)=>req.isEmpty());
@@ -0,0 +1,28 @@
1
+ import { Fr } from '@aztec/foundation/curves/bn254';
2
+ /** In-memory store for ephemeral arrays scoped to a single contract call frame. */
3
+ export declare class EphemeralArrayService {
4
+ #private;
5
+ /** Returns all elements in the array, or an empty array if uninitialized. */
6
+ readArrayAt(slot: Fr): Fr[][];
7
+ /** Returns the number of elements in the array at the given slot. */
8
+ len(slot: Fr): number;
9
+ /** Appends an element to the array and returns the new length. */
10
+ push(slot: Fr, elements: Fr[]): number;
11
+ /** Removes and returns the last element. Throws if empty. */
12
+ pop(slot: Fr): Fr[];
13
+ /** Returns the element at the given index. Throws if out of bounds. */
14
+ get(slot: Fr, index: number): Fr[];
15
+ /** Overwrites the element at the given index. Throws if out of bounds. */
16
+ set(slot: Fr, index: number, value: Fr[]): void;
17
+ /** Removes the element at the given index, shifting subsequent elements backward. Throws if out of bounds. */
18
+ remove(slot: Fr, index: number): void;
19
+ /** Removes all elements from the array. */
20
+ clear(slot: Fr): void;
21
+ /** Allocates a fresh, unused slot for a new ephemeral array. */
22
+ allocateSlot(): Fr;
23
+ /** Creates a new ephemeral array pre-populated with the given elements and returns its slot. */
24
+ newArray(elements: Fr[][]): Fr;
25
+ /** Copies `count` elements from the source array to the destination array (overwrites destination). */
26
+ copy(srcSlot: Fr, dstSlot: Fr, count: number): void;
27
+ }
28
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXBoZW1lcmFsX2FycmF5X3NlcnZpY2UuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb250cmFjdF9mdW5jdGlvbl9zaW11bGF0b3IvZXBoZW1lcmFsX2FycmF5X3NlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBRXBELG1GQUFtRjtBQUNuRixxQkFBYSxxQkFBcUI7O0lBT2hDLDZFQUE2RTtJQUM3RSxXQUFXLENBQUMsSUFBSSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUU1QjtJQU1ELHFFQUFxRTtJQUNyRSxHQUFHLENBQUMsSUFBSSxFQUFFLEVBQUUsR0FBRyxNQUFNLENBRXBCO0lBRUQsa0VBQWtFO0lBQ2xFLElBQUksQ0FBQyxJQUFJLEVBQUUsRUFBRSxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsR0FBRyxNQUFNLENBS3JDO0lBRUQsNkRBQTZEO0lBQzdELEdBQUcsQ0FBQyxJQUFJLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQVFsQjtJQUVELHVFQUF1RTtJQUN2RSxHQUFHLENBQUMsSUFBSSxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsTUFBTSxHQUFHLEVBQUUsRUFBRSxDQVFqQztJQUVELDBFQUEwRTtJQUMxRSxHQUFHLENBQUMsSUFBSSxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsR0FBRyxJQUFJLENBUTlDO0lBRUQsOEdBQThHO0lBQzlHLE1BQU0sQ0FBQyxJQUFJLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxNQUFNLEdBQUcsSUFBSSxDQVFwQztJQUVELDJDQUEyQztJQUMzQyxLQUFLLENBQUMsSUFBSSxFQUFFLEVBQUUsR0FBRyxJQUFJLENBRXBCO0lBRUQsZ0VBQWdFO0lBQ2hFLFlBQVksSUFBSSxFQUFFLENBTWpCO0lBRUQsZ0dBQWdHO0lBQ2hHLFFBQVEsQ0FBQyxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLENBSTdCO0lBRUQsdUdBQXVHO0lBQ3ZHLElBQUksQ0FBQyxPQUFPLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLE1BQU0sR0FBRyxJQUFJLENBVWxEO0NBQ0YifQ==
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ephemeral_array_service.d.ts","sourceRoot":"","sources":["../../src/contract_function_simulator/ephemeral_array_service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,gCAAgC,CAAC;AAEpD,mFAAmF;AACnF,qBAAa,qBAAqB;;IAOhC,6EAA6E;IAC7E,WAAW,CAAC,IAAI,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,CAE5B;IAMD,qEAAqE;IACrE,GAAG,CAAC,IAAI,EAAE,EAAE,GAAG,MAAM,CAEpB;IAED,kEAAkE;IAClE,IAAI,CAAC,IAAI,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,GAAG,MAAM,CAKrC;IAED,6DAA6D;IAC7D,GAAG,CAAC,IAAI,EAAE,EAAE,GAAG,EAAE,EAAE,CAQlB;IAED,uEAAuE;IACvE,GAAG,CAAC,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,GAAG,EAAE,EAAE,CAQjC;IAED,0EAA0E;IAC1E,GAAG,CAAC,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,IAAI,CAQ9C;IAED,8GAA8G;IAC9G,MAAM,CAAC,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAQpC;IAED,2CAA2C;IAC3C,KAAK,CAAC,IAAI,EAAE,EAAE,GAAG,IAAI,CAEpB;IAED,gEAAgE;IAChE,YAAY,IAAI,EAAE,CAMjB;IAED,gGAAgG;IAChG,QAAQ,CAAC,QAAQ,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,CAI7B;IAED,uGAAuG;IACvG,IAAI,CAAC,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAUlD;CACF"}
@@ -0,0 +1,78 @@
1
+ import { Fr } from '@aztec/foundation/curves/bn254';
2
+ /** In-memory store for ephemeral arrays scoped to a single contract call frame. */ export class EphemeralArrayService {
3
+ /**
4
+ * Maps a slot to the elements of the array stored at that slot. Each element is a serialized representation of
5
+ * the original type.
6
+ */ #arrays = new Map();
7
+ /** Returns all elements in the array, or an empty array if uninitialized. */ readArrayAt(slot) {
8
+ return this.#arrays.get(slot.toString()) ?? [];
9
+ }
10
+ #setArray(slot, array) {
11
+ this.#arrays.set(slot.toString(), array);
12
+ }
13
+ /** Returns the number of elements in the array at the given slot. */ len(slot) {
14
+ return this.readArrayAt(slot).length;
15
+ }
16
+ /** Appends an element to the array and returns the new length. */ push(slot, elements) {
17
+ const array = this.readArrayAt(slot);
18
+ array.push(elements);
19
+ this.#setArray(slot, array);
20
+ return array.length;
21
+ }
22
+ /** Removes and returns the last element. Throws if empty. */ pop(slot) {
23
+ const array = this.readArrayAt(slot);
24
+ if (array.length === 0) {
25
+ throw new Error(`Ephemeral array at slot ${slot} is empty`);
26
+ }
27
+ const element = array.pop();
28
+ this.#setArray(slot, array);
29
+ return element;
30
+ }
31
+ /** Returns the element at the given index. Throws if out of bounds. */ get(slot, index) {
32
+ const array = this.readArrayAt(slot);
33
+ if (index < 0 || index >= array.length) {
34
+ throw new Error(`Ephemeral array index ${index} out of bounds for array of length ${array.length} at slot ${slot}`);
35
+ }
36
+ return array[index];
37
+ }
38
+ /** Overwrites the element at the given index. Throws if out of bounds. */ set(slot, index, value) {
39
+ const array = this.readArrayAt(slot);
40
+ if (index < 0 || index >= array.length) {
41
+ throw new Error(`Ephemeral array index ${index} out of bounds for array of length ${array.length} at slot ${slot}`);
42
+ }
43
+ array[index] = value;
44
+ }
45
+ /** Removes the element at the given index, shifting subsequent elements backward. Throws if out of bounds. */ remove(slot, index) {
46
+ const array = this.readArrayAt(slot);
47
+ if (index < 0 || index >= array.length) {
48
+ throw new Error(`Ephemeral array index ${index} out of bounds for array of length ${array.length} at slot ${slot}`);
49
+ }
50
+ array.splice(index, 1);
51
+ }
52
+ /** Removes all elements from the array. */ clear(slot) {
53
+ this.#arrays.delete(slot.toString());
54
+ }
55
+ /** Allocates a fresh, unused slot for a new ephemeral array. */ allocateSlot() {
56
+ let slot;
57
+ do {
58
+ slot = Fr.random();
59
+ }while (this.#arrays.has(slot.toString()))
60
+ return slot;
61
+ }
62
+ /** Creates a new ephemeral array pre-populated with the given elements and returns its slot. */ newArray(elements) {
63
+ const slot = this.allocateSlot();
64
+ this.#setArray(slot, elements);
65
+ return slot;
66
+ }
67
+ /** Copies `count` elements from the source array to the destination array (overwrites destination). */ copy(srcSlot, dstSlot, count) {
68
+ const srcArray = this.readArrayAt(srcSlot);
69
+ if (count > srcArray.length) {
70
+ throw new Error(`Cannot copy ${count} elements from ephemeral array of length ${srcArray.length} at slot ${srcSlot}`);
71
+ }
72
+ // Deep copy the elements to avoid aliasing
73
+ const copied = srcArray.slice(0, count).map((el)=>[
74
+ ...el
75
+ ]);
76
+ this.#setArray(dstSlot, copied);
77
+ }
78
+ }
@@ -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';