@aztec/pxe 0.0.1-commit.e6bd8901 → 0.0.1-commit.ec7ac5448

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 (257) hide show
  1. package/dest/bin/check_oracle_version.js +4 -4
  2. package/dest/block_synchronizer/block_synchronizer.d.ts +5 -3
  3. package/dest/block_synchronizer/block_synchronizer.d.ts.map +1 -1
  4. package/dest/block_synchronizer/block_synchronizer.js +17 -5
  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 +1 -1
  8. package/dest/config/package_info.js +1 -1
  9. package/dest/contract_function_simulator/contract_function_simulator.d.ts +60 -31
  10. package/dest/contract_function_simulator/contract_function_simulator.d.ts.map +1 -1
  11. package/dest/contract_function_simulator/contract_function_simulator.js +201 -74
  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 +62 -46
  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 +310 -113
  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 -79
  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 -89
  44. package/dest/contract_function_simulator/oracle/utility_execution_oracle.d.ts +124 -67
  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 +326 -140
  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 +104 -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} +20 -16
  62. package/dest/debug/pxe_debug_utils.d.ts +24 -10
  63. package/dest/debug/pxe_debug_utils.d.ts.map +1 -1
  64. package/dest/debug/pxe_debug_utils.js +28 -18
  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 +23 -9
  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 +3 -3
  75. package/dest/entrypoints/client/lazy/utils.d.ts.map +1 -1
  76. package/dest/entrypoints/client/lazy/utils.js +24 -10
  77. package/dest/entrypoints/pxe_creation_options.d.ts +5 -2
  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 +30 -11
  86. package/dest/events/event_service.d.ts +5 -5
  87. package/dest/events/event_service.d.ts.map +1 -1
  88. package/dest/events/event_service.js +20 -9
  89. package/dest/job_coordinator/job_coordinator.d.ts +3 -2
  90. package/dest/job_coordinator/job_coordinator.d.ts.map +1 -1
  91. package/dest/job_coordinator/job_coordinator.js +3 -2
  92. package/dest/logs/log_service.d.ts +8 -9
  93. package/dest/logs/log_service.d.ts.map +1 -1
  94. package/dest/logs/log_service.js +38 -62
  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 +7 -8
  99. package/dest/notes/note_service.d.ts.map +1 -1
  100. package/dest/notes/note_service.js +23 -15
  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 +3 -2
  119. package/dest/private_kernel/private_kernel_execution_prover.d.ts.map +1 -1
  120. package/dest/private_kernel/private_kernel_execution_prover.js +21 -13
  121. package/dest/private_kernel/private_kernel_oracle.d.ts +8 -4
  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 +73 -24
  125. package/dest/pxe.d.ts.map +1 -1
  126. package/dest/pxe.js +131 -78
  127. package/dest/storage/address_store/address_store.d.ts +1 -1
  128. package/dest/storage/address_store/address_store.d.ts.map +1 -1
  129. package/dest/storage/address_store/address_store.js +12 -11
  130. package/dest/storage/anchor_block_store/anchor_block_store.d.ts +9 -1
  131. package/dest/storage/anchor_block_store/anchor_block_store.d.ts.map +1 -1
  132. package/dest/storage/anchor_block_store/anchor_block_store.js +8 -1
  133. package/dest/storage/capsule_store/capsule_service.d.ts +21 -0
  134. package/dest/storage/capsule_store/capsule_service.d.ts.map +1 -0
  135. package/dest/storage/capsule_store/capsule_service.js +50 -0
  136. package/dest/storage/capsule_store/capsule_store.d.ts +9 -9
  137. package/dest/storage/capsule_store/capsule_store.d.ts.map +1 -1
  138. package/dest/storage/capsule_store/capsule_store.js +39 -36
  139. package/dest/storage/capsule_store/index.d.ts +2 -1
  140. package/dest/storage/capsule_store/index.d.ts.map +1 -1
  141. package/dest/storage/capsule_store/index.js +1 -0
  142. package/dest/storage/contract_store/contract_store.d.ts +42 -15
  143. package/dest/storage/contract_store/contract_store.d.ts.map +1 -1
  144. package/dest/storage/contract_store/contract_store.js +157 -72
  145. package/dest/storage/metadata.d.ts +1 -1
  146. package/dest/storage/metadata.js +1 -1
  147. package/dest/storage/note_store/note_store.d.ts +13 -3
  148. package/dest/storage/note_store/note_store.d.ts.map +1 -1
  149. package/dest/storage/note_store/note_store.js +147 -107
  150. package/dest/storage/private_event_store/private_event_store.d.ts +1 -1
  151. package/dest/storage/private_event_store/private_event_store.d.ts.map +1 -1
  152. package/dest/storage/private_event_store/private_event_store.js +84 -61
  153. package/dest/storage/private_event_store/stored_private_event.d.ts +4 -4
  154. package/dest/storage/private_event_store/stored_private_event.d.ts.map +1 -1
  155. package/dest/storage/private_event_store/stored_private_event.js +2 -2
  156. package/dest/storage/tagging_store/recipient_tagging_store.d.ts +6 -6
  157. package/dest/storage/tagging_store/recipient_tagging_store.d.ts.map +1 -1
  158. package/dest/storage/tagging_store/recipient_tagging_store.js +31 -19
  159. package/dest/storage/tagging_store/sender_address_book_store.d.ts +1 -1
  160. package/dest/storage/tagging_store/sender_address_book_store.d.ts.map +1 -1
  161. package/dest/storage/tagging_store/sender_address_book_store.js +20 -14
  162. package/dest/storage/tagging_store/sender_tagging_store.d.ts +29 -28
  163. package/dest/storage/tagging_store/sender_tagging_store.d.ts.map +1 -1
  164. package/dest/storage/tagging_store/sender_tagging_store.js +233 -137
  165. package/dest/tagging/get_all_logs_by_tags.d.ts +4 -4
  166. package/dest/tagging/get_all_logs_by_tags.d.ts.map +1 -1
  167. package/dest/tagging/get_all_logs_by_tags.js +17 -3
  168. package/dest/tagging/index.d.ts +3 -3
  169. package/dest/tagging/index.d.ts.map +1 -1
  170. package/dest/tagging/index.js +1 -1
  171. package/dest/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.d.ts +5 -6
  172. package/dest/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.d.ts.map +1 -1
  173. package/dest/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.js +7 -7
  174. package/dest/tagging/recipient_sync/utils/find_highest_indexes.js +2 -2
  175. package/dest/tagging/recipient_sync/utils/load_logs_for_range.d.ts +7 -8
  176. package/dest/tagging/recipient_sync/utils/load_logs_for_range.d.ts.map +1 -1
  177. package/dest/tagging/recipient_sync/utils/load_logs_for_range.js +12 -11
  178. package/dest/tagging/sender_sync/sync_sender_tagging_indexes.d.ts +5 -9
  179. package/dest/tagging/sender_sync/sync_sender_tagging_indexes.d.ts.map +1 -1
  180. package/dest/tagging/sender_sync/sync_sender_tagging_indexes.js +13 -7
  181. package/dest/tagging/sender_sync/utils/get_status_change_of_pending.d.ts +4 -3
  182. package/dest/tagging/sender_sync/utils/get_status_change_of_pending.d.ts.map +1 -1
  183. package/dest/tagging/sender_sync/utils/get_status_change_of_pending.js +20 -10
  184. package/dest/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.d.ts +6 -8
  185. package/dest/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.d.ts.map +1 -1
  186. package/dest/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.js +36 -24
  187. package/package.json +25 -16
  188. package/src/bin/check_oracle_version.ts +4 -4
  189. package/src/block_synchronizer/block_synchronizer.ts +29 -19
  190. package/src/config/index.ts +1 -1
  191. package/src/config/package_info.ts +1 -1
  192. package/src/contract_function_simulator/contract_function_simulator.ts +360 -133
  193. package/src/contract_function_simulator/ephemeral_array_service.ts +110 -0
  194. package/src/contract_function_simulator/execution_tagging_index_cache.ts +19 -14
  195. package/src/contract_function_simulator/index.ts +1 -0
  196. package/src/contract_function_simulator/noir-structs/event_validation_request.ts +9 -9
  197. package/src/contract_function_simulator/noir-structs/log_retrieval_request.ts +1 -1
  198. package/src/contract_function_simulator/noir-structs/log_retrieval_response.ts +2 -5
  199. package/src/contract_function_simulator/noir-structs/note_validation_request.ts +4 -10
  200. package/src/contract_function_simulator/oracle/interfaces.ts +90 -62
  201. package/src/contract_function_simulator/oracle/legacy_oracle_mappings.ts +104 -0
  202. package/src/contract_function_simulator/oracle/oracle.ts +391 -150
  203. package/src/contract_function_simulator/oracle/private_execution.ts +4 -4
  204. package/src/contract_function_simulator/oracle/private_execution_oracle.ts +136 -187
  205. package/src/contract_function_simulator/oracle/utility_execution_oracle.ts +544 -174
  206. package/src/contract_function_simulator/pick_notes.ts +9 -2
  207. package/src/contract_function_simulator/proxied_contract_data_source.ts +8 -1
  208. package/src/contract_logging.ts +52 -0
  209. package/src/contract_sync/contract_sync_service.ts +170 -0
  210. package/src/contract_sync/{index.ts → helpers.ts} +23 -25
  211. package/src/debug/pxe_debug_utils.ts +63 -19
  212. package/src/entrypoints/client/bundle/index.ts +2 -0
  213. package/src/entrypoints/client/bundle/utils.ts +18 -18
  214. package/src/entrypoints/client/lazy/index.ts +2 -0
  215. package/src/entrypoints/client/lazy/utils.ts +19 -18
  216. package/src/entrypoints/pxe_creation_options.ts +9 -1
  217. package/src/entrypoints/server/index.ts +3 -2
  218. package/src/entrypoints/server/utils.ts +24 -29
  219. package/src/events/event_service.ts +21 -10
  220. package/src/job_coordinator/job_coordinator.ts +4 -3
  221. package/src/logs/log_service.ts +72 -106
  222. package/src/messages/message_context_service.ts +44 -0
  223. package/src/notes/note_service.ts +24 -16
  224. package/src/notes_filter.ts +24 -0
  225. package/src/oracle_version.ts +20 -10
  226. package/src/private_kernel/hints/{compute_tx_include_by_timestamp.ts → compute_tx_expiration_timestamp.ts} +13 -13
  227. package/src/private_kernel/hints/index.ts +1 -1
  228. package/src/private_kernel/hints/private_kernel_reset_private_inputs_builder.ts +164 -117
  229. package/src/private_kernel/hints/test_utils.ts +325 -0
  230. package/src/private_kernel/private_kernel_execution_prover.ts +25 -15
  231. package/src/private_kernel/private_kernel_oracle.ts +9 -9
  232. package/src/pxe.ts +243 -131
  233. package/src/storage/address_store/address_store.ts +15 -15
  234. package/src/storage/anchor_block_store/anchor_block_store.ts +8 -0
  235. package/src/storage/capsule_store/capsule_service.ts +90 -0
  236. package/src/storage/capsule_store/capsule_store.ts +42 -34
  237. package/src/storage/capsule_store/index.ts +1 -0
  238. package/src/storage/contract_store/contract_store.ts +186 -76
  239. package/src/storage/metadata.ts +1 -1
  240. package/src/storage/note_store/note_store.ts +166 -132
  241. package/src/storage/private_event_store/private_event_store.ts +102 -81
  242. package/src/storage/private_event_store/stored_private_event.ts +3 -3
  243. package/src/storage/tagging_store/recipient_tagging_store.ts +38 -24
  244. package/src/storage/tagging_store/sender_address_book_store.ts +20 -14
  245. package/src/storage/tagging_store/sender_tagging_store.ts +287 -156
  246. package/src/tagging/get_all_logs_by_tags.ts +31 -7
  247. package/src/tagging/index.ts +2 -2
  248. package/src/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.ts +9 -12
  249. package/src/tagging/recipient_sync/utils/find_highest_indexes.ts +2 -2
  250. package/src/tagging/recipient_sync/utils/load_logs_for_range.ts +12 -17
  251. package/src/tagging/sender_sync/sync_sender_tagging_indexes.ts +25 -12
  252. package/src/tagging/sender_sync/utils/get_status_change_of_pending.ts +26 -11
  253. package/src/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.ts +30 -29
  254. package/dest/contract_sync/index.d.ts +0 -23
  255. package/dest/contract_sync/index.d.ts.map +0 -1
  256. package/dest/private_kernel/hints/compute_tx_include_by_timestamp.d.ts +0 -4
  257. package/dest/private_kernel/hints/compute_tx_include_by_timestamp.d.ts.map +0 -1
