@aztec/pxe 0.0.1-commit.3469e52 → 0.0.1-commit.358457c

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 (222) hide show
  1. package/dest/access_scopes.d.ts +9 -0
  2. package/dest/access_scopes.d.ts.map +1 -0
  3. package/dest/access_scopes.js +6 -0
  4. package/dest/bin/check_oracle_version.js +1 -1
  5. package/dest/block_synchronizer/block_synchronizer.d.ts +9 -5
  6. package/dest/block_synchronizer/block_synchronizer.d.ts.map +1 -1
  7. package/dest/block_synchronizer/block_synchronizer.js +62 -16
  8. package/dest/config/index.d.ts +3 -1
  9. package/dest/config/index.d.ts.map +1 -1
  10. package/dest/config/index.js +17 -0
  11. package/dest/config/package_info.js +1 -1
  12. package/dest/contract_function_simulator/contract_function_simulator.d.ts +54 -30
  13. package/dest/contract_function_simulator/contract_function_simulator.d.ts.map +1 -1
  14. package/dest/contract_function_simulator/contract_function_simulator.js +175 -74
  15. package/dest/contract_function_simulator/noir-structs/event_validation_request.d.ts +1 -1
  16. package/dest/contract_function_simulator/noir-structs/event_validation_request.js +2 -2
  17. package/dest/contract_function_simulator/noir-structs/note_validation_request.d.ts +3 -3
  18. package/dest/contract_function_simulator/noir-structs/note_validation_request.d.ts.map +1 -1
  19. package/dest/contract_function_simulator/noir-structs/note_validation_request.js +2 -2
  20. package/dest/contract_function_simulator/oracle/interfaces.d.ts +15 -12
  21. package/dest/contract_function_simulator/oracle/interfaces.d.ts.map +1 -1
  22. package/dest/contract_function_simulator/oracle/oracle.d.ts +7 -5
  23. package/dest/contract_function_simulator/oracle/oracle.d.ts.map +1 -1
  24. package/dest/contract_function_simulator/oracle/oracle.js +51 -29
  25. package/dest/contract_function_simulator/oracle/private_execution.d.ts +2 -22
  26. package/dest/contract_function_simulator/oracle/private_execution.d.ts.map +1 -1
  27. package/dest/contract_function_simulator/oracle/private_execution.js +0 -37
  28. package/dest/contract_function_simulator/oracle/private_execution_oracle.d.ts +44 -36
  29. package/dest/contract_function_simulator/oracle/private_execution_oracle.d.ts.map +1 -1
  30. package/dest/contract_function_simulator/oracle/private_execution_oracle.js +79 -23
  31. package/dest/contract_function_simulator/oracle/utility_execution_oracle.d.ts +62 -30
  32. package/dest/contract_function_simulator/oracle/utility_execution_oracle.d.ts.map +1 -1
  33. package/dest/contract_function_simulator/oracle/utility_execution_oracle.js +107 -88
  34. package/dest/contract_logging.d.ts +22 -0
  35. package/dest/contract_logging.d.ts.map +1 -0
  36. package/dest/contract_logging.js +23 -0
  37. package/dest/contract_sync/contract_sync_service.d.ts +43 -0
  38. package/dest/contract_sync/contract_sync_service.d.ts.map +1 -0
  39. package/dest/contract_sync/contract_sync_service.js +97 -0
  40. package/dest/contract_sync/helpers.d.ts +29 -0
  41. package/dest/contract_sync/helpers.d.ts.map +1 -0
  42. package/dest/contract_sync/helpers.js +55 -0
  43. package/dest/debug/pxe_debug_utils.d.ts +24 -10
  44. package/dest/debug/pxe_debug_utils.d.ts.map +1 -1
  45. package/dest/debug/pxe_debug_utils.js +28 -17
  46. package/dest/entrypoints/client/bundle/index.d.ts +4 -1
  47. package/dest/entrypoints/client/bundle/index.d.ts.map +1 -1
  48. package/dest/entrypoints/client/bundle/index.js +3 -0
  49. package/dest/entrypoints/client/bundle/utils.d.ts +1 -1
  50. package/dest/entrypoints/client/bundle/utils.d.ts.map +1 -1
  51. package/dest/entrypoints/client/bundle/utils.js +21 -7
  52. package/dest/entrypoints/client/lazy/index.d.ts +4 -1
  53. package/dest/entrypoints/client/lazy/index.d.ts.map +1 -1
  54. package/dest/entrypoints/client/lazy/index.js +3 -0
  55. package/dest/entrypoints/client/lazy/utils.d.ts +2 -2
  56. package/dest/entrypoints/client/lazy/utils.d.ts.map +1 -1
  57. package/dest/entrypoints/client/lazy/utils.js +22 -8
  58. package/dest/entrypoints/pxe_creation_options.d.ts +3 -2
  59. package/dest/entrypoints/pxe_creation_options.d.ts.map +1 -1
  60. package/dest/entrypoints/server/index.d.ts +4 -1
  61. package/dest/entrypoints/server/index.d.ts.map +1 -1
  62. package/dest/entrypoints/server/index.js +3 -0
  63. package/dest/entrypoints/server/utils.d.ts +1 -1
  64. package/dest/entrypoints/server/utils.d.ts.map +1 -1
  65. package/dest/entrypoints/server/utils.js +28 -9
  66. package/dest/events/event_service.d.ts +5 -6
  67. package/dest/events/event_service.d.ts.map +1 -1
  68. package/dest/events/event_service.js +6 -7
  69. package/dest/job_coordinator/job_coordinator.d.ts +3 -2
  70. package/dest/job_coordinator/job_coordinator.d.ts.map +1 -1
  71. package/dest/job_coordinator/job_coordinator.js +3 -2
  72. package/dest/logs/log_service.d.ts +7 -5
  73. package/dest/logs/log_service.d.ts.map +1 -1
  74. package/dest/logs/log_service.js +25 -29
  75. package/dest/notes/note_service.d.ts +9 -8
  76. package/dest/notes/note_service.d.ts.map +1 -1
  77. package/dest/notes/note_service.js +17 -16
  78. package/dest/notes_filter.d.ts +25 -0
  79. package/dest/notes_filter.d.ts.map +1 -0
  80. package/dest/notes_filter.js +4 -0
  81. package/dest/oracle_version.d.ts +3 -3
  82. package/dest/oracle_version.d.ts.map +1 -1
  83. package/dest/oracle_version.js +4 -3
  84. package/dest/private_kernel/hints/compute_tx_expiration_timestamp.d.ts +4 -0
  85. package/dest/private_kernel/hints/compute_tx_expiration_timestamp.d.ts.map +1 -0
  86. package/dest/private_kernel/hints/{compute_tx_include_by_timestamp.js → compute_tx_expiration_timestamp.js} +12 -12
  87. package/dest/private_kernel/hints/index.d.ts +1 -1
  88. package/dest/private_kernel/hints/index.js +1 -1
  89. package/dest/private_kernel/hints/private_kernel_reset_private_inputs_builder.d.ts +4 -3
  90. package/dest/private_kernel/hints/private_kernel_reset_private_inputs_builder.d.ts.map +1 -1
  91. package/dest/private_kernel/hints/private_kernel_reset_private_inputs_builder.js +129 -68
  92. package/dest/private_kernel/hints/test_utils.d.ts +122 -0
  93. package/dest/private_kernel/hints/test_utils.d.ts.map +1 -0
  94. package/dest/private_kernel/hints/test_utils.js +203 -0
  95. package/dest/private_kernel/private_kernel_execution_prover.d.ts +3 -2
  96. package/dest/private_kernel/private_kernel_execution_prover.d.ts.map +1 -1
  97. package/dest/private_kernel/private_kernel_execution_prover.js +21 -13
  98. package/dest/private_kernel/private_kernel_oracle.d.ts +8 -4
  99. package/dest/private_kernel/private_kernel_oracle.d.ts.map +1 -1
  100. package/dest/private_kernel/private_kernel_oracle.js +7 -3
  101. package/dest/pxe.d.ts +69 -23
  102. package/dest/pxe.d.ts.map +1 -1
  103. package/dest/pxe.js +102 -66
  104. package/dest/storage/address_store/address_store.d.ts +1 -1
  105. package/dest/storage/address_store/address_store.d.ts.map +1 -1
  106. package/dest/storage/address_store/address_store.js +12 -11
  107. package/dest/storage/anchor_block_store/anchor_block_store.d.ts +9 -1
  108. package/dest/storage/anchor_block_store/anchor_block_store.d.ts.map +1 -1
  109. package/dest/storage/anchor_block_store/anchor_block_store.js +8 -1
  110. package/dest/storage/capsule_store/capsule_store.js +6 -8
  111. package/dest/storage/contract_store/contract_store.d.ts +42 -16
  112. package/dest/storage/contract_store/contract_store.d.ts.map +1 -1
  113. package/dest/storage/contract_store/contract_store.js +157 -84
  114. package/dest/storage/metadata.d.ts +1 -1
  115. package/dest/storage/metadata.js +1 -1
  116. package/dest/storage/note_store/note_store.d.ts +47 -49
  117. package/dest/storage/note_store/note_store.d.ts.map +1 -1
  118. package/dest/storage/note_store/note_store.js +278 -252
  119. package/dest/storage/note_store/stored_note.d.ts +16 -0
  120. package/dest/storage/note_store/stored_note.d.ts.map +1 -0
  121. package/dest/storage/note_store/stored_note.js +43 -0
  122. package/dest/storage/private_event_store/private_event_store.d.ts +17 -4
  123. package/dest/storage/private_event_store/private_event_store.d.ts.map +1 -1
  124. package/dest/storage/private_event_store/private_event_store.js +198 -147
  125. package/dest/storage/private_event_store/stored_private_event.d.ts +23 -0
  126. package/dest/storage/private_event_store/stored_private_event.d.ts.map +1 -0
  127. package/dest/storage/private_event_store/stored_private_event.js +56 -0
  128. package/dest/storage/tagging_store/recipient_tagging_store.d.ts +1 -1
  129. package/dest/storage/tagging_store/recipient_tagging_store.d.ts.map +1 -1
  130. package/dest/storage/tagging_store/recipient_tagging_store.js +31 -19
  131. package/dest/storage/tagging_store/sender_address_book_store.d.ts +1 -1
  132. package/dest/storage/tagging_store/sender_address_book_store.d.ts.map +1 -1
  133. package/dest/storage/tagging_store/sender_address_book_store.js +20 -14
  134. package/dest/storage/tagging_store/sender_tagging_store.d.ts +1 -1
  135. package/dest/storage/tagging_store/sender_tagging_store.d.ts.map +1 -1
  136. package/dest/storage/tagging_store/sender_tagging_store.js +183 -113
  137. package/dest/tagging/get_all_logs_by_tags.d.ts +24 -0
  138. package/dest/tagging/get_all_logs_by_tags.d.ts.map +1 -0
  139. package/dest/tagging/get_all_logs_by_tags.js +60 -0
  140. package/dest/tagging/index.d.ts +2 -1
  141. package/dest/tagging/index.d.ts.map +1 -1
  142. package/dest/tagging/index.js +1 -0
  143. package/dest/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.d.ts +3 -2
  144. package/dest/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.d.ts.map +1 -1
  145. package/dest/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.js +6 -6
  146. package/dest/tagging/recipient_sync/utils/find_highest_indexes.js +2 -2
  147. package/dest/tagging/recipient_sync/utils/load_logs_for_range.d.ts +3 -2
  148. package/dest/tagging/recipient_sync/utils/load_logs_for_range.d.ts.map +1 -1
  149. package/dest/tagging/recipient_sync/utils/load_logs_for_range.js +5 -2
  150. package/dest/tagging/sender_sync/sync_sender_tagging_indexes.d.ts +3 -2
  151. package/dest/tagging/sender_sync/sync_sender_tagging_indexes.d.ts.map +1 -1
  152. package/dest/tagging/sender_sync/sync_sender_tagging_indexes.js +2 -2
  153. package/dest/tagging/sender_sync/utils/get_status_change_of_pending.d.ts +1 -1
  154. package/dest/tagging/sender_sync/utils/get_status_change_of_pending.d.ts.map +1 -1
  155. package/dest/tagging/sender_sync/utils/get_status_change_of_pending.js +5 -8
  156. package/dest/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.d.ts +3 -2
  157. package/dest/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.d.ts.map +1 -1
  158. package/dest/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.js +7 -4
  159. package/package.json +25 -16
  160. package/src/access_scopes.ts +9 -0
  161. package/src/bin/check_oracle_version.ts +1 -0
  162. package/src/block_synchronizer/block_synchronizer.ts +76 -33
  163. package/src/config/index.ts +14 -0
  164. package/src/config/package_info.ts +1 -1
  165. package/src/contract_function_simulator/contract_function_simulator.ts +324 -137
  166. package/src/contract_function_simulator/noir-structs/event_validation_request.ts +2 -2
  167. package/src/contract_function_simulator/noir-structs/note_validation_request.ts +2 -2
  168. package/src/contract_function_simulator/oracle/interfaces.ts +20 -11
  169. package/src/contract_function_simulator/oracle/oracle.ts +56 -26
  170. package/src/contract_function_simulator/oracle/private_execution.ts +1 -60
  171. package/src/contract_function_simulator/oracle/private_execution_oracle.ts +115 -102
  172. package/src/contract_function_simulator/oracle/utility_execution_oracle.ts +172 -95
  173. package/src/contract_logging.ts +39 -0
  174. package/src/contract_sync/contract_sync_service.ts +152 -0
  175. package/src/contract_sync/helpers.ts +98 -0
  176. package/src/debug/pxe_debug_utils.ts +63 -18
  177. package/src/entrypoints/client/bundle/index.ts +3 -0
  178. package/src/entrypoints/client/bundle/utils.ts +16 -15
  179. package/src/entrypoints/client/lazy/index.ts +3 -0
  180. package/src/entrypoints/client/lazy/utils.ts +17 -15
  181. package/src/entrypoints/pxe_creation_options.ts +2 -1
  182. package/src/entrypoints/server/index.ts +3 -0
  183. package/src/entrypoints/server/utils.ts +22 -26
  184. package/src/events/event_service.ts +5 -7
  185. package/src/job_coordinator/job_coordinator.ts +4 -3
  186. package/src/logs/log_service.ts +37 -33
  187. package/src/notes/note_service.ts +24 -22
  188. package/src/notes_filter.ts +26 -0
  189. package/src/oracle_version.ts +4 -3
  190. package/src/private_kernel/hints/{compute_tx_include_by_timestamp.ts → compute_tx_expiration_timestamp.ts} +13 -13
  191. package/src/private_kernel/hints/index.ts +1 -1
  192. package/src/private_kernel/hints/private_kernel_reset_private_inputs_builder.ts +164 -117
  193. package/src/private_kernel/hints/test_utils.ts +325 -0
  194. package/src/private_kernel/private_kernel_execution_prover.ts +25 -15
  195. package/src/private_kernel/private_kernel_oracle.ts +9 -9
  196. package/src/pxe.ts +209 -111
  197. package/src/storage/address_store/address_store.ts +15 -15
  198. package/src/storage/anchor_block_store/anchor_block_store.ts +8 -0
  199. package/src/storage/capsule_store/capsule_store.ts +8 -8
  200. package/src/storage/contract_store/contract_store.ts +186 -96
  201. package/src/storage/metadata.ts +1 -1
  202. package/src/storage/note_store/note_store.ts +321 -318
  203. package/src/storage/note_store/stored_note.ts +48 -0
  204. package/src/storage/private_event_store/private_event_store.ts +250 -190
  205. package/src/storage/private_event_store/stored_private_event.ts +73 -0
  206. package/src/storage/tagging_store/recipient_tagging_store.ts +31 -21
  207. package/src/storage/tagging_store/sender_address_book_store.ts +20 -14
  208. package/src/storage/tagging_store/sender_tagging_store.ts +210 -126
  209. package/src/tagging/get_all_logs_by_tags.ts +92 -0
  210. package/src/tagging/index.ts +1 -0
  211. package/src/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.ts +15 -5
  212. package/src/tagging/recipient_sync/utils/find_highest_indexes.ts +2 -2
  213. package/src/tagging/recipient_sync/utils/load_logs_for_range.ts +7 -1
  214. package/src/tagging/sender_sync/sync_sender_tagging_indexes.ts +3 -1
  215. package/src/tagging/sender_sync/utils/get_status_change_of_pending.ts +5 -17
  216. package/src/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.ts +12 -3
  217. package/dest/private_kernel/hints/compute_tx_include_by_timestamp.d.ts +0 -4
  218. package/dest/private_kernel/hints/compute_tx_include_by_timestamp.d.ts.map +0 -1
  219. package/dest/tree_membership/tree_membership_service.d.ts +0 -50
  220. package/dest/tree_membership/tree_membership_service.d.ts.map +0 -1
  221. package/dest/tree_membership/tree_membership_service.js +0 -75
  222. package/src/tree_membership/tree_membership_service.ts +0 -97
