@aztec/pxe 0.0.1-commit.3469e52 → 0.0.1-commit.59e663cd

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 (127) hide show
  1. package/dest/bin/check_oracle_version.js +1 -1
  2. package/dest/block_synchronizer/block_synchronizer.d.ts +6 -4
  3. package/dest/block_synchronizer/block_synchronizer.d.ts.map +1 -1
  4. package/dest/block_synchronizer/block_synchronizer.js +53 -13
  5. package/dest/config/index.d.ts +3 -1
  6. package/dest/config/index.d.ts.map +1 -1
  7. package/dest/config/index.js +17 -0
  8. package/dest/contract_function_simulator/contract_function_simulator.d.ts +1 -1
  9. package/dest/contract_function_simulator/contract_function_simulator.d.ts.map +1 -1
  10. package/dest/contract_function_simulator/contract_function_simulator.js +1 -4
  11. package/dest/contract_function_simulator/noir-structs/event_validation_request.d.ts +1 -1
  12. package/dest/contract_function_simulator/noir-structs/event_validation_request.js +1 -1
  13. package/dest/contract_function_simulator/noir-structs/note_validation_request.d.ts +1 -1
  14. package/dest/contract_function_simulator/noir-structs/note_validation_request.js +1 -1
  15. package/dest/contract_function_simulator/oracle/interfaces.d.ts +13 -10
  16. package/dest/contract_function_simulator/oracle/interfaces.d.ts.map +1 -1
  17. package/dest/contract_function_simulator/oracle/oracle.d.ts +5 -3
  18. package/dest/contract_function_simulator/oracle/oracle.d.ts.map +1 -1
  19. package/dest/contract_function_simulator/oracle/oracle.js +27 -17
  20. package/dest/contract_function_simulator/oracle/private_execution.d.ts +2 -22
  21. package/dest/contract_function_simulator/oracle/private_execution.d.ts.map +1 -1
  22. package/dest/contract_function_simulator/oracle/private_execution.js +0 -37
  23. package/dest/contract_function_simulator/oracle/private_execution_oracle.d.ts +9 -1
  24. package/dest/contract_function_simulator/oracle/private_execution_oracle.d.ts.map +1 -1
  25. package/dest/contract_function_simulator/oracle/private_execution_oracle.js +16 -5
  26. package/dest/contract_function_simulator/oracle/utility_execution_oracle.d.ts +20 -12
  27. package/dest/contract_function_simulator/oracle/utility_execution_oracle.d.ts.map +1 -1
  28. package/dest/contract_function_simulator/oracle/utility_execution_oracle.js +34 -36
  29. package/dest/contract_sync/index.d.ts +23 -0
  30. package/dest/contract_sync/index.d.ts.map +1 -0
  31. package/dest/contract_sync/index.js +54 -0
  32. package/dest/debug/pxe_debug_utils.d.ts +16 -6
  33. package/dest/debug/pxe_debug_utils.d.ts.map +1 -1
  34. package/dest/debug/pxe_debug_utils.js +20 -10
  35. package/dest/entrypoints/server/index.d.ts +2 -1
  36. package/dest/entrypoints/server/index.d.ts.map +1 -1
  37. package/dest/entrypoints/server/index.js +1 -0
  38. package/dest/events/event_service.d.ts +2 -2
  39. package/dest/events/event_service.d.ts.map +1 -1
  40. package/dest/events/event_service.js +1 -1
  41. package/dest/logs/log_service.d.ts +1 -1
  42. package/dest/logs/log_service.d.ts.map +1 -1
  43. package/dest/logs/log_service.js +17 -11
  44. package/dest/notes/note_service.d.ts +4 -3
  45. package/dest/notes/note_service.d.ts.map +1 -1
  46. package/dest/notes/note_service.js +11 -10
  47. package/dest/oracle_version.d.ts +3 -3
  48. package/dest/oracle_version.d.ts.map +1 -1
  49. package/dest/oracle_version.js +4 -3
  50. package/dest/private_kernel/private_kernel_oracle.d.ts +3 -3
  51. package/dest/private_kernel/private_kernel_oracle.d.ts.map +1 -1
  52. package/dest/pxe.d.ts +1 -1
  53. package/dest/pxe.d.ts.map +1 -1
  54. package/dest/pxe.js +13 -11
  55. package/dest/storage/contract_store/contract_store.d.ts +1 -2
  56. package/dest/storage/contract_store/contract_store.d.ts.map +1 -1
  57. package/dest/storage/contract_store/contract_store.js +0 -12
  58. package/dest/storage/note_store/note_store.d.ts +43 -55
  59. package/dest/storage/note_store/note_store.d.ts.map +1 -1
  60. package/dest/storage/note_store/note_store.js +238 -252
  61. package/dest/storage/note_store/stored_note.d.ts +16 -0
  62. package/dest/storage/note_store/stored_note.d.ts.map +1 -0
  63. package/dest/storage/note_store/stored_note.js +43 -0
  64. package/dest/storage/private_event_store/private_event_store.d.ts +17 -4
  65. package/dest/storage/private_event_store/private_event_store.d.ts.map +1 -1
  66. package/dest/storage/private_event_store/private_event_store.js +163 -135
  67. package/dest/storage/private_event_store/stored_private_event.d.ts +23 -0
  68. package/dest/storage/private_event_store/stored_private_event.d.ts.map +1 -0
  69. package/dest/storage/private_event_store/stored_private_event.js +56 -0
  70. package/dest/tagging/get_all_logs_by_tags.d.ts +24 -0
  71. package/dest/tagging/get_all_logs_by_tags.d.ts.map +1 -0
  72. package/dest/tagging/get_all_logs_by_tags.js +46 -0
  73. package/dest/tagging/index.d.ts +2 -1
  74. package/dest/tagging/index.d.ts.map +1 -1
  75. package/dest/tagging/index.js +1 -0
  76. package/dest/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.d.ts +3 -2
  77. package/dest/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.d.ts.map +1 -1
  78. package/dest/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.js +2 -2
  79. package/dest/tagging/recipient_sync/utils/load_logs_for_range.d.ts +3 -2
  80. package/dest/tagging/recipient_sync/utils/load_logs_for_range.d.ts.map +1 -1
  81. package/dest/tagging/recipient_sync/utils/load_logs_for_range.js +5 -2
  82. package/dest/tagging/sender_sync/sync_sender_tagging_indexes.d.ts +3 -2
  83. package/dest/tagging/sender_sync/sync_sender_tagging_indexes.d.ts.map +1 -1
  84. package/dest/tagging/sender_sync/sync_sender_tagging_indexes.js +2 -2
  85. package/dest/tagging/sender_sync/utils/get_status_change_of_pending.d.ts +1 -1
  86. package/dest/tagging/sender_sync/utils/get_status_change_of_pending.d.ts.map +1 -1
  87. package/dest/tagging/sender_sync/utils/get_status_change_of_pending.js +5 -8
  88. package/dest/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.d.ts +3 -2
  89. package/dest/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.d.ts.map +1 -1
  90. package/dest/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.js +7 -4
  91. package/package.json +16 -16
  92. package/src/bin/check_oracle_version.ts +1 -0
  93. package/src/block_synchronizer/block_synchronizer.ts +55 -21
  94. package/src/config/index.ts +14 -0
  95. package/src/contract_function_simulator/contract_function_simulator.ts +1 -9
  96. package/src/contract_function_simulator/noir-structs/event_validation_request.ts +1 -1
  97. package/src/contract_function_simulator/noir-structs/note_validation_request.ts +1 -1
  98. package/src/contract_function_simulator/oracle/interfaces.ts +18 -9
  99. package/src/contract_function_simulator/oracle/oracle.ts +34 -21
  100. package/src/contract_function_simulator/oracle/private_execution.ts +1 -60
  101. package/src/contract_function_simulator/oracle/private_execution_oracle.ts +32 -6
  102. package/src/contract_function_simulator/oracle/utility_execution_oracle.ts +53 -45
  103. package/src/contract_sync/index.ts +98 -0
  104. package/src/debug/pxe_debug_utils.ts +26 -11
  105. package/src/entrypoints/server/index.ts +1 -0
  106. package/src/events/event_service.ts +1 -1
  107. package/src/logs/log_service.ts +24 -8
  108. package/src/notes/note_service.ts +18 -15
  109. package/src/oracle_version.ts +4 -3
  110. package/src/private_kernel/private_kernel_oracle.ts +2 -2
  111. package/src/pxe.ts +35 -12
  112. package/src/storage/contract_store/contract_store.ts +0 -20
  113. package/src/storage/note_store/note_store.ts +279 -313
  114. package/src/storage/note_store/stored_note.ts +48 -0
  115. package/src/storage/private_event_store/private_event_store.ts +214 -175
  116. package/src/storage/private_event_store/stored_private_event.ts +73 -0
  117. package/src/tagging/get_all_logs_by_tags.ts +68 -0
  118. package/src/tagging/index.ts +1 -0
  119. package/src/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.ts +11 -1
  120. package/src/tagging/recipient_sync/utils/load_logs_for_range.ts +7 -1
  121. package/src/tagging/sender_sync/sync_sender_tagging_indexes.ts +3 -1
  122. package/src/tagging/sender_sync/utils/get_status_change_of_pending.ts +5 -17
  123. package/src/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.ts +12 -3
  124. package/dest/tree_membership/tree_membership_service.d.ts +0 -50
  125. package/dest/tree_membership/tree_membership_service.d.ts.map +0 -1
  126. package/dest/tree_membership/tree_membership_service.js +0 -75
  127. package/src/tree_membership/tree_membership_service.ts +0 -97
