@aztec/pxe 0.0.1-commit.ee80a48 → 0.0.1-commit.f103f88

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 (234) hide show
  1. package/dest/bin/check_oracle_version.js +4 -4
  2. package/dest/block_synchronizer/block_synchronizer.d.ts +4 -2
  3. package/dest/block_synchronizer/block_synchronizer.d.ts.map +1 -1
  4. package/dest/block_synchronizer/block_synchronizer.js +13 -1
  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 +63 -29
  10. package/dest/contract_function_simulator/contract_function_simulator.d.ts.map +1 -1
  11. package/dest/contract_function_simulator/contract_function_simulator.js +205 -72
  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 +300 -103
  40. package/dest/contract_function_simulator/oracle/private_execution.js +5 -3
  41. package/dest/contract_function_simulator/oracle/private_execution_oracle.d.ts +53 -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 +109 -86
  44. package/dest/contract_function_simulator/oracle/utility_execution_oracle.d.ts +118 -63
  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 +315 -123
  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 +9 -2
  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 +44 -0
  57. package/dest/contract_sync/contract_sync_service.d.ts.map +1 -0
  58. package/dest/contract_sync/contract_sync_service.js +116 -0
  59. package/dest/contract_sync/helpers.d.ts +28 -0
  60. package/dest/contract_sync/helpers.d.ts.map +1 -0
  61. package/dest/contract_sync/{index.js → helpers.js} +14 -15
  62. package/dest/debug/pxe_debug_utils.d.ts +14 -10
  63. package/dest/debug/pxe_debug_utils.d.ts.map +1 -1
  64. package/dest/debug/pxe_debug_utils.js +16 -15
  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 +11 -3
  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 +11 -3
  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 +4 -3
  81. package/dest/entrypoints/server/index.d.ts.map +1 -1
  82. package/dest/entrypoints/server/index.js +3 -2
  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 +11 -3
  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/logs/log_service.d.ts +7 -7
  90. package/dest/logs/log_service.d.ts.map +1 -1
  91. package/dest/logs/log_service.js +33 -48
  92. package/dest/messages/message_context_service.d.ts +17 -0
  93. package/dest/messages/message_context_service.d.ts.map +1 -0
  94. package/dest/messages/message_context_service.js +36 -0
  95. package/dest/notes/note_service.d.ts +4 -4
  96. package/dest/notes/note_service.d.ts.map +1 -1
  97. package/dest/notes/note_service.js +17 -7
  98. package/dest/notes_filter.d.ts +24 -0
  99. package/dest/notes_filter.d.ts.map +1 -0
  100. package/dest/notes_filter.js +4 -0
  101. package/dest/oracle_version.d.ts +4 -3
  102. package/dest/oracle_version.d.ts.map +1 -1
  103. package/dest/oracle_version.js +20 -10
  104. package/dest/private_kernel/hints/compute_tx_expiration_timestamp.d.ts +4 -0
  105. package/dest/private_kernel/hints/compute_tx_expiration_timestamp.d.ts.map +1 -0
  106. package/dest/private_kernel/hints/{compute_tx_include_by_timestamp.js → compute_tx_expiration_timestamp.js} +12 -12
  107. package/dest/private_kernel/hints/index.d.ts +1 -1
  108. package/dest/private_kernel/hints/index.js +1 -1
  109. package/dest/private_kernel/hints/private_kernel_reset_private_inputs_builder.d.ts +4 -3
  110. package/dest/private_kernel/hints/private_kernel_reset_private_inputs_builder.d.ts.map +1 -1
  111. package/dest/private_kernel/hints/private_kernel_reset_private_inputs_builder.js +129 -68
  112. package/dest/private_kernel/hints/test_utils.d.ts +122 -0
  113. package/dest/private_kernel/hints/test_utils.d.ts.map +1 -0
  114. package/dest/private_kernel/hints/test_utils.js +203 -0
  115. package/dest/private_kernel/private_kernel_execution_prover.d.ts +1 -1
  116. package/dest/private_kernel/private_kernel_execution_prover.d.ts.map +1 -1
  117. package/dest/private_kernel/private_kernel_execution_prover.js +19 -11
  118. package/dest/private_kernel/private_kernel_oracle.d.ts +6 -2
  119. package/dest/private_kernel/private_kernel_oracle.d.ts.map +1 -1
  120. package/dest/private_kernel/private_kernel_oracle.js +7 -3
  121. package/dest/pxe.d.ts +74 -24
  122. package/dest/pxe.d.ts.map +1 -1
  123. package/dest/pxe.js +132 -74
  124. package/dest/storage/capsule_store/capsule_service.d.ts +21 -0
  125. package/dest/storage/capsule_store/capsule_service.d.ts.map +1 -0
  126. package/dest/storage/capsule_store/capsule_service.js +50 -0
  127. package/dest/storage/capsule_store/capsule_store.d.ts +9 -9
  128. package/dest/storage/capsule_store/capsule_store.d.ts.map +1 -1
  129. package/dest/storage/capsule_store/capsule_store.js +33 -28
  130. package/dest/storage/capsule_store/index.d.ts +2 -1
  131. package/dest/storage/capsule_store/index.d.ts.map +1 -1
  132. package/dest/storage/capsule_store/index.js +1 -0
  133. package/dest/storage/contract_store/contract_store.d.ts +42 -15
  134. package/dest/storage/contract_store/contract_store.d.ts.map +1 -1
  135. package/dest/storage/contract_store/contract_store.js +145 -69
  136. package/dest/storage/metadata.d.ts +1 -1
  137. package/dest/storage/metadata.js +1 -1
  138. package/dest/storage/note_store/note_store.d.ts +3 -3
  139. package/dest/storage/note_store/note_store.d.ts.map +1 -1
  140. package/dest/storage/note_store/note_store.js +6 -4
  141. package/dest/storage/private_event_store/stored_private_event.js +1 -1
  142. package/dest/storage/tagging_store/recipient_tagging_store.d.ts +6 -6
  143. package/dest/storage/tagging_store/recipient_tagging_store.d.ts.map +1 -1
  144. package/dest/storage/tagging_store/sender_tagging_store.d.ts +29 -28
  145. package/dest/storage/tagging_store/sender_tagging_store.d.ts.map +1 -1
  146. package/dest/storage/tagging_store/sender_tagging_store.js +141 -115
  147. package/dest/tagging/get_all_logs_by_tags.d.ts +1 -1
  148. package/dest/tagging/get_all_logs_by_tags.d.ts.map +1 -1
  149. package/dest/tagging/get_all_logs_by_tags.js +17 -3
  150. package/dest/tagging/index.d.ts +3 -3
  151. package/dest/tagging/index.d.ts.map +1 -1
  152. package/dest/tagging/index.js +1 -1
  153. package/dest/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.d.ts +4 -5
  154. package/dest/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.d.ts.map +1 -1
  155. package/dest/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.js +7 -21
  156. package/dest/tagging/recipient_sync/utils/find_highest_indexes.js +2 -2
  157. package/dest/tagging/recipient_sync/utils/load_logs_for_range.d.ts +6 -7
  158. package/dest/tagging/recipient_sync/utils/load_logs_for_range.d.ts.map +1 -1
  159. package/dest/tagging/recipient_sync/utils/load_logs_for_range.js +12 -11
  160. package/dest/tagging/sender_sync/sync_sender_tagging_indexes.d.ts +4 -8
  161. package/dest/tagging/sender_sync/sync_sender_tagging_indexes.d.ts.map +1 -1
  162. package/dest/tagging/sender_sync/sync_sender_tagging_indexes.js +13 -7
  163. package/dest/tagging/sender_sync/utils/get_status_change_of_pending.d.ts +4 -3
  164. package/dest/tagging/sender_sync/utils/get_status_change_of_pending.d.ts.map +1 -1
  165. package/dest/tagging/sender_sync/utils/get_status_change_of_pending.js +20 -10
  166. package/dest/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.d.ts +5 -7
  167. package/dest/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.d.ts.map +1 -1
  168. package/dest/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.js +36 -24
  169. package/package.json +25 -16
  170. package/src/bin/check_oracle_version.ts +4 -4
  171. package/src/block_synchronizer/block_synchronizer.ts +12 -0
  172. package/src/config/index.ts +3 -9
  173. package/src/config/package_info.ts +1 -1
  174. package/src/contract_function_simulator/contract_function_simulator.ts +365 -133
  175. package/src/contract_function_simulator/ephemeral_array_service.ts +110 -0
  176. package/src/contract_function_simulator/execution_tagging_index_cache.ts +19 -14
  177. package/src/contract_function_simulator/index.ts +1 -0
  178. package/src/contract_function_simulator/noir-structs/event_validation_request.ts +9 -9
  179. package/src/contract_function_simulator/noir-structs/log_retrieval_request.ts +1 -1
  180. package/src/contract_function_simulator/noir-structs/log_retrieval_response.ts +2 -5
  181. package/src/contract_function_simulator/noir-structs/note_validation_request.ts +4 -10
  182. package/src/contract_function_simulator/oracle/interfaces.ts +82 -54
  183. package/src/contract_function_simulator/oracle/legacy_oracle_mappings.ts +104 -0
  184. package/src/contract_function_simulator/oracle/oracle.ts +373 -142
  185. package/src/contract_function_simulator/oracle/private_execution.ts +4 -4
  186. package/src/contract_function_simulator/oracle/private_execution_oracle.ts +134 -180
  187. package/src/contract_function_simulator/oracle/utility_execution_oracle.ts +530 -153
  188. package/src/contract_function_simulator/pick_notes.ts +9 -2
  189. package/src/contract_function_simulator/proxied_contract_data_source.ts +8 -1
  190. package/src/contract_logging.ts +52 -0
  191. package/src/contract_sync/contract_sync_service.ts +176 -0
  192. package/src/contract_sync/{index.ts → helpers.ts} +14 -35
  193. package/src/debug/pxe_debug_utils.ts +48 -18
  194. package/src/entrypoints/client/bundle/index.ts +2 -0
  195. package/src/entrypoints/client/bundle/utils.ts +11 -4
  196. package/src/entrypoints/client/lazy/index.ts +2 -0
  197. package/src/entrypoints/client/lazy/utils.ts +11 -4
  198. package/src/entrypoints/pxe_creation_options.ts +7 -0
  199. package/src/entrypoints/server/index.ts +3 -2
  200. package/src/entrypoints/server/utils.ts +9 -10
  201. package/src/events/event_service.ts +17 -4
  202. package/src/logs/log_service.ts +63 -91
  203. package/src/messages/message_context_service.ts +44 -0
  204. package/src/notes/note_service.ts +19 -8
  205. package/src/notes_filter.ts +24 -0
  206. package/src/oracle_version.ts +20 -10
  207. package/src/private_kernel/hints/{compute_tx_include_by_timestamp.ts → compute_tx_expiration_timestamp.ts} +13 -13
  208. package/src/private_kernel/hints/index.ts +1 -1
  209. package/src/private_kernel/hints/private_kernel_reset_private_inputs_builder.ts +164 -117
  210. package/src/private_kernel/hints/test_utils.ts +325 -0
  211. package/src/private_kernel/private_kernel_execution_prover.ts +19 -12
  212. package/src/private_kernel/private_kernel_oracle.ts +7 -7
  213. package/src/pxe.ts +236 -127
  214. package/src/storage/capsule_store/capsule_service.ts +90 -0
  215. package/src/storage/capsule_store/capsule_store.ts +34 -26
  216. package/src/storage/capsule_store/index.ts +1 -0
  217. package/src/storage/contract_store/contract_store.ts +174 -75
  218. package/src/storage/metadata.ts +1 -1
  219. package/src/storage/note_store/note_store.ts +9 -5
  220. package/src/storage/private_event_store/stored_private_event.ts +1 -1
  221. package/src/storage/tagging_store/recipient_tagging_store.ts +9 -5
  222. package/src/storage/tagging_store/sender_tagging_store.ts +185 -138
  223. package/src/tagging/get_all_logs_by_tags.ts +28 -4
  224. package/src/tagging/index.ts +2 -2
  225. package/src/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.ts +9 -24
  226. package/src/tagging/recipient_sync/utils/find_highest_indexes.ts +2 -2
  227. package/src/tagging/recipient_sync/utils/load_logs_for_range.ts +10 -15
  228. package/src/tagging/sender_sync/sync_sender_tagging_indexes.ts +23 -10
  229. package/src/tagging/sender_sync/utils/get_status_change_of_pending.ts +26 -11
  230. package/src/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.ts +27 -26
  231. package/dest/contract_sync/index.d.ts +0 -24
  232. package/dest/contract_sync/index.d.ts.map +0 -1
  233. package/dest/private_kernel/hints/compute_tx_include_by_timestamp.d.ts +0 -4
  234. 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';
