@aztec/pxe 0.0.1-commit.f146247c → 0.0.1-commit.f1b29a41e

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 (212) 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/block_synchronizer/block_synchronizer.d.ts +4 -2
  5. package/dest/block_synchronizer/block_synchronizer.d.ts.map +1 -1
  6. package/dest/block_synchronizer/block_synchronizer.js +13 -1
  7. package/dest/config/index.d.ts +2 -2
  8. package/dest/config/index.d.ts.map +1 -1
  9. package/dest/config/index.js +1 -1
  10. package/dest/config/package_info.js +1 -1
  11. package/dest/contract_function_simulator/contract_function_simulator.d.ts +61 -29
  12. package/dest/contract_function_simulator/contract_function_simulator.d.ts.map +1 -1
  13. package/dest/contract_function_simulator/contract_function_simulator.js +201 -72
  14. package/dest/contract_function_simulator/execution_tagging_index_cache.d.ts +7 -7
  15. package/dest/contract_function_simulator/execution_tagging_index_cache.d.ts.map +1 -1
  16. package/dest/contract_function_simulator/execution_tagging_index_cache.js +19 -11
  17. package/dest/contract_function_simulator/index.d.ts +2 -1
  18. package/dest/contract_function_simulator/index.d.ts.map +1 -1
  19. package/dest/contract_function_simulator/index.js +1 -0
  20. package/dest/contract_function_simulator/noir-structs/event_validation_request.d.ts +3 -5
  21. package/dest/contract_function_simulator/noir-structs/event_validation_request.d.ts.map +1 -1
  22. package/dest/contract_function_simulator/noir-structs/event_validation_request.js +7 -9
  23. package/dest/contract_function_simulator/noir-structs/log_retrieval_response.d.ts +1 -1
  24. package/dest/contract_function_simulator/noir-structs/log_retrieval_response.d.ts.map +1 -1
  25. package/dest/contract_function_simulator/noir-structs/log_retrieval_response.js +1 -3
  26. package/dest/contract_function_simulator/noir-structs/note_validation_request.d.ts +3 -6
  27. package/dest/contract_function_simulator/noir-structs/note_validation_request.d.ts.map +1 -1
  28. package/dest/contract_function_simulator/noir-structs/note_validation_request.js +5 -10
  29. package/dest/contract_function_simulator/oracle/interfaces.d.ts +50 -45
  30. package/dest/contract_function_simulator/oracle/interfaces.d.ts.map +1 -1
  31. package/dest/contract_function_simulator/oracle/legacy_oracle_mappings.d.ts +9 -0
  32. package/dest/contract_function_simulator/oracle/legacy_oracle_mappings.d.ts.map +1 -0
  33. package/dest/contract_function_simulator/oracle/legacy_oracle_mappings.js +38 -0
  34. package/dest/contract_function_simulator/oracle/oracle.d.ts +64 -44
  35. package/dest/contract_function_simulator/oracle/oracle.d.ts.map +1 -1
  36. package/dest/contract_function_simulator/oracle/oracle.js +206 -104
  37. package/dest/contract_function_simulator/oracle/private_execution.js +5 -3
  38. package/dest/contract_function_simulator/oracle/private_execution_oracle.d.ts +54 -78
  39. package/dest/contract_function_simulator/oracle/private_execution_oracle.d.ts.map +1 -1
  40. package/dest/contract_function_simulator/oracle/private_execution_oracle.js +99 -86
  41. package/dest/contract_function_simulator/oracle/utility_execution_oracle.d.ts +93 -53
  42. package/dest/contract_function_simulator/oracle/utility_execution_oracle.d.ts.map +1 -1
  43. package/dest/contract_function_simulator/oracle/utility_execution_oracle.js +233 -119
  44. package/dest/contract_logging.d.ts +27 -0
  45. package/dest/contract_logging.d.ts.map +1 -0
  46. package/dest/contract_logging.js +38 -0
  47. package/dest/contract_sync/contract_sync_service.d.ts +46 -0
  48. package/dest/contract_sync/contract_sync_service.d.ts.map +1 -0
  49. package/dest/contract_sync/contract_sync_service.js +124 -0
  50. package/dest/contract_sync/helpers.d.ts +29 -0
  51. package/dest/contract_sync/helpers.d.ts.map +1 -0
  52. package/dest/contract_sync/{index.js → helpers.js} +19 -13
  53. package/dest/debug/pxe_debug_utils.d.ts +14 -10
  54. package/dest/debug/pxe_debug_utils.d.ts.map +1 -1
  55. package/dest/debug/pxe_debug_utils.js +16 -15
  56. package/dest/entrypoints/client/bundle/index.d.ts +4 -1
  57. package/dest/entrypoints/client/bundle/index.d.ts.map +1 -1
  58. package/dest/entrypoints/client/bundle/index.js +3 -0
  59. package/dest/entrypoints/client/bundle/utils.d.ts +1 -1
  60. package/dest/entrypoints/client/bundle/utils.d.ts.map +1 -1
  61. package/dest/entrypoints/client/bundle/utils.js +9 -1
  62. package/dest/entrypoints/client/lazy/index.d.ts +4 -1
  63. package/dest/entrypoints/client/lazy/index.d.ts.map +1 -1
  64. package/dest/entrypoints/client/lazy/index.js +3 -0
  65. package/dest/entrypoints/client/lazy/utils.d.ts +1 -1
  66. package/dest/entrypoints/client/lazy/utils.d.ts.map +1 -1
  67. package/dest/entrypoints/client/lazy/utils.js +9 -1
  68. package/dest/entrypoints/server/index.d.ts +4 -2
  69. package/dest/entrypoints/server/index.d.ts.map +1 -1
  70. package/dest/entrypoints/server/index.js +3 -1
  71. package/dest/entrypoints/server/utils.js +9 -1
  72. package/dest/events/event_service.d.ts +3 -2
  73. package/dest/events/event_service.d.ts.map +1 -1
  74. package/dest/events/event_service.js +16 -4
  75. package/dest/logs/log_service.d.ts +6 -6
  76. package/dest/logs/log_service.d.ts.map +1 -1
  77. package/dest/logs/log_service.js +32 -43
  78. package/dest/messages/message_context_service.d.ts +17 -0
  79. package/dest/messages/message_context_service.d.ts.map +1 -0
  80. package/dest/messages/message_context_service.js +36 -0
  81. package/dest/notes/note_service.d.ts +5 -4
  82. package/dest/notes/note_service.d.ts.map +1 -1
  83. package/dest/notes/note_service.js +17 -7
  84. package/dest/notes_filter.d.ts +25 -0
  85. package/dest/notes_filter.d.ts.map +1 -0
  86. package/dest/notes_filter.js +4 -0
  87. package/dest/oracle_version.d.ts +2 -2
  88. package/dest/oracle_version.js +3 -3
  89. package/dest/private_kernel/hints/compute_tx_expiration_timestamp.d.ts +4 -0
  90. package/dest/private_kernel/hints/compute_tx_expiration_timestamp.d.ts.map +1 -0
  91. package/dest/private_kernel/hints/{compute_tx_include_by_timestamp.js → compute_tx_expiration_timestamp.js} +12 -12
  92. package/dest/private_kernel/hints/index.d.ts +1 -1
  93. package/dest/private_kernel/hints/index.js +1 -1
  94. package/dest/private_kernel/hints/private_kernel_reset_private_inputs_builder.d.ts +4 -3
  95. package/dest/private_kernel/hints/private_kernel_reset_private_inputs_builder.d.ts.map +1 -1
  96. package/dest/private_kernel/hints/private_kernel_reset_private_inputs_builder.js +129 -68
  97. package/dest/private_kernel/hints/test_utils.d.ts +122 -0
  98. package/dest/private_kernel/hints/test_utils.d.ts.map +1 -0
  99. package/dest/private_kernel/hints/test_utils.js +203 -0
  100. package/dest/private_kernel/private_kernel_execution_prover.d.ts +1 -1
  101. package/dest/private_kernel/private_kernel_execution_prover.d.ts.map +1 -1
  102. package/dest/private_kernel/private_kernel_execution_prover.js +19 -11
  103. package/dest/private_kernel/private_kernel_oracle.d.ts +6 -2
  104. package/dest/private_kernel/private_kernel_oracle.d.ts.map +1 -1
  105. package/dest/private_kernel/private_kernel_oracle.js +7 -3
  106. package/dest/pxe.d.ts +74 -24
  107. package/dest/pxe.d.ts.map +1 -1
  108. package/dest/pxe.js +126 -74
  109. package/dest/storage/capsule_store/capsule_service.d.ts +22 -0
  110. package/dest/storage/capsule_store/capsule_service.d.ts.map +1 -0
  111. package/dest/storage/capsule_store/capsule_service.js +50 -0
  112. package/dest/storage/capsule_store/capsule_store.d.ts +9 -9
  113. package/dest/storage/capsule_store/capsule_store.d.ts.map +1 -1
  114. package/dest/storage/capsule_store/capsule_store.js +33 -28
  115. package/dest/storage/capsule_store/index.d.ts +2 -1
  116. package/dest/storage/capsule_store/index.d.ts.map +1 -1
  117. package/dest/storage/capsule_store/index.js +1 -0
  118. package/dest/storage/contract_store/contract_store.d.ts +42 -15
  119. package/dest/storage/contract_store/contract_store.d.ts.map +1 -1
  120. package/dest/storage/contract_store/contract_store.js +145 -69
  121. package/dest/storage/metadata.d.ts +1 -1
  122. package/dest/storage/metadata.js +1 -1
  123. package/dest/storage/note_store/note_store.d.ts +3 -3
  124. package/dest/storage/note_store/note_store.d.ts.map +1 -1
  125. package/dest/storage/note_store/note_store.js +6 -4
  126. package/dest/storage/tagging_store/recipient_tagging_store.d.ts +6 -6
  127. package/dest/storage/tagging_store/recipient_tagging_store.d.ts.map +1 -1
  128. package/dest/storage/tagging_store/sender_tagging_store.d.ts +29 -28
  129. package/dest/storage/tagging_store/sender_tagging_store.d.ts.map +1 -1
  130. package/dest/storage/tagging_store/sender_tagging_store.js +141 -115
  131. package/dest/tagging/get_all_logs_by_tags.d.ts +1 -1
  132. package/dest/tagging/get_all_logs_by_tags.d.ts.map +1 -1
  133. package/dest/tagging/get_all_logs_by_tags.js +17 -3
  134. package/dest/tagging/index.d.ts +3 -3
  135. package/dest/tagging/index.d.ts.map +1 -1
  136. package/dest/tagging/index.js +1 -1
  137. package/dest/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.d.ts +4 -5
  138. package/dest/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.d.ts.map +1 -1
  139. package/dest/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.js +7 -7
  140. package/dest/tagging/recipient_sync/utils/find_highest_indexes.js +2 -2
  141. package/dest/tagging/recipient_sync/utils/load_logs_for_range.d.ts +6 -7
  142. package/dest/tagging/recipient_sync/utils/load_logs_for_range.d.ts.map +1 -1
  143. package/dest/tagging/recipient_sync/utils/load_logs_for_range.js +12 -11
  144. package/dest/tagging/sender_sync/sync_sender_tagging_indexes.d.ts +4 -8
  145. package/dest/tagging/sender_sync/sync_sender_tagging_indexes.d.ts.map +1 -1
  146. package/dest/tagging/sender_sync/sync_sender_tagging_indexes.js +13 -7
  147. package/dest/tagging/sender_sync/utils/get_status_change_of_pending.d.ts +4 -3
  148. package/dest/tagging/sender_sync/utils/get_status_change_of_pending.d.ts.map +1 -1
  149. package/dest/tagging/sender_sync/utils/get_status_change_of_pending.js +20 -10
  150. package/dest/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.d.ts +5 -7
  151. package/dest/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.d.ts.map +1 -1
  152. package/dest/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.js +36 -24
  153. package/package.json +25 -16
  154. package/src/access_scopes.ts +9 -0
  155. package/src/block_synchronizer/block_synchronizer.ts +12 -0
  156. package/src/config/index.ts +1 -1
  157. package/src/config/package_info.ts +1 -1
  158. package/src/contract_function_simulator/contract_function_simulator.ts +361 -133
  159. package/src/contract_function_simulator/execution_tagging_index_cache.ts +19 -14
  160. package/src/contract_function_simulator/index.ts +1 -0
  161. package/src/contract_function_simulator/noir-structs/event_validation_request.ts +8 -8
  162. package/src/contract_function_simulator/noir-structs/log_retrieval_response.ts +1 -4
  163. package/src/contract_function_simulator/noir-structs/note_validation_request.ts +3 -9
  164. package/src/contract_function_simulator/oracle/interfaces.ts +63 -54
  165. package/src/contract_function_simulator/oracle/legacy_oracle_mappings.ts +98 -0
  166. package/src/contract_function_simulator/oracle/oracle.ts +233 -142
  167. package/src/contract_function_simulator/oracle/private_execution.ts +4 -4
  168. package/src/contract_function_simulator/oracle/private_execution_oracle.ts +125 -179
  169. package/src/contract_function_simulator/oracle/utility_execution_oracle.ts +399 -136
  170. package/src/contract_logging.ts +52 -0
  171. package/src/contract_sync/contract_sync_service.ts +192 -0
  172. package/src/contract_sync/{index.ts → helpers.ts} +23 -22
  173. package/src/debug/pxe_debug_utils.ts +48 -18
  174. package/src/entrypoints/client/bundle/index.ts +3 -0
  175. package/src/entrypoints/client/bundle/utils.ts +9 -1
  176. package/src/entrypoints/client/lazy/index.ts +3 -0
  177. package/src/entrypoints/client/lazy/utils.ts +9 -1
  178. package/src/entrypoints/server/index.ts +3 -1
  179. package/src/entrypoints/server/utils.ts +7 -7
  180. package/src/events/event_service.ts +17 -4
  181. package/src/logs/log_service.ts +63 -65
  182. package/src/messages/message_context_service.ts +44 -0
  183. package/src/notes/note_service.ts +20 -8
  184. package/src/notes_filter.ts +26 -0
  185. package/src/oracle_version.ts +3 -3
  186. package/src/private_kernel/hints/{compute_tx_include_by_timestamp.ts → compute_tx_expiration_timestamp.ts} +13 -13
  187. package/src/private_kernel/hints/index.ts +1 -1
  188. package/src/private_kernel/hints/private_kernel_reset_private_inputs_builder.ts +164 -117
  189. package/src/private_kernel/hints/test_utils.ts +325 -0
  190. package/src/private_kernel/private_kernel_execution_prover.ts +19 -12
  191. package/src/private_kernel/private_kernel_oracle.ts +7 -7
  192. package/src/pxe.ts +231 -124
  193. package/src/storage/capsule_store/capsule_service.ts +91 -0
  194. package/src/storage/capsule_store/capsule_store.ts +34 -26
  195. package/src/storage/capsule_store/index.ts +1 -0
  196. package/src/storage/contract_store/contract_store.ts +174 -75
  197. package/src/storage/metadata.ts +1 -1
  198. package/src/storage/note_store/note_store.ts +12 -5
  199. package/src/storage/tagging_store/recipient_tagging_store.ts +9 -5
  200. package/src/storage/tagging_store/sender_tagging_store.ts +185 -138
  201. package/src/tagging/get_all_logs_by_tags.ts +28 -4
  202. package/src/tagging/index.ts +2 -2
  203. package/src/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.ts +7 -10
  204. package/src/tagging/recipient_sync/utils/find_highest_indexes.ts +2 -2
  205. package/src/tagging/recipient_sync/utils/load_logs_for_range.ts +10 -15
  206. package/src/tagging/sender_sync/sync_sender_tagging_indexes.ts +23 -10
  207. package/src/tagging/sender_sync/utils/get_status_change_of_pending.ts +26 -11
  208. package/src/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.ts +27 -26
  209. package/dest/contract_sync/index.d.ts +0 -23
  210. package/dest/contract_sync/index.d.ts.map +0 -1
  211. package/dest/private_kernel/hints/compute_tx_include_by_timestamp.d.ts +0 -4
  212. package/dest/private_kernel/hints/compute_tx_include_by_timestamp.d.ts.map +0 -1