@@ -2,7 +2,7 @@ import { Fr } from '@aztec/foundation/curves/bn254';
2
2
  import type { AztecAsyncKVStore } from '@aztec/kv-store';
3
3
  import type { EventSelector } from '@aztec/stdlib/abi';
4
4
  import type { AztecAddress } from '@aztec/stdlib/aztec-address';
5
- import { type InTx, TxHash } from '@aztec/stdlib/tx';
5
+ import type { InTx, TxHash } from '@aztec/stdlib/tx';
6
6
  import type { StagedStore } from '../../job_coordinator/job_coordinator.js';
7
7
  import type { PackedPrivateEvent } from '../../pxe.js';
8
8
  export type PrivateEventStoreFilter = {
@@ -28,8 +28,6 @@ export declare class PrivateEventStore implements StagedStore {
28
28
  readonly storeName: string;
29
29
  logger: import("@aztec/foundation/log").Logger;
30
30
  constructor(store: AztecAsyncKVStore);
31
- commit(jobId: string): Promise<void>;
32
- discardStaged(jobId: string): Promise<void>;
33
31
  /**
34
32
  * Store a private event log.
35
33
  * @param eventSelector - The event selector of the event.
@@ -73,6 +71,21 @@ export declare class PrivateEventStore implements StagedStore {
73
71
  * IMPORTANT: This method must be called within a transaction to ensure atomicity.
74
72
  */
75
73
  rollback(blockNumber: number, synchedBlockNumber: number): Promise<void>;
74
+ /**
75
+ * Commits in memory job data to persistent storage.
76
+ *
77
+ * Called by JobCoordinator when a job completes successfully.
78
+ *
79
+ * Note: JobCoordinator wraps all commits in a single transaction, so we don't need our own transactionAsync here
80
+ * (and using one would throw on IndexedDB as it does not support nested txs).
81
+ *
82
+ * @param jobId - The jobId identifying which staged data to commit
83
+ */
84
+ commit(jobId: string): Promise<void>;
85
+ /**
86
+ * Discards in memory job data without persisting it.
87
+ */
88
+ discardStaged(jobId: string): Promise<void>;
76
89
  }
77
90
  export {};
78
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJpdmF0ZV9ldmVudF9zdG9yZS5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3N0b3JhZ2UvcHJpdmF0ZV9ldmVudF9zdG9yZS9wcml2YXRlX2V2ZW50X3N0b3JlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUdwRCxPQUFPLEtBQUssRUFBRSxpQkFBaUIsRUFBcUMsTUFBTSxpQkFBaUIsQ0FBQztBQUM1RixPQUFPLEtBQUssRUFBRSxhQUFhLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUN2RCxPQUFPLEtBQUssRUFBRSxZQUFZLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUVoRSxPQUFPLEVBQUUsS0FBSyxJQUFJLEVBQUUsTUFBTSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFckQsT0FBTyxLQUFLLEVBQUUsV0FBVyxFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDNUUsT0FBTyxLQUFLLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFdkQsTUFBTSxNQUFNLHVCQUF1QixHQUFHO0lBQ3BDLGVBQWUsRUFBRSxZQUFZLENBQUM7SUFDOUIsU0FBUyxFQUFFLE1BQU0sQ0FBQztJQUNsQixPQUFPLEVBQUUsTUFBTSxDQUFDO0lBQ2hCLE1BQU0sRUFBRSxZQUFZLEVBQUUsQ0FBQztJQUN2QixNQUFNLENBQUMsRUFBRSxNQUFNLENBQUM7Q0FDakIsQ0FBQztBQWdCRixLQUFLLG9CQUFvQixHQUFHLElBQUksR0FBRztJQUNqQyxlQUFlLEVBQUUsWUFBWSxDQUFDO0lBQzlCLEtBQUssRUFBRSxZQUFZLENBQUM7SUFDcEIsMkNBQTJDO0lBQzNDLGNBQWMsRUFBRSxNQUFNLENBQUM7SUFDdkIseUVBQXlFO0lBQ3pFLGNBQWMsRUFBRSxNQUFNLENBQUM7Q0FDeEIsQ0FBQztBQUVGOztHQUVHO0FBQ0gscUJBQWEsaUJBQWtCLFlBQVcsV0FBVzs7SUFDbkQsUUFBUSxDQUFDLFNBQVMsRUFBRSxNQUFNLENBQW1CO0lBZTdDLE1BQU0seUNBQXVDO0lBRTdDLFlBQVksS0FBSyxFQUFFLGlCQUFpQixFQVFuQztJQU1LLE1BQU0sQ0FBQyxLQUFLLEVBQUUsTUFBTSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FlekM7SUFFRCxhQUFhLENBQUMsS0FBSyxFQUFFLE1BQU0sR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLENBRzFDO0lBb0REOzs7Ozs7Ozs7OztPQVdHO0lBQ0gsb0JBQW9CLENBQ2xCLGFBQWEsRUFBRSxhQUFhLEVBQzVCLFVBQVUsRUFBRSxFQUFFLEVBQ2QsVUFBVSxFQUFFLEVBQUUsRUFBRSxFQUNoQixxQkFBcUIsRUFBRSxFQUFFLEVBQ3pCLFFBQVEsRUFBRSxvQkFBb0IsRUFDOUIsS0FBSyxFQUFFLE1BQU0sR0FDWixPQUFPLENBQUMsSUFBSSxDQUFDLENBa0NmO0lBRUQ7Ozs7Ozs7Ozs7T0FVRztJQUNVLGdCQUFnQixDQUMzQixhQUFhLEVBQUUsYUFBYSxFQUM1QixNQUFNLEVBQUUsdUJBQXVCLEdBQzlCLE9BQU8sQ0FBQyxrQkFBa0IsRUFBRSxDQUFDLENBdUQvQjtJQUVEOzs7Ozs7Ozs7Ozs7Ozs7O09BZ0JHO0lBQ1UsUUFBUSxDQUFDLFdBQVcsRUFBRSxNQUFNLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0E0QnBGO0NBQ0YifQ==
91
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJpdmF0ZV9ldmVudF9zdG9yZS5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3N0b3JhZ2UvcHJpdmF0ZV9ldmVudF9zdG9yZS9wcml2YXRlX2V2ZW50X3N0b3JlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUlwRCxPQUFPLEtBQUssRUFBRSxpQkFBaUIsRUFBcUMsTUFBTSxpQkFBaUIsQ0FBQztBQUM1RixPQUFPLEtBQUssRUFBRSxhQUFhLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUN2RCxPQUFPLEtBQUssRUFBRSxZQUFZLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUNoRSxPQUFPLEtBQUssRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFckQsT0FBTyxLQUFLLEVBQUUsV0FBVyxFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDNUUsT0FBTyxLQUFLLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFHdkQsTUFBTSxNQUFNLHVCQUF1QixHQUFHO0lBQ3BDLGVBQWUsRUFBRSxZQUFZLENBQUM7SUFDOUIsU0FBUyxFQUFFLE1BQU0sQ0FBQztJQUNsQixPQUFPLEVBQUUsTUFBTSxDQUFDO0lBQ2hCLE1BQU0sRUFBRSxZQUFZLEVBQUUsQ0FBQztJQUN2QixNQUFNLENBQUMsRUFBRSxNQUFNLENBQUM7Q0FDakIsQ0FBQztBQUVGLEtBQUssb0JBQW9CLEdBQUcsSUFBSSxHQUFHO0lBQ2pDLGVBQWUsRUFBRSxZQUFZLENBQUM7SUFDOUIsS0FBSyxFQUFFLFlBQVksQ0FBQztJQUNwQiwyQ0FBMkM7SUFDM0MsY0FBYyxFQUFFLE1BQU0sQ0FBQztJQUN2Qix5RUFBeUU7SUFDekUsY0FBYyxFQUFFLE1BQU0sQ0FBQztDQUN4QixDQUFDO0FBRUY7O0dBRUc7QUFDSCxxQkFBYSxpQkFBa0IsWUFBVyxXQUFXOztJQUNuRCxRQUFRLENBQUMsU0FBUyxFQUFFLE1BQU0sQ0FBbUI7SUFnQjdDLE1BQU0seUNBQXVDO0lBRTdDLFlBQVksS0FBSyxFQUFFLGlCQUFpQixFQVFuQztJQUVEOzs7Ozs7Ozs7OztPQVdHO0lBQ0gsb0JBQW9CLENBQ2xCLGFBQWEsRUFBRSxhQUFhLEVBQzVCLFVBQVUsRUFBRSxFQUFFLEVBQ2QsVUFBVSxFQUFFLEVBQUUsRUFBRSxFQUNoQixxQkFBcUIsRUFBRSxFQUFFLEVBQ3pCLFFBQVEsRUFBRSxvQkFBb0IsRUFDOUIsS0FBSyxFQUFFLE1BQU0saUJBdUNkO0lBRUQ7Ozs7Ozs7Ozs7T0FVRztJQUNJLGdCQUFnQixDQUNyQixhQUFhLEVBQUUsYUFBYSxFQUM1QixNQUFNLEVBQUUsdUJBQXVCLEdBQzlCLE9BQU8sQ0FBQyxrQkFBa0IsRUFBRSxDQUFDLENBcUUvQjtJQUVEOzs7Ozs7Ozs7Ozs7Ozs7O09BZ0JHO0lBQ1UsUUFBUSxDQUFDLFdBQVcsRUFBRSxNQUFNLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0E0QnBGO0lBRUQ7Ozs7Ozs7OztPQVNHO0lBQ0gsTUFBTSxDQUFDLEtBQUssRUFBRSxNQUFNLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQWVuQztJQUVEOztPQUVHO0lBQ0gsYUFBYSxDQUFDLEtBQUssRUFBRSxNQUFNLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUUxQztDQTRFRiJ9
@@ -1 +1 @@
1
- {"version":3,"file":"private_event_store.d.ts","sourceRoot":"","sources":["../../../src/storage/private_event_store/private_event_store.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,EAAE,EAAE,MAAM,gCAAgC,CAAC;AAGpD,OAAO,KAAK,EAAE,iBAAiB,EAAqC,MAAM,iBAAiB,CAAC;AAC5F,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAEhE,OAAO,EAAE,KAAK,IAAI,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAErD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0CAA0C,CAAC;AAC5E,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAEvD,MAAM,MAAM,uBAAuB,GAAG;IACpC,eAAe,EAAE,YAAY,CAAC;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,YAAY,EAAE,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAgBF,KAAK,oBAAoB,GAAG,IAAI,GAAG;IACjC,eAAe,EAAE,YAAY,CAAC;IAC9B,KAAK,EAAE,YAAY,CAAC;IACpB,2CAA2C;IAC3C,cAAc,EAAE,MAAM,CAAC;IACvB,yEAAyE;IACzE,cAAc,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF;;GAEG;AACH,qBAAa,iBAAkB,YAAW,WAAW;;IACnD,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAmB;IAe7C,MAAM,yCAAuC;IAE7C,YAAY,KAAK,EAAE,iBAAiB,EAQnC;IAMK,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAezC;IAED,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAG1C;IAoDD;;;;;;;;;;;OAWG;IACH,oBAAoB,CAClB,aAAa,EAAE,aAAa,EAC5B,UAAU,EAAE,EAAE,EACd,UAAU,EAAE,EAAE,EAAE,EAChB,qBAAqB,EAAE,EAAE,EACzB,QAAQ,EAAE,oBAAoB,EAC9B,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,IAAI,CAAC,CAkCf;IAED;;;;;;;;;;OAUG;IACU,gBAAgB,CAC3B,aAAa,EAAE,aAAa,EAC5B,MAAM,EAAE,uBAAuB,GAC9B,OAAO,CAAC,kBAAkB,EAAE,CAAC,CAuD/B;IAED;;;;;;;;;;;;;;;;OAgBG;IACU,QAAQ,CAAC,WAAW,EAAE,MAAM,EAAE,kBAAkB,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA4BpF;CACF"}
1
+ {"version":3,"file":"private_event_store.d.ts","sourceRoot":"","sources":["../../../src/storage/private_event_store/private_event_store.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,EAAE,EAAE,MAAM,gCAAgC,CAAC;AAIpD,OAAO,KAAK,EAAE,iBAAiB,EAAqC,MAAM,iBAAiB,CAAC;AAC5F,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAErD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0CAA0C,CAAC;AAC5E,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAGvD,MAAM,MAAM,uBAAuB,GAAG;IACpC,eAAe,EAAE,YAAY,CAAC;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,YAAY,EAAE,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,KAAK,oBAAoB,GAAG,IAAI,GAAG;IACjC,eAAe,EAAE,YAAY,CAAC;IAC9B,KAAK,EAAE,YAAY,CAAC;IACpB,2CAA2C;IAC3C,cAAc,EAAE,MAAM,CAAC;IACvB,yEAAyE;IACzE,cAAc,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF;;GAEG;AACH,qBAAa,iBAAkB,YAAW,WAAW;;IACnD,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAmB;IAgB7C,MAAM,yCAAuC;IAE7C,YAAY,KAAK,EAAE,iBAAiB,EAQnC;IAED;;;;;;;;;;;OAWG;IACH,oBAAoB,CAClB,aAAa,EAAE,aAAa,EAC5B,UAAU,EAAE,EAAE,EACd,UAAU,EAAE,EAAE,EAAE,EAChB,qBAAqB,EAAE,EAAE,EACzB,QAAQ,EAAE,oBAAoB,EAC9B,KAAK,EAAE,MAAM,iBAuCd;IAED;;;;;;;;;;OAUG;IACI,gBAAgB,CACrB,aAAa,EAAE,aAAa,EAC5B,MAAM,EAAE,uBAAuB,GAC9B,OAAO,CAAC,kBAAkB,EAAE,CAAC,CAqE/B;IAED;;;;;;;;;;;;;;;;OAgBG;IACU,QAAQ,CAAC,WAAW,EAAE,MAAM,EAAE,kBAAkB,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA4BpF;IAED;;;;;;;;;OASG;IACH,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAenC;IAED;;OAEG;IACH,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE1C;CA4EF"}
@@ -1,86 +1,26 @@
1
1
  import { BlockNumber } from '@aztec/foundation/branded-types';
2
- import { Fr } from '@aztec/foundation/curves/bn254';
2
+ import { toArray } from '@aztec/foundation/iterable';
3
3
  import { createLogger } from '@aztec/foundation/log';
4
- import { BufferReader, serializeToBuffer } from '@aztec/foundation/serialize';
5
- import { L2BlockHash } from '@aztec/stdlib/block';
6
- import { TxHash } from '@aztec/stdlib/tx';
4
+ import { Semaphore } from '@aztec/foundation/queue';
5
+ import { StoredPrivateEvent } from './stored_private_event.js';
7
6
  /**
8
7
  * Stores decrypted private event logs.
9
8
  */ export class PrivateEventStore {
10
9
  storeName = 'private_event';
11
10
  #store;
12
- /** Map storing the actual private event log entries, keyed by siloedEventCommitment */ #eventLogs;
13
- /** Multi-map from contractAddress_scope_eventSelector to siloedEventCommitment for efficient lookup */ #eventsByContractScopeSelector;
11
+ /** Actual private event log entries, keyed by siloedEventCommitment */ #events;
12
+ /** Multi-map from contractAddress_eventSelector to siloedEventCommitment for efficient lookup */ #eventsByContractAndEventSelector;
14
13
  /** Multi-map from block number to siloedEventCommitment for rollback support */ #eventsByBlockNumber;
15
- /** Map from siloedEventCommitment to boolean indicating if log has been seen. */ #seenLogs;
16
- /** jobId => eventId (event siloed nullifier) => PrivateEventEntry */ #eventLogsInJobStage;
14
+ /** jobId => eventId (event siloed nullifier) => StoredPrivateEvent */ #eventsForJob;
15
+ /** Per-job locks to prevent concurrent writes from affecting each other. */ #jobLocks;
17
16
  logger = createLogger('private_event_store');
18
17
  constructor(store){
19
18
  this.#store = store;
20
- this.#eventLogs = this.#store.openMap('private_event_logs');
21
- this.#eventsByContractScopeSelector = this.#store.openMultiMap('events_by_contract_scope_selector');
22
- this.#seenLogs = this.#store.openMap('seen_logs');
19
+ this.#events = this.#store.openMap('private_event_logs');
20
+ this.#eventsByContractAndEventSelector = this.#store.openMultiMap('events_by_contract_selector');
23
21
  this.#eventsByBlockNumber = this.#store.openMultiMap('events_by_block_number');
24
- this.#eventLogsInJobStage = new Map();
25
- }
26
- #keyFor(contractAddress, scope, eventSelector) {
27
- return `${contractAddress.toString()}_${scope.toString()}_${eventSelector.toString()}`;
28
- }
29
- async commit(jobId) {
30
- await Promise.all([
31
- ...this.#getEventLogsInJobStage(jobId).entries()
32
- ].map(async ([eventId, eventEntry])=>{
33
- this.logger.verbose('storing private event log (KV store)', eventEntry);
34
- await Promise.all([
35
- this.#eventLogs.set(eventId, eventEntry),
36
- this.#eventsByContractScopeSelector.set(eventEntry.lookupKey, eventId),
37
- this.#eventsByBlockNumber.set(eventEntry.l2BlockNumber, eventId),
38
- this.#seenLogs.set(eventId, true)
39
- ]);
40
- }));
41
- return this.discardStaged(jobId);
42
- }
43
- discardStaged(jobId) {
44
- this.#eventLogsInJobStage.delete(jobId);
45
- return Promise.resolve();
46
- }
47
- #getEventLogsInJobStage(jobId) {
48
- let jobStage = this.#eventLogsInJobStage.get(jobId);
49
- if (jobStage === undefined) {
50
- jobStage = new Map();
51
- this.#eventLogsInJobStage.set(jobId, jobStage);
52
- }
53
- return jobStage;
54
- }
55
- async #isSeenLog(jobId, eventId) {
56
- const eventLogsInJobStage = this.#getEventLogsInJobStage(jobId).get(eventId);
57
- return !!eventLogsInJobStage || !!await this.#seenLogs.getAsync(eventId);
58
- }
59
- #addEventLogToStage(jobId, eventId, eventEntry) {
60
- this.#getEventLogsInJobStage(jobId).set(eventId, eventEntry);
61
- }
62
- async #getEventSiloedNullifiers(contractAddress, scope, eventSelector, jobId) {
63
- const key = this.#keyFor(contractAddress, scope, eventSelector);
64
- const eventSiloedNullifiersInStorage = [];
65
- for await (const eventId of this.#eventsByContractScopeSelector.getValuesAsync(key)){
66
- eventSiloedNullifiersInStorage.push(eventId);
67
- }
68
- if (!jobId) {
69
- return eventSiloedNullifiersInStorage;
70
- }
71
- const eventSiloedNullifiersInJobStage = new Set([
72
- ...this.#getEventLogsInJobStage(jobId).entries()
73
- ].filter(([_, entry])=>entry.lookupKey === key).map(([idx, _])=>idx));
74
- return [
75
- ...new Set(eventSiloedNullifiersInStorage).union(eventSiloedNullifiersInJobStage)
76
- ];
77
- }
78
- async #getEventLogBySiloedNullifier(eventId, jobId) {
79
- if (jobId) {
80
- return this.#getEventLogsInJobStage(jobId).get(eventId) ?? await this.#eventLogs.getAsync(eventId);
81
- } else {
82
- return await this.#eventLogs.getAsync(eventId);
83
- }
22
+ this.#eventsForJob = new Map();
23
+ this.#jobLocks = new Map();
84
24
  }