@@ -26,46 +26,42 @@ import { UtilityExecutionOracle } from './oracle/utility_execution_oracle.js';
26
26
  /**
27
27
  * The contract function simulator.
28
28
  */ export class ContractFunctionSimulator {
29
+ log;
29
30
  contractStore;
30
31
  noteStore;
31
32
  keyStore;
32
33
  addressStore;
33
34
  aztecNode;
35
+ l2TipsStore;
34
36
  senderTaggingStore;
35
37
  recipientTaggingStore;
36
38
  senderAddressBookStore;
37
39
  capsuleStore;
38
40
  privateEventStore;
39
41
  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;
42
+ contractSyncService;
43
+ messageContextService;
44
+ constructor(args){
45
+ this.contractStore = args.contractStore;
46
+ this.noteStore = args.noteStore;
47
+ this.keyStore = args.keyStore;
48
+ this.addressStore = args.addressStore;
49
+ this.aztecNode = args.aztecNode;
50
+ this.l2TipsStore = args.l2TipsStore;
51
+ this.senderTaggingStore = args.senderTaggingStore;
52
+ this.recipientTaggingStore = args.recipientTaggingStore;
53
+ this.senderAddressBookStore = args.senderAddressBookStore;
54
+ this.capsuleStore = args.capsuleStore;
55
+ this.privateEventStore = args.privateEventStore;
56
+ this.simulator = args.simulator;
57
+ this.contractSyncService = args.contractSyncService;
58
+ this.messageContextService = args.messageContextService;
53
59
  this.log = createLogger('simulator');
54
60
  }
55
61
  /**
56
62
  * Runs a private function.
57
63
  * @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) {
64
+ */ async run(request, { contractAddress, selector, msgSender = AztecAddress.fromField(Fr.MAX_FIELD_VALUE), anchorBlockHeader, senderForTags, scopes, jobId }) {
69
65
  const simulatorSetupTimer = new Timer();
70
66
  const entryPointArtifact = await this.contractStore.getFunctionArtifactWithDebugMetadata(contractAddress, selector);
71
67
  if (entryPointArtifact.functionType !== FunctionType.PRIVATE) {
@@ -80,9 +76,39 @@ import { UtilityExecutionOracle } from './oracle/utility_execution_oracle.js';
80
76
  const protocolNullifier = await computeProtocolNullifier(await request.toTxRequest().hash());
81
77
  const noteCache = new ExecutionNoteCache(protocolNullifier);
82
78
  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);
79
+ const privateExecutionOracle = new PrivateExecutionOracle({
80
+ argsHash: request.firstCallArgsHash,
81
+ txContext: request.txContext,
82
+ callContext,
83
+ anchorBlockHeader,
84
+ utilityExecutor: async (call, execScopes)=>{
85
+ await this.runUtility(call, [], anchorBlockHeader, execScopes, jobId);
86
+ },
87
+ authWitnesses: request.authWitnesses,
88
+ capsules: request.capsules,
89
+ executionCache: HashedValuesCache.create(request.argsOfCalls),
90
+ noteCache,
91
+ taggingIndexCache,
92
+ contractStore: this.contractStore,
93
+ noteStore: this.noteStore,
94
+ keyStore: this.keyStore,
95
+ addressStore: this.addressStore,
96
+ aztecNode: this.aztecNode,
97
+ senderTaggingStore: this.senderTaggingStore,
98
+ recipientTaggingStore: this.recipientTaggingStore,
99
+ senderAddressBookStore: this.senderAddressBookStore,
100
+ capsuleService: new CapsuleService(this.capsuleStore, scopes),
101
+ privateEventStore: this.privateEventStore,
102
+ messageContextService: this.messageContextService,
103
+ contractSyncService: this.contractSyncService,
104
+ jobId,
105
+ totalPublicCalldataCount: 0,
106
+ sideEffectCounter: startSideEffectCounter,
107
+ scopes,
108
+ senderForTags,
109
+ simulator: this.simulator,
110
+ l2TipsStore: this.l2TipsStore
111
+ });
86
112
  const setupTime = simulatorSetupTimer.ms();
87
113
  try {
88
114
  // Note: any nested private function calls are made recursively within this
@@ -99,7 +125,7 @@ import { UtilityExecutionOracle } from './oracle/utility_execution_oracle.js';
99
125
  r.publicInputs.publicTeardownCallRequest
100
126
  ]));