@@ -76,12 +76,12 @@ export async function executePrivateFunction(
76
76
 
77
77
  const contractClassLogs = privateExecutionOracle.getContractClassLogs();
78
78
 
79
- const rawReturnValues = await privateExecutionOracle.privateLoadFromExecutionCache(publicInputs.returnsHash);
79
+ const rawReturnValues = await privateExecutionOracle.getHashPreimage(publicInputs.returnsHash);
80
80
 
81
81
  const newNotes = privateExecutionOracle.getNewNotes();
82
82
  const noteHashNullifierCounterMap = privateExecutionOracle.getNoteHashNullifierCounterMap();
83
83
  const offchainEffects = privateExecutionOracle.getOffchainEffects();
84
- const preTags = privateExecutionOracle.getUsedPreTags();
84
+ const taggingIndexRanges = privateExecutionOracle.getUsedTaggingIndexRanges();
85
85
  const nestedExecutionResults = privateExecutionOracle.getNestedExecutionResults();
86
86
 
87
87
  let timerSubtractionList = nestedExecutionResults;
@@ -103,8 +103,8 @@ export async function executePrivateFunction(
103
103
  newNotes,
104
104
  noteHashNullifierCounterMap,
105
105
  rawReturnValues,
106
- offchainEffects,
107
- preTags,
106
+ offchainEffects.map(e => ({ data: e.data })),
107
+ taggingIndexRanges,
108
108
  nestedExecutionResults,
109
109
  contractClassLogs,
110
110
  {
@@ -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,22 @@ 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
- import { type ContractClassLog, DirectionalAppTaggingSecret, type PreTag } from '@aztec/stdlib/logs';
17
+ import { type ContractClassLog, ExtendedDirectionalAppTaggingSecret, type TaggingIndexRange } 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
 
33
- import { ensureContractSynced } from '../../contract_sync/index.js';
28
+ import type { AccessScopes } from '../../access_scopes.js';
34
29
  import { NoteService } from '../../notes/note_service.js';
35
- import type { AddressStore } from '../../storage/address_store/address_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
30
  import type { SenderTaggingStore } from '../../storage/tagging_store/sender_tagging_store.js';
43
31
  import { syncSenderTaggingIndexes } from '../../tagging/index.js';
44
32
  import type { ExecutionNoteCache } from '../execution_note_cache.js';
@@ -47,7 +35,24 @@ import type { HashedValuesCache } from '../hashed_values_cache.js';
47
35
  import { pickNotes } from '../pick_notes.js';
48
36
  import type { IPrivateExecutionOracle, NoteData } from './interfaces.js';
49
37
  import { executePrivateFunction } from './private_execution.js';
50
- import { UtilityExecutionOracle } from './utility_execution_oracle.js';
38
+ import { UtilityExecutionOracle, type UtilityExecutionOracleArgs } from './utility_execution_oracle.js';
39
+
40
+ /** Args for PrivateExecutionOracle constructor. */
41
+ export type PrivateExecutionOracleArgs = Omit<UtilityExecutionOracleArgs, 'contractAddress'> & {
42
+ argsHash: Fr;
43
+ txContext: TxContext;
44
+ callContext: CallContext;
45
+ /** Needed to trigger contract synchronization before nested calls */
46
+ utilityExecutor: (call: FunctionCall, scopes: AccessScopes) => Promise<void>;
47
+ executionCache: HashedValuesCache;
48
+ noteCache: ExecutionNoteCache;
49
+ taggingIndexCache: ExecutionTaggingIndexCache;
50
+ senderTaggingStore: SenderTaggingStore;
51
+ totalPublicCalldataCount?: number;
52
+ sideEffectCounter?: number;
53
+ senderForTags?: AztecAddress;
54
+ simulator?: CircuitSimulator;
55
+ };
51
56
 
52
57
  /**
53
58
  * The execution oracle for the private part of a transaction.
@@ -66,59 +71,39 @@ export class PrivateExecutionOracle extends UtilityExecutionOracle implements IP
66
71
  private newNotes: NoteAndSlot[] = [];
67
72
  private noteHashNullifierCounterMap: Map<number, number> = new Map();
68
73
  private contractClassLogs: CountedContractClassLog[] = [];
69
- private offchainEffects: { data: Fr[] }[] = [];
70
74
  private nestedExecutionResults: PrivateCallExecutionResult[] = [];
71
75
 
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
- private readonly senderTaggingStore: SenderTaggingStore,
92
- recipientTaggingStore: RecipientTaggingStore,
93
- senderAddressBookStore: SenderAddressBookStore,
94
- capsuleStore: CapsuleStore,
95
- privateEventStore: PrivateEventStore,
96
- jobId: string,
97
- private totalPublicCalldataCount: number = 0,
98
- protected sideEffectCounter: number = 0,
99
- log = createLogger('simulator:client_execution_context'),
100
- scopes?: AztecAddress[],
101
- private senderForTags?: AztecAddress,
102
- private simulator?: CircuitSimulator,
103
- ) {
104
- super(
105
- callContext.contractAddress,
106
- authWitnesses,
107
- capsules,
108
- anchorBlockHeader,
109
- contractStore,
110
- noteStore,
111
- keyStore,
112
- addressStore,
113
- aztecNode,
114
- recipientTaggingStore,
115
- senderAddressBookStore,
116
- capsuleStore,
117
- privateEventStore,
118
- jobId,
119
- log,
120
- scopes,
121
- );
76
+ private readonly argsHash: Fr;
77
+ private readonly txContext: TxContext;
78
+ private readonly callContext: CallContext;
79
+ private readonly utilityExecutor: (call: FunctionCall, scopes: AccessScopes) => Promise<void>;
80
+ private readonly executionCache: HashedValuesCache;
81
+ private readonly noteCache: ExecutionNoteCache;
82
+ private readonly taggingIndexCache: ExecutionTaggingIndexCache;
83
+ private readonly senderTaggingStore: SenderTaggingStore;
84
+ private totalPublicCalldataCount: number;
85
+ protected sideEffectCounter: number;
86
+ private senderForTags?: AztecAddress;
87
+ private readonly simulator?: CircuitSimulator;
88
+
89
+ constructor(args: PrivateExecutionOracleArgs) {
90
+ super({
91
+ ...args,
92
+ contractAddress: args.callContext.contractAddress,
93
+ log: args.log ?? createLogger('simulator:client_execution_context'),
94
+ });
95
+ this.argsHash = args.argsHash;
96
+ this.txContext = args.txContext;
97
+ this.callContext = args.callContext;
98
+ this.utilityExecutor = args.utilityExecutor;
99
+ this.executionCache = args.executionCache;
100
+ this.noteCache = args.noteCache;
101
+ this.taggingIndexCache = args.taggingIndexCache;
102
+ this.senderTaggingStore = args.senderTaggingStore;
103
+ this.totalPublicCalldataCount = args.totalPublicCalldataCount ?? 0;
104
+ this.sideEffectCounter = args.sideEffectCounter ?? 0;
105
+ this.senderForTags = args.senderForTags;
106
+ this.simulator = args.simulator;
122
107
  }
123
108
 
124
109
  public getPrivateContextInputs(): PrivateContextInputs {
@@ -169,17 +154,10 @@ export class PrivateExecutionOracle extends UtilityExecutionOracle implements IP
169
154
  }
170
155
 
171
156
  /**
172
- * Return the offchain effects emitted during this execution.
173
- */
174
- public getOffchainEffects() {
175
- return this.offchainEffects;
176
- }
177
-
178
- /**
179
- * Returns the pre-tags that were used in this execution (and that need to be stored in the db).
157
+ * Returns the tagging index ranges that were used in this execution (and that need to be stored in the db).
180
158
  */
181
- public getUsedPreTags(): PreTag[] {
182
- return this.taggingIndexCache.getUsedPreTags();
159
+ public getUsedTaggingIndexRanges(): TaggingIndexRange[] {
160
+ return this.taggingIndexCache.getUsedTaggingIndexRanges();
183
161
  }
184
162
 
185
163
  /**
@@ -199,7 +177,7 @@ export class PrivateExecutionOracle extends UtilityExecutionOracle implements IP
199
177
  * The value persists through nested calls, meaning all calls down the stack will use the same
200
178
  * 'senderForTags' value (unless it is replaced).
201
179
  */
202
- public privateGetSenderForTags(): Promise<AztecAddress | undefined> {
180
+ public getSenderForTags(): Promise<AztecAddress | undefined> {
203
181
  return Promise.resolve(this.senderForTags);
204
182
  }
205
183
 
@@ -214,7 +192,7 @@ export class PrivateExecutionOracle extends UtilityExecutionOracle implements IP
214
192
  * through nested calls, meaning all calls down the stack will use the same 'senderForTags'
215
193
  * value (unless it is replaced by another call to this setter).
216
194
  */
217
- public privateSetSenderForTags(senderForTags: AztecAddress): Promise<void> {
195
+ public setSenderForTags(senderForTags: AztecAddress): Promise<void> {
218
196
  this.senderForTags = senderForTags;
219
197
  return Promise.resolve();
220
198
  }
@@ -225,26 +203,30 @@ export class PrivateExecutionOracle extends UtilityExecutionOracle implements IP
225
203
  * @param recipient - The address receiving the log
226
204
  * @returns An app tag to be used in a log.
227
205
  */
228
- public async privateGetNextAppTagAsSender(sender: AztecAddress, recipient: AztecAddress): Promise<Tag> {
229
- const secret = await this.#calculateDirectionalAppTaggingSecret(this.contractAddress, sender, recipient);
206
+ public async getNextAppTagAsSender(sender: AztecAddress, recipient: AztecAddress): Promise<Tag> {
207
+ const extendedSecret = await this.#calculateExtendedDirectionalAppTaggingSecret(
208
+ this.contractAddress,
209
+ sender,
210
+ recipient,
211
+ );
230
212
 
231
- const index = await this.#getIndexToUseForSecret(secret);
232
- this.log.debug(
213
+ const index = await this.#getIndexToUseForSecret(extendedSecret);
214
+ this.logger.debug(
233
215
  `Incrementing tagging index for sender: ${sender}, recipient: ${recipient}, contract: ${this.contractAddress} to ${index}`,
234
216
  );
235
- this.taggingIndexCache.setLastUsedIndex(secret, index);
217
+ this.taggingIndexCache.setLastUsedIndex(extendedSecret, index);
236
218
 
237
- return Tag.compute({ secret, index });
219
+ return Tag.compute({ extendedSecret, index });
238
220
  }
239
221
 
240
- async #calculateDirectionalAppTaggingSecret(
222
+ async #calculateExtendedDirectionalAppTaggingSecret(
241
223
  contractAddress: AztecAddress,
242
224
  sender: AztecAddress,
243
225
  recipient: AztecAddress,
244
226
  ) {
245
- const senderCompleteAddress = await this.getCompleteAddress(sender);
227
+ const senderCompleteAddress = await this.getCompleteAddressOrFail(sender);
246
228
  const senderIvsk = await this.keyStore.getMasterIncomingViewingSecretKey(sender);
247
- return DirectionalAppTaggingSecret.compute(
229
+ return ExtendedDirectionalAppTaggingSecret.compute(
248
230
  senderCompleteAddress,
249
231
  senderIvsk,
250
232
  recipient,
@@ -253,7 +235,7 @@ export class PrivateExecutionOracle extends UtilityExecutionOracle implements IP
253
235
  );
254
236
  }
255
237
 
256
- async #getIndexToUseForSecret(secret: DirectionalAppTaggingSecret): Promise<number> {
238
+ async #getIndexToUseForSecret(secret: ExtendedDirectionalAppTaggingSecret): Promise<number> {
257
239
  // If we have the tagging index in the cache, we use it. If not we obtain it from the execution data provider.
258
240
  const lastUsedIndexInTx = this.taggingIndexCache.getLastUsedIndex(secret);
259
241
 
@@ -265,7 +247,6 @@ export class PrivateExecutionOracle extends UtilityExecutionOracle implements IP
265
247
  // that'd be wasteful as most tagging secrets are not used in each tx.
266
248
  await syncSenderTaggingIndexes(
267
249
  secret,
268
- this.contractAddress,
269
250
  this.aztecNode,
270
251
  this.senderTaggingStore,
271
252
  await this.anchorBlockHeader.hash(),
@@ -284,7 +265,7 @@ export class PrivateExecutionOracle extends UtilityExecutionOracle implements IP
284
265
  * @param values - Values to store.
285
266
  * @returns The hash of the values.
286
267
  */
287
- public privateStoreInExecutionCache(values: Fr[], hash: Fr) {
268
+ public setHashPreimage(values: Fr[], hash: Fr) {
288
269
  return this.executionCache.store(values, hash);
289
270
  }
290
271
 
@@ -293,7 +274,7 @@ export class PrivateExecutionOracle extends UtilityExecutionOracle implements IP
293
274
  * @param hash - Hash of the values.
294
275
  * @returns The values.
295
276
  */
296
- public privateLoadFromExecutionCache(hash: Fr): Promise<Fr[]> {
277
+ public getHashPreimage(hash: Fr): Promise<Fr[]> {
297
278
  const preimage = this.executionCache.getPreimage(hash);
298
279
  if (!preimage) {
299
280
  throw new Error(`Preimage for hash ${hash.toString()} not found in cache`);
@@ -301,12 +282,12 @@ export class PrivateExecutionOracle extends UtilityExecutionOracle implements IP
301
282
  return Promise.resolve(preimage);
302
283
  }
303
284
 
304
- override async utilityCheckNullifierExists(innerNullifier: Fr): Promise<boolean> {
285
+ override async doesNullifierExist(innerNullifier: Fr): Promise<boolean> {
305
286
  // This oracle must be overridden because while utility execution can only meaningfully check if a nullifier exists
306
287
  // in the synched block, during private execution there's also the possibility of it being pending, i.e. created
307
288
  // in the current transaction.
308
289
 
309
- this.log.debug(`Checking existence of inner nullifier ${innerNullifier}`, {
290
+ this.logger.debug(`Checking existence of inner nullifier ${innerNullifier}`, {
310
291
  contractAddress: this.contractAddress,
311
292
  });
312
293
 
@@ -314,7 +295,7 @@ export class PrivateExecutionOracle extends UtilityExecutionOracle implements IP
314
295
 
315
296
  return (
316
297
  this.noteCache.getNullifiers(this.contractAddress).has(nullifier) ||
317
- (await super.utilityCheckNullifierExists(innerNullifier))
298
+ (await super.doesNullifierExist(innerNullifier))
318
299
  );
319
300
  }
320
301
 
@@ -339,7 +320,7 @@ export class PrivateExecutionOracle extends UtilityExecutionOracle implements IP
339
320
  * @param status - The status of notes to fetch.
340
321
  * @returns Array of note data.
341
322
  */
342
- public override async utilityGetNotes(
323
+ public override async getNotes(
343
324
  owner: AztecAddress | undefined,
344
325
  storageSlot: Fr,
345
326
  numSelects: number,
@@ -385,7 +366,7 @@ export class PrivateExecutionOracle extends UtilityExecutionOracle implements IP
385
366
  offset,
386
367
  });
387
368
 
388
- this.log.debug(
369
+ this.logger.debug(
389
370
  `Returning ${notes.length} notes for ${this.callContext.contractAddress} at ${storageSlot}: ${notes
390
371
  .map(n => `${n.noteNonce.toString()}:[${n.note.items.map(i => i.toString()).join(',')}]`)
391
372
  .join(', ')}`,
@@ -405,7 +386,7 @@ export class PrivateExecutionOracle extends UtilityExecutionOracle implements IP
405
386
  * @param noteHash - A hash of the new note.
406
387
  * @returns
407
388
  */
408
- public privateNotifyCreatedNote(
389
+ public notifyCreatedNote(
409
390
  owner: AztecAddress,
410
391
  storageSlot: Fr,
411
392
  randomness: Fr,
@@ -414,7 +395,7 @@ export class PrivateExecutionOracle extends UtilityExecutionOracle implements IP
414
395
  noteHash: Fr,
415
396
  counter: number,
416
397
  ) {
417
- this.log.debug(`Notified of new note with inner hash ${noteHash}`, {
398
+ this.logger.debug(`Notified of new note with inner hash ${noteHash}`, {
418
399
  contractAddress: this.callContext.contractAddress,
419
400
  storageSlot,
420
401
  randomness,
@@ -446,7 +427,7 @@ export class PrivateExecutionOracle extends UtilityExecutionOracle implements IP
446
427
  * @param innerNullifier - The pending nullifier to add in the list (not yet siloed by contract address).
447
428
  * @param noteHash - A hash of the new note.
448
429
  */
449
- public async privateNotifyNullifiedNote(innerNullifier: Fr, noteHash: Fr, counter: number) {
430
+ public async notifyNullifiedNote(innerNullifier: Fr, noteHash: Fr, counter: number) {
450
431
  const nullifiedNoteHashCounter = await this.noteCache.nullifyNote(
451
432
  this.callContext.contractAddress,
452
433
  innerNullifier,
@@ -463,19 +444,19 @@ export class PrivateExecutionOracle extends UtilityExecutionOracle implements IP
463
444
  * @param innerNullifier - The pending nullifier to add in the list (not yet siloed by contract address).
464
445
  * @param noteHash - A hash of the new note.
465
446
  */
466
- public privateNotifyCreatedNullifier(innerNullifier: Fr) {
467
- this.log.debug(`Notified of new inner nullifier ${innerNullifier}`, { contractAddress: this.contractAddress });
447
+ public notifyCreatedNullifier(innerNullifier: Fr) {
448
+ this.logger.debug(`Notified of new inner nullifier ${innerNullifier}`, { contractAddress: this.contractAddress });
468
449
  return this.noteCache.nullifierCreated(this.callContext.contractAddress, innerNullifier);
469
450
  }
470
451
 
471
452
  /**
472
- * Check if a nullifier has been emitted in the same transaction, i.e. if privateNotifyCreatedNullifier has been
453
+ * Check if a nullifier has been emitted in the same transaction, i.e. if notifyCreatedNullifier has been
473
454
  * called for this inner nullifier from the contract with the specified address.
474
455
  * @param innerNullifier - The inner nullifier to check.
475
456
  * @param contractAddress - Address of the contract that emitted the nullifier.
476
457
  * @returns A boolean indicating whether the nullifier is pending or not.
477
458
  */
478
- public async privateIsNullifierPending(innerNullifier: Fr, contractAddress: AztecAddress): Promise<boolean> {
459
+ public async isNullifierPending(innerNullifier: Fr, contractAddress: AztecAddress): Promise<boolean> {
479
460
  const siloedNullifier = await siloNullifier(contractAddress, innerNullifier);
480
461
  const isNullifierPending = this.noteCache.getNullifiers(contractAddress).has(siloedNullifier.toBigInt());
481
462
  return Promise.resolve(isNullifierPending);
@@ -488,10 +469,10 @@ export class PrivateExecutionOracle extends UtilityExecutionOracle implements IP
488
469
  * @param log - The contract class log to be emitted.
489
470
  * @param counter - The contract class log's counter.
490
471
  */
491
- public privateNotifyCreatedContractClassLog(log: ContractClassLog, counter: number) {
472
+ public notifyCreatedContractClassLog(log: ContractClassLog, counter: number) {
492
473
  this.contractClassLogs.push(new CountedContractClassLog(log, counter));
493
474
  const text = log.toBuffer().toString('hex');
494
- this.log.verbose(
475
+ this.logger.verbose(
495
476
  `Emitted log from ContractClassRegistry: "${text.length > 100 ? text.slice(0, 100) + '...' : text}"`,
496
477
  );
497
478
  }
@@ -517,7 +498,7 @@ export class PrivateExecutionOracle extends UtilityExecutionOracle implements IP
517
498
  * @param isStaticCall - Whether the call is a static call.
518
499
  * @returns The execution result.
519
500
  */
520
- async privateCallPrivateFunction(
501
+ async callPrivateFunction(
521
502
  targetContractAddress: AztecAddress,
522
503
  functionSelector: FunctionSelector,
523
504
  argsHash: Fr,
@@ -531,19 +512,19 @@ export class PrivateExecutionOracle extends UtilityExecutionOracle implements IP
531
512
  }
532
513
 
533
514
  const simulatorSetupTimer = new Timer();
534
- this.log.debug(
515
+ this.logger.debug(
535
516
  `Calling private function ${targetContractAddress}:${functionSelector} from ${this.callContext.contractAddress}`,
536
517
  );
537
518
 
538
519
  isStaticCall = isStaticCall || this.callContext.isStaticCall;
539
520
 
540
- await ensureContractSynced(
521
+ await this.contractSyncService.ensureContractSynced(
541
522
  targetContractAddress,
542
523
  functionSelector,
543
524
  this.utilityExecutor,
544
- this.aztecNode,
545
- this.contractStore,
546
525
  this.anchorBlockHeader,
526
+ this.jobId,
527
+ this.scopes,
547
528
  );
548
529
 
549
530
  const targetArtifact = await this.contractStore.getFunctionArtifactWithDebugMetadata(
@@ -555,40 +536,42 @@ export class PrivateExecutionOracle extends UtilityExecutionOracle implements IP
555
536
 
556
537
  const derivedCallContext = await this.deriveCallContext(targetContractAddress, targetArtifact, isStaticCall);
557
538
 
558
- const privateExecutionOracle = new PrivateExecutionOracle(
539
+ const privateExecutionOracle = new PrivateExecutionOracle({
559
540
  argsHash,
560
- derivedTxContext,
561
- derivedCallContext,
562
- this.anchorBlockHeader,
563
- this.utilityExecutor,
564
- this.authWitnesses,
565
- this.capsules,
566
- this.executionCache,
567
- this.noteCache,
568
- this.taggingIndexCache,
569
- this.contractStore,
570
- this.noteStore,
571
- this.keyStore,
572
- this.addressStore,
573
- this.aztecNode,
574
- this.senderTaggingStore,
575
- this.recipientTaggingStore,
576
- this.senderAddressBookStore,
577
- this.capsuleStore,
578
- this.privateEventStore,
579
- this.jobId,
580
- this.totalPublicCalldataCount,
541
+ txContext: derivedTxContext,
542
+ callContext: derivedCallContext,
543
+ anchorBlockHeader: this.anchorBlockHeader,
544
+ utilityExecutor: this.utilityExecutor,
545
+ authWitnesses: this.authWitnesses,
546
+ capsules: this.capsules,
547
+ executionCache: this.executionCache,
548
+ noteCache: this.noteCache,
549
+ taggingIndexCache: this.taggingIndexCache,
550
+ contractStore: this.contractStore,
551
+ noteStore: this.noteStore,
552
+ keyStore: this.keyStore,
553
+ addressStore: this.addressStore,
554
+ aztecNode: this.aztecNode,
555
+ senderTaggingStore: this.senderTaggingStore,
556
+ recipientTaggingStore: this.recipientTaggingStore,
557
+ senderAddressBookStore: this.senderAddressBookStore,
558
+ capsuleService: this.capsuleService,
559
+ privateEventStore: this.privateEventStore,
560
+ messageContextService: this.messageContextService,
561
+ contractSyncService: this.contractSyncService,
562
+ jobId: this.jobId,
563
+ totalPublicCalldataCount: this.totalPublicCalldataCount,
581
564
  sideEffectCounter,
582
- this.log,
583
- this.scopes,
584
- this.senderForTags,
585
- this.simulator,
586
- );
565
+ log: this.logger,
566
+ scopes: this.scopes,
567
+ senderForTags: this.senderForTags,
568
+ simulator: this.simulator!,
569
+ });
587
570
 
588
571
  const setupTime = simulatorSetupTimer.ms();
589
572
 
590
573
  const childExecutionResult = await executePrivateFunction(
591
- this.simulator,
574
+ this.simulator!,
592
575
  privateExecutionOracle,
593
576
  targetArtifact,
594
577
  targetContractAddress,
@@ -614,7 +597,8 @@ export class PrivateExecutionOracle extends UtilityExecutionOracle implements IP
614
597
  };
615
598
  }
616
599
 
617
- #onNewPublicFunctionCall(calldataHash: Fr) {
600
+ /** Validates the calldata preimage exists in the cache and checks cumulative calldata size is within limits. */
601
+ public assertValidPublicCalldata(calldataHash: Fr) {
618
602
  const calldata = this.executionCache.getPreimage(calldataHash);
619
603
  if (!calldata) {
620
604
  throw new Error('Calldata for public call not found in cache');
@@ -624,47 +608,14 @@ export class PrivateExecutionOracle extends UtilityExecutionOracle implements IP
624
608
  if (this.totalPublicCalldataCount > MAX_FR_CALLDATA_TO_ALL_ENQUEUED_CALLS) {
625
609
  throw new Error(`Too many total args to all enqueued public calls! (> ${MAX_FR_CALLDATA_TO_ALL_ENQUEUED_CALLS})`);
626
610
  }
627
- }
628
-
629
- /**
630
- * Verify relevant information when a public function is enqueued.
631
- * @param targetContractAddress - The address of the contract to call.
632
- * @param calldataHash - The hash of the function selector and arguments.
633
- * @param sideEffectCounter - The side effect counter at the start of the call.
634
- * @param isStaticCall - Whether the call is a static call.
635
- */
636
- public privateNotifyEnqueuedPublicFunctionCall(
637
- _targetContractAddress: AztecAddress,
638
- calldataHash: Fr,
639
- _sideEffectCounter: number,
640
- _isStaticCall: boolean,
641
- ) {
642
- this.#onNewPublicFunctionCall(calldataHash);
643
611
  return Promise.resolve();
644
612
  }
645
613
 
646
- /**
647
- * Verify relevant information when a public teardown function is set.
648
- * @param targetContractAddress - The address of the contract to call.
649
- * @param argsHash - The arguments hash to pass to the function.
650
- * @param sideEffectCounter - The side effect counter at the start of the call.
651
- * @param isStaticCall - Whether the call is a static call.
652
- */
653
- public privateNotifySetPublicTeardownFunctionCall(
654
- _targetContractAddress: AztecAddress,
655
- calldataHash: Fr,
656
- _sideEffectCounter: number,
657
- _isStaticCall: boolean,
658
- ) {
659
- this.#onNewPublicFunctionCall(calldataHash);
660
- return Promise.resolve();
661
- }
662
-
663
- public privateNotifySetMinRevertibleSideEffectCounter(minRevertibleSideEffectCounter: number): Promise<void> {
614
+ public notifyRevertiblePhaseStart(minRevertibleSideEffectCounter: number): Promise<void> {
664
615
  return this.noteCache.setMinRevertibleSideEffectCounter(minRevertibleSideEffectCounter);
665
616
  }
666
617
 
667
- public privateIsSideEffectCounterRevertible(sideEffectCounter: number): Promise<boolean> {
618
+ public isExecutionInRevertiblePhase(sideEffectCounter: number): Promise<boolean> {
668
619
  return Promise.resolve(this.noteCache.isSideEffectCounterRevertible(sideEffectCounter));
669
620
  }
670
621
 
@@ -691,9 +642,4 @@ export class PrivateExecutionOracle extends UtilityExecutionOracle implements IP
691
642
  public getDebugFunctionName() {
692
643
  return this.contractStore.getDebugFunctionName(this.contractAddress, this.callContext.functionSelector);
693
644
  }
694
-
695
- public utilityEmitOffchainEffect(data: Fr[]): Promise<void> {
696
- this.offchainEffects.push({ data });
697
- return Promise.resolve();
698
- }
699
645
  }