@aztec/pxe 0.0.1-commit.d1f2d6c → 0.0.1-commit.d20b825a7

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 (261) hide show
  1. package/dest/bin/check_oracle_version.js +5 -5
  2. package/dest/block_synchronizer/block_synchronizer.d.ts +10 -4
  3. package/dest/block_synchronizer/block_synchronizer.d.ts.map +1 -1
  4. package/dest/block_synchronizer/block_synchronizer.js +30 -6
  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 -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 +206 -77
  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 +5 -7
  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 +9 -11
  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 +5 -8
  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 +7 -12
  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.d.ts +3 -22
  41. package/dest/contract_function_simulator/oracle/private_execution.d.ts.map +1 -1
  42. package/dest/contract_function_simulator/oracle/private_execution.js +5 -49
  43. package/dest/contract_function_simulator/oracle/private_execution_oracle.d.ts +60 -84
  44. package/dest/contract_function_simulator/oracle/private_execution_oracle.d.ts.map +1 -1
  45. package/dest/contract_function_simulator/oracle/private_execution_oracle.js +125 -98
  46. package/dest/contract_function_simulator/oracle/utility_execution_oracle.d.ts +128 -70
  47. package/dest/contract_function_simulator/oracle/utility_execution_oracle.d.ts.map +1 -1
  48. package/dest/contract_function_simulator/oracle/utility_execution_oracle.js +330 -143
  49. package/dest/contract_function_simulator/pick_notes.d.ts +1 -1
  50. package/dest/contract_function_simulator/pick_notes.d.ts.map +1 -1
  51. package/dest/contract_function_simulator/pick_notes.js +20 -3
  52. package/dest/contract_function_simulator/proxied_contract_data_source.d.ts +1 -1
  53. package/dest/contract_function_simulator/proxied_contract_data_source.d.ts.map +1 -1
  54. package/dest/contract_function_simulator/proxied_contract_data_source.js +3 -0
  55. package/dest/contract_logging.d.ts +27 -0
  56. package/dest/contract_logging.d.ts.map +1 -0
  57. package/dest/contract_logging.js +38 -0
  58. package/dest/contract_sync/contract_sync_service.d.ts +44 -0
  59. package/dest/contract_sync/contract_sync_service.d.ts.map +1 -0
  60. package/dest/contract_sync/contract_sync_service.js +116 -0
  61. package/dest/contract_sync/helpers.d.ts +28 -0
  62. package/dest/contract_sync/helpers.d.ts.map +1 -0
  63. package/dest/contract_sync/helpers.js +60 -0
  64. package/dest/debug/pxe_debug_utils.d.ts +24 -10
  65. package/dest/debug/pxe_debug_utils.d.ts.map +1 -1
  66. package/dest/debug/pxe_debug_utils.js +28 -18
  67. package/dest/entrypoints/client/bundle/index.d.ts +3 -1
  68. package/dest/entrypoints/client/bundle/index.d.ts.map +1 -1
  69. package/dest/entrypoints/client/bundle/index.js +2 -0
  70. package/dest/entrypoints/client/bundle/utils.d.ts +2 -2
  71. package/dest/entrypoints/client/bundle/utils.d.ts.map +1 -1
  72. package/dest/entrypoints/client/bundle/utils.js +23 -9
  73. package/dest/entrypoints/client/lazy/index.d.ts +3 -1
  74. package/dest/entrypoints/client/lazy/index.d.ts.map +1 -1
  75. package/dest/entrypoints/client/lazy/index.js +2 -0
  76. package/dest/entrypoints/client/lazy/utils.d.ts +3 -3
  77. package/dest/entrypoints/client/lazy/utils.d.ts.map +1 -1
  78. package/dest/entrypoints/client/lazy/utils.js +24 -10
  79. package/dest/entrypoints/pxe_creation_options.d.ts +5 -2
  80. package/dest/entrypoints/pxe_creation_options.d.ts.map +1 -1
  81. package/dest/entrypoints/pxe_creation_options.js +3 -1
  82. package/dest/entrypoints/server/index.d.ts +4 -2
  83. package/dest/entrypoints/server/index.d.ts.map +1 -1
  84. package/dest/entrypoints/server/index.js +3 -1
  85. package/dest/entrypoints/server/utils.d.ts +2 -2
  86. package/dest/entrypoints/server/utils.d.ts.map +1 -1
  87. package/dest/entrypoints/server/utils.js +30 -11
  88. package/dest/events/event_service.d.ts +6 -6
  89. package/dest/events/event_service.d.ts.map +1 -1
  90. package/dest/events/event_service.js +31 -11
  91. package/dest/events/private_event_filter_validator.d.ts +3 -2
  92. package/dest/events/private_event_filter_validator.d.ts.map +1 -1
  93. package/dest/events/private_event_filter_validator.js +15 -0
  94. package/dest/job_coordinator/job_coordinator.d.ts +3 -2
  95. package/dest/job_coordinator/job_coordinator.d.ts.map +1 -1
  96. package/dest/job_coordinator/job_coordinator.js +3 -2
  97. package/dest/logs/log_service.d.ts +10 -9
  98. package/dest/logs/log_service.d.ts.map +1 -1
  99. package/dest/logs/log_service.js +41 -62
  100. package/dest/messages/message_context_service.d.ts +17 -0
  101. package/dest/messages/message_context_service.d.ts.map +1 -0
  102. package/dest/messages/message_context_service.js +36 -0
  103. package/dest/notes/note_service.d.ts +7 -8
  104. package/dest/notes/note_service.d.ts.map +1 -1
  105. package/dest/notes/note_service.js +23 -15
  106. package/dest/notes_filter.d.ts +24 -0
  107. package/dest/notes_filter.d.ts.map +1 -0
  108. package/dest/notes_filter.js +4 -0
  109. package/dest/oracle_version.d.ts +4 -3
  110. package/dest/oracle_version.d.ts.map +1 -1
  111. package/dest/oracle_version.js +20 -10
  112. package/dest/private_kernel/hints/compute_tx_expiration_timestamp.d.ts +4 -0
  113. package/dest/private_kernel/hints/compute_tx_expiration_timestamp.d.ts.map +1 -0
  114. package/dest/private_kernel/hints/{compute_tx_include_by_timestamp.js → compute_tx_expiration_timestamp.js} +12 -12
  115. package/dest/private_kernel/hints/index.d.ts +1 -1
  116. package/dest/private_kernel/hints/index.js +1 -1
  117. package/dest/private_kernel/hints/private_kernel_reset_private_inputs_builder.d.ts +4 -3
  118. package/dest/private_kernel/hints/private_kernel_reset_private_inputs_builder.d.ts.map +1 -1
  119. package/dest/private_kernel/hints/private_kernel_reset_private_inputs_builder.js +129 -68
  120. package/dest/private_kernel/hints/test_utils.d.ts +122 -0
  121. package/dest/private_kernel/hints/test_utils.d.ts.map +1 -0
  122. package/dest/private_kernel/hints/test_utils.js +203 -0
  123. package/dest/private_kernel/private_kernel_execution_prover.d.ts +3 -2
  124. package/dest/private_kernel/private_kernel_execution_prover.d.ts.map +1 -1
  125. package/dest/private_kernel/private_kernel_execution_prover.js +20 -15
  126. package/dest/private_kernel/private_kernel_oracle.d.ts +10 -6
  127. package/dest/private_kernel/private_kernel_oracle.d.ts.map +1 -1
  128. package/dest/private_kernel/private_kernel_oracle.js +19 -18
  129. package/dest/pxe.d.ts +85 -24
  130. package/dest/pxe.d.ts.map +1 -1
  131. package/dest/pxe.js +169 -87
  132. package/dest/storage/address_store/address_store.d.ts +1 -1
  133. package/dest/storage/address_store/address_store.d.ts.map +1 -1
  134. package/dest/storage/address_store/address_store.js +12 -11
  135. package/dest/storage/anchor_block_store/anchor_block_store.d.ts +9 -1
  136. package/dest/storage/anchor_block_store/anchor_block_store.d.ts.map +1 -1
  137. package/dest/storage/anchor_block_store/anchor_block_store.js +9 -2
  138. package/dest/storage/capsule_store/capsule_service.d.ts +21 -0
  139. package/dest/storage/capsule_store/capsule_service.d.ts.map +1 -0
  140. package/dest/storage/capsule_store/capsule_service.js +50 -0
  141. package/dest/storage/capsule_store/capsule_store.d.ts +9 -9
  142. package/dest/storage/capsule_store/capsule_store.d.ts.map +1 -1
  143. package/dest/storage/capsule_store/capsule_store.js +42 -36
  144. package/dest/storage/capsule_store/index.d.ts +2 -1
  145. package/dest/storage/capsule_store/index.d.ts.map +1 -1
  146. package/dest/storage/capsule_store/index.js +1 -0
  147. package/dest/storage/contract_store/contract_store.d.ts +42 -16
  148. package/dest/storage/contract_store/contract_store.d.ts.map +1 -1
  149. package/dest/storage/contract_store/contract_store.js +160 -85
  150. package/dest/storage/metadata.d.ts +1 -1
  151. package/dest/storage/metadata.js +1 -1
  152. package/dest/storage/note_store/note_store.d.ts +14 -4
  153. package/dest/storage/note_store/note_store.d.ts.map +1 -1
  154. package/dest/storage/note_store/note_store.js +149 -109
  155. package/dest/storage/private_event_store/private_event_store.d.ts +1 -1
  156. package/dest/storage/private_event_store/private_event_store.d.ts.map +1 -1
  157. package/dest/storage/private_event_store/private_event_store.js +87 -61
  158. package/dest/storage/private_event_store/stored_private_event.d.ts +4 -4
  159. package/dest/storage/private_event_store/stored_private_event.d.ts.map +1 -1
  160. package/dest/storage/private_event_store/stored_private_event.js +2 -2
  161. package/dest/storage/tagging_store/recipient_tagging_store.d.ts +6 -6
  162. package/dest/storage/tagging_store/recipient_tagging_store.d.ts.map +1 -1
  163. package/dest/storage/tagging_store/recipient_tagging_store.js +31 -19
  164. package/dest/storage/tagging_store/sender_address_book_store.d.ts +1 -1
  165. package/dest/storage/tagging_store/sender_address_book_store.d.ts.map +1 -1
  166. package/dest/storage/tagging_store/sender_address_book_store.js +20 -14
  167. package/dest/storage/tagging_store/sender_tagging_store.d.ts +29 -28
  168. package/dest/storage/tagging_store/sender_tagging_store.d.ts.map +1 -1
  169. package/dest/storage/tagging_store/sender_tagging_store.js +233 -137
  170. package/dest/tagging/get_all_logs_by_tags.d.ts +4 -4
  171. package/dest/tagging/get_all_logs_by_tags.d.ts.map +1 -1
  172. package/dest/tagging/get_all_logs_by_tags.js +17 -3
  173. package/dest/tagging/index.d.ts +3 -3
  174. package/dest/tagging/index.d.ts.map +1 -1
  175. package/dest/tagging/index.js +1 -1
  176. package/dest/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.d.ts +5 -6
  177. package/dest/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.d.ts.map +1 -1
  178. package/dest/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.js +8 -22
  179. package/dest/tagging/recipient_sync/utils/find_highest_indexes.js +2 -2
  180. package/dest/tagging/recipient_sync/utils/load_logs_for_range.d.ts +7 -8
  181. package/dest/tagging/recipient_sync/utils/load_logs_for_range.d.ts.map +1 -1
  182. package/dest/tagging/recipient_sync/utils/load_logs_for_range.js +12 -11
  183. package/dest/tagging/sender_sync/sync_sender_tagging_indexes.d.ts +5 -9
  184. package/dest/tagging/sender_sync/sync_sender_tagging_indexes.d.ts.map +1 -1
  185. package/dest/tagging/sender_sync/sync_sender_tagging_indexes.js +13 -7
  186. package/dest/tagging/sender_sync/utils/get_status_change_of_pending.d.ts +4 -3
  187. package/dest/tagging/sender_sync/utils/get_status_change_of_pending.d.ts.map +1 -1
  188. package/dest/tagging/sender_sync/utils/get_status_change_of_pending.js +20 -10
  189. package/dest/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.d.ts +6 -8
  190. package/dest/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.d.ts.map +1 -1
  191. package/dest/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.js +36 -24
  192. package/package.json +25 -16
  193. package/src/bin/check_oracle_version.ts +5 -4
  194. package/src/block_synchronizer/block_synchronizer.ts +45 -21
  195. package/src/config/index.ts +3 -9
  196. package/src/config/package_info.ts +1 -1
  197. package/src/contract_function_simulator/contract_function_simulator.ts +366 -136
  198. package/src/contract_function_simulator/ephemeral_array_service.ts +110 -0
  199. package/src/contract_function_simulator/execution_tagging_index_cache.ts +19 -14
  200. package/src/contract_function_simulator/index.ts +1 -0
  201. package/src/contract_function_simulator/noir-structs/event_validation_request.ts +10 -10
  202. package/src/contract_function_simulator/noir-structs/log_retrieval_request.ts +1 -1
  203. package/src/contract_function_simulator/noir-structs/log_retrieval_response.ts +2 -5
  204. package/src/contract_function_simulator/noir-structs/note_validation_request.ts +5 -11
  205. package/src/contract_function_simulator/oracle/interfaces.ts +90 -62
  206. package/src/contract_function_simulator/oracle/legacy_oracle_mappings.ts +104 -0
  207. package/src/contract_function_simulator/oracle/oracle.ts +391 -150
  208. package/src/contract_function_simulator/oracle/private_execution.ts +5 -83
  209. package/src/contract_function_simulator/oracle/private_execution_oracle.ts +160 -193
  210. package/src/contract_function_simulator/oracle/utility_execution_oracle.ts +552 -179
  211. package/src/contract_function_simulator/pick_notes.ts +22 -3
  212. package/src/contract_function_simulator/proxied_contract_data_source.ts +8 -1
  213. package/src/contract_logging.ts +52 -0
  214. package/src/contract_sync/contract_sync_service.ts +176 -0
  215. package/src/contract_sync/helpers.ts +98 -0
  216. package/src/debug/pxe_debug_utils.ts +63 -19
  217. package/src/entrypoints/client/bundle/index.ts +2 -0
  218. package/src/entrypoints/client/bundle/utils.ts +18 -18
  219. package/src/entrypoints/client/lazy/index.ts +2 -0
  220. package/src/entrypoints/client/lazy/utils.ts +19 -18
  221. package/src/entrypoints/pxe_creation_options.ts +9 -1
  222. package/src/entrypoints/server/index.ts +3 -1
  223. package/src/entrypoints/server/utils.ts +24 -29
  224. package/src/events/event_service.ts +35 -12
  225. package/src/events/private_event_filter_validator.ts +21 -1
  226. package/src/job_coordinator/job_coordinator.ts +4 -3
  227. package/src/logs/log_service.ts +77 -106
  228. package/src/messages/message_context_service.ts +44 -0
  229. package/src/notes/note_service.ts +25 -17
  230. package/src/notes_filter.ts +24 -0
  231. package/src/oracle_version.ts +20 -10
  232. package/src/private_kernel/hints/{compute_tx_include_by_timestamp.ts → compute_tx_expiration_timestamp.ts} +13 -13
  233. package/src/private_kernel/hints/index.ts +1 -1
  234. package/src/private_kernel/hints/private_kernel_reset_private_inputs_builder.ts +164 -117
  235. package/src/private_kernel/hints/test_utils.ts +325 -0
  236. package/src/private_kernel/private_kernel_execution_prover.ts +24 -19
  237. package/src/private_kernel/private_kernel_oracle.ts +21 -21
  238. package/src/pxe.ts +318 -144
  239. package/src/storage/address_store/address_store.ts +15 -15
  240. package/src/storage/anchor_block_store/anchor_block_store.ts +9 -1
  241. package/src/storage/capsule_store/capsule_service.ts +90 -0
  242. package/src/storage/capsule_store/capsule_store.ts +52 -34
  243. package/src/storage/capsule_store/index.ts +1 -0
  244. package/src/storage/contract_store/contract_store.ts +193 -101
  245. package/src/storage/metadata.ts +1 -1
  246. package/src/storage/note_store/note_store.ts +168 -134
  247. package/src/storage/private_event_store/private_event_store.ts +106 -81
  248. package/src/storage/private_event_store/stored_private_event.ts +3 -3
  249. package/src/storage/tagging_store/recipient_tagging_store.ts +38 -24
  250. package/src/storage/tagging_store/sender_address_book_store.ts +20 -14
  251. package/src/storage/tagging_store/sender_tagging_store.ts +287 -156
  252. package/src/tagging/get_all_logs_by_tags.ts +31 -7
  253. package/src/tagging/index.ts +2 -2
  254. package/src/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.ts +14 -27
  255. package/src/tagging/recipient_sync/utils/find_highest_indexes.ts +2 -2
  256. package/src/tagging/recipient_sync/utils/load_logs_for_range.ts +12 -17
  257. package/src/tagging/sender_sync/sync_sender_tagging_indexes.ts +25 -12
  258. package/src/tagging/sender_sync/utils/get_status_change_of_pending.ts +26 -11
  259. package/src/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.ts +30 -29
  260. package/dest/private_kernel/hints/compute_tx_include_by_timestamp.d.ts +0 -4
  261. package/dest/private_kernel/hints/compute_tx_include_by_timestamp.d.ts.map +0 -1