101
127
  const publicFunctionsCalldata = await Promise.all(publicCallRequests.map(async (r)=>{
102
- const calldata = await privateExecutionOracle.privateLoadFromExecutionCache(r.calldataHash);
128
+ const calldata = await privateExecutionOracle.getHashPreimage(r.calldataHash);
103
129
  return new HashedValues(calldata, r.calldataHash);
104
130
  }));
105
131
  const teardownTime = simulatorTeardownTimer.ms();
@@ -129,7 +155,26 @@ import { UtilityExecutionOracle } from './oracle/utility_execution_oracle.js';
129
155
  if (entryPointArtifact.functionType !== FunctionType.UTILITY) {
130
156
  throw new Error(`Cannot run ${entryPointArtifact.functionType} function as utility`);
131
157
  }
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);
158
+ const oracle = new UtilityExecutionOracle({
159
+ contractAddress: call.to,
160
+ authWitnesses: authwits,
161
+ capsules: [],
162
+ anchorBlockHeader,
163
+ contractStore: this.contractStore,
164
+ noteStore: this.noteStore,
165
+ keyStore: this.keyStore,
166
+ addressStore: this.addressStore,
167
+ aztecNode: this.aztecNode,
168
+ recipientTaggingStore: this.recipientTaggingStore,
169
+ senderAddressBookStore: this.senderAddressBookStore,
170
+ capsuleService: new CapsuleService(this.capsuleStore, scopes),
171
+ privateEventStore: this.privateEventStore,
172
+ messageContextService: this.messageContextService,
173
+ contractSyncService: this.contractSyncService,
174
+ l2TipsStore: this.l2TipsStore,
175
+ jobId,
176
+ scopes
177
+ });
133
178
  try {
134
179
  this.log.verbose(`Executing utility function ${entryPointArtifact.name}`, {
135
180
  contract: call.to,
@@ -145,8 +190,11 @@ import { UtilityExecutionOracle } from './oracle/utility_execution_oracle.js';
145
190
  cause: err
146
191
  });
147
192
  });