@@ -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,33 +11,23 @@ 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
15
  import { siloNullifier } from '@aztec/stdlib/hash';
18
- import type { AztecNode } from '@aztec/stdlib/interfaces/client';
19
16
  import { PrivateContextInputs } from '@aztec/stdlib/kernel';
20
17
  import { type ContractClassLog, DirectionalAppTaggingSecret, type PreTag } from '@aztec/stdlib/logs';
21
18
  import { Tag } from '@aztec/stdlib/logs';
22
19
  import { Note, type NoteStatus } from '@aztec/stdlib/note';
23
20
  import {
24
- type BlockHeader,
25
21
  CallContext,
26
- Capsule,
27
22
  CountedContractClassLog,
28
23
  NoteAndSlot,
29
24
  PrivateCallExecutionResult,
30
25
  type TxContext,
31
26
  } from '@aztec/stdlib/tx';
32
27
 
28
+ import type { AccessScopes } from '../../access_scopes.js';
29
+ import type { ContractSyncService } from '../../contract_sync/contract_sync_service.js';
33
30
  import { NoteService } from '../../notes/note_service.js';
34
- import type { AddressStore } from '../../storage/address_store/address_store.js';
35
- import type { AnchorBlockStore } from '../../storage/anchor_block_store/anchor_block_store.js';
36
- import type { CapsuleStore } from '../../storage/capsule_store/capsule_store.js';
37
- import type { ContractStore } from '../../storage/contract_store/contract_store.js';
38
- import type { NoteStore } from '../../storage/note_store/note_store.js';
39
- import type { PrivateEventStore } from '../../storage/private_event_store/private_event_store.js';
40
- import type { RecipientTaggingStore } from '../../storage/tagging_store/recipient_tagging_store.js';
41
- import type { SenderAddressBookStore } from '../../storage/tagging_store/sender_address_book_store.js';
42
31
  import type { SenderTaggingStore } from '../../storage/tagging_store/sender_tagging_store.js';
