@aztec/pxe 0.0.1-commit.e0f15ab9b → 0.0.1-commit.e304674f1

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 (138) hide show
  1. package/dest/block_synchronizer/block_synchronizer.d.ts +1 -1
  2. package/dest/block_synchronizer/block_synchronizer.d.ts.map +1 -1
  3. package/dest/block_synchronizer/block_synchronizer.js +6 -0
  4. package/dest/contract_function_simulator/contract_function_simulator.d.ts +3 -4
  5. package/dest/contract_function_simulator/contract_function_simulator.d.ts.map +1 -1
  6. package/dest/contract_function_simulator/contract_function_simulator.js +4 -3
  7. package/dest/contract_function_simulator/noir-structs/event_validation_request.d.ts +2 -3
  8. package/dest/contract_function_simulator/noir-structs/event_validation_request.d.ts.map +1 -1
  9. package/dest/contract_function_simulator/noir-structs/event_validation_request.js +2 -5
  10. package/dest/contract_function_simulator/noir-structs/note_validation_request.d.ts +2 -3
  11. package/dest/contract_function_simulator/noir-structs/note_validation_request.d.ts.map +1 -1
  12. package/dest/contract_function_simulator/noir-structs/note_validation_request.js +2 -5
  13. package/dest/contract_function_simulator/oracle/interfaces.d.ts +19 -19
  14. package/dest/contract_function_simulator/oracle/interfaces.d.ts.map +1 -1
  15. package/dest/contract_function_simulator/oracle/legacy_oracle_mappings.d.ts +1 -1
  16. package/dest/contract_function_simulator/oracle/legacy_oracle_mappings.d.ts.map +1 -1
  17. package/dest/contract_function_simulator/oracle/legacy_oracle_mappings.js +18 -22
  18. package/dest/contract_function_simulator/oracle/oracle.d.ts +38 -19
  19. package/dest/contract_function_simulator/oracle/oracle.d.ts.map +1 -1
  20. package/dest/contract_function_simulator/oracle/oracle.js +60 -39
  21. package/dest/contract_function_simulator/oracle/private_execution.js +1 -1
  22. package/dest/contract_function_simulator/oracle/private_execution_oracle.d.ts +7 -8
  23. package/dest/contract_function_simulator/oracle/private_execution_oracle.d.ts.map +1 -1
  24. package/dest/contract_function_simulator/oracle/private_execution_oracle.js +16 -7
  25. package/dest/contract_function_simulator/oracle/utility_execution_oracle.d.ts +30 -29
  26. package/dest/contract_function_simulator/oracle/utility_execution_oracle.d.ts.map +1 -1
  27. package/dest/contract_function_simulator/oracle/utility_execution_oracle.js +115 -79
  28. package/dest/contract_function_simulator/pick_notes.d.ts +1 -1
  29. package/dest/contract_function_simulator/pick_notes.d.ts.map +1 -1
  30. package/dest/contract_function_simulator/pick_notes.js +9 -2
  31. package/dest/contract_logging.d.ts +9 -4
  32. package/dest/contract_logging.d.ts.map +1 -1
  33. package/dest/contract_logging.js +21 -6
  34. package/dest/contract_sync/contract_sync_service.d.ts +3 -4
  35. package/dest/contract_sync/contract_sync_service.d.ts.map +1 -1
  36. package/dest/contract_sync/contract_sync_service.js +12 -22
  37. package/dest/contract_sync/helpers.d.ts +2 -3
  38. package/dest/contract_sync/helpers.d.ts.map +1 -1
  39. package/dest/contract_sync/helpers.js +7 -2
  40. package/dest/debug/pxe_debug_utils.d.ts +3 -3
  41. package/dest/debug/pxe_debug_utils.d.ts.map +1 -1
  42. package/dest/entrypoints/client/bundle/index.d.ts +1 -2
  43. package/dest/entrypoints/client/bundle/index.d.ts.map +1 -1
  44. package/dest/entrypoints/client/bundle/index.js +0 -1
  45. package/dest/entrypoints/client/bundle/utils.d.ts +2 -2
  46. package/dest/entrypoints/client/bundle/utils.d.ts.map +1 -1
  47. package/dest/entrypoints/client/bundle/utils.js +2 -2
  48. package/dest/entrypoints/client/lazy/index.d.ts +1 -2
  49. package/dest/entrypoints/client/lazy/index.d.ts.map +1 -1
  50. package/dest/entrypoints/client/lazy/index.js +0 -1
  51. package/dest/entrypoints/client/lazy/utils.d.ts +2 -2
  52. package/dest/entrypoints/client/lazy/utils.d.ts.map +1 -1
  53. package/dest/entrypoints/client/lazy/utils.js +2 -2
  54. package/dest/entrypoints/pxe_creation_options.d.ts +3 -1
  55. package/dest/entrypoints/pxe_creation_options.d.ts.map +1 -1
  56. package/dest/entrypoints/pxe_creation_options.js +3 -1
  57. package/dest/entrypoints/server/index.d.ts +1 -2
  58. package/dest/entrypoints/server/index.d.ts.map +1 -1
  59. package/dest/entrypoints/server/index.js +0 -1
  60. package/dest/entrypoints/server/utils.d.ts +2 -2
  61. package/dest/entrypoints/server/utils.d.ts.map +1 -1
  62. package/dest/entrypoints/server/utils.js +2 -2
  63. package/dest/events/event_service.d.ts +3 -2
  64. package/dest/events/event_service.d.ts.map +1 -1
  65. package/dest/events/event_service.js +16 -4
  66. package/dest/logs/log_service.d.ts +6 -7
  67. package/dest/logs/log_service.d.ts.map +1 -1
  68. package/dest/logs/log_service.js +32 -30
  69. package/dest/messages/message_context_service.d.ts +3 -3
  70. package/dest/messages/message_context_service.d.ts.map +1 -1
  71. package/dest/messages/message_context_service.js +3 -3
  72. package/dest/notes/note_service.d.ts +4 -5
  73. package/dest/notes/note_service.d.ts.map +1 -1
  74. package/dest/notes/note_service.js +14 -5
  75. package/dest/notes_filter.d.ts +2 -3
  76. package/dest/notes_filter.d.ts.map +1 -1
  77. package/dest/oracle_version.d.ts +2 -2
  78. package/dest/oracle_version.js +2 -2
  79. package/dest/pxe.d.ts +4 -5
  80. package/dest/pxe.d.ts.map +1 -1
  81. package/dest/pxe.js +6 -4
  82. package/dest/storage/capsule_store/capsule_service.d.ts +21 -0
  83. package/dest/storage/capsule_store/capsule_service.d.ts.map +1 -0
  84. package/dest/storage/capsule_store/capsule_service.js +50 -0
  85. package/dest/storage/capsule_store/capsule_store.d.ts +9 -9
  86. package/dest/storage/capsule_store/capsule_store.d.ts.map +1 -1
  87. package/dest/storage/capsule_store/capsule_store.js +33 -28
  88. package/dest/storage/capsule_store/index.d.ts +2 -1
  89. package/dest/storage/capsule_store/index.d.ts.map +1 -1
  90. package/dest/storage/capsule_store/index.js +1 -0
  91. package/dest/storage/metadata.d.ts +1 -1
  92. package/dest/storage/metadata.js +1 -1
  93. package/dest/storage/note_store/note_store.d.ts +1 -1
  94. package/dest/storage/note_store/note_store.d.ts.map +1 -1
  95. package/dest/storage/note_store/note_store.js +2 -2
  96. package/package.json +16 -16
  97. package/src/block_synchronizer/block_synchronizer.ts +6 -0
  98. package/src/contract_function_simulator/contract_function_simulator.ts +6 -6
  99. package/src/contract_function_simulator/noir-structs/event_validation_request.ts +0 -3
  100. package/src/contract_function_simulator/noir-structs/note_validation_request.ts +0 -3
  101. package/src/contract_function_simulator/oracle/interfaces.ts +26 -17
  102. package/src/contract_function_simulator/oracle/legacy_oracle_mappings.ts +13 -50
  103. package/src/contract_function_simulator/oracle/oracle.ts +79 -33
  104. package/src/contract_function_simulator/oracle/private_execution.ts +1 -1
  105. package/src/contract_function_simulator/oracle/private_execution_oracle.ts +19 -10
  106. package/src/contract_function_simulator/oracle/utility_execution_oracle.ts +204 -91
  107. package/src/contract_function_simulator/pick_notes.ts +9 -2
  108. package/src/contract_logging.ts +18 -5
  109. package/src/contract_sync/contract_sync_service.ts +32 -43
  110. package/src/contract_sync/helpers.ts +4 -4
  111. package/src/debug/pxe_debug_utils.ts +3 -3
  112. package/src/entrypoints/client/bundle/index.ts +0 -1
  113. package/src/entrypoints/client/bundle/utils.ts +2 -3
  114. package/src/entrypoints/client/lazy/index.ts +0 -1
  115. package/src/entrypoints/client/lazy/utils.ts +2 -3
  116. package/src/entrypoints/pxe_creation_options.ts +7 -0
  117. package/src/entrypoints/server/index.ts +0 -1
  118. package/src/entrypoints/server/utils.ts +2 -3
  119. package/src/events/event_service.ts +17 -4
  120. package/src/logs/log_service.ts +63 -48
  121. package/src/messages/message_context_service.ts +3 -4
  122. package/src/notes/note_service.ts +18 -8
  123. package/src/notes_filter.ts +1 -3
  124. package/src/oracle_version.ts +2 -2
  125. package/src/pxe.ts +11 -10
  126. package/src/storage/capsule_store/capsule_service.ts +90 -0
  127. package/src/storage/capsule_store/capsule_store.ts +34 -26
  128. package/src/storage/capsule_store/index.ts +1 -0
  129. package/src/storage/metadata.ts +1 -1
  130. package/src/storage/note_store/note_store.ts +2 -5
  131. package/dest/access_scopes.d.ts +0 -9
  132. package/dest/access_scopes.d.ts.map +0 -1
  133. package/dest/access_scopes.js +0 -6
  134. package/dest/contract_function_simulator/noir-structs/message_tx_context.d.ts +0 -16
  135. package/dest/contract_function_simulator/noir-structs/message_tx_context.d.ts.map +0 -1
  136. package/dest/contract_function_simulator/noir-structs/message_tx_context.js +0 -57
  137. package/src/access_scopes.ts +0 -9
  138. package/src/contract_function_simulator/noir-structs/message_tx_context.ts +0 -55