148
- this.log.verbose(`Utility simulation for ${call.to}.${call.selector} completed`);
149
- 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
+ };
150
198
  } catch (err) {
151
199
  throw createSimulationError(err instanceof Error ? err : new Error('Unknown error during private execution'));
152
200
  }
@@ -185,38 +233,54 @@ class OrderedSideEffect {
185
233
  * (allowing state overrides) and is much faster, while still generating a valid
186
234
  * output that can be sent to the node for public simulation
187
235
  * @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.
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.
189
238
  * @param minRevertibleSideEffectCounterOverride - Optional override for the min revertible side effect counter.
190
239
  * Used by TXE to simulate account contract behavior (setting the counter before app execution).
191
240
  * @returns The simulated proving result.
192
- */ export async function generateSimulatedProvingResult(privateExecutionResult, contractStore, minRevertibleSideEffectCounterOverride) {
193
- const siloedNoteHashes = [];
194
- const nullifiers = [];
241
+ */ export async function generateSimulatedProvingResult(privateExecutionResult, debugFunctionNameGetter, node, minRevertibleSideEffectCounterOverride) {
195
242
  const taggedPrivateLogs = [];
196
243
  const l2ToL1Messages = [];
197
244
  const contractClassLogsHashes = [];
198
245
  const publicCallRequests = [];
199
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 = [];
200
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();
201
258
  const executions = [
202
259
  privateExecutionResult.entrypoint
203
260
  ];
204
261
  while(executions.length !== 0){
205
262
  const execution = executions.shift();
206
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
+ }
207
269
  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);
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());
220
284
  l2ToL1Messages.push(...execution.publicInputs.l2ToL1Msgs.getActiveItems().map((message)=>new OrderedSideEffect(message.message.scope(contractAddress), message.counter)));
221
285
  contractClassLogsHashes.push(...execution.publicInputs.contractClassLogsHashes.getActiveItems().map((contractClassLogHash)=>new OrderedSideEffect(contractClassLogHash.logHash.scope(contractAddress), contractClassLogHash.counter)));
222
286
  publicCallRequests.push(...execution.publicInputs.publicCallRequests.getActiveItems().map((callRequest)=>new OrderedSideEffect(callRequest.inner, callRequest.counter)));
@@ -225,7 +289,7 @@ class OrderedSideEffect {
225
289
  }
226
290
  publicTeardownCallRequest = execution.publicInputs.publicTeardownCallRequest.isEmpty() ? publicTeardownCallRequest : execution.publicInputs.publicTeardownCallRequest;
227
291
  executionSteps.push({
228
- functionName: await contractStore.getDebugFunctionName(execution.publicInputs.callContext.contractAddress, execution.publicInputs.callContext.functionSelector),
292
+ functionName: await debugFunctionNameGetter(execution.publicInputs.callContext.contractAddress, execution.publicInputs.callContext.functionSelector),
229
293
  timings: execution.profileResult?.timings ?? {
230
294
  witgen: 0,
231
295
  oracles: {}
@@ -235,6 +299,14 @@ class OrderedSideEffect {
235
299
  witness: execution.partialWitness
236
300
  });
237
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)));
238
310
  const constantData = new TxConstantData(privateExecutionResult.entrypoint.publicInputs.anchorBlockHeader, privateExecutionResult.entrypoint.publicInputs.txContext, getVKTreeRoot(), protocolContractsHash);