85
25
  /**
86
26
  * Store a private event log.
@@ -94,36 +34,26 @@ import { TxHash } from '@aztec/stdlib/tx';
94
34
  * txHash - The transaction hash of the event log.
95
35
  * blockNumber - The block number in which the event was emitted.
96
36
  */ storePrivateEventLog(eventSelector, randomness, msgContent, siloedEventCommitment, metadata, jobId) {
97
- const { contractAddress, scope, txHash, l2BlockNumber, l2BlockHash, txIndexInBlock, eventIndexInTx } = metadata;
98
- return this.#store.transactionAsync(async ()=>{
99
- const key = this.#keyFor(contractAddress, scope, eventSelector);
100
- // The siloed event commitment is guaranteed to be unique as it's inserted into the nullifier tree. For this
101
- // reason we use it as id.
37
+ return this.#withJobLock(jobId, async ()=>{
38
+ const { contractAddress, scope, txHash, l2BlockNumber, l2BlockHash, txIndexInBlock, eventIndexInTx } = metadata;
102
39
  const eventId = siloedEventCommitment.toString();
103
- const hasBeenSeen = await this.#isSeenLog(jobId, eventId);
104
- if (hasBeenSeen) {
105
- this.logger.verbose('Ignoring duplicate event log', {
106
- txHash: txHash.toString(),
107
- siloedEventCommitment
108
- });
109
- return;
110
- }
111
40
  this.logger.verbose('storing private event log (job stage)', {
41
+ eventId,
112
42
  contractAddress,
113
43
  scope,
114
44
  msgContent,
115
45
  l2BlockNumber
116
46
  });
117
- this.#addEventLogToStage(jobId, eventId, {
118
- randomness,
119
- msgContent: serializeToBuffer(msgContent),
120
- l2BlockNumber,
121
- l2BlockHash: l2BlockHash.toBuffer(),
122
- txHash: txHash.toBuffer(),
123
- txIndexInBlock,
124
- eventIndexInTx,
125
- lookupKey: key
126
- });
47
+ const existing = await this.#readEvent(eventId, jobId);
48
+ if (existing) {
49
+ // If we already stored this event, we still want to make sure to track it for the given scope
50
+ existing.addScope(scope.toString());
51
+ this.#writeEvent(eventId, existing, jobId);
52
+ } else {
53
+ this.#writeEvent(eventId, new StoredPrivateEvent(randomness, msgContent, l2BlockNumber, l2BlockHash, txHash, txIndexInBlock, eventIndexInTx, contractAddress, eventSelector, new Set([
54
+ scope.toString()
55
+ ])), jobId);
56
+ }
127
57
  });
