@aztec/pxe 0.0.1-commit.934299a21 → 0.0.1-commit.949a33fd8

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 (223) hide show
  1. package/dest/bin/check_oracle_version.js +4 -4
  2. package/dest/block_synchronizer/block_stream_source.d.ts +10 -0
  3. package/dest/block_synchronizer/block_stream_source.d.ts.map +1 -0
  4. package/dest/block_synchronizer/block_stream_source.js +37 -0
  5. package/dest/block_synchronizer/block_synchronizer.d.ts +6 -2
  6. package/dest/block_synchronizer/block_synchronizer.d.ts.map +1 -1
  7. package/dest/block_synchronizer/block_synchronizer.js +30 -10
  8. package/dest/config/index.d.ts +2 -2
  9. package/dest/config/index.d.ts.map +1 -1
  10. package/dest/config/index.js +8 -15
  11. package/dest/contract_function_simulator/contract_function_simulator.d.ts +13 -5
  12. package/dest/contract_function_simulator/contract_function_simulator.d.ts.map +1 -1
  13. package/dest/contract_function_simulator/contract_function_simulator.js +39 -13
  14. package/dest/contract_function_simulator/ephemeral_array_service.d.ts +28 -0
  15. package/dest/contract_function_simulator/ephemeral_array_service.d.ts.map +1 -0
  16. package/dest/contract_function_simulator/ephemeral_array_service.js +78 -0
  17. package/dest/contract_function_simulator/execution_tagging_index_cache.d.ts +7 -7
  18. package/dest/contract_function_simulator/execution_tagging_index_cache.d.ts.map +1 -1
  19. package/dest/contract_function_simulator/execution_tagging_index_cache.js +19 -11
  20. package/dest/contract_function_simulator/index.d.ts +2 -1
  21. package/dest/contract_function_simulator/index.d.ts.map +1 -1
  22. package/dest/contract_function_simulator/index.js +1 -0
  23. package/dest/contract_function_simulator/noir-structs/event_validation_request.d.ts +4 -6
  24. package/dest/contract_function_simulator/noir-structs/event_validation_request.d.ts.map +1 -1
  25. package/dest/contract_function_simulator/noir-structs/event_validation_request.js +8 -10
  26. package/dest/contract_function_simulator/noir-structs/log_retrieval_request.d.ts +1 -1
  27. package/dest/contract_function_simulator/noir-structs/log_retrieval_request.js +1 -1
  28. package/dest/contract_function_simulator/noir-structs/log_retrieval_response.d.ts +2 -2
  29. package/dest/contract_function_simulator/noir-structs/log_retrieval_response.d.ts.map +1 -1
  30. package/dest/contract_function_simulator/noir-structs/log_retrieval_response.js +2 -4
  31. package/dest/contract_function_simulator/noir-structs/note_validation_request.d.ts +4 -7
  32. package/dest/contract_function_simulator/noir-structs/note_validation_request.d.ts.map +1 -1
  33. package/dest/contract_function_simulator/noir-structs/note_validation_request.js +6 -11
  34. package/dest/contract_function_simulator/oracle/interfaces.d.ts +63 -45
  35. package/dest/contract_function_simulator/oracle/interfaces.d.ts.map +1 -1
  36. package/dest/contract_function_simulator/oracle/legacy_oracle_mappings.d.ts +9 -0
  37. package/dest/contract_function_simulator/oracle/legacy_oracle_mappings.d.ts.map +1 -0
  38. package/dest/contract_function_simulator/oracle/legacy_oracle_mappings.js +47 -0
  39. package/dest/contract_function_simulator/oracle/oracle.d.ts +76 -44
  40. package/dest/contract_function_simulator/oracle/oracle.d.ts.map +1 -1
  41. package/dest/contract_function_simulator/oracle/oracle.js +288 -96
  42. package/dest/contract_function_simulator/oracle/private_execution.js +5 -3
  43. package/dest/contract_function_simulator/oracle/private_execution_oracle.d.ts +32 -59
  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 +67 -86
  46. package/dest/contract_function_simulator/oracle/utility_execution_oracle.d.ts +100 -60
  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 +326 -111
  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 +9 -4
  56. package/dest/contract_logging.d.ts.map +1 -1
  57. package/dest/contract_logging.js +21 -6
  58. package/dest/contract_sync/contract_sync_service.d.ts +6 -5
  59. package/dest/contract_sync/contract_sync_service.d.ts.map +1 -1
  60. package/dest/contract_sync/contract_sync_service.js +62 -43
  61. package/dest/contract_sync/helpers.d.ts +2 -3
  62. package/dest/contract_sync/helpers.d.ts.map +1 -1
  63. package/dest/contract_sync/helpers.js +7 -2
  64. package/dest/debug/pxe_debug_utils.d.ts +3 -3
  65. package/dest/debug/pxe_debug_utils.d.ts.map +1 -1
  66. package/dest/entrypoints/client/bundle/index.d.ts +1 -2
  67. package/dest/entrypoints/client/bundle/index.d.ts.map +1 -1
  68. package/dest/entrypoints/client/bundle/index.js +0 -1
  69. package/dest/entrypoints/client/bundle/utils.d.ts +2 -2
  70. package/dest/entrypoints/client/bundle/utils.d.ts.map +1 -1
  71. package/dest/entrypoints/client/bundle/utils.js +2 -2
  72. package/dest/entrypoints/client/lazy/index.d.ts +1 -2
  73. package/dest/entrypoints/client/lazy/index.d.ts.map +1 -1
  74. package/dest/entrypoints/client/lazy/index.js +0 -1
  75. package/dest/entrypoints/client/lazy/utils.d.ts +2 -2
  76. package/dest/entrypoints/client/lazy/utils.d.ts.map +1 -1
  77. package/dest/entrypoints/client/lazy/utils.js +2 -2
  78. package/dest/entrypoints/pxe_creation_options.d.ts +3 -1
  79. package/dest/entrypoints/pxe_creation_options.d.ts.map +1 -1
  80. package/dest/entrypoints/pxe_creation_options.js +3 -1
  81. package/dest/entrypoints/server/index.d.ts +2 -3
  82. package/dest/entrypoints/server/index.d.ts.map +1 -1
  83. package/dest/entrypoints/server/index.js +1 -2
  84. package/dest/entrypoints/server/utils.d.ts +2 -2
  85. package/dest/entrypoints/server/utils.d.ts.map +1 -1
  86. package/dest/entrypoints/server/utils.js +2 -2
  87. package/dest/events/event_service.d.ts +3 -2
  88. package/dest/events/event_service.d.ts.map +1 -1
  89. package/dest/events/event_service.js +26 -5
  90. package/dest/events/private_event_filter_validator.d.ts +3 -2
  91. package/dest/events/private_event_filter_validator.d.ts.map +1 -1
  92. package/dest/events/private_event_filter_validator.js +15 -0
  93. package/dest/logs/log_service.d.ts +7 -8
  94. package/dest/logs/log_service.d.ts.map +1 -1
  95. package/dest/logs/log_service.js +29 -39
  96. package/dest/messages/message_context_service.d.ts +17 -0
  97. package/dest/messages/message_context_service.d.ts.map +1 -0
  98. package/dest/messages/message_context_service.js +36 -0
  99. package/dest/notes/note_service.d.ts +4 -5
  100. package/dest/notes/note_service.d.ts.map +1 -1
  101. package/dest/notes/note_service.js +14 -5
  102. package/dest/notes_filter.d.ts +2 -3
  103. package/dest/notes_filter.d.ts.map +1 -1
  104. package/dest/oracle_version.d.ts +4 -3
  105. package/dest/oracle_version.d.ts.map +1 -1
  106. package/dest/oracle_version.js +20 -10
  107. package/dest/private_kernel/private_kernel_execution_prover.d.ts +1 -1
  108. package/dest/private_kernel/private_kernel_execution_prover.d.ts.map +1 -1
  109. package/dest/private_kernel/private_kernel_execution_prover.js +4 -7
  110. package/dest/private_kernel/private_kernel_oracle.d.ts +5 -5
  111. package/dest/private_kernel/private_kernel_oracle.d.ts.map +1 -1
  112. package/dest/private_kernel/private_kernel_oracle.js +12 -15
  113. package/dest/pxe.d.ts +25 -10
  114. package/dest/pxe.d.ts.map +1 -1
  115. package/dest/pxe.js +91 -42
  116. package/dest/storage/anchor_block_store/anchor_block_store.js +1 -1
  117. package/dest/storage/capsule_store/capsule_service.d.ts +21 -0
  118. package/dest/storage/capsule_store/capsule_service.d.ts.map +1 -0
  119. package/dest/storage/capsule_store/capsule_service.js +50 -0
  120. package/dest/storage/capsule_store/capsule_store.d.ts +9 -9
  121. package/dest/storage/capsule_store/capsule_store.d.ts.map +1 -1
  122. package/dest/storage/capsule_store/capsule_store.js +36 -28
  123. package/dest/storage/capsule_store/index.d.ts +2 -1
  124. package/dest/storage/capsule_store/index.d.ts.map +1 -1
  125. package/dest/storage/capsule_store/index.js +1 -0
  126. package/dest/storage/contract_store/contract_store.d.ts +1 -1
  127. package/dest/storage/contract_store/contract_store.d.ts.map +1 -1
  128. package/dest/storage/contract_store/contract_store.js +4 -2
  129. package/dest/storage/metadata.d.ts +1 -1
  130. package/dest/storage/metadata.js +1 -1
  131. package/dest/storage/note_store/note_store.d.ts +1 -1
  132. package/dest/storage/note_store/note_store.d.ts.map +1 -1
  133. package/dest/storage/note_store/note_store.js +2 -2
  134. package/dest/storage/private_event_store/private_event_store.d.ts +1 -1
  135. package/dest/storage/private_event_store/private_event_store.d.ts.map +1 -1
  136. package/dest/storage/private_event_store/private_event_store.js +3 -0
  137. package/dest/storage/private_event_store/stored_private_event.js +1 -1
  138. package/dest/storage/tagging_store/recipient_tagging_store.d.ts +6 -6
  139. package/dest/storage/tagging_store/recipient_tagging_store.d.ts.map +1 -1
  140. package/dest/storage/tagging_store/sender_tagging_store.d.ts +29 -28
  141. package/dest/storage/tagging_store/sender_tagging_store.d.ts.map +1 -1
  142. package/dest/storage/tagging_store/sender_tagging_store.js +141 -115
  143. package/dest/tagging/index.d.ts +3 -3
  144. package/dest/tagging/index.d.ts.map +1 -1
  145. package/dest/tagging/index.js +1 -1
  146. package/dest/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.d.ts +4 -5
  147. package/dest/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.d.ts.map +1 -1
  148. package/dest/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.js +4 -18
  149. package/dest/tagging/recipient_sync/utils/load_logs_for_range.d.ts +6 -7
  150. package/dest/tagging/recipient_sync/utils/load_logs_for_range.d.ts.map +1 -1
  151. package/dest/tagging/recipient_sync/utils/load_logs_for_range.js +12 -11
  152. package/dest/tagging/sender_sync/sync_sender_tagging_indexes.d.ts +4 -8
  153. package/dest/tagging/sender_sync/sync_sender_tagging_indexes.d.ts.map +1 -1
  154. package/dest/tagging/sender_sync/sync_sender_tagging_indexes.js +13 -7
  155. package/dest/tagging/sender_sync/utils/get_status_change_of_pending.d.ts +4 -3
  156. package/dest/tagging/sender_sync/utils/get_status_change_of_pending.d.ts.map +1 -1
  157. package/dest/tagging/sender_sync/utils/get_status_change_of_pending.js +20 -10
  158. package/dest/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.d.ts +5 -7
  159. package/dest/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.d.ts.map +1 -1
  160. package/dest/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.js +36 -24
  161. package/package.json +16 -16
  162. package/src/bin/check_oracle_version.ts +4 -4
  163. package/src/block_synchronizer/block_stream_source.ts +52 -0
  164. package/src/block_synchronizer/block_synchronizer.ts +33 -11
  165. package/src/config/index.ts +3 -9
  166. package/src/contract_function_simulator/contract_function_simulator.ts +52 -16
  167. package/src/contract_function_simulator/ephemeral_array_service.ts +110 -0
  168. package/src/contract_function_simulator/execution_tagging_index_cache.ts +19 -14
  169. package/src/contract_function_simulator/index.ts +1 -0
  170. package/src/contract_function_simulator/noir-structs/event_validation_request.ts +9 -9
  171. package/src/contract_function_simulator/noir-structs/log_retrieval_request.ts +1 -1
  172. package/src/contract_function_simulator/noir-structs/log_retrieval_response.ts +2 -5
  173. package/src/contract_function_simulator/noir-structs/note_validation_request.ts +4 -10
  174. package/src/contract_function_simulator/oracle/interfaces.ts +91 -53
  175. package/src/contract_function_simulator/oracle/legacy_oracle_mappings.ts +104 -0
  176. package/src/contract_function_simulator/oracle/oracle.ts +377 -139
  177. package/src/contract_function_simulator/oracle/private_execution.ts +4 -4
  178. package/src/contract_function_simulator/oracle/private_execution_oracle.ts +87 -109
  179. package/src/contract_function_simulator/oracle/utility_execution_oracle.ts +530 -148
  180. package/src/contract_function_simulator/pick_notes.ts +22 -3
  181. package/src/contract_function_simulator/proxied_contract_data_source.ts +8 -1
  182. package/src/contract_logging.ts +18 -5
  183. package/src/contract_sync/contract_sync_service.ts +99 -75
  184. package/src/contract_sync/helpers.ts +4 -4
  185. package/src/debug/pxe_debug_utils.ts +3 -3
  186. package/src/entrypoints/client/bundle/index.ts +0 -1
  187. package/src/entrypoints/client/bundle/utils.ts +2 -3
  188. package/src/entrypoints/client/lazy/index.ts +0 -1
  189. package/src/entrypoints/client/lazy/utils.ts +2 -3
  190. package/src/entrypoints/pxe_creation_options.ts +7 -0
  191. package/src/entrypoints/server/index.ts +1 -2
  192. package/src/entrypoints/server/utils.ts +2 -3
  193. package/src/events/event_service.ts +30 -5
  194. package/src/events/private_event_filter_validator.ts +21 -1
  195. package/src/logs/log_service.ts +59 -75
  196. package/src/messages/message_context_service.ts +44 -0
  197. package/src/notes/note_service.ts +18 -8
  198. package/src/notes_filter.ts +1 -3
  199. package/src/oracle_version.ts +20 -10
  200. package/src/private_kernel/private_kernel_execution_prover.ts +4 -9
  201. package/src/private_kernel/private_kernel_oracle.ts +14 -14
  202. package/src/pxe.ts +153 -53
  203. package/src/storage/anchor_block_store/anchor_block_store.ts +1 -1
  204. package/src/storage/capsule_store/capsule_service.ts +90 -0
  205. package/src/storage/capsule_store/capsule_store.ts +44 -26
  206. package/src/storage/capsule_store/index.ts +1 -0
  207. package/src/storage/contract_store/contract_store.ts +8 -6
  208. package/src/storage/metadata.ts +1 -1
  209. package/src/storage/note_store/note_store.ts +2 -5
  210. package/src/storage/private_event_store/private_event_store.ts +4 -0
  211. package/src/storage/private_event_store/stored_private_event.ts +1 -1
  212. package/src/storage/tagging_store/recipient_tagging_store.ts +9 -5
  213. package/src/storage/tagging_store/sender_tagging_store.ts +185 -138
  214. package/src/tagging/index.ts +2 -2
  215. package/src/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.ts +8 -21
  216. package/src/tagging/recipient_sync/utils/load_logs_for_range.ts +10 -15
  217. package/src/tagging/sender_sync/sync_sender_tagging_indexes.ts +23 -10
  218. package/src/tagging/sender_sync/utils/get_status_change_of_pending.ts +26 -11
  219. package/src/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.ts +27 -26
  220. package/dest/access_scopes.d.ts +0 -9
  221. package/dest/access_scopes.d.ts.map +0 -1
  222. package/dest/access_scopes.js +0 -6
  223. package/src/access_scopes.ts +0 -9
