@aztec/txe 0.0.1-commit.f2ce05ee → 0.0.1-commit.f504929

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 (40) hide show
  1. package/dest/index.d.ts +1 -1
  2. package/dest/index.d.ts.map +1 -1
  3. package/dest/index.js +88 -54
  4. package/dest/oracle/interfaces.d.ts +29 -28
  5. package/dest/oracle/interfaces.d.ts.map +1 -1
  6. package/dest/oracle/txe_oracle_public_context.d.ts +13 -13
  7. package/dest/oracle/txe_oracle_public_context.d.ts.map +1 -1
  8. package/dest/oracle/txe_oracle_public_context.js +12 -12
  9. package/dest/oracle/txe_oracle_top_level_context.d.ts +22 -23
  10. package/dest/oracle/txe_oracle_top_level_context.d.ts.map +1 -1
  11. package/dest/oracle/txe_oracle_top_level_context.js +104 -52
  12. package/dest/rpc_translator.d.ts +82 -82
  13. package/dest/rpc_translator.d.ts.map +1 -1
  14. package/dest/rpc_translator.js +241 -148
  15. package/dest/state_machine/dummy_p2p_client.d.ts +14 -11
  16. package/dest/state_machine/dummy_p2p_client.d.ts.map +1 -1
  17. package/dest/state_machine/dummy_p2p_client.js +23 -14
  18. package/dest/state_machine/index.d.ts +1 -1
  19. package/dest/state_machine/index.d.ts.map +1 -1
  20. package/dest/state_machine/index.js +1 -1
  21. package/dest/txe_session.d.ts +9 -6
  22. package/dest/txe_session.d.ts.map +1 -1
  23. package/dest/txe_session.js +77 -21
  24. package/dest/util/txe_public_contract_data_source.d.ts +2 -3
  25. package/dest/util/txe_public_contract_data_source.d.ts.map +1 -1
  26. package/dest/util/txe_public_contract_data_source.js +5 -22
  27. package/package.json +15 -15
  28. package/src/index.ts +89 -52
  29. package/src/oracle/interfaces.ts +32 -31
  30. package/src/oracle/txe_oracle_public_context.ts +12 -12
  31. package/src/oracle/txe_oracle_top_level_context.ts +107 -91
  32. package/src/rpc_translator.ts +254 -156
  33. package/src/state_machine/dummy_p2p_client.ts +33 -20
  34. package/src/state_machine/index.ts +1 -0
  35. package/src/txe_session.ts +80 -71
  36. package/src/util/txe_public_contract_data_source.ts +10 -36
  37. package/dest/util/txe_contract_store.d.ts +0 -12
  38. package/dest/util/txe_contract_store.d.ts.map +0 -1
  39. package/dest/util/txe_contract_store.js +0 -22
  40. package/src/util/txe_contract_store.ts +0 -36
@@ -12,9 +12,11 @@ import { Fr } from '@aztec/foundation/curves/bn254';
12
12
  import { LogLevels, type Logger, applyStringFormatting, createLogger } from '@aztec/foundation/log';
13
13
  import { TestDateProvider } from '@aztec/foundation/timer';
14
14
  import type { KeyStore } from '@aztec/key-store';