239
311
  const hasPublicCalls = privateExecutionResult.publicFunctionCalldata.length !== 0;
240
312
  let inputsForRollup;
@@ -243,8 +315,7 @@ class OrderedSideEffect {
243
315
  const sortByCounter = (a, b)=>a.counter - b.counter;
244
316
  const getEffect = (orderedSideEffect)=>orderedSideEffect.sideEffect;
245
317
  const isPrivateOnlyTx = privateExecutionResult.publicFunctionCalldata.length === 0;
246
- const minRevertibleSideEffectCounter = minRevertibleSideEffectCounterOverride ?? getFinalMinRevertibleSideEffectCounter(privateExecutionResult);
247
- const [nonRevertibleNullifiers, revertibleNullifiers] = splitOrderedSideEffects(nullifiers.sort(sortByCounter), minRevertibleSideEffectCounter);
318
+ const [nonRevertibleNullifiers, revertibleNullifiers] = splitOrderedSideEffects(siloedNullifiers, minRevertibleSideEffectCounter);
248
319
  const nonceGenerator = privateExecutionResult.firstNullifier;
249
320
  if (nonRevertibleNullifiers.length === 0) {
250
321
  nonRevertibleNullifiers.push(nonceGenerator);
@@ -254,43 +325,102 @@ class OrderedSideEffect {
254
325
  if (isPrivateOnlyTx) {
255
326
  // We must make the note hashes unique by using the
256
327
  // nonce generator and their index in the tx.
257
- const uniqueNoteHashes = await Promise.all(siloedNoteHashes.sort(sortByCounter).map(async (orderedSideEffect, i)=>{
328
+ const uniqueNoteHashes = await Promise.all(siloedNoteHashes.map(async (orderedSideEffect, i)=>{
258
329
  const siloedNoteHash = orderedSideEffect.sideEffect;
259
330
  const nonce = await computeNoteHashNonce(nonceGenerator, i);
260
331
  const uniqueNoteHash = await computeUniqueNoteHash(nonce, siloedNoteHash);
261
332
  return uniqueNoteHash;
262
333
  }));
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);
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);
265
336
  inputsForRollup = new PartialPrivateTailPublicInputsForRollup(accumulatedDataForRollup);
266
337
  } else {
267
- const [nonRevertibleNoteHashes, revertibleNoteHashes] = splitOrderedSideEffects(siloedNoteHashes.sort(sortByCounter), minRevertibleSideEffectCounter);
338
+ const [nonRevertibleNoteHashes, revertibleNoteHashes] = splitOrderedSideEffects(siloedNoteHashes, minRevertibleSideEffectCounter);
268
339
  const nonRevertibleUniqueNoteHashes = await Promise.all(nonRevertibleNoteHashes.map(async (noteHash, i)=>{
269
340
  const nonce = await computeNoteHashNonce(nonceGenerator, i);
270
341
  return await computeUniqueNoteHash(nonce, noteHash);
271
342
  }));
272
343
  const [nonRevertibleL2ToL1Messages, revertibleL2ToL1Messages] = splitOrderedSideEffects(l2ToL1Messages.sort(sortByCounter), minRevertibleSideEffectCounter);
273
- const [nonRevertibleTaggedPrivateLogs, revertibleTaggedPrivateLogs] = splitOrderedSideEffects(taggedPrivateLogs, minRevertibleSideEffectCounter);
344
+ const [nonRevertibleTaggedPrivateLogs, revertibleTaggedPrivateLogs] = splitOrderedSideEffects(filteredPrivateLogs, minRevertibleSideEffectCounter);
274
345
  const [nonRevertibleContractClassLogHashes, revertibleContractClassLogHashes] = splitOrderedSideEffects(contractClassLogsHashes.sort(sortByCounter), minRevertibleSideEffectCounter);
275
346
  const [nonRevertiblePublicCallRequests, revertiblePublicCallRequests] = splitOrderedSideEffects(publicCallRequests.sort(sortByCounter), minRevertibleSideEffectCounter);
276
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));
277
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));
278
- gasUsed = meterGasUsed(revertibleData).add(meterGasUsed(nonRevertibleData));
349
+ gasUsed = meterGasUsed(revertibleData, isPrivateOnlyTx).add(meterGasUsed(nonRevertibleData, isPrivateOnlyTx));
279
350
  if (publicTeardownCallRequest) {
280
- gasUsed.add(privateExecutionResult.entrypoint.publicInputs.txContext.gasSettings.teardownGasLimits);
351
+ gasUsed = gasUsed.add(privateExecutionResult.entrypoint.publicInputs.txContext.gasSettings.teardownGasLimits);
281
352
  }
282
353
  inputsForPublic = new PartialPrivateTailPublicInputsForPublic(nonRevertibleData, revertibleData, publicTeardownCallRequest ?? PublicCallRequest.empty());
283
354
  }