@@ -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,7 @@ 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 CircuitSimulator, toACVMWitness } from '@aztec/simulator/client';
5
+ import { toACVMWitness } from '@aztec/simulator/client';
6
6
  import {
7
7
  type FunctionAbi,
8
8
  type FunctionArtifact,
@@ -14,7 +14,7 @@ import {
14
14
  import { AztecAddress } from '@aztec/stdlib/aztec-address';
15
15
  import { siloNullifier } from '@aztec/stdlib/hash';
16
16
  import { PrivateContextInputs } from '@aztec/stdlib/kernel';
17
- import { type ContractClassLog, DirectionalAppTaggingSecret, type PreTag } from '@aztec/stdlib/logs';
17
+ import { type ContractClassLog, ExtendedDirectionalAppTaggingSecret, type TaggingIndexRange } from '@aztec/stdlib/logs';
18
18
  import { Tag } from '@aztec/stdlib/logs';
19
19
  import { Note, type NoteStatus } from '@aztec/stdlib/note';
20
20
  import {
@@ -25,8 +25,6 @@ import {
25
25
  type TxContext,
26
26
  } from '@aztec/stdlib/tx';
27
27
 
28
- import type { AccessScopes } from '../../access_scopes.js';
29
- import type { ContractSyncService } from '../../contract_sync/contract_sync_service.js';
30
28
  import { NoteService } from '../../notes/note_service.js';
31
29
  import type { SenderTaggingStore } from '../../storage/tagging_store/sender_tagging_store.js';
32
30
  import { syncSenderTaggingIndexes } from '../../tagging/index.js';
@@ -44,16 +42,14 @@ export type PrivateExecutionOracleArgs = Omit<UtilityExecutionOracleArgs, 'contr
44
42
  txContext: TxContext;
45
43
  callContext: CallContext;
46
44
  /** Needed to trigger contract synchronization before nested calls */
47
- utilityExecutor: (call: FunctionCall, scopes: AccessScopes) => Promise<void>;
45
+ utilityExecutor: (call: FunctionCall, scopes: AztecAddress[]) => Promise<void>;
48
46
  executionCache: HashedValuesCache;
49
47
  noteCache: ExecutionNoteCache;
50
48
  taggingIndexCache: ExecutionTaggingIndexCache;
51
49
  senderTaggingStore: SenderTaggingStore;
52
- contractSyncService: ContractSyncService;
53
50
  totalPublicCalldataCount?: number;
54
51
  sideEffectCounter?: number;
55
52
  senderForTags?: AztecAddress;
56
- simulator?: CircuitSimulator;
57
53
  };
58
54
 
59
55
  /**
@@ -73,22 +69,22 @@ export class PrivateExecutionOracle extends UtilityExecutionOracle implements IP
73
69
  private newNotes: NoteAndSlot[] = [];
74
70
  private noteHashNullifierCounterMap: Map<number, number> = new Map();
75
71
  private contractClassLogs: CountedContractClassLog[] = [];
76
- private offchainEffects: { data: Fr[] }[] = [];
77
72
  private nestedExecutionResults: PrivateCallExecutionResult[] = [];
78
73
 
79
74
  private readonly argsHash: Fr;
80
75
  private readonly txContext: TxContext;
81
76
  private readonly callContext: CallContext;
82
- private readonly utilityExecutor: (call: FunctionCall, scopes: AccessScopes) => Promise<void>;
77
+ private readonly utilityExecutor: (call: FunctionCall, scopes: AztecAddress[]) => Promise<void>;
83
78
  private readonly executionCache: HashedValuesCache;
84
79
  private readonly noteCache: ExecutionNoteCache;
85
80
  private readonly taggingIndexCache: ExecutionTaggingIndexCache;
86
81
  private readonly senderTaggingStore: SenderTaggingStore;
87
- private readonly contractSyncService: ContractSyncService;
88
82
  private totalPublicCalldataCount: number;
89
- protected sideEffectCounter: number;
90
- private senderForTags?: AztecAddress;
91
- private readonly simulator?: CircuitSimulator;
83
+ private readonly initialSideEffectCounter: number;
84
+ /** Sender for tags passed in at oracle construction time. Returned by `getSenderForTags` unless overridden. */
85
+ private readonly defaultSenderForTags: AztecAddress | undefined;
86
+ /** Per-call sender-for-tags override, set by `setSenderForTags`. Takes precedence over `defaultSenderForTags`. */
87
+ private currentSenderForTags: AztecAddress | undefined;
92
88
 
93
89
  constructor(args: PrivateExecutionOracleArgs) {
94
90
  super({
@@ -104,15 +100,18 @@ export class PrivateExecutionOracle extends UtilityExecutionOracle implements IP
104
100
  this.noteCache = args.noteCache;
105
101
  this.taggingIndexCache = args.taggingIndexCache;
106
102
  this.senderTaggingStore = args.senderTaggingStore;
107
- this.contractSyncService = args.contractSyncService;
108
103
  this.totalPublicCalldataCount = args.totalPublicCalldataCount ?? 0;
109
- this.sideEffectCounter = args.sideEffectCounter ?? 0;
110
- this.senderForTags = args.senderForTags;
111
- this.simulator = args.simulator;
104
+ this.initialSideEffectCounter = args.sideEffectCounter ?? 0;
105
+ this.defaultSenderForTags = args.senderForTags;
112
106
  }
113
107
 
114
108
  public getPrivateContextInputs(): PrivateContextInputs {
115
- return new PrivateContextInputs(this.callContext, this.anchorBlockHeader, this.txContext, this.sideEffectCounter);
109
+ return new PrivateContextInputs(
110
+ this.callContext,
111
+ this.anchorBlockHeader,
112
+ this.txContext,
113
+ this.initialSideEffectCounter,
114
+ );
116
115
  }
117
116
 
118
117
  // We still need this function until we can get user-defined ordering of structs for fn arguments
@@ -159,17 +158,10 @@ export class PrivateExecutionOracle extends UtilityExecutionOracle implements IP
159
158
  }
160
159
 
161
160
  /**
162
- * Return the offchain effects emitted during this execution.
163
- */
164
- public getOffchainEffects() {
165
- return this.offchainEffects;
166
- }
167
-
168
- /**
169
- * Returns the pre-tags that were used in this execution (and that need to be stored in the db).
161
+ * Returns the tagging index ranges that were used in this execution (and that need to be stored in the db).
170
162
  */
171
- public getUsedPreTags(): PreTag[] {
172
- return this.taggingIndexCache.getUsedPreTags();
163
+ public getUsedTaggingIndexRanges(): TaggingIndexRange[] {
164
+ return this.taggingIndexCache.getUsedTaggingIndexRanges();
173
165
  }
174
166
 
175
167
  /**
@@ -186,11 +178,10 @@ export class PrivateExecutionOracle extends UtilityExecutionOracle implements IP
186
178
  * for a tag in order to emit a log. Constrained tagging should not use this as there is no
187
179
  * guarantee that the recipient knows about the sender, and hence about the shared secret.
188
180
  *
189
- * The value persists through nested calls, meaning all calls down the stack will use the same
190
- * 'senderForTags' value (unless it is replaced).
181
+ * Returns `currentSenderForTags` if set (via `setSenderForTags`), otherwise `defaultSenderForTags`.
191
182
  */
192
- public privateGetSenderForTags(): Promise<AztecAddress | undefined> {
193
- return Promise.resolve(this.senderForTags);
183
+ public getSenderForTags(): Promise<AztecAddress | undefined> {
184
+ return Promise.resolve(this.currentSenderForTags ?? this.defaultSenderForTags);
194
185
  }
195
186
 
196
187
  /**
@@ -200,12 +191,14 @@ export class PrivateExecutionOracle extends UtilityExecutionOracle implements IP
200
191
  * for a tag in order to emit a log. Constrained tagging should not use this as there is no
201
192
  * guarantee that the recipient knows about the sender, and hence about the shared secret.
202
193
  *
203
- * Account contracts typically set this value before calling other contracts. The value persists
204
- * through nested calls, meaning all calls down the stack will use the same 'senderForTags'
205
- * value (unless it is replaced by another call to this setter).
194
+ * Overrides `defaultSenderForTags` for the remainder of this call. Each oracle instance is
195
+ * independent, so this has no effect on any other call in the execution.
206
196
  */
207
- public privateSetSenderForTags(senderForTags: AztecAddress): Promise<void> {
208
- this.senderForTags = senderForTags;
197
+ public setSenderForTags(senderForTags: AztecAddress): Promise<void> {
198
+ this.logger.debug(
199
+ `Sender for tags switched to ${senderForTags} by contract ${this.contractAddress} (default was ${this.defaultSenderForTags})`,
200
+ );
201
+ this.currentSenderForTags = senderForTags;
209
202
  return Promise.resolve();
210
203
  }
211
204
 
@@ -215,26 +208,40 @@ export class PrivateExecutionOracle extends UtilityExecutionOracle implements IP
215
208
  * @param recipient - The address receiving the log
216
209
  * @returns An app tag to be used in a log.
217
210
  */
218
- public async privateGetNextAppTagAsSender(sender: AztecAddress, recipient: AztecAddress): Promise<Tag> {
219
- const secret = await this.#calculateDirectionalAppTaggingSecret(this.contractAddress, sender, recipient);
211
+ public async getNextAppTagAsSender(sender: AztecAddress, recipient: AztecAddress): Promise<Tag> {
212
+ const extendedSecret = await this.#calculateExtendedDirectionalAppTaggingSecret(
213
+ this.contractAddress,
214
+ sender,
215
+ recipient,
216
+ );
217
+
218
+ if (!extendedSecret) {
219
+ // We'd only fail to compute an extended secret if the recipient is an invalid address. To prevent
220
+ // king-of-the-hill attacks, instead of failing we use a random tag. By including a correct-looking tag in the
221
+ // log, the transaction shape is preserved and no privacy is leaked, even if the tag is bogus.
222
+ this.logger.warn(`Computing a tag for invalid recipient ${recipient} - returning a random tag instead`, {
223
+ contractAddress: this.contractAddress,
224
+ });
225
+ return Tag.random();
226
+ }
220
227
 
221
- const index = await this.#getIndexToUseForSecret(secret);
222
- this.log.debug(
228
+ const index = await this.#getIndexToUseForSecret(extendedSecret);
229
+ this.logger.debug(
223
230
  `Incrementing tagging index for sender: ${sender}, recipient: ${recipient}, contract: ${this.contractAddress} to ${index}`,
224
231
  );
225
- this.taggingIndexCache.setLastUsedIndex(secret, index);
232
+ this.taggingIndexCache.setLastUsedIndex(extendedSecret, index);
226
233
 
227
- return Tag.compute({ secret, index });
234
+ return Tag.compute({ extendedSecret, index });
228
235
  }
229
236
 
230
- async #calculateDirectionalAppTaggingSecret(
237
+ async #calculateExtendedDirectionalAppTaggingSecret(
231
238
  contractAddress: AztecAddress,
232
239
  sender: AztecAddress,
233
240
  recipient: AztecAddress,
234
241
  ) {
235
242
  const senderCompleteAddress = await this.getCompleteAddressOrFail(sender);
236
243
  const senderIvsk = await this.keyStore.getMasterIncomingViewingSecretKey(sender);
237
- return DirectionalAppTaggingSecret.compute(
244
+ return ExtendedDirectionalAppTaggingSecret.compute(
238
245
  senderCompleteAddress,
239
246
  senderIvsk,
240
247
  recipient,
@@ -243,7 +250,7 @@ export class PrivateExecutionOracle extends UtilityExecutionOracle implements IP
243
250
  );
244
251
  }
245
252
 
246
- async #getIndexToUseForSecret(secret: DirectionalAppTaggingSecret): Promise<number> {
253
+ async #getIndexToUseForSecret(secret: ExtendedDirectionalAppTaggingSecret): Promise<number> {
247
254
  // If we have the tagging index in the cache, we use it. If not we obtain it from the execution data provider.
248
255
  const lastUsedIndexInTx = this.taggingIndexCache.getLastUsedIndex(secret);
249
256
 
@@ -255,7 +262,6 @@ export class PrivateExecutionOracle extends UtilityExecutionOracle implements IP
255
262
  // that'd be wasteful as most tagging secrets are not used in each tx.
256
263
  await syncSenderTaggingIndexes(
257
264
  secret,
258
- this.contractAddress,
259
265
  this.aztecNode,
260
266
  this.senderTaggingStore,
261
267
  await this.anchorBlockHeader.hash(),
@@ -274,7 +280,7 @@ export class PrivateExecutionOracle extends UtilityExecutionOracle implements IP
274
280
  * @param values - Values to store.
275
281
  * @returns The hash of the values.
276
282
  */
277
- public privateStoreInExecutionCache(values: Fr[], hash: Fr) {
283
+ public setHashPreimage(values: Fr[], hash: Fr) {
278
284
  return this.executionCache.store(values, hash);
279
285
  }
280
286
 
@@ -283,7 +289,7 @@ export class PrivateExecutionOracle extends UtilityExecutionOracle implements IP
283
289
  * @param hash - Hash of the values.
284
290
  * @returns The values.
285
291
  */
286
- public privateLoadFromExecutionCache(hash: Fr): Promise<Fr[]> {
292
+ public getHashPreimage(hash: Fr): Promise<Fr[]> {
287
293
  const preimage = this.executionCache.getPreimage(hash);
288
294
  if (!preimage) {
289
295
  throw new Error(`Preimage for hash ${hash.toString()} not found in cache`);
@@ -291,12 +297,12 @@ export class PrivateExecutionOracle extends UtilityExecutionOracle implements IP
291
297
  return Promise.resolve(preimage);
292
298
  }
293
299
 
294
- override async utilityCheckNullifierExists(innerNullifier: Fr): Promise<boolean> {
300
+ override async doesNullifierExist(innerNullifier: Fr): Promise<boolean> {
295
301
  // This oracle must be overridden because while utility execution can only meaningfully check if a nullifier exists
296
302
  // in the synched block, during private execution there's also the possibility of it being pending, i.e. created
297
303
  // in the current transaction.
298
304
 
299
- this.log.debug(`Checking existence of inner nullifier ${innerNullifier}`, {
305
+ this.logger.debug(`Checking existence of inner nullifier ${innerNullifier}`, {
300
306
  contractAddress: this.contractAddress,
301
307
  });
302
308
 
@@ -304,7 +310,7 @@ export class PrivateExecutionOracle extends UtilityExecutionOracle implements IP
304
310
 
305
311
  return (
306
312
  this.noteCache.getNullifiers(this.contractAddress).has(nullifier) ||
307
- (await super.utilityCheckNullifierExists(innerNullifier))
313
+ (await super.doesNullifierExist(innerNullifier))
308
314
  );
309
315
  }
310
316
 
@@ -329,7 +335,7 @@ export class PrivateExecutionOracle extends UtilityExecutionOracle implements IP
329
335
  * @param status - The status of notes to fetch.
330
336
  * @returns Array of note data.
331
337
  */
332
- public override async utilityGetNotes(
338
+ public override async getNotes(
333
339
  owner: AztecAddress | undefined,
334
340
  storageSlot: Fr,
335
341
  numSelects: number,
@@ -375,7 +381,7 @@ export class PrivateExecutionOracle extends UtilityExecutionOracle implements IP
375
381
  offset,
376
382
  });
377
383
 
378
- this.log.debug(
384
+ this.logger.debug(
379
385
  `Returning ${notes.length} notes for ${this.callContext.contractAddress} at ${storageSlot}: ${notes
380
386
  .map(n => `${n.noteNonce.toString()}:[${n.note.items.map(i => i.toString()).join(',')}]`)
381
387
  .join(', ')}`,
@@ -395,7 +401,7 @@ export class PrivateExecutionOracle extends UtilityExecutionOracle implements IP
395
401
  * @param noteHash - A hash of the new note.
396
402
  * @returns
397
403
  */
398
- public privateNotifyCreatedNote(
404
+ public notifyCreatedNote(
399
405
  owner: AztecAddress,
400
406
  storageSlot: Fr,
401
407
  randomness: Fr,
@@ -404,7 +410,7 @@ export class PrivateExecutionOracle extends UtilityExecutionOracle implements IP
404
410
  noteHash: Fr,
405
411
  counter: number,
406
412
  ) {
407
- this.log.debug(`Notified of new note with inner hash ${noteHash}`, {
413
+ this.logger.debug(`Notified of new note with inner hash ${noteHash}`, {
408
414
  contractAddress: this.callContext.contractAddress,
409
415
  storageSlot,
410
416
  randomness,
@@ -436,7 +442,7 @@ export class PrivateExecutionOracle extends UtilityExecutionOracle implements IP
436
442
  * @param innerNullifier - The pending nullifier to add in the list (not yet siloed by contract address).
437
443
  * @param noteHash - A hash of the new note.
438
444
  */
439
- public async privateNotifyNullifiedNote(innerNullifier: Fr, noteHash: Fr, counter: number) {
445
+ public async notifyNullifiedNote(innerNullifier: Fr, noteHash: Fr, counter: number) {
440
446
  const nullifiedNoteHashCounter = await this.noteCache.nullifyNote(
441
447
  this.callContext.contractAddress,
442
448
  innerNullifier,
@@ -453,19 +459,19 @@ export class PrivateExecutionOracle extends UtilityExecutionOracle implements IP
453
459
  * @param innerNullifier - The pending nullifier to add in the list (not yet siloed by contract address).
454
460
  * @param noteHash - A hash of the new note.
455
461
  */
456
- public privateNotifyCreatedNullifier(innerNullifier: Fr) {
457
- this.log.debug(`Notified of new inner nullifier ${innerNullifier}`, { contractAddress: this.contractAddress });
462
+ public notifyCreatedNullifier(innerNullifier: Fr) {
463
+ this.logger.debug(`Notified of new inner nullifier ${innerNullifier}`, { contractAddress: this.contractAddress });
458
464
  return this.noteCache.nullifierCreated(this.callContext.contractAddress, innerNullifier);
459
465
  }
460
466
 
461
467
  /**
462
- * Check if a nullifier has been emitted in the same transaction, i.e. if privateNotifyCreatedNullifier has been
468
+ * Check if a nullifier has been emitted in the same transaction, i.e. if notifyCreatedNullifier has been
463
469
  * called for this inner nullifier from the contract with the specified address.
464
470
  * @param innerNullifier - The inner nullifier to check.
465
471
  * @param contractAddress - Address of the contract that emitted the nullifier.
466
472
  * @returns A boolean indicating whether the nullifier is pending or not.
467
473
  */
468
- public async privateIsNullifierPending(innerNullifier: Fr, contractAddress: AztecAddress): Promise<boolean> {
474
+ public async isNullifierPending(innerNullifier: Fr, contractAddress: AztecAddress): Promise<boolean> {
469
475
  const siloedNullifier = await siloNullifier(contractAddress, innerNullifier);
470
476
  const isNullifierPending = this.noteCache.getNullifiers(contractAddress).has(siloedNullifier.toBigInt());
471
477
  return Promise.resolve(isNullifierPending);
@@ -478,10 +484,10 @@ export class PrivateExecutionOracle extends UtilityExecutionOracle implements IP
478
484
  * @param log - The contract class log to be emitted.
479
485
  * @param counter - The contract class log's counter.
480
486
  */
481
- public privateNotifyCreatedContractClassLog(log: ContractClassLog, counter: number) {
487
+ public notifyCreatedContractClassLog(log: ContractClassLog, counter: number) {
482
488
  this.contractClassLogs.push(new CountedContractClassLog(log, counter));
483
489
  const text = log.toBuffer().toString('hex');
484
- this.log.verbose(
490
+ this.logger.verbose(
485
491
  `Emitted log from ContractClassRegistry: "${text.length > 100 ? text.slice(0, 100) + '...' : text}"`,
486
492
  );
487
493
  }
@@ -507,7 +513,7 @@ export class PrivateExecutionOracle extends UtilityExecutionOracle implements IP
507
513
  * @param isStaticCall - Whether the call is a static call.
508
514
  * @returns The execution result.
509
515
  */
510
- async privateCallPrivateFunction(
516
+ async callPrivateFunction(
511
517
  targetContractAddress: AztecAddress,
512
518
  functionSelector: FunctionSelector,
513
519
  argsHash: Fr,
@@ -521,7 +527,7 @@ export class PrivateExecutionOracle extends UtilityExecutionOracle implements IP
521
527
  }
522
528
 
523
529
  const simulatorSetupTimer = new Timer();
524
- this.log.debug(
530
+ this.logger.debug(
525
531
  `Calling private function ${targetContractAddress}:${functionSelector} from ${this.callContext.contractAddress}`,
526
532
  );
527
533
 
@@ -564,28 +570,33 @@ export class PrivateExecutionOracle extends UtilityExecutionOracle implements IP
564
570
  senderTaggingStore: this.senderTaggingStore,
565
571
  recipientTaggingStore: this.recipientTaggingStore,
566
572
  senderAddressBookStore: this.senderAddressBookStore,
567
- capsuleStore: this.capsuleStore,
573
+ capsuleService: this.capsuleService,
568
574
  privateEventStore: this.privateEventStore,
575
+ messageContextService: this.messageContextService,
569
576
  contractSyncService: this.contractSyncService,
570
577
  jobId: this.jobId,
571
578
  totalPublicCalldataCount: this.totalPublicCalldataCount,
572
579
  sideEffectCounter,
573
- log: this.log,
580
+ log: this.logger,
574
581
  scopes: this.scopes,
575
- senderForTags: this.senderForTags,
576
- simulator: this.simulator!,
582
+ senderForTags: this.defaultSenderForTags,
583
+ simulator: this.simulator,
584
+ l2TipsStore: this.l2TipsStore,
577
585
  });
578
586
 
579
587
  const setupTime = simulatorSetupTimer.ms();
580
588
 
581
589
  const childExecutionResult = await executePrivateFunction(
582
- this.simulator!,
590
+ this.simulator,
583
591
  privateExecutionOracle,
584
592
  targetArtifact,
585
593
  targetContractAddress,
586
594
  functionSelector,
587
595
  );
588
596
 
597
+ // Propagate the nested call's calldata count so the parent sees its increments on subsequent enqueues.
598
+ this.totalPublicCalldataCount = privateExecutionOracle.getTotalPublicCalldataCount();
599
+
589
600
  if (isStaticCall) {
590
601
  this.#checkValidStaticCall(childExecutionResult);
591
602
  }
@@ -605,7 +616,8 @@ export class PrivateExecutionOracle extends UtilityExecutionOracle implements IP
605
616
  };
606
617
  }
607
618
 
608
- #onNewPublicFunctionCall(calldataHash: Fr) {
619
+ /** Validates the calldata preimage exists in the cache and checks cumulative calldata size is within limits. */
620
+ public assertValidPublicCalldata(calldataHash: Fr) {
609
621
  const calldata = this.executionCache.getPreimage(calldataHash);
610
622
  if (!calldata) {
611
623
  throw new Error('Calldata for public call not found in cache');
@@ -615,47 +627,18 @@ export class PrivateExecutionOracle extends UtilityExecutionOracle implements IP
615
627
  if (this.totalPublicCalldataCount > MAX_FR_CALLDATA_TO_ALL_ENQUEUED_CALLS) {
616
628
  throw new Error(`Too many total args to all enqueued public calls! (> ${MAX_FR_CALLDATA_TO_ALL_ENQUEUED_CALLS})`);
617
629
  }
618
- }
619
-
620
- /**
621
- * Verify relevant information when a public function is enqueued.
622
- * @param targetContractAddress - The address of the contract to call.
623
- * @param calldataHash - The hash of the function selector and arguments.
624
- * @param sideEffectCounter - The side effect counter at the start of the call.
625
- * @param isStaticCall - Whether the call is a static call.
626
- */
627
- public privateNotifyEnqueuedPublicFunctionCall(
628
- _targetContractAddress: AztecAddress,
629
- calldataHash: Fr,
630
- _sideEffectCounter: number,
631
- _isStaticCall: boolean,
632
- ) {
633
- this.#onNewPublicFunctionCall(calldataHash);
634
630
  return Promise.resolve();
635
631
  }
636
632
 
637
- /**
638
- * Verify relevant information when a public teardown function is set.
639
- * @param targetContractAddress - The address of the contract to call.
640
- * @param argsHash - The arguments hash to pass to the function.
641
- * @param sideEffectCounter - The side effect counter at the start of the call.
642
- * @param isStaticCall - Whether the call is a static call.
643
- */
644
- public privateNotifySetPublicTeardownFunctionCall(
645
- _targetContractAddress: AztecAddress,
646
- calldataHash: Fr,
647
- _sideEffectCounter: number,
648
- _isStaticCall: boolean,
649
- ) {
650
- this.#onNewPublicFunctionCall(calldataHash);
651
- return Promise.resolve();
633
+ public getTotalPublicCalldataCount(): number {
634
+ return this.totalPublicCalldataCount;
652
635
  }
653
636
 
654
- public privateNotifySetMinRevertibleSideEffectCounter(minRevertibleSideEffectCounter: number): Promise<void> {
637
+ public notifyRevertiblePhaseStart(minRevertibleSideEffectCounter: number): Promise<void> {
655
638
  return this.noteCache.setMinRevertibleSideEffectCounter(minRevertibleSideEffectCounter);
656
639
  }
657
640
 
658
- public privateIsSideEffectCounterRevertible(sideEffectCounter: number): Promise<boolean> {
641
+ public isExecutionInRevertiblePhase(sideEffectCounter: number): Promise<boolean> {
659
642
  return Promise.resolve(this.noteCache.isSideEffectCounterRevertible(sideEffectCounter));
660
643
  }
661
644
 
@@ -682,9 +665,4 @@ export class PrivateExecutionOracle extends UtilityExecutionOracle implements IP
682
665
  public getDebugFunctionName() {
683
666
  return this.contractStore.getDebugFunctionName(this.contractAddress, this.callContext.functionSelector);
684
667
  }
685
-
686
- public utilityEmitOffchainEffect(data: Fr[]): Promise<void> {
687
- this.offchainEffects.push({ data });
688
- return Promise.resolve();
689
- }
690
668
  }