15
+ import type { AccessScopes } from '@aztec/pxe/client/lazy';
15
16
  import {
16
17
  AddressStore,
17
18
  CapsuleStore,
19
+ type ContractStore,
18
20
  NoteStore,
19
21
  ORACLE_VERSION,
20
22
  PrivateEventStore,
@@ -83,7 +85,6 @@ import { ForkCheckpoint } from '@aztec/world-state';
83
85
  import { DEFAULT_ADDRESS } from '../constants.js';
84
86
  import type { TXEStateMachine } from '../state_machine/index.js';
85
87
  import type { TXEAccountStore } from '../util/txe_account_store.js';
86
- import type { TXEContractStore } from '../util/txe_contract_store.js';
87
88
  import { TXEPublicContractDataSource } from '../util/txe_public_contract_data_source.js';
88
89
  import { getSingleTxBlockRequestHash, insertTxEffectIntoWorldTrees, makeTXEBlock } from '../utils/block_creation.js';
89
90
  import type { ITxeExecutionOracle } from './interfaces.js';
@@ -96,7 +97,7 @@ export class TXEOracleTopLevelContext implements IMiscOracle, ITxeExecutionOracl
96
97
 
97
98
  constructor(
98
99
  private stateMachine: TXEStateMachine,
99
- private contractStore: TXEContractStore,
100
+ private contractStore: ContractStore,
100
101
  private noteStore: NoteStore,
101
102
  private keyStore: KeyStore,
102
103
  private addressStore: AddressStore,
@@ -106,7 +107,6 @@ export class TXEOracleTopLevelContext implements IMiscOracle, ITxeExecutionOracl
106
107
  private senderAddressBookStore: SenderAddressBookStore,
107
108
  private capsuleStore: CapsuleStore,
108
109
  private privateEventStore: PrivateEventStore,
109
- private jobId: string,
110
110
  private nextBlockTimestamp: bigint,
111
111
  private version: Fr,
112
112
  private chainId: Fr,
@@ -116,7 +116,7 @@ export class TXEOracleTopLevelContext implements IMiscOracle, ITxeExecutionOracl
116
116
  this.logger.debug('Entering Top Level Context');
117
117
  }
118
118
 
119
- utilityAssertCompatibleOracleVersion(version: number): void {
119
+ assertCompatibleOracleVersion(version: number): void {
120
120
  if (version !== ORACLE_VERSION) {
121
121
  throw new Error(
122
122
  `Incompatible oracle version. TXE is using version '${ORACLE_VERSION}', but got a request for '${version}'.`,
@@ -126,14 +126,14 @@ export class TXEOracleTopLevelContext implements IMiscOracle, ITxeExecutionOracl
126
126
 
127
127
  // This is typically only invoked in private contexts, but it is convenient to also have it in top-level for testing
128
128
  // setup.
129
- utilityGetRandomField(): Fr {
129
+ getRandomField(): Fr {
130
130
  return Fr.random();
131
131
  }
132
132
 
133
133
  // We instruct users to debug contracts via this oracle, so it makes sense that they'd expect it to also work in tests
134
- utilityDebugLog(level: number, message: string, fields: Fr[]): Promise<void> {
134
+ log(level: number, message: string, fields: Fr[]): Promise<void> {
135
135
  if (!LogLevels[level]) {
136
- throw new Error(`Invalid debug log level: ${level}`);
136
+ throw new Error(`Invalid log level: ${level}`);
137
137
  }
138
138
  const levelName = LogLevels[level];
139
139
 
@@ -141,23 +141,23 @@ export class TXEOracleTopLevelContext implements IMiscOracle, ITxeExecutionOracl
141
141
  return Promise.resolve();
142
142
  }
143
143
 
144
- txeGetDefaultAddress(): AztecAddress {
144
+ getDefaultAddress(): AztecAddress {
145
145
  return DEFAULT_ADDRESS;
146
146
  }
147
147
 
148
- async txeGetNextBlockNumber(): Promise<BlockNumber> {
148
+ async getNextBlockNumber(): Promise<BlockNumber> {
149
149
  return BlockNumber((await this.getLastBlockNumber()) + 1);
150
150
  }
151
151
 
152
- txeGetNextBlockTimestamp(): Promise<bigint> {
152
+ getNextBlockTimestamp(): Promise<bigint> {
153
153
  return Promise.resolve(this.nextBlockTimestamp);
154
154
  }
155
155
 
156
- async txeGetLastBlockTimestamp() {
156
+ async getLastBlockTimestamp() {
157
157
  return (await this.stateMachine.node.getBlockHeader('latest'))!.globalVariables.timestamp;
158
158
  }
159
159
 
160
- async txeGetLastTxEffects() {
160
+ async getLastTxEffects() {
161
161
  const latestBlockNumber = await this.stateMachine.archiver.getBlockNumber();
162
162
  const block = await this.stateMachine.archiver.getBlock(latestBlockNumber);
163
163
 
@@ -171,7 +171,26 @@ export class TXEOracleTopLevelContext implements IMiscOracle, ITxeExecutionOracl
171
171
  return { txHash: txEffects.txHash, noteHashes: txEffects.noteHashes, nullifiers: txEffects.nullifiers };
172
172
  }
173
173
 
174
- async txeGetPrivateEvents(selector: EventSelector, contractAddress: AztecAddress, scope: AztecAddress) {
174
+ async syncContractNonOracleMethod(contractAddress: AztecAddress, scope: AztecAddress, jobId: string) {
175
+ if (contractAddress.equals(DEFAULT_ADDRESS)) {
176
+ this.logger.debug(`Skipping sync in getPrivateEvents because the events correspond to the default address.`);
177
+ return;
178
+ }
179
+
180
+ const blockHeader = await this.stateMachine.anchorBlockStore.getBlockHeader();
181
+ await this.stateMachine.contractSyncService.ensureContractSynced(
182
+ contractAddress,
183
+ null,
184
+ async (call, execScopes) => {
185
+ await this.executeUtilityCall(call, execScopes, jobId);
186
+ },
187
+ blockHeader,
188
+ jobId,
189
+ [scope],
190
+ );
191
+ }
192
+
193
+ async getPrivateEvents(selector: EventSelector, contractAddress: AztecAddress, scope: AztecAddress) {
175
194
  return (
176
195
  await this.privateEventStore.getPrivateEvents(selector, {
177
196
  contractAddress,
@@ -182,7 +201,7 @@ export class TXEOracleTopLevelContext implements IMiscOracle, ITxeExecutionOracl
182
201
  ).map(e => e.packedEvent);
183
202
  }
184
203
 
185
- async txeAdvanceBlocksBy(blocks: number) {
204
+ async advanceBlocksBy(blocks: number) {
186
205
  this.logger.debug(`time traveling ${blocks} blocks`);
187
206
 
188
207
  for (let i = 0; i < blocks; i++) {
@@ -190,12 +209,12 @@ export class TXEOracleTopLevelContext implements IMiscOracle, ITxeExecutionOracl
190
209
  }
191
210
  }
192
211
 
193
- txeAdvanceTimestampBy(duration: UInt64) {
212
+ advanceTimestampBy(duration: UInt64) {
194
213
  this.logger.debug(`time traveling ${duration} seconds`);
195
214
  this.nextBlockTimestamp += duration;
196
215
  }
197
216
 
198
- async txeDeploy(artifact: ContractArtifact, instance: ContractInstanceWithAddress, secret: Fr) {
217
+ async deploy(artifact: ContractArtifact, instance: ContractInstanceWithAddress, secret: Fr) {
199
218
  // Emit deployment nullifier
200
219
  await this.mineBlock({
201
220
  nullifiers: [
@@ -207,20 +226,20 @@ export class TXEOracleTopLevelContext implements IMiscOracle, ITxeExecutionOracl
207
226
  });
208
227
 
209
228
  if (!secret.equals(Fr.ZERO)) {
210
- await this.txeAddAccount(artifact, instance, secret);
229
+ await this.addAccount(artifact, instance, secret);
211
230
  } else {
212
231
  await this.contractStore.addContractInstance(instance);
213
- await this.contractStore.addContractArtifact(instance.currentContractClassId, artifact);
232
+ await this.contractStore.addContractArtifact(artifact);
214
233
  this.logger.debug(`Deployed ${artifact.name} at ${instance.address}`);
215
234
  }
216
235
  }
217
236
 
218
- async txeAddAccount(artifact: ContractArtifact, instance: ContractInstanceWithAddress, secret: Fr) {
237
+ async addAccount(artifact: ContractArtifact, instance: ContractInstanceWithAddress, secret: Fr) {
219
238
  const partialAddress = await computePartialAddress(instance);
220
239
 
221
240
  this.logger.debug(`Deployed ${artifact.name} at ${instance.address}`);
222
241
  await this.contractStore.addContractInstance(instance);
223
- await this.contractStore.addContractArtifact(instance.currentContractClassId, artifact);
242
+ await this.contractStore.addContractArtifact(artifact);
224
243
 
225
244
  const completeAddress = await this.keyStore.addAccount(secret, partialAddress);
226
245
  await this.accountStore.setAccount(completeAddress.address, completeAddress);
@@ -230,7 +249,7 @@ export class TXEOracleTopLevelContext implements IMiscOracle, ITxeExecutionOracl
230
249
  return completeAddress;
231
250
  }
232
251
 
233
- async txeCreateAccount(secret: Fr) {
252
+ async createAccount(secret: Fr) {
234
253
  // This is a foot gun !
235
254
  const completeAddress = await this.keyStore.addAccount(secret, secret);
236
255
  await this.accountStore.setAccount(completeAddress.address, completeAddress);
@@ -240,7 +259,7 @@ export class TXEOracleTopLevelContext implements IMiscOracle, ITxeExecutionOracl
240
259
  return completeAddress;
241
260
  }
242
261
 
243
- async txeAddAuthWitness(address: AztecAddress, messageHash: Fr) {
262
+ async addAuthWitness(address: AztecAddress, messageHash: Fr) {
244
263
  const account = await this.accountStore.getAccount(address);
245
264
  const privateKey = await this.keyStore.getMasterSecretKey(account.publicKeys.masterIncomingViewingPublicKey);
246
265
 
@@ -253,7 +272,7 @@ export class TXEOracleTopLevelContext implements IMiscOracle, ITxeExecutionOracl
253
272
  }
254
273
 
255
274
  async mineBlock(options: { nullifiers?: Fr[] } = {}) {
256
- const blockNumber = await this.txeGetNextBlockNumber();
275
+ const blockNumber = await this.getNextBlockNumber();
257
276
 
258
277
  const txEffect = TxEffect.empty();
259
278
  txEffect.nullifiers = [getSingleTxBlockRequestHash(blockNumber), ...(options.nullifiers ?? [])];
@@ -277,13 +296,14 @@ export class TXEOracleTopLevelContext implements IMiscOracle, ITxeExecutionOracl
277
296
  await this.stateMachine.handleL2Block(block);
278
297
  }
279
298
 
280
- async txePrivateCallNewFlow(
299
+ async privateCallNewFlow(
281
300
  from: AztecAddress,
282
301
  targetContractAddress: AztecAddress = AztecAddress.zero(),
283
302
  functionSelector: FunctionSelector = FunctionSelector.empty(),
284
303
  args: Fr[],
285
304
  argsHash: Fr = Fr.zero(),
286
305
  isStaticCall: boolean = false,
306
+ jobId: string,
287
307
  ) {
288
308
  this.logger.verbose(
289
309
  `Executing external function ${await this.contractStore.getDebugFunctionName(targetContractAddress, functionSelector)}@${targetContractAddress} isStaticCall=${isStaticCall}`,
@@ -297,14 +317,13 @@ export class TXEOracleTopLevelContext implements IMiscOracle, ITxeExecutionOracl
297
317
  throw new Error(message);
298
318
  }
299
319
 
300
- // When `from` is the zero address (used when creating a new contract account for example),
301
- // we disable scope filtering by setting effectiveScopes to undefined. This allows these operations
302
- // to proceed without requiring keys registered for the zero address.
303
- const effectiveScopes = from.isZero() ? undefined : [from];
320
+ // When `from` is the zero address (e.g. when deploying a new account contract), we return an
321
+ // empty scope list which acts as deny-all: no notes are visible and no keys are accessible.
322
+ const effectiveScopes = from.isZero() ? [] : [from];
304
323
 
305
324
  // Sync notes before executing private function to discover notes from previous transactions
306
- const utilityExecutor = async (call: FunctionCall) => {
307
- await this.executeUtilityCall(call, effectiveScopes);
325
+ const utilityExecutor = async (call: FunctionCall, execScopes: AccessScopes) => {
326
+ await this.executeUtilityCall(call, execScopes, jobId);
308
327
  };
309
328
 
310
329
  const blockHeader = await this.stateMachine.anchorBlockStore.getBlockHeader();
@@ -313,10 +332,11 @@ export class TXEOracleTopLevelContext implements IMiscOracle, ITxeExecutionOracl
313
332
  functionSelector,
314
333
  utilityExecutor,
315
334
  blockHeader,
316
- this.jobId,
335
+ jobId,
336
+ effectiveScopes,
317
337
  );
318
338
 
319
- const blockNumber = await this.txeGetNextBlockNumber();
339
+ const blockNumber = await this.getNextBlockNumber();
320
340
 
321
341
  const callContext = new CallContext(from, targetContractAddress, functionSelector, isStaticCall);
322
342
 
@@ -337,43 +357,37 @@ export class TXEOracleTopLevelContext implements IMiscOracle, ITxeExecutionOracl
337
357
 
338
358
  const simulator = new WASMSimulator();
339
359
 
340
- const privateExecutionOracle = new PrivateExecutionOracle(
360
+ const privateExecutionOracle = new PrivateExecutionOracle({
341
361
  argsHash,
342
362
  txContext,
343
363
  callContext,
344
- /** Header of a block whose state is used during private execution (not the block the transaction is included in). */
345
- blockHeader,
364
+ anchorBlockHeader: blockHeader,
346
365
  utilityExecutor,
347
- /** List of transient auth witnesses to be used during this simulation */
348
- Array.from(this.authwits.values()),
349
- /** List of transient auth witnesses to be used during this simulation */
350
- [],
351
- HashedValuesCache.create([new HashedValues(args, argsHash)]),
366
+ authWitnesses: Array.from(this.authwits.values()),
367
+ capsules: [],
368
+ executionCache: HashedValuesCache.create([new HashedValues(args, argsHash)]),
352
369
  noteCache,
353
370
  taggingIndexCache,
354
- this.contractStore,
355
- this.noteStore,
356
- this.keyStore,
357
- this.addressStore,
358
- this.stateMachine.node,
359
- this.senderTaggingStore,
360
- this.recipientTaggingStore,
361
- this.senderAddressBookStore,
362
- this.capsuleStore,
363
- this.privateEventStore,
364
- this.stateMachine.contractSyncService,
365
- this.jobId,
366
- 0, // totalPublicArgsCount
367
- minRevertibleSideEffectCounter, // (start) sideEffectCounter
368
- undefined, // log
369
- effectiveScopes, // scopes
370
- /**
371
- * In TXE, the typical transaction entrypoint is skipped, so we need to simulate the actions that such a
372
- * contract would perform, including setting senderForTags.
373
- */
374
- from,
371
+ contractStore: this.contractStore,
372
+ noteStore: this.noteStore,
373
+ keyStore: this.keyStore,
374
+ addressStore: this.addressStore,
375
+ aztecNode: this.stateMachine.node,
376
+ senderTaggingStore: this.senderTaggingStore,
377
+ recipientTaggingStore: this.recipientTaggingStore,
378
+ senderAddressBookStore: this.senderAddressBookStore,
379
+ capsuleStore: this.capsuleStore,
380
+ privateEventStore: this.privateEventStore,
381
+ contractSyncService: this.stateMachine.contractSyncService,
382
+ jobId,
383
+ totalPublicCalldataCount: 0,
384
+ sideEffectCounter: minRevertibleSideEffectCounter,
385
+ scopes: effectiveScopes,
386
+ // In TXE, the typical transaction entrypoint is skipped, so we need to simulate the actions that such a
387
+ // contract would perform, including setting senderForTags.
388
+ senderForTags: from,
375
389
  simulator,
376
- );
390
+ });
377
391
 
378
392
  // Note: This is a slight modification of simulator.run without any of the checks. Maybe we should modify simulator.run with a boolean value to skip checks.
379
393
  let result: PrivateExecutionResult;
@@ -395,7 +409,7 @@ export class TXEOracleTopLevelContext implements IMiscOracle, ITxeExecutionOracl
395
409
  );
396
410
  const publicFunctionsCalldata = await Promise.all(
397
411
  publicCallRequests.map(async r => {
398
- const calldata = await privateExecutionOracle.privateLoadFromExecutionCache(r.calldataHash);
412
+ const calldata = await privateExecutionOracle.loadFromExecutionCache(r.calldataHash);
399
413
  return new HashedValues(calldata, r.calldataHash);
400
414
  }),
401
415
  );
@@ -413,6 +427,7 @@ export class TXEOracleTopLevelContext implements IMiscOracle, ITxeExecutionOracl
413
427
  const { publicInputs } = await generateSimulatedProvingResult(
414
428
  result,
415
429
  (addr, sel) => this.contractStore.getDebugFunctionName(addr, sel),
430
+ this.stateMachine.node,
416
431
  minRevertibleSideEffectCounter,
417
432
  );
418
433
 
@@ -508,7 +523,7 @@ export class TXEOracleTopLevelContext implements IMiscOracle, ITxeExecutionOracl
508
523
  return executionResult.returnValues ?? [];
509
524
  }
510
525
 
511
- async txePublicCallNewFlow(
526
+ async publicCallNewFlow(
512
527
  from: AztecAddress,
513
528
  targetContractAddress: AztecAddress,
514
529
  calldata: Fr[],
@@ -518,7 +533,7 @@ export class TXEOracleTopLevelContext implements IMiscOracle, ITxeExecutionOracl
518
533
  `Executing public function ${await this.contractStore.getDebugFunctionName(targetContractAddress, FunctionSelector.fromField(calldata[0]))}@${targetContractAddress} isStaticCall=${isStaticCall}`,
519
534
  );
520
535
 
521
- const blockNumber = await this.txeGetNextBlockNumber();
536
+ const blockNumber = await this.getNextBlockNumber();
522
537
 
523
538
  const gasLimits = new Gas(DEFAULT_DA_GAS_LIMIT, DEFAULT_L2_GAS_LIMIT);
524
539
 
@@ -595,7 +610,7 @@ export class TXEOracleTopLevelContext implements IMiscOracle, ITxeExecutionOracl
595
610
  constantData,
596
611
  /*gasUsed=*/ new Gas(0, 0),
597
612
  /*feePayer=*/ AztecAddress.zero(),
598
- /*includeByTimestamp=*/ 0n,
613
+ /*expirationTimestamp=*/ 0n,
599
614
  inputsForPublic,
600
615
  undefined,
601
616
  );
@@ -663,10 +678,11 @@ export class TXEOracleTopLevelContext implements IMiscOracle, ITxeExecutionOracl
663
678
  return returnValues ?? [];
664
679
  }
665
680
 
666
- async txeSimulateUtilityFunction(
681
+ async executeUtilityFunction(
667
682
  targetContractAddress: AztecAddress,
668
683
  functionSelector: FunctionSelector,
669
684
  args: Fr[],
685
+ jobId: string,
670
686
  ) {
671
687
  const artifact = await this.contractStore.getFunctionArtifact(targetContractAddress, functionSelector);
672
688
  if (!artifact) {
@@ -678,11 +694,12 @@ export class TXEOracleTopLevelContext implements IMiscOracle, ITxeExecutionOracl
678
694
  await this.stateMachine.contractSyncService.ensureContractSynced(
679
695
  targetContractAddress,
680
696
  functionSelector,
681
- async call => {
682
- await this.executeUtilityCall(call);
697
+ async (call, execScopes) => {
698
+ await this.executeUtilityCall(call, execScopes, jobId);
683
699
  },
684
700
  blockHeader,
685
- this.jobId,
701
+ jobId,
702
+ 'ALL_SCOPES',
686
703
  );
687
704
 
688
705
  const call = FunctionCall.from({
@@ -696,10 +713,10 @@ export class TXEOracleTopLevelContext implements IMiscOracle, ITxeExecutionOracl
696
713
  returnTypes: [],
697
714
  });
698
715
 
699
- return this.executeUtilityCall(call);
716
+ return this.executeUtilityCall(call, 'ALL_SCOPES', jobId);
700
717
  }
701
718
 
702
- private async executeUtilityCall(call: FunctionCall, scopes?: AztecAddress[]): Promise<Fr[]> {
719
+ private async executeUtilityCall(call: FunctionCall, scopes: AccessScopes, jobId: string): Promise<Fr[]> {
703
720
  const entryPointArtifact = await this.contractStore.getFunctionArtifactWithDebugMetadata(call.to, call.selector);
704
721
  if (entryPointArtifact.functionType !== FunctionType.UTILITY) {
705
722
  throw new Error(`Cannot run ${entryPointArtifact.functionType} function as utility`);
@@ -712,24 +729,23 @@ export class TXEOracleTopLevelContext implements IMiscOracle, ITxeExecutionOracl
712
729
 
713
730
  try {
714
731
  const anchorBlockHeader = await this.stateMachine.anchorBlockStore.getBlockHeader();
715
- const oracle = new UtilityExecutionOracle(
716
- call.to,
717
- [],
718
- [],
732
+ const oracle = new UtilityExecutionOracle({
733
+ contractAddress: call.to,
734
+ authWitnesses: [],
735
+ capsules: [],
719
736
  anchorBlockHeader,
720
- this.contractStore,
721
- this.noteStore,
722
- this.keyStore,
723
- this.addressStore,
724
- this.stateMachine.node,
725
- this.recipientTaggingStore,
726
- this.senderAddressBookStore,
727
- this.capsuleStore,
728
- this.privateEventStore,
729
- this.jobId,
730
- undefined, // log
731
- scopes, // scopes - used to filter notes by account
732
- );
737
+ contractStore: this.contractStore,
738
+ noteStore: this.noteStore,
739
+ keyStore: this.keyStore,
740
+ addressStore: this.addressStore,
741
+ aztecNode: this.stateMachine.node,
742
+ recipientTaggingStore: this.recipientTaggingStore,
743
+ senderAddressBookStore: this.senderAddressBookStore,
744
+ capsuleStore: this.capsuleStore,
745
+ privateEventStore: this.privateEventStore,
746
+ jobId,
747
+ scopes,
748
+ });
733
749
  const acirExecutionResult = await new WASMSimulator()
734
750
  .executeUserCircuit(toACVMWitness(0, call.args), entryPointArtifact, new Oracle(oracle).toACIRCallback())
735
751
  .catch((err: Error) => {
@@ -745,10 +761,10 @@ export class TXEOracleTopLevelContext implements IMiscOracle, ITxeExecutionOracl
745
761
  );
746
762
  });
747
763
 
748
- this.logger.verbose(`Utility simulation for ${call.to}.${call.selector} completed`);
764
+ this.logger.verbose(`Utility execution for ${call.to}.${call.selector} completed`);
749
765
  return witnessMapToFields(acirExecutionResult.returnWitness);
750
766
  } catch (err) {
751
- throw createSimulationError(err instanceof Error ? err : new Error('Unknown error during utility simulation'));
767
+ throw createSimulationError(err instanceof Error ? err : new Error('Unknown error during utility execution'));
752
768
  }
753
769
  }
754
770