128
58
  }
129
59
  /**
@@ -136,49 +66,57 @@ import { TxHash } from '@aztec/stdlib/tx';
136
66
  * scope: - The addresses that decrypted the logs.
137
67
  * @returns - The event log contents, augmented with metadata about the transaction and block in which the event was
138
68
  * included.
139
- */ async getPrivateEvents(eventSelector, filter) {
140
- const events = [];
141
- for (const scope of filter.scopes){
142
- const eventIds = await this.#getEventSiloedNullifiers(filter.contractAddress, scope, eventSelector);
69
+ */ getPrivateEvents(eventSelector, filter) {
70
+ return this.#store.transactionAsync(async ()=>{
71
+ const events = [];
72
+ const key = this.#keyFor(filter.contractAddress, eventSelector);
73
+ const targetScopes = new Set(filter.scopes.map((s)=>s.toString()));
74
+ const eventIds = await toArray(this.#eventsByContractAndEventSelector.getValuesAsync(key));
143
75
  for (const eventId of eventIds){
144
- const entry = await this.#getEventLogBySiloedNullifier(eventId);
145
- if (!entry || entry.l2BlockNumber < filter.fromBlock || entry.l2BlockNumber >= filter.toBlock) {
76
+ const eventBuffer = await this.#events.getAsync(eventId);
77
+ // Defensive, if it happens, there's a problem with how we're handling #eventsByContractAndEventSelector
78
+ if (!eventBuffer) {
79
+ this.logger.verbose(`EventId ${eventId} does not exist in main index but it is referenced from contract event selector index`);
80
+ continue;
81
+ }
82
+ const storedPrivateEvent = StoredPrivateEvent.fromBuffer(eventBuffer);
83
+ // Filter by block range
84
+ if (storedPrivateEvent.l2BlockNumber < filter.fromBlock || storedPrivateEvent.l2BlockNumber >= filter.toBlock) {
85
+ continue;
86
+ }
87
+ // Filter by scopes
88
+ if (storedPrivateEvent.scopes.intersection(targetScopes).size === 0) {
146
89
  continue;
147
90
  }
148
- // Convert buffer back to Fr array
149
- const reader = BufferReader.asReader(entry.msgContent);
150
- const numFields = entry.msgContent.length / Fr.SIZE_IN_BYTES;
151
- const msgContent = reader.readArray(numFields, Fr);
152
- const txHash = TxHash.fromBuffer(entry.txHash);
153
- const l2BlockHash = L2BlockHash.fromBuffer(entry.l2BlockHash);
154
- if (filter.txHash && !txHash.equals(filter.txHash)) {
91
+ // Filter by txHash
92
+ if (filter.txHash && !storedPrivateEvent.txHash.equals(filter.txHash)) {
155
93
  continue;
156
94
  }
157
95
  events.push({
158
- l2BlockNumber: entry.l2BlockNumber,
159
- txIndexInBlock: entry.txIndexInBlock,
160
- eventIndexInTx: entry.eventIndexInTx,
96
+ l2BlockNumber: storedPrivateEvent.l2BlockNumber,
97
+ txIndexInBlock: storedPrivateEvent.txIndexInBlock,
98
+ eventIndexInTx: storedPrivateEvent.eventIndexInTx,
161
99
  event: {
162
- packedEvent: msgContent,
163
- l2BlockNumber: BlockNumber(entry.l2BlockNumber),
164
- txHash,
165
- l2BlockHash,
100
+ packedEvent: storedPrivateEvent.msgContent,
101
+ l2BlockNumber: BlockNumber(storedPrivateEvent.l2BlockNumber),
102
+ txHash: storedPrivateEvent.txHash,
103
+ l2BlockHash: storedPrivateEvent.l2BlockHash,
166
104
  eventSelector
167
105
  }
168
106
  });
169
107
  }
170
- }
171
- // Sort by block number, then by tx index within block, then by event index within tx
172
- events.sort((a, b)=>{
173
- if (a.l2BlockNumber !== b.l2BlockNumber) {
174
- return a.l2BlockNumber - b.l2BlockNumber;
175
- }
176
- if (a.txIndexInBlock !== b.txIndexInBlock) {
177
- return a.txIndexInBlock - b.txIndexInBlock;
178
- }
179
- return a.eventIndexInTx - b.eventIndexInTx;
108
+ // Sort by block number, then by tx index within block, then by event index within tx
109
+ events.sort((a, b)=>{
110
+ if (a.l2BlockNumber !== b.l2BlockNumber) {
111
+ return a.l2BlockNumber - b.l2BlockNumber;
112
+ }
113
+ if (a.txIndexInBlock !== b.txIndexInBlock) {
114
+ return a.txIndexInBlock - b.txIndexInBlock;
115
+ }
116
+ return a.eventIndexInTx - b.eventIndexInTx;
117
+ });
118
+ return events.map((ev)=>ev.event);
180
119
  });
181
- return events.map((ev)=>ev.event);
182
120
  }
183
121
  /**
184
122
  * Rolls back private events that were stored after a given `blockNumber` and up to `synchedBlockNumber` (the block
@@ -199,24 +137,114 @@ import { TxHash } from '@aztec/stdlib/tx';
199
137
  */ async rollback(blockNumber, synchedBlockNumber) {
200
138
  let removedCount = 0;
201
139
  for(let block = blockNumber + 1; block <= synchedBlockNumber; block++){
202
- const eventIds = [];
203
- for await (const eventId of this.#eventsByBlockNumber.getValuesAsync(block)){
204
- eventIds.push(eventId);
205
- }
140
+ const eventIds = await toArray(this.#eventsByBlockNumber.getValuesAsync(block));
206
141
  if (eventIds.length > 0) {
207
142
  await this.#eventsByBlockNumber.delete(block);
208
143
  for (const eventId of eventIds){
209
- const entry = await this.#eventLogs.getAsync(eventId);
210
- if (!entry) {
211
- throw new Error(`Event log not found for eventId ${eventId}`);
144
+ const buffer = await this.#events.getAsync(eventId);
145
+ if (!buffer) {
146
+ throw new Error(`Event not found for eventId ${eventId}`);
212
147
  }
213
- await this.#eventLogs.delete(eventId);
214
- await this.#seenLogs.delete(eventId);
215
- await this.#eventsByContractScopeSelector.deleteValue(entry.lookupKey, eventId);
148
+ const entry = StoredPrivateEvent.fromBuffer(buffer);
149
+ await this.#events.delete(eventId);
150
+ await this.#eventsByContractAndEventSelector.deleteValue(this.#keyFor(entry.contractAddress, entry.eventSelector), eventId);
216
151
  removedCount++;
217
152
  }
218
153
  }
219
154
  }
220
155
  this.logger.verbose(`Rolled back ${removedCount} private events after block ${blockNumber}`);
221
156
  }
157
+ /**
158
+ * Commits in memory job data to persistent storage.
159
+ *
160
+ * Called by JobCoordinator when a job completes successfully.
161
+ *
162
+ * Note: JobCoordinator wraps all commits in a single transaction, so we don't need our own transactionAsync here
163
+ * (and using one would throw on IndexedDB as it does not support nested txs).
164
+ *
165
+ * @param jobId - The jobId identifying which staged data to commit
166
+ */ commit(jobId) {
167
+ return this.#withJobLock(jobId, async ()=>{
168
+ for (const [eventId, entry] of this.#getEventsForJob(jobId).entries()){
169
+ const lookupKey = this.#keyFor(entry.contractAddress, entry.eventSelector);
170
+ this.logger.verbose('storing private event log', {
171
+ eventId,
172
+ lookupKey
173
+ });
174
+ await Promise.all([
175
+ this.#events.set(eventId, entry.toBuffer()),
176
+ this.#eventsByContractAndEventSelector.set(lookupKey, eventId),
177
+ this.#eventsByBlockNumber.set(entry.l2BlockNumber, eventId)
178
+ ]);
179
+ }
180
+ this.#clearJobData(jobId);
181
+ });
182
+ }
183
+ /**
184
+ * Discards in memory job data without persisting it.
185
+ */ discardStaged(jobId) {
186
+ return this.#withJobLock(jobId, ()=>Promise.resolve(this.#clearJobData(jobId)));
187
+ }
188
+ /**
189
+ * Reads an event from in-memory job data first, falling back to persistent storage if not found.
190
+ *
191
+ * Returns undefined if the event does not exist in the store overall.
192
+ */ async #readEvent(eventId, jobId) {
193
+ const eventForJob = this.#getEventsForJob(jobId).get(eventId);
194
+ if (eventForJob) {
195
+ return eventForJob;
196
+ }
197
+ const buffer = await this.#events.getAsync(eventId);
198
+ return buffer ? StoredPrivateEvent.fromBuffer(buffer) : undefined;
199
+ }
200
+ /**
201
+ * Writes an event to in-memory job data.
202
+ *
203
+ * Writes are only allowed in a job context. Events modified during a job will only be persisted when `commit` is
204
+ * called.
205
+ */ #writeEvent(eventId, entry, jobId) {
206
+ this.#getEventsForJob(jobId).set(eventId, entry);
207
+ }
208
+ /**
209
+ * Get in-memory data only visible to @param jobId
210
+ */ #getEventsForJob(jobId) {
211
+ let eventsForJob = this.#eventsForJob.get(jobId);
212
+ if (eventsForJob === undefined) {
213
+ eventsForJob = new Map();
214
+ this.#eventsForJob.set(jobId, eventsForJob);
215
+ }
216
+ return eventsForJob;
217
+ }
218
+ /**
219
+ * Clear data structures supporting a specific job.
220
+ */ #clearJobData(jobId) {
221
+ this.#eventsForJob.delete(jobId);
222
+ this.#jobLocks.delete(jobId);
223
+ }
224
+ /**
225
+ * Ensures a function can only run once it acquires a unique per-job lock, and handles proper lock release after it
226
+ * runs.
227
+ *
228
+ * This primitive allows concurrent writes on this store without risking data corruption due to unsound write
229
+ * interleaving.
230
+ */ async #withJobLock(jobId, fn) {
231
+ let lock = this.#jobLocks.get(jobId);
232
+ if (!lock) {
233
+ lock = new Semaphore(1);
234
+ this.#jobLocks.set(jobId, lock);
235
+ }
236
+ await lock.acquire();
237
+ try {
238
+ return await fn();
239
+ } finally{
240
+ lock.release();
241
+ }
242
+ }
243
+ /**
244
+ * Returns a string key based on @param contractAddress and @param eventSelector.
245
+ *
246
+ * The returned key is meant to be used when interacting with index #eventsByContractAndEventSelector.
247
+ */ #keyFor(contractAddress, eventSelector) {
248
+ return `${contractAddress.toString()}_${eventSelector.toString()}`;
249
+ }
222
250
  }