@@ -4,14 +4,12 @@ import { createLogger } from '@aztec/foundation/log';
4
4
  import { Timer } from '@aztec/foundation/timer';
5
5
  import { toACVMWitness } from '@aztec/simulator/client';
6
6
  import { FunctionSelector, countArgumentsSize } from '@aztec/stdlib/abi';
7
- import { L2BlockHash } from '@aztec/stdlib/block';
8
7
  import { siloNullifier } from '@aztec/stdlib/hash';
9
8
  import { PrivateContextInputs } from '@aztec/stdlib/kernel';
10
- import { DirectionalAppTaggingSecret } from '@aztec/stdlib/logs';
9
+ import { ExtendedDirectionalAppTaggingSecret } from '@aztec/stdlib/logs';
11
10
  import { Tag } from '@aztec/stdlib/logs';
12
11
  import { Note } from '@aztec/stdlib/note';
13
12
  import { CallContext, CountedContractClassLog, NoteAndSlot } from '@aztec/stdlib/tx';
14
- import { ensureContractSynced } from '../../contract_sync/index.js';
15
13
  import { NoteService } from '../../notes/note_service.js';
16
14
  import { syncSenderTaggingIndexes } from '../../tagging/index.js';
17
15
  import { pickNotes } from '../pick_notes.js';