43
32
  import { syncSenderTaggingIndexes } from '../../tagging/index.js';
44
33
  import type { ExecutionNoteCache } from '../execution_note_cache.js';
@@ -46,8 +35,26 @@ import { ExecutionTaggingIndexCache } from '../execution_tagging_index_cache.js'
46
35
  import type { HashedValuesCache } from '../hashed_values_cache.js';
47
36
  import { pickNotes } from '../pick_notes.js';
48
37
  import type { IPrivateExecutionOracle, NoteData } from './interfaces.js';
49
- import { executePrivateFunction, verifyCurrentClassId } from './private_execution.js';
50
- import { UtilityExecutionOracle } from './utility_execution_oracle.js';
38
+ import { executePrivateFunction } from './private_execution.js';
39
+ import { UtilityExecutionOracle, type UtilityExecutionOracleArgs } from './utility_execution_oracle.js';
40
+
41
+ /** Args for PrivateExecutionOracle constructor. */
42
+ export type PrivateExecutionOracleArgs = Omit<UtilityExecutionOracleArgs, 'contractAddress'> & {
43
+ argsHash: Fr;
44
+ txContext: TxContext;
45
+ callContext: CallContext;
46
+ /** Needed to trigger contract synchronization before nested calls */
47
+ utilityExecutor: (call: FunctionCall, scopes: AccessScopes) => Promise<void>;
48
+ executionCache: HashedValuesCache;
49
+ noteCache: ExecutionNoteCache;
50
+ taggingIndexCache: ExecutionTaggingIndexCache;
51
+ senderTaggingStore: SenderTaggingStore;
52
+ contractSyncService: ContractSyncService;
53
+ totalPublicCalldataCount?: number;
54
+ sideEffectCounter?: number;
55
+ senderForTags?: AztecAddress;
56
+ simulator?: CircuitSimulator;
57
+ };
51
58
 