@@ -0,0 +1,23 @@
1
+ import { Fr } from '@aztec/foundation/curves/bn254';
2
+ import { EventSelector } from '@aztec/stdlib/abi';
3
+ import { AztecAddress } from '@aztec/stdlib/aztec-address';
4
+ import { BlockHash } from '@aztec/stdlib/block';
5
+ import { TxHash } from '@aztec/stdlib/tx';
6
+ /** Serializable private event entry with scope tracking. */
7
+ export declare class StoredPrivateEvent {
8
+ readonly randomness: Fr;
9
+ readonly msgContent: Fr[];
10
+ readonly l2BlockNumber: number;
11
+ readonly l2BlockHash: BlockHash;
12
+ readonly txHash: TxHash;
13
+ readonly txIndexInBlock: number;
14
+ readonly eventIndexInTx: number;
15
+ readonly contractAddress: AztecAddress;
16
+ readonly eventSelector: EventSelector;
17
+ readonly scopes: Set<string>;
18
+ constructor(randomness: Fr, msgContent: Fr[], l2BlockNumber: number, l2BlockHash: BlockHash, txHash: TxHash, txIndexInBlock: number, eventIndexInTx: number, contractAddress: AztecAddress, eventSelector: EventSelector, scopes: Set<string>);
19
+ addScope(scope: string): void;
20
+ toBuffer(): Buffer;
21
+ static fromBuffer(buffer: Buffer): StoredPrivateEvent;
22
+ }
23
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvcmVkX3ByaXZhdGVfZXZlbnQuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9zdG9yYWdlL3ByaXZhdGVfZXZlbnRfc3RvcmUvc3RvcmVkX3ByaXZhdGVfZXZlbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBRXBELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNsRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDM0QsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUUxQyw0REFBNEQ7QUFDNUQscUJBQWEsa0JBQWtCO0lBRTNCLFFBQVEsQ0FBQyxVQUFVLEVBQUUsRUFBRTtJQUN2QixRQUFRLENBQUMsVUFBVSxFQUFFLEVBQUUsRUFBRTtJQUN6QixRQUFRLENBQUMsYUFBYSxFQUFFLE1BQU07SUFDOUIsUUFBUSxDQUFDLFdBQVcsRUFBRSxTQUFTO0lBQy9CLFFBQVEsQ0FBQyxNQUFNLEVBQUUsTUFBTTtJQUN2QixRQUFRLENBQUMsY0FBYyxFQUFFLE1BQU07SUFDL0IsUUFBUSxDQUFDLGNBQWMsRUFBRSxNQUFNO0lBQy9CLFFBQVEsQ0FBQyxlQUFlLEVBQUUsWUFBWTtJQUN0QyxRQUFRLENBQUMsYUFBYSxFQUFFLGFBQWE7SUFDckMsUUFBUSxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsTUFBTSxDQUFDO0lBVjlCLFlBQ1csVUFBVSxFQUFFLEVBQUUsRUFDZCxVQUFVLEVBQUUsRUFBRSxFQUFFLEVBQ2hCLGFBQWEsRUFBRSxNQUFNLEVBQ3JCLFdBQVcsRUFBRSxTQUFTLEVBQ3RCLE1BQU0sRUFBRSxNQUFNLEVBQ2QsY0FBYyxFQUFFLE1BQU0sRUFDdEIsY0FBYyxFQUFFLE1BQU0sRUFDdEIsZUFBZSxFQUFFLFlBQVksRUFDN0IsYUFBYSxFQUFFLGFBQWEsRUFDNUIsTUFBTSxFQUFFLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFDMUI7SUFFSixRQUFRLENBQUMsS0FBSyxFQUFFLE1BQU0sUUFFckI7SUFFRCxRQUFRLElBQUksTUFBTSxDQWdCakI7SUFFRCxNQUFNLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRSxNQUFNLEdBQUcsa0JBQWtCLENBMkJwRDtDQUNGIn0=
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stored_private_event.d.ts","sourceRoot":"","sources":["../../../src/storage/private_event_store/stored_private_event.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,gCAAgC,CAAC;AAEpD,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC3D,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAChD,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAE1C,4DAA4D;AAC5D,qBAAa,kBAAkB;IAE3B,QAAQ,CAAC,UAAU,EAAE,EAAE;IACvB,QAAQ,CAAC,UAAU,EAAE,EAAE,EAAE;IACzB,QAAQ,CAAC,aAAa,EAAE,MAAM;IAC9B,QAAQ,CAAC,WAAW,EAAE,SAAS;IAC/B,QAAQ,CAAC,MAAM,EAAE,MAAM;IACvB,QAAQ,CAAC,cAAc,EAAE,MAAM;IAC/B,QAAQ,CAAC,cAAc,EAAE,MAAM;IAC/B,QAAQ,CAAC,eAAe,EAAE,YAAY;IACtC,QAAQ,CAAC,aAAa,EAAE,aAAa;IACrC,QAAQ,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC;IAV9B,YACW,UAAU,EAAE,EAAE,EACd,UAAU,EAAE,EAAE,EAAE,EAChB,aAAa,EAAE,MAAM,EACrB,WAAW,EAAE,SAAS,EACtB,MAAM,EAAE,MAAM,EACd,cAAc,EAAE,MAAM,EACtB,cAAc,EAAE,MAAM,EACtB,eAAe,EAAE,YAAY,EAC7B,aAAa,EAAE,aAAa,EAC5B,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,EAC1B;IAEJ,QAAQ,CAAC,KAAK,EAAE,MAAM,QAErB;IAED,QAAQ,IAAI,MAAM,CAgBjB;IAED,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,kBAAkB,CA2BpD;CACF"}
@@ -0,0 +1,56 @@
1
+ import { Fr } from '@aztec/foundation/curves/bn254';
2
+ import { BufferReader, serializeToBuffer } from '@aztec/foundation/serialize';
3
+ import { EventSelector } from '@aztec/stdlib/abi';
4
+ import { AztecAddress } from '@aztec/stdlib/aztec-address';
5
+ import { BlockHash } from '@aztec/stdlib/block';
6
+ import { TxHash } from '@aztec/stdlib/tx';
7
+ /** Serializable private event entry with scope tracking. */ export class StoredPrivateEvent {
8
+ randomness;
9
+ msgContent;
10
+ l2BlockNumber;
11
+ l2BlockHash;
12
+ txHash;
13
+ txIndexInBlock;
14
+ eventIndexInTx;
15
+ contractAddress;
16
+ eventSelector;
17
+ scopes;
18
+ constructor(randomness, msgContent, l2BlockNumber, l2BlockHash, txHash, txIndexInBlock, eventIndexInTx, contractAddress, eventSelector, scopes){
19
+ this.randomness = randomness;
20
+ this.msgContent = msgContent;
21
+ this.l2BlockNumber = l2BlockNumber;
22
+ this.l2BlockHash = l2BlockHash;
23
+ this.txHash = txHash;
24
+ this.txIndexInBlock = txIndexInBlock;
25
+ this.eventIndexInTx = eventIndexInTx;
26
+ this.contractAddress = contractAddress;
27
+ this.eventSelector = eventSelector;
28
+ this.scopes = scopes;
29
+ }
30
+ addScope(scope) {
31
+ this.scopes.add(scope);
32
+ }
33
+ toBuffer() {
34
+ const scopesArray = [
35
+ ...this.scopes
36
+ ];
37
+ return serializeToBuffer(this.randomness, this.msgContent.length, ...this.msgContent, this.l2BlockNumber, this.l2BlockHash, this.txHash, this.txIndexInBlock, this.eventIndexInTx, this.contractAddress, this.eventSelector.toBuffer(), scopesArray.length, ...scopesArray);
38
+ }
39
+ static fromBuffer(buffer) {
40
+ const reader = BufferReader.asReader(buffer);
41
+ const randomness = Fr.fromBuffer(reader);
42
+ const msgContentLength = reader.readNumber();
43
+ const msgContent = reader.readArray(msgContentLength, Fr);
44
+ const l2BlockNumber = reader.readNumber();
45
+ const l2BlockHash = BlockHash.fromBuffer(reader);
46
+ const txHash = TxHash.fromBuffer(reader);
47
+ const txIndexInBlock = reader.readNumber();
48
+ const eventIndexInTx = reader.readNumber();
49
+ const contractAddress = AztecAddress.fromBuffer(reader);
50
+ const eventSelector = EventSelector.fromBuffer(reader);
51
+ const scopes = reader.readVector({
52
+ fromBuffer: (r)=>r.readString()
53
+ });
54
+ return new StoredPrivateEvent(randomness, msgContent, l2BlockNumber, l2BlockHash, txHash, txIndexInBlock, eventIndexInTx, contractAddress, eventSelector, new Set(scopes));
55
+ }
56
+ }
@@ -0,0 +1,24 @@
1
+ import type { AztecAddress } from '@aztec/stdlib/aztec-address';
2
+ import type { BlockHash } from '@aztec/stdlib/block';
3
+ import type { AztecNode } from '@aztec/stdlib/interfaces/client';
4
+ import type { SiloedTag, Tag, TxScopedL2Log } from '@aztec/stdlib/logs';
5
+ /**
6
+ * Fetches all private logs for the given tags, automatically paginating through all pages.
7
+ * @param aztecNode - The Aztec node to query.
8
+ * @param tags - The siloed tags to search for.
9
+ * @param anchorBlockHash - reference block for the Aztec node query, throws if block is not found there (typically
10
+ * because of reorgs).
11
+ * @returns An array of log arrays, one per tag, containing all logs across all pages.
12
+ */
13
+ export declare function getAllPrivateLogsByTags(aztecNode: AztecNode, tags: SiloedTag[], anchorBlockHash: BlockHash): Promise<TxScopedL2Log[][]>;
14
+ /**
15
+ * Fetches all public logs for the given tags from a contract, automatically paginating through all pages.
16
+ * @param aztecNode - The Aztec node to query.
17
+ * @param contractAddress - The contract address to search logs for.
18
+ * @param tags - The tags to search for.
19
+ * @param anchorBlockHash - reference block for the Aztec node query, throws if block is not found there (typically
20
+ * because of reorgs).
21
+ * @returns An array of log arrays, one per tag, containing all logs across all pages.
22
+ */
23
+ export declare function getAllPublicLogsByTagsFromContract(aztecNode: AztecNode, contractAddress: AztecAddress, tags: Tag[], anchorBlockHash: BlockHash): Promise<TxScopedL2Log[][]>;
24
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2V0X2FsbF9sb2dzX2J5X3RhZ3MuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90YWdnaW5nL2dldF9hbGxfbG9nc19ieV90YWdzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxFQUFFLFlBQVksRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ2hFLE9BQU8sS0FBSyxFQUFFLFNBQVMsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRXJELE9BQU8sS0FBSyxFQUFFLFNBQVMsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ2pFLE9BQU8sS0FBSyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsYUFBYSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUE2QnhFOzs7Ozs7O0dBT0c7QUFDSCx3QkFBZ0IsdUJBQXVCLENBQ3JDLFNBQVMsRUFBRSxTQUFTLEVBQ3BCLElBQUksRUFBRSxTQUFTLEVBQUUsRUFDakIsZUFBZSxFQUFFLFNBQVMsR0FDekIsT0FBTyxDQUFDLGFBQWEsRUFBRSxFQUFFLENBQUMsQ0FFNUI7QUFFRDs7Ozs7Ozs7R0FRRztBQUNILHdCQUFnQixrQ0FBa0MsQ0FDaEQsU0FBUyxFQUFFLFNBQVMsRUFDcEIsZUFBZSxFQUFFLFlBQVksRUFDN0IsSUFBSSxFQUFFLEdBQUcsRUFBRSxFQUNYLGVBQWUsRUFBRSxTQUFTLEdBQ3pCLE9BQU8sQ0FBQyxhQUFhLEVBQUUsRUFBRSxDQUFDLENBSTVCIn0=
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get_all_logs_by_tags.d.ts","sourceRoot":"","sources":["../../src/tagging/get_all_logs_by_tags.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAErD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iCAAiC,CAAC;AACjE,OAAO,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AA6BxE;;;;;;;GAOG;AACH,wBAAgB,uBAAuB,CACrC,SAAS,EAAE,SAAS,EACpB,IAAI,EAAE,SAAS,EAAE,EACjB,eAAe,EAAE,SAAS,GACzB,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC,CAE5B;AAED;;;;;;;;GAQG;AACH,wBAAgB,kCAAkC,CAChD,SAAS,EAAE,SAAS,EACpB,eAAe,EAAE,YAAY,EAC7B,IAAI,EAAE,GAAG,EAAE,EACX,eAAe,EAAE,SAAS,GACzB,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC,CAI5B"}
@@ -0,0 +1,46 @@
1
+ import { MAX_LOGS_PER_TAG } from '@aztec/stdlib/interfaces/api-limit';
2
+ /**
3
+ * Generic pagination helper that fetches all pages of results.
4
+ * @param numTags - The number of tags being queried (determines result array size).
5
+ * @param fetchPage - Function that fetches a single page of results given a page number.
6
+ * @returns An array of arrays, one per tag, containing all results across all pages.
7
+ */ async function getAllPages(numTags, fetchPage) {
8
+ const allResultsPerTag = Array.from({
9
+ length: numTags
10
+ }, ()=>[]);
11
+ let page = 0;
12
+ let hasMore = true;
13
+ while(hasMore){
14
+ const resultsPage = await fetchPage(page);
15
+ hasMore = false;
16
+ for(let i = 0; i < resultsPage.length; i++){
17
+ allResultsPerTag[i].push(...resultsPage[i]);
18
+ if (resultsPage[i].length === MAX_LOGS_PER_TAG) {
19
+ hasMore = true;
20
+ }
21
+ }
22
+ page++;
23
+ }
24
+ return allResultsPerTag;
25
+ }
26
+ /**
27
+ * Fetches all private logs for the given tags, automatically paginating through all pages.
28
+ * @param aztecNode - The Aztec node to query.
29
+ * @param tags - The siloed tags to search for.
30
+ * @param anchorBlockHash - reference block for the Aztec node query, throws if block is not found there (typically
31
+ * because of reorgs).
32
+ * @returns An array of log arrays, one per tag, containing all logs across all pages.
33
+ */ export function getAllPrivateLogsByTags(aztecNode, tags, anchorBlockHash) {
34
+ return getAllPages(tags.length, (page)=>aztecNode.getPrivateLogsByTags(tags, page, anchorBlockHash));
35
+ }
36
+ /**
37
+ * Fetches all public logs for the given tags from a contract, automatically paginating through all pages.
38
+ * @param aztecNode - The Aztec node to query.
39
+ * @param contractAddress - The contract address to search logs for.
40
+ * @param tags - The tags to search for.
41
+ * @param anchorBlockHash - reference block for the Aztec node query, throws if block is not found there (typically
42
+ * because of reorgs).
43
+ * @returns An array of log arrays, one per tag, containing all logs across all pages.
44
+ */ export function getAllPublicLogsByTagsFromContract(aztecNode, contractAddress, tags, anchorBlockHash) {
45
+ return getAllPages(tags.length, (page)=>aztecNode.getPublicLogsByTagsFromContract(contractAddress, tags, page, anchorBlockHash));
46
+ }
@@ -11,6 +11,7 @@
11
11
  export { loadPrivateLogsForSenderRecipientPair } from './recipient_sync/load_private_logs_for_sender_recipient_pair.js';