@@ -20,10 +18,21 @@ import { UtilityExecutionOracle } from './utility_execution_oracle.js';
20
18
  /**
21
19
  * The execution oracle for the private part of a transaction.
22
20
  */ export class PrivateExecutionOracle extends UtilityExecutionOracle {
21
+ isPrivate = true;
22
+ /**
23
+ * New notes created during this execution.
24
+ * It's possible that a note in this list has been nullified (in the same or other executions) and doesn't exist in
25
+ * the ExecutionNoteCache and the final proof data. But we still include those notes in the execution result because
26
+ * their commitments are still in the public inputs of this execution.
27
+ * This information is only for references (currently used for tests), and is not used for any sort of constrains.
28
+ * Users can also use this to get a clearer idea of what's happened during a simulation.
29
+ */ newNotes = [];
30
+ noteHashNullifierCounterMap = new Map();
31
+ contractClassLogs = [];
32
+ nestedExecutionResults = [];
23
33
  argsHash;
24
34
  txContext;
25
35
  callContext;
26
- anchorBlockHeader;
27
36
  utilityExecutor;
28
37
  executionCache;
29
38
  noteCache;
@@ -33,21 +42,24 @@ import { UtilityExecutionOracle } from './utility_execution_oracle.js';
33
42
  sideEffectCounter;
34
43
  senderForTags;
35
44
  simulator;
36
- isPrivate;
37
- /**
38
- * New notes created during this execution.
39
- * It's possible that a note in this list has been nullified (in the same or other executions) and doesn't exist in
40
- * the ExecutionNoteCache and the final proof data. But we still include those notes in the execution result because
41
- * their commitments are still in the public inputs of this execution.
42
- * This information is only for references (currently used for tests), and is not used for any sort of constrains.
43
- * Users can also use this to get a clearer idea of what's happened during a simulation.
44
- */ newNotes;
45
- noteHashNullifierCounterMap;
46
- contractClassLogs;
47
- offchainEffects;
48
- nestedExecutionResults;
49
- constructor(argsHash, txContext, callContext, /** Header of a block whose state is used during private execution (not the block the transaction is included in). */ anchorBlockHeader, /** Needed to trigger contract synchronization before nested calls */ utilityExecutor, /** List of transient auth witnesses to be used during this simulation */ authWitnesses, capsules, executionCache, noteCache, taggingIndexCache, contractStore, noteStore, keyStore, addressStore, aztecNode, anchorBlockStore, senderTaggingStore, recipientTaggingStore, senderAddressBookStore, capsuleStore, privateEventStore, jobId, totalPublicCalldataCount = 0, sideEffectCounter = 0, log = createLogger('simulator:client_execution_context'), scopes, senderForTags, simulator){
50
- super(callContext.contractAddress, authWitnesses, capsules, anchorBlockHeader, contractStore, noteStore, keyStore, addressStore, aztecNode, anchorBlockStore, recipientTaggingStore, senderAddressBookStore, capsuleStore, privateEventStore, jobId, log, scopes), this.argsHash = argsHash, this.txContext = txContext, this.callContext = callContext, this.anchorBlockHeader = anchorBlockHeader, this.utilityExecutor = utilityExecutor, this.executionCache = executionCache, this.noteCache = noteCache, this.taggingIndexCache = taggingIndexCache, this.senderTaggingStore = senderTaggingStore, this.totalPublicCalldataCount = totalPublicCalldataCount, this.sideEffectCounter = sideEffectCounter, this.senderForTags = senderForTags, this.simulator = simulator, this.isPrivate = true, this.newNotes = [], this.noteHashNullifierCounterMap = new Map(), this.contractClassLogs = [], this.offchainEffects = [], this.nestedExecutionResults = [];
45
+ constructor(args){
46
+ super({
47
+ ...args,
48
+ contractAddress: args.callContext.contractAddress,
49
+ log: args.log ?? createLogger('simulator:client_execution_context')
50
+ });
51
+ this.argsHash = args.argsHash;
52
+ this.txContext = args.txContext;
53
+ this.callContext = args.callContext;
54
+ this.utilityExecutor = args.utilityExecutor;
55
+ this.executionCache = args.executionCache;
56
+ this.noteCache = args.noteCache;
57
+ this.taggingIndexCache = args.taggingIndexCache;
58
+ this.senderTaggingStore = args.senderTaggingStore;
59
+ this.totalPublicCalldataCount = args.totalPublicCalldataCount ?? 0;
60
+ this.sideEffectCounter = args.sideEffectCounter ?? 0;
61
+ this.senderForTags = args.senderForTags;
62
+ this.simulator = args.simulator;
51
63
  }
52
64
  getPrivateContextInputs() {
53
65
  return new PrivateContextInputs(this.callContext, this.anchorBlockHeader, this.txContext, this.sideEffectCounter);
@@ -88,14 +100,9 @@ import { UtilityExecutionOracle } from './utility_execution_oracle.js';
88
100
  return this.contractClassLogs;
89
101
  }
90
102
  /**
91
- * Return the offchain effects emitted during this execution.
92
- */ getOffchainEffects() {
93
- return this.offchainEffects;
94
- }
95
- /**
96
- * Returns the pre-tags that were used in this execution (and that need to be stored in the db).
97
- */ getUsedPreTags() {
98
- return this.taggingIndexCache.getUsedPreTags();
103
+ * Returns the tagging index ranges that were used in this execution (and that need to be stored in the db).
104
+ */ getUsedTaggingIndexRanges() {
105
+ return this.taggingIndexCache.getUsedTaggingIndexRanges();
99
106
  }
100
107
  /**
101
108
  * Return the nested execution results during this execution.
@@ -111,7 +118,7 @@ import { UtilityExecutionOracle } from './utility_execution_oracle.js';
111
118
  *
112
119
  * The value persists through nested calls, meaning all calls down the stack will use the same
113
120
  * 'senderForTags' value (unless it is replaced).
114
- */ privateGetSenderForTags() {
121
+ */ getSenderForTags() {
115
122
  return Promise.resolve(this.senderForTags);
116
123
  }
117
124
  /**
@@ -124,7 +131,7 @@ import { UtilityExecutionOracle } from './utility_execution_oracle.js';
124
131
  * Account contracts typically set this value before calling other contracts. The value persists
125
132
  * through nested calls, meaning all calls down the stack will use the same 'senderForTags'
126
133
  * value (unless it is replaced by another call to this setter).
127
- */ privateSetSenderForTags(senderForTags) {
134
+ */ setSenderForTags(senderForTags) {
128
135
  this.senderForTags = senderForTags;
129
136
  return Promise.resolve();
130
137
  }
@@ -133,20 +140,29 @@ import { UtilityExecutionOracle } from './utility_execution_oracle.js';
133
140
  * @param sender - The address sending the log
134
141
  * @param recipient - The address receiving the log
135
142
  * @returns An app tag to be used in a log.
136
- */ async privateGetNextAppTagAsSender(sender, recipient) {
137
- const secret = await this.#calculateDirectionalAppTaggingSecret(this.contractAddress, sender, recipient);
138
- const index = await this.#getIndexToUseForSecret(secret);
139
- this.log.debug(`Incrementing tagging index for sender: ${sender}, recipient: ${recipient}, contract: ${this.contractAddress} to ${index}`);
140
- this.taggingIndexCache.setLastUsedIndex(secret, index);
143
+ */ async getNextAppTagAsSender(sender, recipient) {
144
+ const extendedSecret = await this.#calculateExtendedDirectionalAppTaggingSecret(this.contractAddress, sender, recipient);
145
+ if (!extendedSecret) {
146
+ // We'd only fail to compute an extended secret if the recipient is an invalid address. To prevent
147
+ // king-of-the-hill attacks, instead of failing we use a random tag. By including a correct-looking tag in the
148
+ // log, the transaction shape is preserved and no privacy is leaked, even if the tag is bogus.
149
+ this.logger.warn(`Computing a tag for invalid recipient ${recipient} - returning a random tag instead`, {
150
+ contractAddress: this.contractAddress
151
+ });
152
+ return new Tag(Fr.random());
153
+ }
154
+ const index = await this.#getIndexToUseForSecret(extendedSecret);
155
+ this.logger.debug(`Incrementing tagging index for sender: ${sender}, recipient: ${recipient}, contract: ${this.contractAddress} to ${index}`);
156
+ this.taggingIndexCache.setLastUsedIndex(extendedSecret, index);
141
157
  return Tag.compute({
142
- secret,
158
+ extendedSecret,
143
159
  index
144
160
  });
145
161
  }
146
- async #calculateDirectionalAppTaggingSecret(contractAddress, sender, recipient) {
147
- const senderCompleteAddress = await this.getCompleteAddress(sender);
162
+ async #calculateExtendedDirectionalAppTaggingSecret(contractAddress, sender, recipient) {
163
+ const senderCompleteAddress = await this.getCompleteAddressOrFail(sender);
148
164
  const senderIvsk = await this.keyStore.getMasterIncomingViewingSecretKey(sender);
149
- return DirectionalAppTaggingSecret.compute(senderCompleteAddress, senderIvsk, recipient, contractAddress, recipient);
165
+ return ExtendedDirectionalAppTaggingSecret.compute(senderCompleteAddress, senderIvsk, recipient, contractAddress, recipient);
150
166
  }
151
167
  async #getIndexToUseForSecret(secret) {
152
168
  // If we have the tagging index in the cache, we use it. If not we obtain it from the execution data provider.
@@ -157,8 +173,7 @@ import { UtilityExecutionOracle } from './utility_execution_oracle.js';
157
173
  // This is a tagging secret we've not yet used in this tx, so first sync our store to make sure its indices
158
174
  // are up to date. We do this here because this store is not synced as part of the global sync because
159
175
  // that'd be wasteful as most tagging secrets are not used in each tx.
160
- const anchorBlockHash = L2BlockHash.fromField(await this.anchorBlockHeader.hash());
161
- await syncSenderTaggingIndexes(secret, this.contractAddress, this.aztecNode, this.senderTaggingStore, anchorBlockHash, this.jobId);
176
+ await syncSenderTaggingIndexes(secret, this.aztecNode, this.senderTaggingStore, await this.anchorBlockHeader.hash(), this.jobId);
162
177
  const lastUsedIndex = await this.senderTaggingStore.getLastUsedIndex(secret, this.jobId);
163
178
  // If lastUsedIndex is undefined, we've never used this secret, so start from 0
164
179
  // Otherwise, the next index to use is one past the last used index
@@ -169,29 +184,29 @@ import { UtilityExecutionOracle } from './utility_execution_oracle.js';
169
184
  * Store values in the execution cache.
170
185
  * @param values - Values to store.
171
186
  * @returns The hash of the values.
172
- */ privateStoreInExecutionCache(values, hash) {
187
+ */ setHashPreimage(values, hash) {
173
188
  return this.executionCache.store(values, hash);
174
189
  }
175
190
  /**
176
191
  * Gets values from the execution cache.
177
192
  * @param hash - Hash of the values.
178
193
  * @returns The values.
179
- */ privateLoadFromExecutionCache(hash) {
194
+ */ getHashPreimage(hash) {
180
195
  const preimage = this.executionCache.getPreimage(hash);
181
196
  if (!preimage) {
182
197
  throw new Error(`Preimage for hash ${hash.toString()} not found in cache`);
183
198
  }
184
199
  return Promise.resolve(preimage);
185
200
  }
186
- async utilityCheckNullifierExists(innerNullifier) {
201
+ async doesNullifierExist(innerNullifier) {
187
202
  // This oracle must be overridden because while utility execution can only meaningfully check if a nullifier exists
188
203
  // in the synched block, during private execution there's also the possibility of it being pending, i.e. created
189
204
  // in the current transaction.
190
- this.log.debug(`Checking existence of inner nullifier ${innerNullifier}`, {
205
+ this.logger.debug(`Checking existence of inner nullifier ${innerNullifier}`, {
191
206
  contractAddress: this.contractAddress
192
207
  });
193
208
  const nullifier = (await siloNullifier(this.contractAddress, innerNullifier)).toBigInt();
194
- return this.noteCache.getNullifiers(this.contractAddress).has(nullifier) || await super.utilityCheckNullifierExists(innerNullifier);
209
+ return this.noteCache.getNullifiers(this.contractAddress).has(nullifier) || await super.doesNullifierExist(innerNullifier);
195
210
  }
196
211
  /**
197
212
  * Gets some notes for a storage slot.
@@ -213,11 +228,11 @@ import { UtilityExecutionOracle } from './utility_execution_oracle.js';
213
228
  * @param offset - The starting index for pagination.
214
229
  * @param status - The status of notes to fetch.
215
230
  * @returns Array of note data.
216
- */ async utilityGetNotes(owner, storageSlot, numSelects, selectByIndexes, selectByOffsets, selectByLengths, selectValues, selectComparators, sortByIndexes, sortByOffsets, sortByLengths, sortOrder, limit, offset, status) {
231
+ */ async getNotes(owner, storageSlot, numSelects, selectByIndexes, selectByOffsets, selectByLengths, selectValues, selectComparators, sortByIndexes, sortByOffsets, sortByLengths, sortOrder, limit, offset, status) {
217
232
  // Nullified pending notes are already removed from the list.
218
233
  const pendingNotes = this.noteCache.getNotes(this.callContext.contractAddress, owner, storageSlot);
219
234
  const pendingNullifiers = this.noteCache.getNullifiers(this.callContext.contractAddress);
220
- const noteService = new NoteService(this.noteStore, this.aztecNode, this.anchorBlockStore, this.jobId);
235
+ const noteService = new NoteService(this.noteStore, this.aztecNode, this.anchorBlockHeader, this.jobId);
221
236
  const dbNotes = await noteService.getNotes(this.callContext.contractAddress, owner, storageSlot, status, this.scopes);
222
237
  const dbNotesFiltered = dbNotes.filter((n)=>!pendingNullifiers.has(n.siloedNullifier.value));
223
238
  const notes = pickNotes([
@@ -244,7 +259,7 @@ import { UtilityExecutionOracle } from './utility_execution_oracle.js';
244
259
  limit,
245
260
  offset
246
261
  });
247
- this.log.debug(`Returning ${notes.length} notes for ${this.callContext.contractAddress} at ${storageSlot}: ${notes.map((n)=>`${n.noteNonce.toString()}:[${n.note.items.map((i)=>i.toString()).join(',')}]`).join(', ')}`);
262
+ this.logger.debug(`Returning ${notes.length} notes for ${this.callContext.contractAddress} at ${storageSlot}: ${notes.map((n)=>`${n.noteNonce.toString()}:[${n.note.items.map((i)=>i.toString()).join(',')}]`).join(', ')}`);
248
263
  return notes;
249
264
  }
250
265
  /**
@@ -257,8 +272,8 @@ import { UtilityExecutionOracle } from './utility_execution_oracle.js';
257
272
  * @param noteItems - The items to be included in a Note.
258
273
  * @param noteHash - A hash of the new note.
259
274
  * @returns
260
- */ privateNotifyCreatedNote(owner, storageSlot, randomness, noteTypeId, noteItems, noteHash, counter) {
261
- this.log.debug(`Notified of new note with inner hash ${noteHash}`, {
275
+ */ notifyCreatedNote(owner, storageSlot, randomness, noteTypeId, noteItems, noteHash, counter) {
276
+ this.logger.debug(`Notified of new note with inner hash ${noteHash}`, {
262
277
  contractAddress: this.callContext.contractAddress,
263
278
  storageSlot,
264
279
  randomness,
@@ -289,7 +304,7 @@ import { UtilityExecutionOracle } from './utility_execution_oracle.js';
289
304
  * within the current transaction/execution.
290
305
  * @param innerNullifier - The pending nullifier to add in the list (not yet siloed by contract address).
291
306
  * @param noteHash - A hash of the new note.
292
- */ async privateNotifyNullifiedNote(innerNullifier, noteHash, counter) {
307
+ */ async notifyNullifiedNote(innerNullifier, noteHash, counter) {
293
308
  const nullifiedNoteHashCounter = await this.noteCache.nullifyNote(this.callContext.contractAddress, innerNullifier, noteHash);
294
309
  if (nullifiedNoteHashCounter !== undefined) {
295
310
  this.noteHashNullifierCounterMap.set(nullifiedNoteHashCounter, counter);
@@ -300,19 +315,19 @@ import { UtilityExecutionOracle } from './utility_execution_oracle.js';
300
315
  * within the current transaction/execution.
301
316
  * @param innerNullifier - The pending nullifier to add in the list (not yet siloed by contract address).
302
317
  * @param noteHash - A hash of the new note.
303
- */ privateNotifyCreatedNullifier(innerNullifier) {
304
- this.log.debug(`Notified of new inner nullifier ${innerNullifier}`, {
318
+ */ notifyCreatedNullifier(innerNullifier) {
319
+ this.logger.debug(`Notified of new inner nullifier ${innerNullifier}`, {
305
320
  contractAddress: this.contractAddress
306
321
  });
307
322
  return this.noteCache.nullifierCreated(this.callContext.contractAddress, innerNullifier);
308
323
  }
309
324
  /**
310
- * Check if a nullifier has been emitted in the same transaction, i.e. if privateNotifyCreatedNullifier has been
325
+ * Check if a nullifier has been emitted in the same transaction, i.e. if notifyCreatedNullifier has been
311
326
  * called for this inner nullifier from the contract with the specified address.
312
327
  * @param innerNullifier - The inner nullifier to check.
313
328
  * @param contractAddress - Address of the contract that emitted the nullifier.
314
329
  * @returns A boolean indicating whether the nullifier is pending or not.
315
- */ async privateIsNullifierPending(innerNullifier, contractAddress) {
330
+ */ async isNullifierPending(innerNullifier, contractAddress) {
316
331
  const siloedNullifier = await siloNullifier(contractAddress, innerNullifier);
317
332
  const isNullifierPending = this.noteCache.getNullifiers(contractAddress).has(siloedNullifier.toBigInt());
318
333
  return Promise.resolve(isNullifierPending);
@@ -323,10 +338,10 @@ import { UtilityExecutionOracle } from './utility_execution_oracle.js';
323
338
  * keep the preimage in ts for later.
324
339
  * @param log - The contract class log to be emitted.
325
340
  * @param counter - The contract class log's counter.
326
- */ privateNotifyCreatedContractClassLog(log, counter) {
341
+ */ notifyCreatedContractClassLog(log, counter) {
327
342
  this.contractClassLogs.push(new CountedContractClassLog(log, counter));
328
343
  const text = log.toBuffer().toString('hex');
329
- this.log.verbose(`Emitted log from ContractClassRegistry: "${text.length > 100 ? text.slice(0, 100) + '...' : text}"`);
344
+ this.logger.verbose(`Emitted log from ContractClassRegistry: "${text.length > 100 ? text.slice(0, 100) + '...' : text}"`);
330
345
  }
331
346
  #checkValidStaticCall(childExecutionResult) {
332
347
  if (childExecutionResult.publicInputs.noteHashes.claimedLength > 0 || childExecutionResult.publicInputs.nullifiers.claimedLength > 0 || childExecutionResult.publicInputs.l2ToL1Msgs.claimedLength > 0 || childExecutionResult.publicInputs.privateLogs.claimedLength > 0 || childExecutionResult.publicInputs.contractClassLogsHashes.claimedLength > 0) {
@@ -341,20 +356,50 @@ import { UtilityExecutionOracle } from './utility_execution_oracle.js';
341
356
  * @param sideEffectCounter - The side effect counter at the start of the call.
342
357
  * @param isStaticCall - Whether the call is a static call.
343
358
  * @returns The execution result.
344
- */ async privateCallPrivateFunction(targetContractAddress, functionSelector, argsHash, sideEffectCounter, isStaticCall) {
359
+ */ async callPrivateFunction(targetContractAddress, functionSelector, argsHash, sideEffectCounter, isStaticCall) {
345
360
  if (!this.simulator) {
346
361
  // In practice it is only when creating inline private contexts in a Noir test using TXE that we create an
347
362
  // instance of this class without a simulator.
348
363
  throw new Error('No simulator provided, cannot perform a nested private call');
349
364
  }
350
365
  const simulatorSetupTimer = new Timer();
351
- this.log.debug(`Calling private function ${targetContractAddress}:${functionSelector} from ${this.callContext.contractAddress}`);
366
+ this.logger.debug(`Calling private function ${targetContractAddress}:${functionSelector} from ${this.callContext.contractAddress}`);
352
367
  isStaticCall = isStaticCall || this.callContext.isStaticCall;
353
- await ensureContractSynced(targetContractAddress, functionSelector, this.utilityExecutor, this.aztecNode, this.contractStore, this.anchorBlockHeader);
368
+ await this.contractSyncService.ensureContractSynced(targetContractAddress, functionSelector, this.utilityExecutor, this.anchorBlockHeader, this.jobId, this.scopes);
354
369
  const targetArtifact = await this.contractStore.getFunctionArtifactWithDebugMetadata(targetContractAddress, functionSelector);
355
370
  const derivedTxContext = this.txContext.clone();
356
371
  const derivedCallContext = await this.deriveCallContext(targetContractAddress, targetArtifact, isStaticCall);
357
- const privateExecutionOracle = new PrivateExecutionOracle(argsHash, derivedTxContext, derivedCallContext, this.anchorBlockHeader, this.utilityExecutor, this.authWitnesses, this.capsules, this.executionCache, this.noteCache, this.taggingIndexCache, this.contractStore, this.noteStore, this.keyStore, this.addressStore, this.aztecNode, this.anchorBlockStore, this.senderTaggingStore, this.recipientTaggingStore, this.senderAddressBookStore, this.capsuleStore, this.privateEventStore, this.jobId, this.totalPublicCalldataCount, sideEffectCounter, this.log, this.scopes, this.senderForTags, this.simulator);
372
+ const privateExecutionOracle = new PrivateExecutionOracle({
373
+ argsHash,
374
+ txContext: derivedTxContext,
375
+ callContext: derivedCallContext,
376
+ anchorBlockHeader: this.anchorBlockHeader,
377
+ utilityExecutor: this.utilityExecutor,
378
+ authWitnesses: this.authWitnesses,
379
+ capsules: this.capsules,
380
+ executionCache: this.executionCache,
381
+ noteCache: this.noteCache,
382
+ taggingIndexCache: this.taggingIndexCache,
383
+ contractStore: this.contractStore,
384
+ noteStore: this.noteStore,
385
+ keyStore: this.keyStore,
386
+ addressStore: this.addressStore,
387
+ aztecNode: this.aztecNode,
388
+ senderTaggingStore: this.senderTaggingStore,
389
+ recipientTaggingStore: this.recipientTaggingStore,
390
+ senderAddressBookStore: this.senderAddressBookStore,
391
+ capsuleService: this.capsuleService,
392
+ privateEventStore: this.privateEventStore,
393
+ messageContextService: this.messageContextService,
394
+ contractSyncService: this.contractSyncService,
395
+ jobId: this.jobId,
396
+ totalPublicCalldataCount: this.totalPublicCalldataCount,
397
+ sideEffectCounter,
398
+ log: this.logger,
399
+ scopes: this.scopes,
400
+ senderForTags: this.senderForTags,
401
+ simulator: this.simulator
402
+ });
358
403
  const setupTime = simulatorSetupTimer.ms();
359
404
  const childExecutionResult = await executePrivateFunction(this.simulator, privateExecutionOracle, targetArtifact, targetContractAddress, functionSelector);
360
405
  if (isStaticCall) {
@@ -371,7 +416,7 @@ import { UtilityExecutionOracle } from './utility_execution_oracle.js';
371
416
  returnsHash: publicInputs.returnsHash
372
417
  };
373
418
  }
374
- #onNewPublicFunctionCall(calldataHash) {
419
+ /** Validates the calldata preimage exists in the cache and checks cumulative calldata size is within limits. */ assertValidPublicCalldata(calldataHash) {
375
420
  const calldata = this.executionCache.getPreimage(calldataHash);
376
421
  if (!calldata) {
377
422
  throw new Error('Calldata for public call not found in cache');
@@ -380,31 +425,12 @@ import { UtilityExecutionOracle } from './utility_execution_oracle.js';
380
425
  if (this.totalPublicCalldataCount > MAX_FR_CALLDATA_TO_ALL_ENQUEUED_CALLS) {
381
426
  throw new Error(`Too many total args to all enqueued public calls! (> ${MAX_FR_CALLDATA_TO_ALL_ENQUEUED_CALLS})`);
382
427
  }
383
- }
384
- /**
385
- * Verify relevant information when a public function is enqueued.
386
- * @param targetContractAddress - The address of the contract to call.
387
- * @param calldataHash - The hash of the function selector and arguments.
388
- * @param sideEffectCounter - The side effect counter at the start of the call.
389
- * @param isStaticCall - Whether the call is a static call.
390
- */ privateNotifyEnqueuedPublicFunctionCall(_targetContractAddress, calldataHash, _sideEffectCounter, _isStaticCall) {
391
- this.#onNewPublicFunctionCall(calldataHash);
392
428
  return Promise.resolve();
393
429
  }
394
- /**
395
- * Verify relevant information when a public teardown function is set.
396
- * @param targetContractAddress - The address of the contract to call.
397
- * @param argsHash - The arguments hash to pass to the function.
398
- * @param sideEffectCounter - The side effect counter at the start of the call.
399
- * @param isStaticCall - Whether the call is a static call.
400
- */ privateNotifySetPublicTeardownFunctionCall(_targetContractAddress, calldataHash, _sideEffectCounter, _isStaticCall) {
401
- this.#onNewPublicFunctionCall(calldataHash);
402
- return Promise.resolve();
403
- }
404
- privateNotifySetMinRevertibleSideEffectCounter(minRevertibleSideEffectCounter) {
430
+ notifyRevertiblePhaseStart(minRevertibleSideEffectCounter) {
405
431
  return this.noteCache.setMinRevertibleSideEffectCounter(minRevertibleSideEffectCounter);
406
432
  }
407
- privateIsSideEffectCounterRevertible(sideEffectCounter) {
433
+ isExecutionInRevertiblePhase(sideEffectCounter) {
408
434
  return Promise.resolve(this.noteCache.isSideEffectCounterRevertible(sideEffectCounter));
409
435
  }
410
436
  /**
@@ -419,10 +445,4 @@ import { UtilityExecutionOracle } from './utility_execution_oracle.js';
419
445
  getDebugFunctionName() {
420
446
  return this.contractStore.getDebugFunctionName(this.contractAddress, this.callContext.functionSelector);
421
447
  }
422
- utilityEmitOffchainEffect(data) {
423
- this.offchainEffects.push({
424
- data
425
- });
426
- return Promise.resolve();
427
- }
428
448
  }