@@ -27,6 +27,25 @@ export class UnavailableOracleError extends Error {
27
27
 
28
28
  /**
29
29
  * A data source that has all the apis required by Aztec.nr.
30
+ *
31
+ * ## Oracle naming conventions
32
+ *
33
+ * We try to keep oracle naming consistent, please see below the conventions we adhere to.
34
+ *
35
+ * Each oracle method name has the form `aztec_{scope}_{verb}{Object}`, where:
36
+ *
37
+ * - **Scope prefix** indicates the execution context required:
38
+ * - `aztec_prv_` — available only during private function execution.
39
+ * - `aztec_utl_` — available during both utility and private execution.
40
+ *
41
+ * - **Verb** signals the operation's semantics (verb-first, then object):
42
+ * - `get` — read / lookup / get data from oracle into contract.
43
+ * - `does`/`is`/`has` — predicate (returns boolean).
44
+ * - `emit`/`notify` — propagate data from contract to oracle.
45
+ * - `set` — contract driven oracle state mutation (capsules, execution cache, tagging, etc).
46
+ * - `call` — trigger nested execution (control flow).
47
+ * - `assert` — validate a condition, throw on failure.
48
+ * - Standalone verbs (`delete`, `copy`, `decrypt`, `log`, etc) are used when no generic verb fits.
30
49
  */
31
50
  export class Oracle {
32
51
  constructor(private handler: IMiscOracle | IUtilityExecutionOracle | IPrivateExecutionOracle) {}
@@ -108,14 +127,14 @@ export class Oracle {
108
127
  }
109
128
 
110
129
  // eslint-disable-next-line camelcase
111
- aztec_prv_storeInExecutionCache(values: ACVMField[], [hash]: ACVMField[]): Promise<ACVMField[]> {
112
- this.handlerAsPrivate().storeInExecutionCache(values.map(Fr.fromString), Fr.fromString(hash));
130
+ aztec_prv_setHashPreimage(values: ACVMField[], [hash]: ACVMField[]): Promise<ACVMField[]> {
131
+ this.handlerAsPrivate().setHashPreimage(values.map(Fr.fromString), Fr.fromString(hash));
113
132
  return Promise.resolve([]);
114
133
  }
115
134
 
116
135
  // eslint-disable-next-line camelcase
117
- async aztec_prv_loadFromExecutionCache([returnsHash]: ACVMField[]): Promise<ACVMField[][]> {
118
- const values = await this.handlerAsPrivate().loadFromExecutionCache(Fr.fromString(returnsHash));
136
+ async aztec_prv_getHashPreimage([returnsHash]: ACVMField[]): Promise<ACVMField[][]> {
137
+ const values = await this.handlerAsPrivate().getHashPreimage(Fr.fromString(returnsHash));
119
138
  return [values.map(toACVMField)];
120
139
  }
121
140
 
@@ -252,9 +271,9 @@ export class Oracle {
252
271
  }
253
272
 
254
273
  // eslint-disable-next-line camelcase
255
- async aztec_utl_tryGetPublicKeysAndPartialAddress([address]: ACVMField[]): Promise<(ACVMField | ACVMField[])[]> {
274
+ async aztec_utl_getPublicKeysAndPartialAddress([address]: ACVMField[]): Promise<(ACVMField | ACVMField[])[]> {
256
275
  const parsedAddress = AztecAddress.fromField(Fr.fromString(address));
257
- const result = await this.handlerAsUtility().tryGetPublicKeysAndPartialAddress(parsedAddress);
276
+ const result = await this.handlerAsUtility().getPublicKeysAndPartialAddress(parsedAddress);
258
277
 
259
278
  // We are going to return a Noir Option struct to represent the possibility of null values. Options are a struct
260
279
  // with two fields: `some` (a boolean) and `value` (a field array in this case).
@@ -380,8 +399,8 @@ export class Oracle {
380
399
  }
381
400
 
382
401
  // eslint-disable-next-line camelcase
383
- async aztec_utl_checkNullifierExists([innerNullifier]: ACVMField[]): Promise<ACVMField[]> {
384
- const exists = await this.handlerAsUtility().checkNullifierExists(Fr.fromString(innerNullifier));
402
+ async aztec_utl_doesNullifierExist([innerNullifier]: ACVMField[]): Promise<ACVMField[]> {
403
+ const exists = await this.handlerAsUtility().doesNullifierExist(Fr.fromString(innerNullifier));
385
404
  return [toACVMField(exists)];
386
405
  }
387
406
 
@@ -400,13 +419,13 @@ export class Oracle {
400
419
  }
401
420
 
402
421
  // eslint-disable-next-line camelcase
403
- async aztec_utl_storageRead(
422
+ async aztec_utl_getFromPublicStorage(
404
423
  [blockHash]: ACVMField[],
405
424
  [contractAddress]: ACVMField[],
406
425
  [startStorageSlot]: ACVMField[],
407
426
  [numberOfElements]: ACVMField[],
408
427
  ): Promise<ACVMField[][]> {
409
- const values = await this.handlerAsUtility().storageRead(
428
+ const values = await this.handlerAsUtility().getFromPublicStorage(
410
429
  BlockHash.fromString(blockHash),
411
430
  new AztecAddress(Fr.fromString(contractAddress)),
412
431
  Fr.fromString(startStorageSlot),
@@ -464,8 +483,8 @@ export class Oracle {
464
483
  }
465
484
 
466
485
  // eslint-disable-next-line camelcase
467
- async aztec_prv_validatePublicCalldata([calldataHash]: ACVMField[]): Promise<ACVMField[]> {
468
- await this.handlerAsPrivate().validatePublicCalldata(Fr.fromString(calldataHash));
486
+ async aztec_prv_assertValidPublicCalldata([calldataHash]: ACVMField[]): Promise<ACVMField[]> {
487
+ await this.handlerAsPrivate().assertValidPublicCalldata(Fr.fromString(calldataHash));
469
488
  return [];
470
489
  }
471
490
 
@@ -476,8 +495,10 @@ export class Oracle {
476
495
  }
477
496
 
478
497
  // eslint-disable-next-line camelcase
479
- async aztec_prv_inRevertiblePhase([sideEffectCounter]: ACVMField[]): Promise<ACVMField[]> {
480
- const isRevertible = await this.handlerAsPrivate().inRevertiblePhase(Fr.fromString(sideEffectCounter).toNumber());
498
+ async aztec_prv_isExecutionInRevertiblePhase([sideEffectCounter]: ACVMField[]): Promise<ACVMField[]> {
499
+ const isRevertible = await this.handlerAsPrivate().isExecutionInRevertiblePhase(
500
+ Fr.fromString(sideEffectCounter).toNumber(),
501
+ );
481
502
  return Promise.resolve([toACVMField(isRevertible)]);
482
503
  }
483
504
 
@@ -491,8 +512,14 @@ export class Oracle {
491
512
  }
492
513
 
493
514
  // eslint-disable-next-line camelcase
494
- async aztec_utl_fetchTaggedLogs([pendingTaggedLogArrayBaseSlot]: ACVMField[]): Promise<ACVMField[]> {
495
- await this.handlerAsUtility().fetchTaggedLogs(Fr.fromString(pendingTaggedLogArrayBaseSlot));
515
+ async aztec_utl_getPendingTaggedLogs(
516
+ [pendingTaggedLogArrayBaseSlot]: ACVMField[],
517
+ [scope]: ACVMField[],
518
+ ): Promise<ACVMField[]> {
519
+ await this.handlerAsUtility().getPendingTaggedLogs(
520
+ Fr.fromString(pendingTaggedLogArrayBaseSlot),
521
+ AztecAddress.fromString(scope),
522
+ );
496
523
  return [];
497
524
  }
498
525
 
@@ -503,6 +530,7 @@ export class Oracle {
503
530
  [eventValidationRequestsArrayBaseSlot]: ACVMField[],
504
531
  [maxNotePackedLen]: ACVMField[],
505
532
  [maxEventSerializedLen]: ACVMField[],
533
+ [scope]: ACVMField[],
506
534
  ): Promise<ACVMField[]> {
507
535
  await this.handlerAsUtility().validateAndStoreEnqueuedNotesAndEvents(
508
536
  AztecAddress.fromString(contractAddress),
@@ -510,62 +538,71 @@ export class Oracle {
510
538
  Fr.fromString(eventValidationRequestsArrayBaseSlot),
511
539
  Fr.fromString(maxNotePackedLen).toNumber(),
512
540
  Fr.fromString(maxEventSerializedLen).toNumber(),
541
+ AztecAddress.fromString(scope),
513
542
  );
514
543
 
515
544
  return [];
516
545
  }
517
546
 
518
547
  // eslint-disable-next-line camelcase
519
- async aztec_utl_bulkRetrieveLogs(
548
+ async aztec_utl_getLogsByTag(
520
549
  [contractAddress]: ACVMField[],
521
550
  [logRetrievalRequestsArrayBaseSlot]: ACVMField[],
522
551
  [logRetrievalResponsesArrayBaseSlot]: ACVMField[],
552
+ [scope]: ACVMField[],
523
553
  ): Promise<ACVMField[]> {
524
- await this.handlerAsUtility().bulkRetrieveLogs(
554
+ await this.handlerAsUtility().getLogsByTag(
525
555
  AztecAddress.fromString(contractAddress),
526
556
  Fr.fromString(logRetrievalRequestsArrayBaseSlot),
527
557
  Fr.fromString(logRetrievalResponsesArrayBaseSlot),
558
+ AztecAddress.fromString(scope),
528
559
  );
529
560
  return [];
530
561
  }
531
562
 
532
563
  // eslint-disable-next-line camelcase
533
- async aztec_utl_utilityResolveMessageContexts(
564
+ async aztec_utl_getMessageContextsByTxHash(
534
565
  [contractAddress]: ACVMField[],
535
566
  [messageContextRequestsArrayBaseSlot]: ACVMField[],
536
567
  [messageContextResponsesArrayBaseSlot]: ACVMField[],
568
+ [scope]: ACVMField[],
537
569
  ): Promise<ACVMField[]> {
538
- await this.handlerAsUtility().utilityResolveMessageContexts(
570
+ await this.handlerAsUtility().getMessageContextsByTxHash(
539
571
  AztecAddress.fromString(contractAddress),
540
572
  Fr.fromString(messageContextRequestsArrayBaseSlot),
541
573
  Fr.fromString(messageContextResponsesArrayBaseSlot),
574
+ AztecAddress.fromString(scope),
542
575
  );
543
576
  return [];
544
577
  }
545
578
 
546
579
  // eslint-disable-next-line camelcase
547
- async aztec_utl_storeCapsule(
580
+ aztec_utl_setCapsule(
548
581
  [contractAddress]: ACVMField[],
549
582
  [slot]: ACVMField[],
550
583
  capsule: ACVMField[],
584
+ [scope]: ACVMField[],
551
585
  ): Promise<ACVMField[]> {
552
- await this.handlerAsUtility().storeCapsule(
586
+ this.handlerAsUtility().setCapsule(
553
587
  AztecAddress.fromField(Fr.fromString(contractAddress)),
554
588
  Fr.fromString(slot),
555
589
  capsule.map(Fr.fromString),
590
+ AztecAddress.fromField(Fr.fromString(scope)),
556
591
  );
557
- return [];
592
+ return Promise.resolve([]);
558
593
  }
559
594
 
560
595
  // eslint-disable-next-line camelcase
561
- async aztec_utl_loadCapsule(
596
+ async aztec_utl_getCapsule(
562
597
  [contractAddress]: ACVMField[],
563
598
  [slot]: ACVMField[],
564
599
  [tSize]: ACVMField[],
600
+ [scope]: ACVMField[],
565
601
  ): Promise<(ACVMField | ACVMField[])[]> {
566
- const values = await this.handlerAsUtility().loadCapsule(
602
+ const values = await this.handlerAsUtility().getCapsule(
567
603
  AztecAddress.fromField(Fr.fromString(contractAddress)),
568
604
  Fr.fromString(slot),
605
+ AztecAddress.fromField(Fr.fromString(scope)),
569
606
  );
570
607
 
571
608
  // We are going to return a Noir Option struct to represent the possibility of null values. Options are a struct
@@ -580,12 +617,17 @@ export class Oracle {
580
617
  }
581
618
 
582
619
  // eslint-disable-next-line camelcase
583
- async aztec_utl_deleteCapsule([contractAddress]: ACVMField[], [slot]: ACVMField[]): Promise<ACVMField[]> {
584
- await this.handlerAsUtility().deleteCapsule(
620
+ aztec_utl_deleteCapsule(
621
+ [contractAddress]: ACVMField[],
622
+ [slot]: ACVMField[],
623
+ [scope]: ACVMField[],
624
+ ): Promise<ACVMField[]> {
625
+ this.handlerAsUtility().deleteCapsule(
585
626
  AztecAddress.fromField(Fr.fromString(contractAddress)),
586
627
  Fr.fromString(slot),
628
+ AztecAddress.fromField(Fr.fromString(scope)),
587
629
  );
588
- return [];
630
+ return Promise.resolve([]);
589
631
  }
590
632
 
591
633
  // eslint-disable-next-line camelcase
@@ -594,18 +636,20 @@ export class Oracle {
594
636
  [srcSlot]: ACVMField[],
595
637
  [dstSlot]: ACVMField[],
596
638
  [numEntries]: ACVMField[],
639
+ [scope]: ACVMField[],
597
640
  ): Promise<ACVMField[]> {
598
641
  await this.handlerAsUtility().copyCapsule(
599
642
  AztecAddress.fromField(Fr.fromString(contractAddress)),
600
643
  Fr.fromString(srcSlot),
601
644
  Fr.fromString(dstSlot),
602
645
  Fr.fromString(numEntries).toNumber(),
646
+ AztecAddress.fromField(Fr.fromString(scope)),
603
647
  );
604
648
  return [];
605
649
  }
606
650
 
607
651
  // eslint-disable-next-line camelcase
608
- async aztec_utl_tryAes128Decrypt(
652
+ async aztec_utl_decryptAes128(
609
653
  ciphertextBVecStorage: ACVMField[],
610
654
  [ciphertextLength]: ACVMField[],
611
655
  iv: ACVMField[],
@@ -617,7 +661,7 @@ export class Oracle {
617
661
 
618
662
  // Noir Option<BoundedVec> is encoded as [is_some: Field, storage: Field[], length: Field].
619
663
  try {
620
- const plaintext = await this.handlerAsUtility().aes128Decrypt(ciphertext, ivBuffer, symKeyBuffer);
664
+ const plaintext = await this.handlerAsUtility().decryptAes128(ciphertext, ivBuffer, symKeyBuffer);
621
665
  const [storage, length] = bufferToBoundedVec(plaintext, ciphertextBVecStorage.length);
622
666
  return [toACVMField(1), storage, length];
623
667
  } catch {
@@ -632,22 +676,24 @@ export class Oracle {
632
676
  [ephPKField0]: ACVMField[],
633
677
  [ephPKField1]: ACVMField[],
634
678
  [ephPKField2]: ACVMField[],
679
+ [contractAddress]: ACVMField[],
635
680
  ): Promise<ACVMField[]> {
636
681
  const secret = await this.handlerAsUtility().getSharedSecret(
637
682
  AztecAddress.fromField(Fr.fromString(address)),
638
683
  Point.fromFields([ephPKField0, ephPKField1, ephPKField2].map(Fr.fromString)),
684
+ AztecAddress.fromField(Fr.fromString(contractAddress)),
639
685
  );
640
- return secret.toFields().map(toACVMField);
686
+ return [toACVMField(secret)];
641
687
  }
642
688
 
643
689
  // eslint-disable-next-line camelcase
644
- aztec_utl_invalidateContractSyncCache(
690
+ aztec_utl_setContractSyncCacheInvalid(
645
691
  [contractAddress]: ACVMField[],
646
692
  scopes: ACVMField[],
647
693
  [scopeCount]: ACVMField[],
648
694
  ): Promise<ACVMField[]> {
649
695
  const scopeAddresses = scopes.slice(0, +scopeCount).map(s => AztecAddress.fromField(Fr.fromString(s)));
650
- this.handlerAsUtility().invalidateContractSyncCache(
696
+ this.handlerAsUtility().setContractSyncCacheInvalid(
651
697
  AztecAddress.fromField(Fr.fromString(contractAddress)),
652
698
  scopeAddresses,
653
699
  );
@@ -76,7 +76,7 @@ export async function executePrivateFunction(
76
76
 
77
77
  const contractClassLogs = privateExecutionOracle.getContractClassLogs();
78
78
 
79
- const rawReturnValues = await privateExecutionOracle.loadFromExecutionCache(publicInputs.returnsHash);
79
+ const rawReturnValues = await privateExecutionOracle.getHashPreimage(publicInputs.returnsHash);
80
80
 
81
81
  const newNotes = privateExecutionOracle.getNewNotes();
82
82
  const noteHashNullifierCounterMap = privateExecutionOracle.getNoteHashNullifierCounterMap();
@@ -25,7 +25,6 @@ import {
25
25
  type TxContext,
26
26
  } from '@aztec/stdlib/tx';
27
27
 
28
- import type { AccessScopes } from '../../access_scopes.js';
29
28
  import { NoteService } from '../../notes/note_service.js';
30
29
  import type { SenderTaggingStore } from '../../storage/tagging_store/sender_tagging_store.js';
31
30
  import { syncSenderTaggingIndexes } from '../../tagging/index.js';
@@ -43,7 +42,7 @@ export type PrivateExecutionOracleArgs = Omit<UtilityExecutionOracleArgs, 'contr
43
42
  txContext: TxContext;
44
43
  callContext: CallContext;
45
44
  /** Needed to trigger contract synchronization before nested calls */
46
- utilityExecutor: (call: FunctionCall, scopes: AccessScopes) => Promise<void>;
45
+ utilityExecutor: (call: FunctionCall, scopes: AztecAddress[]) => Promise<void>;
47
46
  executionCache: HashedValuesCache;
48
47
  noteCache: ExecutionNoteCache;
49
48
  taggingIndexCache: ExecutionTaggingIndexCache;
@@ -76,7 +75,7 @@ export class PrivateExecutionOracle extends UtilityExecutionOracle implements IP
76
75
  private readonly argsHash: Fr;
77
76
  private readonly txContext: TxContext;
78
77
  private readonly callContext: CallContext;
79
- private readonly utilityExecutor: (call: FunctionCall, scopes: AccessScopes) => Promise<void>;
78
+ private readonly utilityExecutor: (call: FunctionCall, scopes: AztecAddress[]) => Promise<void>;
80
79
  private readonly executionCache: HashedValuesCache;
81
80
  private readonly noteCache: ExecutionNoteCache;
82
81
  private readonly taggingIndexCache: ExecutionTaggingIndexCache;
@@ -210,6 +209,16 @@ export class PrivateExecutionOracle extends UtilityExecutionOracle implements IP
210
209
  recipient,
211
210
  );
212
211
 
212
+ if (!extendedSecret) {
213
+ // We'd only fail to compute an extended secret if the recipient is an invalid address. To prevent
214
+ // king-of-the-hill attacks, instead of failing we use a random tag. By including a correct-looking tag in the
215
+ // log, the transaction shape is preserved and no privacy is leaked, even if the tag is bogus.
216
+ this.logger.warn(`Computing a tag for invalid recipient ${recipient} - returning a random tag instead`, {
217
+ contractAddress: this.contractAddress,
218
+ });
219
+ return new Tag(Fr.random());
220
+ }
221
+
213
222
  const index = await this.#getIndexToUseForSecret(extendedSecret);
214
223
  this.logger.debug(
215
224
  `Incrementing tagging index for sender: ${sender}, recipient: ${recipient}, contract: ${this.contractAddress} to ${index}`,
@@ -265,7 +274,7 @@ export class PrivateExecutionOracle extends UtilityExecutionOracle implements IP
265
274
  * @param values - Values to store.
266
275
  * @returns The hash of the values.
267
276
  */
268
- public storeInExecutionCache(values: Fr[], hash: Fr) {
277
+ public setHashPreimage(values: Fr[], hash: Fr) {
269
278
  return this.executionCache.store(values, hash);
270
279
  }
271
280
 
@@ -274,7 +283,7 @@ export class PrivateExecutionOracle extends UtilityExecutionOracle implements IP
274
283
  * @param hash - Hash of the values.
275
284
  * @returns The values.
276
285
  */
277
- public loadFromExecutionCache(hash: Fr): Promise<Fr[]> {
286
+ public getHashPreimage(hash: Fr): Promise<Fr[]> {
278
287
  const preimage = this.executionCache.getPreimage(hash);
279
288
  if (!preimage) {
280
289
  throw new Error(`Preimage for hash ${hash.toString()} not found in cache`);
@@ -282,7 +291,7 @@ export class PrivateExecutionOracle extends UtilityExecutionOracle implements IP
282
291
  return Promise.resolve(preimage);
283
292
  }
284
293
 
285
- override async checkNullifierExists(innerNullifier: Fr): Promise<boolean> {
294
+ override async doesNullifierExist(innerNullifier: Fr): Promise<boolean> {
286
295
  // This oracle must be overridden because while utility execution can only meaningfully check if a nullifier exists
287
296
  // in the synched block, during private execution there's also the possibility of it being pending, i.e. created
288
297
  // in the current transaction.
@@ -295,7 +304,7 @@ export class PrivateExecutionOracle extends UtilityExecutionOracle implements IP
295
304
 
296
305
  return (
297
306
  this.noteCache.getNullifiers(this.contractAddress).has(nullifier) ||
298
- (await super.checkNullifierExists(innerNullifier))
307
+ (await super.doesNullifierExist(innerNullifier))
299
308
  );
300
309
  }
301
310
 
@@ -555,7 +564,7 @@ export class PrivateExecutionOracle extends UtilityExecutionOracle implements IP
555
564
  senderTaggingStore: this.senderTaggingStore,
556
565
  recipientTaggingStore: this.recipientTaggingStore,
557
566
  senderAddressBookStore: this.senderAddressBookStore,
558
- capsuleStore: this.capsuleStore,
567
+ capsuleService: this.capsuleService,
559
568
  privateEventStore: this.privateEventStore,
560
569
  messageContextService: this.messageContextService,
561
570
  contractSyncService: this.contractSyncService,
@@ -598,7 +607,7 @@ export class PrivateExecutionOracle extends UtilityExecutionOracle implements IP
598
607
  }
599
608
 
600
609
  /** Validates the calldata preimage exists in the cache and checks cumulative calldata size is within limits. */
601
- public validatePublicCalldata(calldataHash: Fr) {
610
+ public assertValidPublicCalldata(calldataHash: Fr) {
602
611
  const calldata = this.executionCache.getPreimage(calldataHash);
603
612
  if (!calldata) {
604
613
  throw new Error('Calldata for public call not found in cache');
@@ -615,7 +624,7 @@ export class PrivateExecutionOracle extends UtilityExecutionOracle implements IP
615
624
  return this.noteCache.setMinRevertibleSideEffectCounter(minRevertibleSideEffectCounter);
616
625
  }
617
626
 
618
- public inRevertiblePhase(sideEffectCounter: number): Promise<boolean> {
627
+ public isExecutionInRevertiblePhase(sideEffectCounter: number): Promise<boolean> {
619
628
  return Promise.resolve(this.noteCache.isSideEffectCounterRevertible(sideEffectCounter));
620
629
  }
621
630