284
355
  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);
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);
288
359
  return {
289
360
  publicInputs,
290
361
  chonkProof: ChonkProof.empty(),
291
362
  executionSteps
292
363
  };
293
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
+ }
294
424
  function splitOrderedSideEffects(effects, minRevertibleSideEffectCounter) {
295
425
  const revertibleSideEffects = [];
296
426
  const nonRevertibleSideEffects = [];
@@ -306,27 +436,30 @@ function splitOrderedSideEffects(effects, minRevertibleSideEffectCounter) {
306
436
  revertibleSideEffects
307
437
  ];
308
438
  }
309
- function meterGasUsed(data) {
439
+ function meterGasUsed(data, isPrivateOnlyTx) {
310
440
  let meteredDAFields = 0;
311
441
  let meteredL2Gas = 0;
312
442
  const numNoteHashes = arrayNonEmptyLength(data.noteHashes, (hash)=>hash.isEmpty());
313
443
  meteredDAFields += numNoteHashes;
314
- 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;
315
446
  const numNullifiers = arrayNonEmptyLength(data.nullifiers, (nullifier)=>nullifier.isEmpty());
316
447
  meteredDAFields += numNullifiers;
317
- meteredL2Gas += numNullifiers * AVM_EMITNULLIFIER_BASE_L2_GAS;
448
+ const nullifierBaseGas = isPrivateOnlyTx ? L2_GAS_PER_NULLIFIER : AVM_EMITNULLIFIER_BASE_L2_GAS;
449
+ meteredL2Gas += numNullifiers * nullifierBaseGas;
318
450
  const numL2toL1Messages = arrayNonEmptyLength(data.l2ToL1Msgs, (msg)=>msg.isEmpty());
319
451
  meteredDAFields += numL2toL1Messages;
320
- 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;
321
454
  const numPrivatelogs = arrayNonEmptyLength(data.privateLogs, (log)=>log.isEmpty());
322
455
  // Every private log emits its length as an additional field
323
456
  meteredDAFields += data.privateLogs.reduce((acc, log)=>!log.isEmpty() ? acc + log.emittedLength + 1 : acc, 0);
324
457
  meteredL2Gas += numPrivatelogs * L2_GAS_PER_PRIVATE_LOG;
325
458
  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);
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);
328
461
  meteredL2Gas += numContractClassLogs * L2_GAS_PER_CONTRACT_CLASS_LOG;
329
- const meteredDAGas = meteredDAFields * DA_BYTES_PER_FIELD * DA_GAS_PER_BYTE;
462
+ const meteredDAGas = meteredDAFields * DA_GAS_PER_FIELD;
330
463
  if (data.publicCallRequests) {
331
464
  const dataForPublic = data;
332
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"}