12
12
  export { syncSenderTaggingIndexes } from './sender_sync/sync_sender_tagging_indexes.js';
13
13
  export { UNFINALIZED_TAGGING_INDEXES_WINDOW_LEN } from './constants.js';
14
+ export { getAllPrivateLogsByTags, getAllPublicLogsByTagsFromContract } from './get_all_logs_by_tags.js';
14
15
  export { DirectionalAppTaggingSecret, Tag, SiloedTag } from '@aztec/stdlib/logs';
15
16
  export { type PreTag } from '@aztec/stdlib/logs';
16
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90YWdnaW5nL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7R0FTRztBQUVILE9BQU8sRUFBRSxxQ0FBcUMsRUFBRSxNQUFNLGlFQUFpRSxDQUFDO0FBQ3hILE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLDhDQUE4QyxDQUFDO0FBQ3hGLE9BQU8sRUFBRSxzQ0FBc0MsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBR3hFLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDakYsT0FBTyxFQUFFLEtBQUssTUFBTSxFQUFFLE1BQU0sb0JBQW9CLENBQUMifQ==
17
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90YWdnaW5nL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7R0FTRztBQUVILE9BQU8sRUFBRSxxQ0FBcUMsRUFBRSxNQUFNLGlFQUFpRSxDQUFDO0FBQ3hILE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLDhDQUE4QyxDQUFDO0FBQ3hGLE9BQU8sRUFBRSxzQ0FBc0MsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3hFLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxrQ0FBa0MsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBR3hHLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDakYsT0FBTyxFQUFFLEtBQUssTUFBTSxFQUFFLE1BQU0sb0JBQW9CLENBQUMifQ==
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tagging/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,qCAAqC,EAAE,MAAM,iEAAiE,CAAC;AACxH,OAAO,EAAE,wBAAwB,EAAE,MAAM,8CAA8C,CAAC;AACxF,OAAO,EAAE,sCAAsC,EAAE,MAAM,gBAAgB,CAAC;AAGxE,OAAO,EAAE,2BAA2B,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AACjF,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,oBAAoB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tagging/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,qCAAqC,EAAE,MAAM,iEAAiE,CAAC;AACxH,OAAO,EAAE,wBAAwB,EAAE,MAAM,8CAA8C,CAAC;AACxF,OAAO,EAAE,sCAAsC,EAAE,MAAM,gBAAgB,CAAC;AACxE,OAAO,EAAE,uBAAuB,EAAE,kCAAkC,EAAE,MAAM,2BAA2B,CAAC;AAGxG,OAAO,EAAE,2BAA2B,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AACjF,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,oBAAoB,CAAC"}
@@ -10,5 +10,6 @@
10
10
  */ export { loadPrivateLogsForSenderRecipientPair } from './recipient_sync/load_private_logs_for_sender_recipient_pair.js';