@@ -2,7 +2,6 @@ import { MAX_FR_CALLDATA_TO_ALL_ENQUEUED_CALLS, PRIVATE_CONTEXT_INPUTS_LENGTH }
2
2
  import { Fr } from '@aztec/foundation/curves/bn254';
3
3
  import { createLogger } from '@aztec/foundation/log';
4
4
  import { Timer } from '@aztec/foundation/timer';
5
- import type { KeyStore } from '@aztec/key-store';
6
5
  import { type CircuitSimulator, toACVMWitness } from '@aztec/simulator/client';
7
6
  import {
8
7
  type FunctionAbi,
@@ -12,19 +11,14 @@ import {
12
11
  type NoteSelector,
13
12
  countArgumentsSize,
14
13
  } from '@aztec/stdlib/abi';
15
- import type { AuthWitness } from '@aztec/stdlib/auth-witness';
16
14
  import { AztecAddress } from '@aztec/stdlib/aztec-address';
17
- import { L2BlockHash } from '@aztec/stdlib/block';
18
15
  import { siloNullifier } from '@aztec/stdlib/hash';
19
- import type { AztecNode } from '@aztec/stdlib/interfaces/client';
20
16
  import { PrivateContextInputs } from '@aztec/stdlib/kernel';
21
- import { type ContractClassLog, DirectionalAppTaggingSecret, type PreTag } from '@aztec/stdlib/logs';
17
+ import { type ContractClassLog, ExtendedDirectionalAppTaggingSecret, type TaggingIndexRange } from '@aztec/stdlib/logs';
22
18
  import { Tag } from '@aztec/stdlib/logs';
23
19
  import { Note, type NoteStatus } from '@aztec/stdlib/note';
24
20
  import {
25
- type BlockHeader,
26
21
  CallContext,
27
- Capsule,
28
22
  CountedContractClassLog,
29
23
  NoteAndSlot,
30
24
  PrivateCallExecutionResult,
@@ -32,14 +26,6 @@ import {
32
26
  } from '@aztec/stdlib/tx';
33
27
 
34
28
  import { NoteService } from '../../notes/note_service.js';
35
- import type { AddressStore } from '../../storage/address_store/address_store.js';
36
- import type { AnchorBlockStore } from '../../storage/anchor_block_store/anchor_block_store.js';
37
- import type { CapsuleStore } from '../../storage/capsule_store/capsule_store.js';
38
- import type { ContractStore } from '../../storage/contract_store/contract_store.js';
39
- import type { NoteStore } from '../../storage/note_store/note_store.js';
40
- import type { PrivateEventStore } from '../../storage/private_event_store/private_event_store.js';
41
- import type { RecipientTaggingStore } from '../../storage/tagging_store/recipient_tagging_store.js';
42
- import type { SenderAddressBookStore } from '../../storage/tagging_store/sender_address_book_store.js';
43
29
  import type { SenderTaggingStore } from '../../storage/tagging_store/sender_tagging_store.js';
44
30
  import { syncSenderTaggingIndexes } from '../../tagging/index.js';
45
31
  import type { ExecutionNoteCache } from '../execution_note_cache.js';
@@ -47,8 +33,25 @@ import { ExecutionTaggingIndexCache } from '../execution_tagging_index_cache.js'
47
33
  import type { HashedValuesCache } from '../hashed_values_cache.js';
48
34
  import { pickNotes } from '../pick_notes.js';
49
35
  import type { IPrivateExecutionOracle, NoteData } from './interfaces.js';
50
- import { ensureContractSynced, executePrivateFunction } from './private_execution.js';
51
- import { UtilityExecutionOracle } from './utility_execution_oracle.js';
36
+ import { executePrivateFunction } from './private_execution.js';
37
+ import { UtilityExecutionOracle, type UtilityExecutionOracleArgs } from './utility_execution_oracle.js';
38
+
39
+ /** Args for PrivateExecutionOracle constructor. */
40
+ export type PrivateExecutionOracleArgs = Omit<UtilityExecutionOracleArgs, 'contractAddress'> & {
41
+ argsHash: Fr;
42
+ txContext: TxContext;
43
+ callContext: CallContext;
44
+ /** Needed to trigger contract synchronization before nested calls */
45
+ utilityExecutor: (call: FunctionCall, scopes: AztecAddress[]) => Promise<void>;
46
+ executionCache: HashedValuesCache;
47
+ noteCache: ExecutionNoteCache;
48
+ taggingIndexCache: ExecutionTaggingIndexCache;
49
+ senderTaggingStore: SenderTaggingStore;
50
+ totalPublicCalldataCount?: number;
51
+ sideEffectCounter?: number;
52
+ senderForTags?: AztecAddress;
53
+ simulator?: CircuitSimulator;
54
+ };
52
55
 
53
56
  /**
54
57
  * The execution oracle for the private part of a transaction.
@@ -67,65 +70,51 @@ export class PrivateExecutionOracle extends UtilityExecutionOracle implements IP
67
70
  private newNotes: NoteAndSlot[] = [];
68
71
  private noteHashNullifierCounterMap: Map<number, number> = new Map();
69
72
  private contractClassLogs: CountedContractClassLog[] = [];
70
- private offchainEffects: { data: Fr[] }[] = [];
71
73
  private nestedExecutionResults: PrivateCallExecutionResult[] = [];
72
74
 
73
- constructor(
74
- private readonly argsHash: Fr,
75
- private readonly txContext: TxContext,
76
- private readonly callContext: CallContext,
77
- /** Header of a block whose state is used during private execution (not the block the transaction is included in). */
78
- protected override readonly anchorBlockHeader: BlockHeader,
79
- /** Needed to trigger contract synchronization before nested calls */
80
- private readonly utilityExecutor: (call: FunctionCall) => Promise<void>,
81
- /** List of transient auth witnesses to be used during this simulation */
82
- authWitnesses: AuthWitness[],
83
- capsules: Capsule[],
84
- private readonly executionCache: HashedValuesCache,
85
- private readonly noteCache: ExecutionNoteCache,
86
- private readonly taggingIndexCache: ExecutionTaggingIndexCache,
87
- contractStore: ContractStore,
88
- noteStore: NoteStore,
89
- keyStore: KeyStore,
90
- addressStore: AddressStore,
91
- aztecNode: AztecNode,
92
- anchorBlockStore: AnchorBlockStore,
93
- private readonly senderTaggingStore: SenderTaggingStore,
94
- recipientTaggingStore: RecipientTaggingStore,
95
- senderAddressBookStore: SenderAddressBookStore,
96
- capsuleStore: CapsuleStore,
97
- privateEventStore: PrivateEventStore,
98
- jobId: string,
99
- private totalPublicCalldataCount: number = 0,
100
- protected sideEffectCounter: number = 0,
101
- log = createLogger('simulator:client_execution_context'),
102
- scopes?: AztecAddress[],
103
- private senderForTags?: AztecAddress,
104
- private simulator?: CircuitSimulator,
105
- ) {
106
- super(
107
- callContext.contractAddress,
108
- authWitnesses,
109
- capsules,
110
- anchorBlockHeader,
111
- contractStore,
112
- noteStore,
113
- keyStore,
114
- addressStore,
115
- aztecNode,
116
- anchorBlockStore,
117
- recipientTaggingStore,
118
- senderAddressBookStore,
119
- capsuleStore,
120
- privateEventStore,
121
- jobId,
122
- log,
123
- scopes,
124
- );
75
+ private readonly argsHash: Fr;
76
+ private readonly txContext: TxContext;
77
+ private readonly callContext: CallContext;
78
+ private readonly utilityExecutor: (call: FunctionCall, scopes: AztecAddress[]) => Promise<void>;
79
+ private readonly executionCache: HashedValuesCache;
80
+ private readonly noteCache: ExecutionNoteCache;
81
+ private readonly taggingIndexCache: ExecutionTaggingIndexCache;
82
+ private readonly senderTaggingStore: SenderTaggingStore;
83
+ private totalPublicCalldataCount: number;
84
+ private readonly initialSideEffectCounter: number;
85
+ /** Sender for tags passed in at oracle construction time. Returned by `getSenderForTags` unless overridden. */
86
+ private readonly defaultSenderForTags: AztecAddress | undefined;
87
+ /** Per-call sender-for-tags override, set by `setSenderForTags`. Takes precedence over `defaultSenderForTags`. */
88
+ private currentSenderForTags: AztecAddress | undefined;
89
+ private readonly simulator?: CircuitSimulator;
90
+
91
+ constructor(args: PrivateExecutionOracleArgs) {
92
+ super({
93
+ ...args,
94
+ contractAddress: args.callContext.contractAddress,
95
+ log: args.log ?? createLogger('simulator:client_execution_context'),
96
+ });
97
+ this.argsHash = args.argsHash;
98
+ this.txContext = args.txContext;
99
+ this.callContext = args.callContext;
100
+ this.utilityExecutor = args.utilityExecutor;
101
+ this.executionCache = args.executionCache;
102
+ this.noteCache = args.noteCache;
103
+ this.taggingIndexCache = args.taggingIndexCache;
104
+ this.senderTaggingStore = args.senderTaggingStore;
105
+ this.totalPublicCalldataCount = args.totalPublicCalldataCount ?? 0;
106
+ this.initialSideEffectCounter = args.sideEffectCounter ?? 0;
107
+ this.defaultSenderForTags = args.senderForTags;
108
+ this.simulator = args.simulator;
125
109
  }
126
110
 
127
111
  public getPrivateContextInputs(): PrivateContextInputs {
128
- return new PrivateContextInputs(this.callContext, this.anchorBlockHeader, this.txContext, this.sideEffectCounter);
112
+ return new PrivateContextInputs(
113
+ this.callContext,
114
+ this.anchorBlockHeader,
115
+ this.txContext,
116
+ this.initialSideEffectCounter,
117
+ );
129
118
  }
130
119
 
131
120
  // We still need this function until we can get user-defined ordering of structs for fn arguments
@@ -172,17 +161,10 @@ export class PrivateExecutionOracle extends UtilityExecutionOracle implements IP
172
161
  }
173
162
 
174
163
  /**
175
- * Return the offchain effects emitted during this execution.
164
+ * Returns the tagging index ranges that were used in this execution (and that need to be stored in the db).
176
165
  */
177
- public getOffchainEffects() {
178
- return this.offchainEffects;
179
- }
180
-
181
- /**
182
- * Returns the pre-tags that were used in this execution (and that need to be stored in the db).
183
- */
184
- public getUsedPreTags(): PreTag[] {
185
- return this.taggingIndexCache.getUsedPreTags();
166
+ public getUsedTaggingIndexRanges(): TaggingIndexRange[] {
167
+ return this.taggingIndexCache.getUsedTaggingIndexRanges();
186
168
  }
187
169
 
188
170
  /**
@@ -199,11 +181,10 @@ export class PrivateExecutionOracle extends UtilityExecutionOracle implements IP
199
181
  * for a tag in order to emit a log. Constrained tagging should not use this as there is no
200
182
  * guarantee that the recipient knows about the sender, and hence about the shared secret.
201
183
  *
202
- * The value persists through nested calls, meaning all calls down the stack will use the same
203
- * 'senderForTags' value (unless it is replaced).
184
+ * Returns `currentSenderForTags` if set (via `setSenderForTags`), otherwise `defaultSenderForTags`.
204
185
  */
205
- public privateGetSenderForTags(): Promise<AztecAddress | undefined> {
206
- return Promise.resolve(this.senderForTags);
186
+ public getSenderForTags(): Promise<AztecAddress | undefined> {
187
+ return Promise.resolve(this.currentSenderForTags ?? this.defaultSenderForTags);
207
188
  }
208
189
 
209
190
  /**
@@ -213,12 +194,14 @@ export class PrivateExecutionOracle extends UtilityExecutionOracle implements IP
213
194
  * for a tag in order to emit a log. Constrained tagging should not use this as there is no
214
195
  * guarantee that the recipient knows about the sender, and hence about the shared secret.
215
196
  *
216
- * Account contracts typically set this value before calling other contracts. The value persists
217
- * through nested calls, meaning all calls down the stack will use the same 'senderForTags'
218
- * value (unless it is replaced by another call to this setter).
197
+ * Overrides `defaultSenderForTags` for the remainder of this call. Each oracle instance is
198
+ * independent, so this has no effect on any other call in the execution.
219
199
  */
220
- public privateSetSenderForTags(senderForTags: AztecAddress): Promise<void> {
221
- this.senderForTags = senderForTags;
200
+ public setSenderForTags(senderForTags: AztecAddress): Promise<void> {
201
+ this.logger.debug(
202
+ `Sender for tags switched to ${senderForTags} by contract ${this.contractAddress} (default was ${this.defaultSenderForTags})`,
203
+ );
204
+ this.currentSenderForTags = senderForTags;
222
205
  return Promise.resolve();
223
206
  }
224
207
 
@@ -228,26 +211,40 @@ export class PrivateExecutionOracle extends UtilityExecutionOracle implements IP
228
211
  * @param recipient - The address receiving the log
229
212
  * @returns An app tag to be used in a log.
230
213
  */
231
- public async privateGetNextAppTagAsSender(sender: AztecAddress, recipient: AztecAddress): Promise<Tag> {
232
- const secret = await this.#calculateDirectionalAppTaggingSecret(this.contractAddress, sender, recipient);
214
+ public async getNextAppTagAsSender(sender: AztecAddress, recipient: AztecAddress): Promise<Tag> {
215
+ const extendedSecret = await this.#calculateExtendedDirectionalAppTaggingSecret(
216
+ this.contractAddress,
217
+ sender,
218
+ recipient,
219
+ );
220
+
221
+ if (!extendedSecret) {
222
+ // We'd only fail to compute an extended secret if the recipient is an invalid address. To prevent
223
+ // king-of-the-hill attacks, instead of failing we use a random tag. By including a correct-looking tag in the
224
+ // log, the transaction shape is preserved and no privacy is leaked, even if the tag is bogus.
225
+ this.logger.warn(`Computing a tag for invalid recipient ${recipient} - returning a random tag instead`, {
226
+ contractAddress: this.contractAddress,
227
+ });
228
+ return Tag.random();
229
+ }
233
230
 
234
- const index = await this.#getIndexToUseForSecret(secret);
235
- this.log.debug(
231
+ const index = await this.#getIndexToUseForSecret(extendedSecret);
232
+ this.logger.debug(
236
233
  `Incrementing tagging index for sender: ${sender}, recipient: ${recipient}, contract: ${this.contractAddress} to ${index}`,
237
234
  );
238
- this.taggingIndexCache.setLastUsedIndex(secret, index);
235
+ this.taggingIndexCache.setLastUsedIndex(extendedSecret, index);
239
236
 
240
- return Tag.compute({ secret, index });
237
+ return Tag.compute({ extendedSecret, index });
241
238
  }
242
239
 
243
- async #calculateDirectionalAppTaggingSecret(
240
+ async #calculateExtendedDirectionalAppTaggingSecret(
244
241
  contractAddress: AztecAddress,
245
242
  sender: AztecAddress,
246
243
  recipient: AztecAddress,
247
244
  ) {
248
- const senderCompleteAddress = await this.getCompleteAddress(sender);
245
+ const senderCompleteAddress = await this.getCompleteAddressOrFail(sender);
249
246
  const senderIvsk = await this.keyStore.getMasterIncomingViewingSecretKey(sender);
250
- return DirectionalAppTaggingSecret.compute(
247
+ return ExtendedDirectionalAppTaggingSecret.compute(
251
248
  senderCompleteAddress,
252
249
  senderIvsk,
253
250
  recipient,
@@ -256,7 +253,7 @@ export class PrivateExecutionOracle extends UtilityExecutionOracle implements IP
256
253
  );
257
254
  }
258
255
 
259
- async #getIndexToUseForSecret(secret: DirectionalAppTaggingSecret): Promise<number> {
256
+ async #getIndexToUseForSecret(secret: ExtendedDirectionalAppTaggingSecret): Promise<number> {
260
257
  // If we have the tagging index in the cache, we use it. If not we obtain it from the execution data provider.
261
258
  const lastUsedIndexInTx = this.taggingIndexCache.getLastUsedIndex(secret);
262
259
 
@@ -266,13 +263,11 @@ export class PrivateExecutionOracle extends UtilityExecutionOracle implements IP
266
263
  // This is a tagging secret we've not yet used in this tx, so first sync our store to make sure its indices
267
264
  // are up to date. We do this here because this store is not synced as part of the global sync because
268
265
  // that'd be wasteful as most tagging secrets are not used in each tx.
269
- const anchorBlockHash = L2BlockHash.fromField(await this.anchorBlockHeader.hash());
270
266
  await syncSenderTaggingIndexes(
271
267
  secret,
272
- this.contractAddress,
273
268
  this.aztecNode,
274
269
  this.senderTaggingStore,
275
- anchorBlockHash,
270
+ await this.anchorBlockHeader.hash(),
276
271
  this.jobId,
277
272
  );
278
273
 
@@ -288,7 +283,7 @@ export class PrivateExecutionOracle extends UtilityExecutionOracle implements IP
288
283
  * @param values - Values to store.
289
284
  * @returns The hash of the values.
290
285
  */
291
- public privateStoreInExecutionCache(values: Fr[], hash: Fr) {
286
+ public setHashPreimage(values: Fr[], hash: Fr) {
292
287
  return this.executionCache.store(values, hash);
293
288
  }
294
289
 
@@ -297,7 +292,7 @@ export class PrivateExecutionOracle extends UtilityExecutionOracle implements IP
297
292
  * @param hash - Hash of the values.
298
293
  * @returns The values.
299
294
  */
300
- public privateLoadFromExecutionCache(hash: Fr): Promise<Fr[]> {
295
+ public getHashPreimage(hash: Fr): Promise<Fr[]> {
301
296
  const preimage = this.executionCache.getPreimage(hash);
302
297
  if (!preimage) {
303
298
  throw new Error(`Preimage for hash ${hash.toString()} not found in cache`);
@@ -305,12 +300,12 @@ export class PrivateExecutionOracle extends UtilityExecutionOracle implements IP
305
300
  return Promise.resolve(preimage);
306
301
  }
307
302
 
308
- override async utilityCheckNullifierExists(innerNullifier: Fr): Promise<boolean> {
303
+ override async doesNullifierExist(innerNullifier: Fr): Promise<boolean> {
309
304
  // This oracle must be overridden because while utility execution can only meaningfully check if a nullifier exists
310
305
  // in the synched block, during private execution there's also the possibility of it being pending, i.e. created
311
306
  // in the current transaction.
312
307
 
313
- this.log.debug(`Checking existence of inner nullifier ${innerNullifier}`, {
308
+ this.logger.debug(`Checking existence of inner nullifier ${innerNullifier}`, {
314
309
  contractAddress: this.contractAddress,
315
310
  });
316
311
 
@@ -318,7 +313,7 @@ export class PrivateExecutionOracle extends UtilityExecutionOracle implements IP
318
313
 
319
314
  return (
320
315
  this.noteCache.getNullifiers(this.contractAddress).has(nullifier) ||
321
- (await super.utilityCheckNullifierExists(innerNullifier))
316
+ (await super.doesNullifierExist(innerNullifier))
322
317
  );
323
318
  }
324
319
 
@@ -343,7 +338,7 @@ export class PrivateExecutionOracle extends UtilityExecutionOracle implements IP
343
338
  * @param status - The status of notes to fetch.
344
339
  * @returns Array of note data.
345
340
  */
346
- public override async utilityGetNotes(
341
+ public override async getNotes(
347
342
  owner: AztecAddress | undefined,
348
343
  storageSlot: Fr,
349
344
  numSelects: number,
@@ -365,7 +360,7 @@ export class PrivateExecutionOracle extends UtilityExecutionOracle implements IP
365
360
 
366
361
  const pendingNullifiers = this.noteCache.getNullifiers(this.callContext.contractAddress);
367
362
 
368
- const noteService = new NoteService(this.noteStore, this.aztecNode, this.anchorBlockStore, this.jobId);
363
+ const noteService = new NoteService(this.noteStore, this.aztecNode, this.anchorBlockHeader, this.jobId);
369
364
  const dbNotes = await noteService.getNotes(
370
365
  this.callContext.contractAddress,
371
366
  owner,
@@ -389,7 +384,7 @@ export class PrivateExecutionOracle extends UtilityExecutionOracle implements IP
389
384
  offset,
390
385
  });
391
386
 
392
- this.log.debug(
387
+ this.logger.debug(
393
388
  `Returning ${notes.length} notes for ${this.callContext.contractAddress} at ${storageSlot}: ${notes
394
389
  .map(n => `${n.noteNonce.toString()}:[${n.note.items.map(i => i.toString()).join(',')}]`)
395
390
  .join(', ')}`,
@@ -409,7 +404,7 @@ export class PrivateExecutionOracle extends UtilityExecutionOracle implements IP
409
404
  * @param noteHash - A hash of the new note.
410
405
  * @returns
411
406
  */
412
- public privateNotifyCreatedNote(
407
+ public notifyCreatedNote(
413
408
  owner: AztecAddress,
414
409
  storageSlot: Fr,
415
410
  randomness: Fr,
@@ -418,7 +413,7 @@ export class PrivateExecutionOracle extends UtilityExecutionOracle implements IP
418
413
  noteHash: Fr,
419
414
  counter: number,
420
415
  ) {
421
- this.log.debug(`Notified of new note with inner hash ${noteHash}`, {
416
+ this.logger.debug(`Notified of new note with inner hash ${noteHash}`, {
422
417
  contractAddress: this.callContext.contractAddress,
423
418
  storageSlot,
424
419
  randomness,
@@ -450,7 +445,7 @@ export class PrivateExecutionOracle extends UtilityExecutionOracle implements IP
450
445
  * @param innerNullifier - The pending nullifier to add in the list (not yet siloed by contract address).
451
446
  * @param noteHash - A hash of the new note.
452
447
  */
453
- public async privateNotifyNullifiedNote(innerNullifier: Fr, noteHash: Fr, counter: number) {
448
+ public async notifyNullifiedNote(innerNullifier: Fr, noteHash: Fr, counter: number) {
454
449
  const nullifiedNoteHashCounter = await this.noteCache.nullifyNote(
455
450
  this.callContext.contractAddress,
456
451
  innerNullifier,
@@ -467,19 +462,19 @@ export class PrivateExecutionOracle extends UtilityExecutionOracle implements IP
467
462
  * @param innerNullifier - The pending nullifier to add in the list (not yet siloed by contract address).
468
463
  * @param noteHash - A hash of the new note.
469
464
  */
470
- public privateNotifyCreatedNullifier(innerNullifier: Fr) {
471
- this.log.debug(`Notified of new inner nullifier ${innerNullifier}`, { contractAddress: this.contractAddress });
465
+ public notifyCreatedNullifier(innerNullifier: Fr) {
466
+ this.logger.debug(`Notified of new inner nullifier ${innerNullifier}`, { contractAddress: this.contractAddress });
472
467
  return this.noteCache.nullifierCreated(this.callContext.contractAddress, innerNullifier);
473
468
  }
474
469
 
475
470
  /**
476
- * Check if a nullifier has been emitted in the same transaction, i.e. if privateNotifyCreatedNullifier has been
471
+ * Check if a nullifier has been emitted in the same transaction, i.e. if notifyCreatedNullifier has been
477
472
  * called for this inner nullifier from the contract with the specified address.
478
473
  * @param innerNullifier - The inner nullifier to check.
479
474
  * @param contractAddress - Address of the contract that emitted the nullifier.
480
475
  * @returns A boolean indicating whether the nullifier is pending or not.
481
476
  */
482
- public async privateIsNullifierPending(innerNullifier: Fr, contractAddress: AztecAddress): Promise<boolean> {
477
+ public async isNullifierPending(innerNullifier: Fr, contractAddress: AztecAddress): Promise<boolean> {
483
478
  const siloedNullifier = await siloNullifier(contractAddress, innerNullifier);
484
479
  const isNullifierPending = this.noteCache.getNullifiers(contractAddress).has(siloedNullifier.toBigInt());
485
480
  return Promise.resolve(isNullifierPending);
@@ -492,10 +487,10 @@ export class PrivateExecutionOracle extends UtilityExecutionOracle implements IP
492
487
  * @param log - The contract class log to be emitted.
493
488
  * @param counter - The contract class log's counter.
494
489
  */
495
- public privateNotifyCreatedContractClassLog(log: ContractClassLog, counter: number) {
490
+ public notifyCreatedContractClassLog(log: ContractClassLog, counter: number) {
496
491
  this.contractClassLogs.push(new CountedContractClassLog(log, counter));
497
492
  const text = log.toBuffer().toString('hex');
498
- this.log.verbose(
493
+ this.logger.verbose(
499
494
  `Emitted log from ContractClassRegistry: "${text.length > 100 ? text.slice(0, 100) + '...' : text}"`,
500
495
  );
501
496
  }
@@ -521,7 +516,7 @@ export class PrivateExecutionOracle extends UtilityExecutionOracle implements IP
521
516
  * @param isStaticCall - Whether the call is a static call.
522
517
  * @returns The execution result.
523
518
  */
524
- async privateCallPrivateFunction(
519
+ async callPrivateFunction(
525
520
  targetContractAddress: AztecAddress,
526
521
  functionSelector: FunctionSelector,
527
522
  argsHash: Fr,
@@ -535,19 +530,19 @@ export class PrivateExecutionOracle extends UtilityExecutionOracle implements IP
535
530
  }
536
531
 
537
532
  const simulatorSetupTimer = new Timer();
538
- this.log.debug(
533
+ this.logger.debug(
539
534
  `Calling private function ${targetContractAddress}:${functionSelector} from ${this.callContext.contractAddress}`,
540
535
  );
541
536
 
542
537
  isStaticCall = isStaticCall || this.callContext.isStaticCall;
543
538
 
544
- await ensureContractSynced(
539
+ await this.contractSyncService.ensureContractSynced(
545
540
  targetContractAddress,
546
541
  functionSelector,
547
542
  this.utilityExecutor,
548
- this.aztecNode,
549
- this.contractStore,
550
543
  this.anchorBlockHeader,
544
+ this.jobId,
545
+ this.scopes,
551
546
  );
552
547
 
553
548
  const targetArtifact = await this.contractStore.getFunctionArtifactWithDebugMetadata(
@@ -559,47 +554,52 @@ export class PrivateExecutionOracle extends UtilityExecutionOracle implements IP
559
554
 
560
555
  const derivedCallContext = await this.deriveCallContext(targetContractAddress, targetArtifact, isStaticCall);
561
556
 
562
- const privateExecutionOracle = new PrivateExecutionOracle(
557
+ const privateExecutionOracle = new PrivateExecutionOracle({
563
558
  argsHash,
564
- derivedTxContext,
565
- derivedCallContext,
566
- this.anchorBlockHeader,
567
- this.utilityExecutor,
568
- this.authWitnesses,
569
- this.capsules,
570
- this.executionCache,
571
- this.noteCache,
572
- this.taggingIndexCache,
573
- this.contractStore,
574
- this.noteStore,
575
- this.keyStore,
576
- this.addressStore,
577
- this.aztecNode,
578
- this.anchorBlockStore,
579
- this.senderTaggingStore,
580
- this.recipientTaggingStore,
581
- this.senderAddressBookStore,
582
- this.capsuleStore,
583
- this.privateEventStore,
584
- this.jobId,
585
- this.totalPublicCalldataCount,
559
+ txContext: derivedTxContext,
560
+ callContext: derivedCallContext,
561
+ anchorBlockHeader: this.anchorBlockHeader,
562
+ utilityExecutor: this.utilityExecutor,
563
+ authWitnesses: this.authWitnesses,
564
+ capsules: this.capsules,
565
+ executionCache: this.executionCache,
566
+ noteCache: this.noteCache,
567
+ taggingIndexCache: this.taggingIndexCache,
568
+ contractStore: this.contractStore,
569
+ noteStore: this.noteStore,
570
+ keyStore: this.keyStore,
571
+ addressStore: this.addressStore,
572
+ aztecNode: this.aztecNode,
573
+ senderTaggingStore: this.senderTaggingStore,
574
+ recipientTaggingStore: this.recipientTaggingStore,
575
+ senderAddressBookStore: this.senderAddressBookStore,
576
+ capsuleService: this.capsuleService,
577
+ privateEventStore: this.privateEventStore,
578
+ messageContextService: this.messageContextService,
579
+ contractSyncService: this.contractSyncService,
580
+ jobId: this.jobId,
581
+ totalPublicCalldataCount: this.totalPublicCalldataCount,
586
582
  sideEffectCounter,
587
- this.log,
588
- this.scopes,
589
- this.senderForTags,
590
- this.simulator,
591
- );
583
+ log: this.logger,
584
+ scopes: this.scopes,
585
+ senderForTags: this.defaultSenderForTags,
586
+ simulator: this.simulator!,
587
+ l2TipsStore: this.l2TipsStore,
588
+ });
592
589
 
593
590
  const setupTime = simulatorSetupTimer.ms();
594
591
 
595
592
  const childExecutionResult = await executePrivateFunction(
596
- this.simulator,
593
+ this.simulator!,
597
594
  privateExecutionOracle,
598
595
  targetArtifact,
599
596
  targetContractAddress,
600
597
  functionSelector,
601
598
  );
602
599
 
600
+ // Propagate the nested call's calldata count so the parent sees its increments on subsequent enqueues.
601
+ this.totalPublicCalldataCount = privateExecutionOracle.getTotalPublicCalldataCount();
602
+
603
603
  if (isStaticCall) {
604
604
  this.#checkValidStaticCall(childExecutionResult);
605
605
  }
@@ -619,7 +619,8 @@ export class PrivateExecutionOracle extends UtilityExecutionOracle implements IP
619
619
  };
620
620
  }
621
621
 
622
- #onNewPublicFunctionCall(calldataHash: Fr) {
622
+ /** Validates the calldata preimage exists in the cache and checks cumulative calldata size is within limits. */
623
+ public assertValidPublicCalldata(calldataHash: Fr) {
623
624
  const calldata = this.executionCache.getPreimage(calldataHash);
624
625
  if (!calldata) {
625
626
  throw new Error('Calldata for public call not found in cache');
@@ -629,47 +630,18 @@ export class PrivateExecutionOracle extends UtilityExecutionOracle implements IP
629
630
  if (this.totalPublicCalldataCount > MAX_FR_CALLDATA_TO_ALL_ENQUEUED_CALLS) {
630
631
  throw new Error(`Too many total args to all enqueued public calls! (> ${MAX_FR_CALLDATA_TO_ALL_ENQUEUED_CALLS})`);
631
632
  }
632
- }
633
-
634
- /**
635
- * Verify relevant information when a public function is enqueued.
636
- * @param targetContractAddress - The address of the contract to call.
637
- * @param calldataHash - The hash of the function selector and arguments.
638
- * @param sideEffectCounter - The side effect counter at the start of the call.
639
- * @param isStaticCall - Whether the call is a static call.
640
- */
641
- public privateNotifyEnqueuedPublicFunctionCall(
642
- _targetContractAddress: AztecAddress,
643
- calldataHash: Fr,
644
- _sideEffectCounter: number,
645
- _isStaticCall: boolean,
646
- ) {
647
- this.#onNewPublicFunctionCall(calldataHash);
648
633
  return Promise.resolve();
649
634
  }
650
635
 
651
- /**
652
- * Verify relevant information when a public teardown function is set.
653
- * @param targetContractAddress - The address of the contract to call.
654
- * @param argsHash - The arguments hash to pass to the function.
655
- * @param sideEffectCounter - The side effect counter at the start of the call.
656
- * @param isStaticCall - Whether the call is a static call.
657
- */
658
- public privateNotifySetPublicTeardownFunctionCall(
659
- _targetContractAddress: AztecAddress,
660
- calldataHash: Fr,
661
- _sideEffectCounter: number,
662
- _isStaticCall: boolean,
663
- ) {
664
- this.#onNewPublicFunctionCall(calldataHash);
665
- return Promise.resolve();
636
+ public getTotalPublicCalldataCount(): number {
637
+ return this.totalPublicCalldataCount;
666
638
  }
667
639
 
668
- public privateNotifySetMinRevertibleSideEffectCounter(minRevertibleSideEffectCounter: number): Promise<void> {
640
+ public notifyRevertiblePhaseStart(minRevertibleSideEffectCounter: number): Promise<void> {
669
641
  return this.noteCache.setMinRevertibleSideEffectCounter(minRevertibleSideEffectCounter);
670
642
  }
671
643
 
672
- public privateIsSideEffectCounterRevertible(sideEffectCounter: number): Promise<boolean> {
644
+ public isExecutionInRevertiblePhase(sideEffectCounter: number): Promise<boolean> {
673
645
  return Promise.resolve(this.noteCache.isSideEffectCounterRevertible(sideEffectCounter));
674
646
  }
675
647
 
@@ -696,9 +668,4 @@ export class PrivateExecutionOracle extends UtilityExecutionOracle implements IP
696
668
  public getDebugFunctionName() {
697
669
  return this.contractStore.getDebugFunctionName(this.contractAddress, this.callContext.functionSelector);
698
670
  }
699
-
700
- public utilityEmitOffchainEffect(data: Fr[]): Promise<void> {
701
- this.offchainEffects.push({ data });
702
- return Promise.resolve();
703
- }
704
671
  }