52
59
  /**
53
60
  * The execution oracle for the private part of a transaction.
@@ -69,58 +76,39 @@ export class PrivateExecutionOracle extends UtilityExecutionOracle implements IP
69
76
  private offchainEffects: { data: Fr[] }[] = [];
70
77
  private nestedExecutionResults: PrivateCallExecutionResult[] = [];
71
78
 
72
- constructor(
73
- private readonly argsHash: Fr,
74
- private readonly txContext: TxContext,
75
- private readonly callContext: CallContext,
76
- /** Header of a block whose state is used during private execution (not the block the transaction is included in). */
77
- protected override readonly anchorBlockHeader: BlockHeader,
78
- /** Needed to trigger contract synchronization before nested calls */
79
- private readonly utilityExecutor: (call: FunctionCall) => Promise<void>,
80
- /** List of transient auth witnesses to be used during this simulation */
81
- authWitnesses: AuthWitness[],
82
- capsules: Capsule[],
83
- private readonly executionCache: HashedValuesCache,
84
- private readonly noteCache: ExecutionNoteCache,
85
- private readonly taggingIndexCache: ExecutionTaggingIndexCache,
86
- contractStore: ContractStore,
87
- noteStore: NoteStore,
88
- keyStore: KeyStore,
89
- addressStore: AddressStore,
90
- aztecNode: AztecNode,
91
- anchorBlockStore: AnchorBlockStore,
92
- private readonly senderTaggingStore: SenderTaggingStore,
93
- recipientTaggingStore: RecipientTaggingStore,
94
- senderAddressBookStore: SenderAddressBookStore,
95
- capsuleStore: CapsuleStore,
96
- privateEventStore: PrivateEventStore,
97
- jobId: string,
98
- private totalPublicCalldataCount: number = 0,
99
- protected sideEffectCounter: number = 0,
100
- log = createLogger('simulator:client_execution_context'),
101
- scopes?: AztecAddress[],
102
- private senderForTags?: AztecAddress,
103
- private simulator?: CircuitSimulator,
104
- ) {
105
- super(
106
- callContext.contractAddress,
107
- authWitnesses,
108
- capsules,
109
- anchorBlockHeader,
110
- contractStore,
111
- noteStore,
112
- keyStore,
113
- addressStore,
114
- aztecNode,
115
- anchorBlockStore,
116
- recipientTaggingStore,
117
- senderAddressBookStore,
118
- capsuleStore,
119
- privateEventStore,
120
- jobId,
121
- log,
122
- scopes,
123
- );
79
+ private readonly argsHash: Fr;
80
+ private readonly txContext: TxContext;
81
+ private readonly callContext: CallContext;
82
+ private readonly utilityExecutor: (call: FunctionCall, scopes: AccessScopes) => Promise<void>;
83
+ private readonly executionCache: HashedValuesCache;
84
+ private readonly noteCache: ExecutionNoteCache;
85
+ private readonly taggingIndexCache: ExecutionTaggingIndexCache;
86
+ private readonly senderTaggingStore: SenderTaggingStore;
87
+ private readonly contractSyncService: ContractSyncService;
88
+ private totalPublicCalldataCount: number;
89
+ protected sideEffectCounter: number;
90
+ private senderForTags?: AztecAddress;
91
+ private readonly simulator?: CircuitSimulator;
92
+
93
+ constructor(args: PrivateExecutionOracleArgs) {
94
+ super({
95
+ ...args,
96
+ contractAddress: args.callContext.contractAddress,
97
+ log: args.log ?? createLogger('simulator:client_execution_context'),
98
+ });
99
+ this.argsHash = args.argsHash;
100
+ this.txContext = args.txContext;
101
+ this.callContext = args.callContext;
102
+ this.utilityExecutor = args.utilityExecutor;
103
+ this.executionCache = args.executionCache;
104
+ this.noteCache = args.noteCache;
105
+ this.taggingIndexCache = args.taggingIndexCache;
106
+ this.senderTaggingStore = args.senderTaggingStore;
107
+ this.contractSyncService = args.contractSyncService;
108
+ this.totalPublicCalldataCount = args.totalPublicCalldataCount ?? 0;
109
+ this.sideEffectCounter = args.sideEffectCounter ?? 0;
110
+ this.senderForTags = args.senderForTags;
111
+ this.simulator = args.simulator;
124
112
  }
125
113
 
126
114
  public getPrivateContextInputs(): PrivateContextInputs {
@@ -244,7 +232,7 @@ export class PrivateExecutionOracle extends UtilityExecutionOracle implements IP
244
232
  sender: AztecAddress,
245
233
  recipient: AztecAddress,
246
234
  ) {
247
- const senderCompleteAddress = await this.getCompleteAddress(sender);
235
+ const senderCompleteAddress = await this.getCompleteAddressOrFail(sender);
248
236
  const senderIvsk = await this.keyStore.getMasterIncomingViewingSecretKey(sender);
249
237
  return DirectionalAppTaggingSecret.compute(
250
238
  senderCompleteAddress,
@@ -265,7 +253,14 @@ export class PrivateExecutionOracle extends UtilityExecutionOracle implements IP
265
253
  // This is a tagging secret we've not yet used in this tx, so first sync our store to make sure its indices
266
254
  // are up to date. We do this here because this store is not synced as part of the global sync because
267
255
  // that'd be wasteful as most tagging secrets are not used in each tx.
268
- await syncSenderTaggingIndexes(secret, this.contractAddress, this.aztecNode, this.senderTaggingStore, this.jobId);
256
+ await syncSenderTaggingIndexes(
257
+ secret,
258
+ this.contractAddress,
259
+ this.aztecNode,
260
+ this.senderTaggingStore,
261
+ await this.anchorBlockHeader.hash(),
262
+ this.jobId,
263
+ );
269
264
 
270
265
  const lastUsedIndex = await this.senderTaggingStore.getLastUsedIndex(secret, this.jobId);
271
266
  // If lastUsedIndex is undefined, we've never used this secret, so start from 0
@@ -356,7 +351,7 @@ export class PrivateExecutionOracle extends UtilityExecutionOracle implements IP
356
351
 
357
352
  const pendingNullifiers = this.noteCache.getNullifiers(this.callContext.contractAddress);
358
353
 
359
- const noteService = new NoteService(this.noteStore, this.aztecNode, this.anchorBlockStore);
354
+ const noteService = new NoteService(this.noteStore, this.aztecNode, this.anchorBlockHeader, this.jobId);
360
355
  const dbNotes = await noteService.getNotes(
361
356
  this.callContext.contractAddress,
362
357
  owner,
@@ -463,6 +458,19 @@ export class PrivateExecutionOracle extends UtilityExecutionOracle implements IP
463
458
  return this.noteCache.nullifierCreated(this.callContext.contractAddress, innerNullifier);
464
459
  }
465
460
 
461
+ /**
462
+ * Check if a nullifier has been emitted in the same transaction, i.e. if privateNotifyCreatedNullifier has been
463
+ * called for this inner nullifier from the contract with the specified address.
464
+ * @param innerNullifier - The inner nullifier to check.
465
+ * @param contractAddress - Address of the contract that emitted the nullifier.
466
+ * @returns A boolean indicating whether the nullifier is pending or not.
467
+ */
468
+ public async privateIsNullifierPending(innerNullifier: Fr, contractAddress: AztecAddress): Promise<boolean> {
469
+ const siloedNullifier = await siloNullifier(contractAddress, innerNullifier);
470
+ const isNullifierPending = this.noteCache.getNullifiers(contractAddress).has(siloedNullifier.toBigInt());
471
+ return Promise.resolve(isNullifierPending);
472
+ }
473
+
466
474
  /**
467
475
  * Emit a contract class log.
468
476
  * This fn exists because we only carry a poseidon hash through the kernels, and need to
@@ -519,9 +527,14 @@ export class PrivateExecutionOracle extends UtilityExecutionOracle implements IP
519
527
 
520
528
  isStaticCall = isStaticCall || this.callContext.isStaticCall;
521
529
 
522
- await verifyCurrentClassId(targetContractAddress, this.aztecNode, this.contractStore, this.anchorBlockHeader);
523
-
524
- await this.contractStore.syncPrivateState(targetContractAddress, functionSelector, this.utilityExecutor);
530
+ await this.contractSyncService.ensureContractSynced(
531
+ targetContractAddress,
532
+ functionSelector,
533
+ this.utilityExecutor,
534
+ this.anchorBlockHeader,
535
+ this.jobId,
536
+ this.scopes,
537
+ );
525
538
 
526
539
  const targetArtifact = await this.contractStore.getFunctionArtifactWithDebugMetadata(
527
540
  targetContractAddress,
@@ -532,41 +545,41 @@ export class PrivateExecutionOracle extends UtilityExecutionOracle implements IP
532
545
 
533
546
  const derivedCallContext = await this.deriveCallContext(targetContractAddress, targetArtifact, isStaticCall);
534
547
 
535
- const privateExecutionOracle = new PrivateExecutionOracle(
548
+ const privateExecutionOracle = new PrivateExecutionOracle({
536
549
  argsHash,
537
- derivedTxContext,
538
- derivedCallContext,
539
- this.anchorBlockHeader,
540
- this.utilityExecutor,
541
- this.authWitnesses,
542
- this.capsules,
543
- this.executionCache,
544
- this.noteCache,
545
- this.taggingIndexCache,
546
- this.contractStore,
547
- this.noteStore,
548
- this.keyStore,
549
- this.addressStore,
550
- this.aztecNode,
551
- this.anchorBlockStore,
552
- this.senderTaggingStore,
553
- this.recipientTaggingStore,
554
- this.senderAddressBookStore,
555
- this.capsuleStore,
556
- this.privateEventStore,
557
- this.jobId,
558
- this.totalPublicCalldataCount,
550
+ txContext: derivedTxContext,
551
+ callContext: derivedCallContext,
552
+ anchorBlockHeader: this.anchorBlockHeader,
553
+ utilityExecutor: this.utilityExecutor,
554
+ authWitnesses: this.authWitnesses,
555
+ capsules: this.capsules,
556
+ executionCache: this.executionCache,
557
+ noteCache: this.noteCache,
558
+ taggingIndexCache: this.taggingIndexCache,
559
+ contractStore: this.contractStore,
560
+ noteStore: this.noteStore,
561
+ keyStore: this.keyStore,
562
+ addressStore: this.addressStore,
563
+ aztecNode: this.aztecNode,
564
+ senderTaggingStore: this.senderTaggingStore,
565
+ recipientTaggingStore: this.recipientTaggingStore,
566
+ senderAddressBookStore: this.senderAddressBookStore,
567
+ capsuleStore: this.capsuleStore,
568
+ privateEventStore: this.privateEventStore,
569
+ contractSyncService: this.contractSyncService,
570
+ jobId: this.jobId,
571
+ totalPublicCalldataCount: this.totalPublicCalldataCount,
559
572
  sideEffectCounter,
560
- this.log,
561
- this.scopes,
562
- this.senderForTags,
563
- this.simulator,
564
- );
573
+ log: this.log,
574
+ scopes: this.scopes,
575
+ senderForTags: this.senderForTags,
576
+ simulator: this.simulator!,
577
+ });
565
578
 
566
579
  const setupTime = simulatorSetupTimer.ms();
567
580
 
568
581
  const childExecutionResult = await executePrivateFunction(
569
- this.simulator,
582
+ this.simulator!,
570
583
  privateExecutionOracle,
571
584
  targetArtifact,
572
585
  targetContractAddress,