11
11
  export { syncSenderTaggingIndexes } from './sender_sync/sync_sender_tagging_indexes.js';
12
12
  export { UNFINALIZED_TAGGING_INDEXES_WINDOW_LEN } from './constants.js';
13
+ export { getAllPrivateLogsByTags, getAllPublicLogsByTagsFromContract } from './get_all_logs_by_tags.js';
13
14
  // Re-export tagging-related types from stdlib
14
15
  export { DirectionalAppTaggingSecret, Tag, SiloedTag } from '@aztec/stdlib/logs';
@@ -1,5 +1,6 @@
1
1
  import type { BlockNumber } from '@aztec/foundation/branded-types';
2
2
  import type { AztecAddress } from '@aztec/stdlib/aztec-address';
3
+ import type { BlockHash } from '@aztec/stdlib/block';
3
4
  import type { AztecNode } from '@aztec/stdlib/interfaces/client';
4
5
  import type { DirectionalAppTaggingSecret, TxScopedL2Log } from '@aztec/stdlib/logs';
5
6
  import type { RecipientTaggingStore } from '../../storage/tagging_store/recipient_tagging_store.js';
@@ -10,5 +11,5 @@ import type { RecipientTaggingStore } from '../../storage/tagging_store/recipien
10
11
  * @dev This function can be safely executed "in parallel" for other sender-recipient pairs because the data in
11
12
  * in the tagging data provider is indexed by the secret and hence completely disjoint.
12
13
  */
13
- export declare function loadPrivateLogsForSenderRecipientPair(secret: DirectionalAppTaggingSecret, app: AztecAddress, aztecNode: AztecNode, taggingStore: RecipientTaggingStore, anchorBlockNumber: BlockNumber, jobId: string): Promise<TxScopedL2Log[]>;
14
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9hZF9wcml2YXRlX2xvZ3NfZm9yX3NlbmRlcl9yZWNpcGllbnRfcGFpci5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3RhZ2dpbmcvcmVjaXBpZW50X3N5bmMvbG9hZF9wcml2YXRlX2xvZ3NfZm9yX3NlbmRlcl9yZWNpcGllbnRfcGFpci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssRUFBRSxXQUFXLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNuRSxPQUFPLEtBQUssRUFBRSxZQUFZLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUNoRSxPQUFPLEtBQUssRUFBRSxTQUFTLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNqRSxPQUFPLEtBQUssRUFBRSwyQkFBMkIsRUFBRSxhQUFhLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUVyRixPQUFPLEtBQUssRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHdEQUF3RCxDQUFDO0FBS3BHOzs7Ozs7R0FNRztBQUNILHdCQUFzQixxQ0FBcUMsQ0FDekQsTUFBTSxFQUFFLDJCQUEyQixFQUNuQyxHQUFHLEVBQUUsWUFBWSxFQUNqQixTQUFTLEVBQUUsU0FBUyxFQUNwQixZQUFZLEVBQUUscUJBQXFCLEVBQ25DLGlCQUFpQixFQUFFLFdBQVcsRUFDOUIsS0FBSyxFQUFFLE1BQU0sR0FDWixPQUFPLENBQUMsYUFBYSxFQUFFLENBQUMsQ0E0RzFCIn0=
14
+ export declare function loadPrivateLogsForSenderRecipientPair(secret: DirectionalAppTaggingSecret, app: AztecAddress, aztecNode: AztecNode, taggingStore: RecipientTaggingStore, anchorBlockNumber: BlockNumber, anchorBlockHash: BlockHash, jobId: string): Promise<TxScopedL2Log[]>;
15
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9hZF9wcml2YXRlX2xvZ3NfZm9yX3NlbmRlcl9yZWNpcGllbnRfcGFpci5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3RhZ2dpbmcvcmVjaXBpZW50X3N5bmMvbG9hZF9wcml2YXRlX2xvZ3NfZm9yX3NlbmRlcl9yZWNpcGllbnRfcGFpci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssRUFBRSxXQUFXLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNuRSxPQUFPLEtBQUssRUFBRSxZQUFZLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUNoRSxPQUFPLEtBQUssRUFBRSxTQUFTLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNyRCxPQUFPLEtBQUssRUFBRSxTQUFTLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNqRSxPQUFPLEtBQUssRUFBRSwyQkFBMkIsRUFBRSxhQUFhLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUVyRixPQUFPLEtBQUssRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHdEQUF3RCxDQUFDO0FBS3BHOzs7Ozs7R0FNRztBQUNILHdCQUFzQixxQ0FBcUMsQ0FDekQsTUFBTSxFQUFFLDJCQUEyQixFQUNuQyxHQUFHLEVBQUUsWUFBWSxFQUNqQixTQUFTLEVBQUUsU0FBUyxFQUNwQixZQUFZLEVBQUUscUJBQXFCLEVBQ25DLGlCQUFpQixFQUFFLFdBQVcsRUFDOUIsZUFBZSxFQUFFLFNBQVMsRUFDMUIsS0FBSyxFQUFFLE1BQU0sR0FDWixPQUFPLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FvSDFCIn0=