@aztec/pxe 0.0.1-commit.96bb3f7 → 0.0.1-commit.a072138

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 (226) hide show
  1. package/dest/bin/check_oracle_version.js +1 -1
  2. package/dest/block_synchronizer/block_synchronizer.d.ts +9 -5
  3. package/dest/block_synchronizer/block_synchronizer.d.ts.map +1 -1
  4. package/dest/block_synchronizer/block_synchronizer.js +66 -21
  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/benchmarked_node.d.ts +9 -0
  9. package/dest/contract_function_simulator/benchmarked_node.d.ts.map +1 -0
  10. package/dest/contract_function_simulator/benchmarked_node.js +77 -0
  11. package/dest/contract_function_simulator/contract_function_simulator.d.ts +6 -10
  12. package/dest/contract_function_simulator/contract_function_simulator.d.ts.map +1 -1
  13. package/dest/contract_function_simulator/contract_function_simulator.js +33 -25
  14. package/dest/contract_function_simulator/execution_note_cache.d.ts +18 -9
  15. package/dest/contract_function_simulator/execution_note_cache.d.ts.map +1 -1
  16. package/dest/contract_function_simulator/execution_note_cache.js +45 -28
  17. package/dest/contract_function_simulator/index.d.ts +2 -2
  18. package/dest/contract_function_simulator/index.d.ts.map +1 -1
  19. package/dest/contract_function_simulator/index.js +1 -1
  20. package/dest/contract_function_simulator/noir-structs/event_validation_request.d.ts +1 -1
  21. package/dest/contract_function_simulator/noir-structs/event_validation_request.js +1 -1
  22. package/dest/contract_function_simulator/noir-structs/note_validation_request.d.ts +1 -1
  23. package/dest/contract_function_simulator/noir-structs/note_validation_request.js +1 -1
  24. package/dest/contract_function_simulator/noir-structs/utility_context.d.ts +4 -10
  25. package/dest/contract_function_simulator/noir-structs/utility_context.d.ts.map +1 -1
  26. package/dest/contract_function_simulator/noir-structs/utility_context.js +7 -18
  27. package/dest/contract_function_simulator/oracle/interfaces.d.ts +15 -11
  28. package/dest/contract_function_simulator/oracle/interfaces.d.ts.map +1 -1
  29. package/dest/contract_function_simulator/oracle/message_load_oracle_inputs.d.ts +3 -1
  30. package/dest/contract_function_simulator/oracle/message_load_oracle_inputs.d.ts.map +1 -1
  31. package/dest/contract_function_simulator/oracle/note_packing_utils.d.ts +6 -6
  32. package/dest/contract_function_simulator/oracle/note_packing_utils.d.ts.map +1 -1
  33. package/dest/contract_function_simulator/oracle/note_packing_utils.js +8 -8
  34. package/dest/contract_function_simulator/oracle/oracle.d.ts +10 -8
  35. package/dest/contract_function_simulator/oracle/oracle.d.ts.map +1 -1
  36. package/dest/contract_function_simulator/oracle/oracle.js +44 -33
  37. package/dest/contract_function_simulator/oracle/private_execution.d.ts +2 -26
  38. package/dest/contract_function_simulator/oracle/private_execution.d.ts.map +1 -1
  39. package/dest/contract_function_simulator/oracle/private_execution.js +0 -35
  40. package/dest/contract_function_simulator/oracle/private_execution_oracle.d.ts +11 -3
  41. package/dest/contract_function_simulator/oracle/private_execution_oracle.d.ts.map +1 -1
  42. package/dest/contract_function_simulator/oracle/private_execution_oracle.js +22 -10
  43. package/dest/contract_function_simulator/oracle/utility_execution_oracle.d.ts +33 -20
  44. package/dest/contract_function_simulator/oracle/utility_execution_oracle.d.ts.map +1 -1
  45. package/dest/contract_function_simulator/oracle/utility_execution_oracle.js +78 -76
  46. package/dest/contract_sync/index.d.ts +23 -0
  47. package/dest/contract_sync/index.d.ts.map +1 -0
  48. package/dest/contract_sync/index.js +54 -0
  49. package/dest/debug/pxe_debug_utils.d.ts +16 -6
  50. package/dest/debug/pxe_debug_utils.d.ts.map +1 -1
  51. package/dest/debug/pxe_debug_utils.js +20 -10
  52. package/dest/entrypoints/client/bundle/utils.d.ts +1 -1
  53. package/dest/entrypoints/client/bundle/utils.d.ts.map +1 -1
  54. package/dest/entrypoints/client/bundle/utils.js +12 -6
  55. package/dest/entrypoints/client/lazy/utils.d.ts +2 -2
  56. package/dest/entrypoints/client/lazy/utils.d.ts.map +1 -1
  57. package/dest/entrypoints/client/lazy/utils.js +13 -7
  58. package/dest/entrypoints/pxe_creation_options.d.ts +3 -2
  59. package/dest/entrypoints/pxe_creation_options.d.ts.map +1 -1
  60. package/dest/entrypoints/server/index.d.ts +3 -1
  61. package/dest/entrypoints/server/index.d.ts.map +1 -1
  62. package/dest/entrypoints/server/index.js +2 -0
  63. package/dest/entrypoints/server/utils.d.ts +1 -1
  64. package/dest/entrypoints/server/utils.d.ts.map +1 -1
  65. package/dest/entrypoints/server/utils.js +19 -8
  66. package/dest/events/event_service.d.ts +6 -6
  67. package/dest/events/event_service.d.ts.map +1 -1
  68. package/dest/events/event_service.js +19 -22
  69. package/dest/events/private_event_filter_validator.d.ts +5 -5
  70. package/dest/events/private_event_filter_validator.d.ts.map +1 -1
  71. package/dest/events/private_event_filter_validator.js +5 -6
  72. package/dest/job_coordinator/job_coordinator.d.ts +3 -2
  73. package/dest/job_coordinator/job_coordinator.d.ts.map +1 -1
  74. package/dest/job_coordinator/job_coordinator.js +3 -2
  75. package/dest/logs/log_service.d.ts +6 -4
  76. package/dest/logs/log_service.d.ts.map +1 -1
  77. package/dest/logs/log_service.js +21 -16
  78. package/dest/notes/note_service.d.ts +7 -7
  79. package/dest/notes/note_service.d.ts.map +1 -1
  80. package/dest/notes/note_service.js +31 -36
  81. package/dest/oracle_version.d.ts +3 -3
  82. package/dest/oracle_version.d.ts.map +1 -1
  83. package/dest/oracle_version.js +4 -3
  84. package/dest/private_kernel/hints/index.d.ts +2 -2
  85. package/dest/private_kernel/hints/index.d.ts.map +1 -1
  86. package/dest/private_kernel/hints/index.js +1 -1
  87. package/dest/private_kernel/hints/private_kernel_reset_private_inputs_builder.d.ts +28 -0
  88. package/dest/private_kernel/hints/private_kernel_reset_private_inputs_builder.d.ts.map +1 -0
  89. package/dest/private_kernel/hints/{build_private_kernel_reset_private_inputs.js → private_kernel_reset_private_inputs_builder.js} +12 -6
  90. package/dest/private_kernel/private_kernel_execution_prover.d.ts +3 -2
  91. package/dest/private_kernel/private_kernel_execution_prover.d.ts.map +1 -1
  92. package/dest/private_kernel/private_kernel_execution_prover.js +3 -3
  93. package/dest/private_kernel/private_kernel_oracle.d.ts +23 -28
  94. package/dest/private_kernel/private_kernel_oracle.d.ts.map +1 -1
  95. package/dest/private_kernel/private_kernel_oracle.js +90 -2
  96. package/dest/pxe.d.ts +7 -36
  97. package/dest/pxe.d.ts.map +1 -1
  98. package/dest/pxe.js +43 -83
  99. package/dest/storage/address_store/address_store.d.ts +1 -1
  100. package/dest/storage/address_store/address_store.d.ts.map +1 -1
  101. package/dest/storage/address_store/address_store.js +12 -11
  102. package/dest/storage/anchor_block_store/anchor_block_store.d.ts +9 -1
  103. package/dest/storage/anchor_block_store/anchor_block_store.d.ts.map +1 -1
  104. package/dest/storage/anchor_block_store/anchor_block_store.js +8 -1
  105. package/dest/storage/capsule_store/capsule_store.d.ts +24 -9
  106. package/dest/storage/capsule_store/capsule_store.d.ts.map +1 -1
  107. package/dest/storage/capsule_store/capsule_store.js +130 -23
  108. package/dest/storage/contract_store/contract_store.d.ts +1 -2
  109. package/dest/storage/contract_store/contract_store.d.ts.map +1 -1
  110. package/dest/storage/contract_store/contract_store.js +22 -25
  111. package/dest/storage/metadata.d.ts +1 -1
  112. package/dest/storage/metadata.js +1 -1
  113. package/dest/storage/note_store/note_store.d.ts +51 -52
  114. package/dest/storage/note_store/note_store.d.ts.map +1 -1
  115. package/dest/storage/note_store/note_store.js +282 -263
  116. package/dest/storage/note_store/stored_note.d.ts +16 -0
  117. package/dest/storage/note_store/stored_note.d.ts.map +1 -0
  118. package/dest/storage/note_store/stored_note.js +43 -0
  119. package/dest/storage/private_event_store/private_event_store.d.ts +43 -8
  120. package/dest/storage/private_event_store/private_event_store.d.ts.map +1 -1
  121. package/dest/storage/private_event_store/private_event_store.js +226 -111
  122. package/dest/storage/private_event_store/stored_private_event.d.ts +23 -0
  123. package/dest/storage/private_event_store/stored_private_event.d.ts.map +1 -0
  124. package/dest/storage/private_event_store/stored_private_event.js +56 -0
  125. package/dest/storage/tagging_store/recipient_tagging_store.d.ts +15 -8
  126. package/dest/storage/tagging_store/recipient_tagging_store.d.ts.map +1 -1
  127. package/dest/storage/tagging_store/recipient_tagging_store.js +88 -19
  128. package/dest/storage/tagging_store/sender_address_book_store.d.ts +1 -1
  129. package/dest/storage/tagging_store/sender_address_book_store.d.ts.map +1 -1
  130. package/dest/storage/tagging_store/sender_address_book_store.js +20 -14
  131. package/dest/storage/tagging_store/sender_tagging_store.d.ts +19 -9
  132. package/dest/storage/tagging_store/sender_tagging_store.d.ts.map +1 -1
  133. package/dest/storage/tagging_store/sender_tagging_store.js +252 -100
  134. package/dest/tagging/get_all_logs_by_tags.d.ts +24 -0
  135. package/dest/tagging/get_all_logs_by_tags.d.ts.map +1 -0
  136. package/dest/tagging/get_all_logs_by_tags.js +46 -0
  137. package/dest/tagging/index.d.ts +2 -1
  138. package/dest/tagging/index.d.ts.map +1 -1
  139. package/dest/tagging/index.js +1 -0
  140. package/dest/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.d.ts +3 -2
  141. package/dest/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.d.ts.map +1 -1
  142. package/dest/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.js +6 -6
  143. package/dest/tagging/recipient_sync/utils/load_logs_for_range.d.ts +3 -2
  144. package/dest/tagging/recipient_sync/utils/load_logs_for_range.d.ts.map +1 -1
  145. package/dest/tagging/recipient_sync/utils/load_logs_for_range.js +5 -2
  146. package/dest/tagging/sender_sync/sync_sender_tagging_indexes.d.ts +3 -2
  147. package/dest/tagging/sender_sync/sync_sender_tagging_indexes.d.ts.map +1 -1
  148. package/dest/tagging/sender_sync/sync_sender_tagging_indexes.js +7 -7
  149. package/dest/tagging/sender_sync/utils/get_status_change_of_pending.d.ts +1 -1
  150. package/dest/tagging/sender_sync/utils/get_status_change_of_pending.d.ts.map +1 -1
  151. package/dest/tagging/sender_sync/utils/get_status_change_of_pending.js +5 -8
  152. package/dest/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.d.ts +5 -2
  153. package/dest/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.d.ts.map +1 -1
  154. package/dest/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.js +10 -5
  155. package/package.json +18 -18
  156. package/src/bin/check_oracle_version.ts +1 -0
  157. package/src/block_synchronizer/block_synchronizer.ts +85 -33
  158. package/src/config/index.ts +14 -0
  159. package/src/contract_function_simulator/benchmarked_node.ts +103 -0
  160. package/src/contract_function_simulator/contract_function_simulator.ts +34 -28
  161. package/src/contract_function_simulator/execution_note_cache.ts +44 -25
  162. package/src/contract_function_simulator/index.ts +1 -1
  163. package/src/contract_function_simulator/noir-structs/event_validation_request.ts +1 -1
  164. package/src/contract_function_simulator/noir-structs/note_validation_request.ts +1 -1
  165. package/src/contract_function_simulator/noir-structs/utility_context.ts +6 -25
  166. package/src/contract_function_simulator/oracle/interfaces.ts +20 -10
  167. package/src/contract_function_simulator/oracle/note_packing_utils.ts +10 -10
  168. package/src/contract_function_simulator/oracle/oracle.ts +65 -40
  169. package/src/contract_function_simulator/oracle/private_execution.ts +1 -67
  170. package/src/contract_function_simulator/oracle/private_execution_oracle.ts +35 -12
  171. package/src/contract_function_simulator/oracle/utility_execution_oracle.ts +100 -82
  172. package/src/contract_sync/index.ts +98 -0
  173. package/src/debug/pxe_debug_utils.ts +26 -11
  174. package/src/entrypoints/client/bundle/utils.ts +7 -14
  175. package/src/entrypoints/client/lazy/utils.ts +8 -14
  176. package/src/entrypoints/pxe_creation_options.ts +2 -1
  177. package/src/entrypoints/server/index.ts +2 -0
  178. package/src/entrypoints/server/utils.ts +15 -19
  179. package/src/events/event_service.ts +17 -25
  180. package/src/events/private_event_filter_validator.ts +3 -5
  181. package/src/job_coordinator/job_coordinator.ts +4 -3
  182. package/src/logs/log_service.ts +32 -14
  183. package/src/notes/note_service.ts +38 -43
  184. package/src/oracle_version.ts +4 -3
  185. package/src/private_kernel/hints/index.ts +1 -1
  186. package/src/private_kernel/hints/{build_private_kernel_reset_private_inputs.ts → private_kernel_reset_private_inputs_builder.ts} +32 -20
  187. package/src/private_kernel/private_kernel_execution_prover.ts +7 -4
  188. package/src/private_kernel/private_kernel_oracle.ts +116 -37
  189. package/src/pxe.ts +77 -118
  190. package/src/storage/address_store/address_store.ts +15 -15
  191. package/src/storage/anchor_block_store/anchor_block_store.ts +8 -0
  192. package/src/storage/capsule_store/capsule_store.ts +159 -23
  193. package/src/storage/contract_store/contract_store.ts +22 -31
  194. package/src/storage/metadata.ts +1 -1
  195. package/src/storage/note_store/note_store.ts +317 -318
  196. package/src/storage/note_store/stored_note.ts +48 -0
  197. package/src/storage/private_event_store/private_event_store.ts +292 -124
  198. package/src/storage/private_event_store/stored_private_event.ts +73 -0
  199. package/src/storage/tagging_store/recipient_tagging_store.ts +106 -20
  200. package/src/storage/tagging_store/sender_address_book_store.ts +20 -14
  201. package/src/storage/tagging_store/sender_tagging_store.ts +293 -108
  202. package/src/tagging/get_all_logs_by_tags.ts +68 -0
  203. package/src/tagging/index.ts +1 -0
  204. package/src/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.ts +16 -5
  205. package/src/tagging/recipient_sync/utils/load_logs_for_range.ts +7 -1
  206. package/src/tagging/sender_sync/sync_sender_tagging_indexes.ts +9 -6
  207. package/src/tagging/sender_sync/utils/get_status_change_of_pending.ts +5 -17
  208. package/src/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.ts +16 -4
  209. package/dest/contract_function_simulator/proxied_node.d.ts +0 -9
  210. package/dest/contract_function_simulator/proxied_node.d.ts.map +0 -1
  211. package/dest/contract_function_simulator/proxied_node.js +0 -27
  212. package/dest/private_kernel/hints/build_private_kernel_reset_private_inputs.d.ts +0 -28
  213. package/dest/private_kernel/hints/build_private_kernel_reset_private_inputs.d.ts.map +0 -1
  214. package/dest/private_kernel/private_kernel_oracle_impl.d.ts +0 -46
  215. package/dest/private_kernel/private_kernel_oracle_impl.d.ts.map +0 -1
  216. package/dest/private_kernel/private_kernel_oracle_impl.js +0 -85
  217. package/dest/public_storage/public_storage_service.d.ts +0 -24
  218. package/dest/public_storage/public_storage_service.d.ts.map +0 -1
  219. package/dest/public_storage/public_storage_service.js +0 -26
  220. package/dest/tree_membership/tree_membership_service.d.ts +0 -52
  221. package/dest/tree_membership/tree_membership_service.d.ts.map +0 -1
  222. package/dest/tree_membership/tree_membership_service.js +0 -84
  223. package/src/contract_function_simulator/proxied_node.ts +0 -33
  224. package/src/private_kernel/private_kernel_oracle_impl.ts +0 -127
  225. package/src/public_storage/public_storage_service.ts +0 -33
  226. package/src/tree_membership/tree_membership_service.ts +0 -112
@@ -1,6 +1,8 @@
1
1
  import type { AztecAsyncKVStore, AztecAsyncMap } from '@aztec/kv-store';
2
2
  import type { DirectionalAppTaggingSecret } from '@aztec/stdlib/logs';
3
3
 
4
+ import type { StagedStore } from '../../job_coordinator/job_coordinator.js';
5
+
4
6
  /**
5
7
  * Data provider of tagging data used when syncing the logs as a recipient. The sender counterpart of this class
6
8
  * is called SenderTaggingStore. We have the providers separate for the sender and recipient because
@@ -8,46 +10,130 @@ import type { DirectionalAppTaggingSecret } from '@aztec/stdlib/logs';
8
10
  *
9
11
  * @dev Chain reorgs do not need to be handled here because both the finalized and aged indexes refer to finalized
10
12
  * blocks, which by definition cannot be affected by reorgs.
11
- *
12
- * TODO(benesjan): Relocate to yarn-project/pxe/src/storage/tagging_store
13
13
  */
14
- export class RecipientTaggingStore {
14
+ export class RecipientTaggingStore implements StagedStore {
15
+ storeName: string = 'recipient_tagging';
16
+
15
17
  #store: AztecAsyncKVStore;
16
18
 
17
19
  #highestAgedIndex: AztecAsyncMap<string, number>;
18
20
  #highestFinalizedIndex: AztecAsyncMap<string, number>;
19
21
 
22
+ // jobId => secret => number
23
+ #highestAgedIndexForJob: Map<string, Map<string, number>>;
24
+
25
+ // jobId => secret => number
26
+ #highestFinalizedIndexForJob: Map<string, Map<string, number>>;
27
+
20
28
  constructor(store: AztecAsyncKVStore) {
21
29
  this.#store = store;
22
30
 
23
31
  this.#highestAgedIndex = this.#store.openMap('highest_aged_index');
24
32
  this.#highestFinalizedIndex = this.#store.openMap('highest_finalized_index');
33
+
34
+ this.#highestAgedIndexForJob = new Map();
35
+ this.#highestFinalizedIndexForJob = new Map();
25
36
  }
26
37
 
27
- getHighestAgedIndex(secret: DirectionalAppTaggingSecret): Promise<number | undefined> {
28
- return this.#highestAgedIndex.getAsync(secret.toString());
38
+ #getHighestAgedIndexForJob(jobId: string): Map<string, number> {
39
+ let highestAgedIndexForJob = this.#highestAgedIndexForJob.get(jobId);
40
+ if (!highestAgedIndexForJob) {
41
+ highestAgedIndexForJob = new Map();
42
+ this.#highestAgedIndexForJob.set(jobId, highestAgedIndexForJob);
43
+ }
44
+ return highestAgedIndexForJob;
29
45
  }
30
46
 
31
- async updateHighestAgedIndex(secret: DirectionalAppTaggingSecret, index: number): Promise<void> {
32
- const currentIndex = await this.#highestAgedIndex.getAsync(secret.toString());
33
- if (currentIndex !== undefined && index <= currentIndex) {
34
- // Log sync should never set a lower highest aged index.
35
- throw new Error(`New highest aged index (${index}) must be higher than the current one (${currentIndex})`);
47
+ async #readHighestAgedIndex(jobId: string, secret: string): Promise<number | undefined> {
48
+ // Always issue DB read to keep IndexedDB transaction alive (they auto-commit when a new micro-task starts and there
49
+ // are no pending read requests). The staged value still takes precedence if it exists.
50
+ const dbValue = await this.#highestAgedIndex.getAsync(secret);
51
+ const staged = this.#getHighestAgedIndexForJob(jobId).get(secret);
52
+ return staged ?? dbValue;
53
+ }
54
+
55
+ #writeHighestAgedIndex(jobId: string, secret: string, index: number) {
56
+ this.#getHighestAgedIndexForJob(jobId).set(secret, index);
57
+ }
58
+
59
+ #getHighestFinalizedIndexForJob(jobId: string): Map<string, number> {
60
+ let jobStagedHighestFinalizedIndex = this.#highestFinalizedIndexForJob.get(jobId);
61
+ if (!jobStagedHighestFinalizedIndex) {
62
+ jobStagedHighestFinalizedIndex = new Map();
63
+ this.#highestFinalizedIndexForJob.set(jobId, jobStagedHighestFinalizedIndex);
36
64
  }
37
- await this.#highestAgedIndex.set(secret.toString(), index);
65
+ return jobStagedHighestFinalizedIndex;
66
+ }
67
+
68
+ async #readHighestFinalizedIndex(jobId: string, secret: string): Promise<number | undefined> {
69
+ // Always issue DB read to keep IndexedDB transaction alive (they auto-commit when a new micro-task starts and there
70
+ // are no pending read requests). The staged value still takes precedence if it exists.
71
+ const dbValue = await this.#highestFinalizedIndex.getAsync(secret);
72
+ const staged = this.#getHighestFinalizedIndexForJob(jobId).get(secret);
73
+ return staged ?? dbValue;
38
74
  }
39
75
 
40
- getHighestFinalizedIndex(secret: DirectionalAppTaggingSecret): Promise<number | undefined> {
41
- return this.#highestFinalizedIndex.getAsync(secret.toString());
76
+ #writeHighestFinalizedIndex(jobId: string, secret: string, index: number) {
77
+ this.#getHighestFinalizedIndexForJob(jobId).set(secret, index);
42
78
  }
43
79
 
44
- async updateHighestFinalizedIndex(secret: DirectionalAppTaggingSecret, index: number): Promise<void> {
45
- const currentIndex = await this.#highestFinalizedIndex.getAsync(secret.toString());
46
- if (currentIndex !== undefined && index < currentIndex) {
47
- // Log sync should never set a lower highest finalized index but it can happen that it would try to set the same
48
- // one because we are loading logs from highest aged index + 1 and not from the highest finalized index.
49
- throw new Error(`New highest finalized index (${index}) must be higher than the current one (${currentIndex})`);
80
+ /**
81
+ * Writes all job-specific in-memory data to persistent storage.
82
+ *
83
+ * @remark This method must run in a DB transaction context. It's designed to be called from JobCoordinator#commitJob.
84
+ */
85
+ async commit(jobId: string): Promise<void> {
86
+ const highestAgedIndexForJob = this.#highestAgedIndexForJob.get(jobId);
87
+ if (highestAgedIndexForJob) {
88
+ for (const [secret, index] of highestAgedIndexForJob.entries()) {
89
+ await this.#highestAgedIndex.set(secret, index);
90
+ }
50
91
  }
51
- await this.#highestFinalizedIndex.set(secret.toString(), index);
92
+
93
+ const highestFinalizedIndexForJob = this.#highestFinalizedIndexForJob.get(jobId);
94
+ if (highestFinalizedIndexForJob) {
95
+ for (const [secret, index] of highestFinalizedIndexForJob.entries()) {
96
+ await this.#highestFinalizedIndex.set(secret, index);
97
+ }
98
+ }
99
+
100
+ return this.discardStaged(jobId);
101
+ }
102
+
103
+ discardStaged(jobId: string): Promise<void> {
104
+ this.#highestAgedIndexForJob.delete(jobId);
105
+ this.#highestFinalizedIndexForJob.delete(jobId);
106
+ return Promise.resolve();
107
+ }
108
+
109
+ getHighestAgedIndex(secret: DirectionalAppTaggingSecret, jobId: string): Promise<number | undefined> {
110
+ return this.#store.transactionAsync(() => this.#readHighestAgedIndex(jobId, secret.toString()));
111
+ }
112
+
113
+ updateHighestAgedIndex(secret: DirectionalAppTaggingSecret, index: number, jobId: string): Promise<void> {
114
+ return this.#store.transactionAsync(async () => {
115
+ const currentIndex = await this.#readHighestAgedIndex(jobId, secret.toString());
116
+ if (currentIndex !== undefined && index <= currentIndex) {
117
+ // Log sync should never set a lower highest aged index.
118
+ throw new Error(`New highest aged index (${index}) must be higher than the current one (${currentIndex})`);
119
+ }
120
+ this.#writeHighestAgedIndex(jobId, secret.toString(), index);
121
+ });
122
+ }
123
+
124
+ getHighestFinalizedIndex(secret: DirectionalAppTaggingSecret, jobId: string): Promise<number | undefined> {
125
+ return this.#store.transactionAsync(() => this.#readHighestFinalizedIndex(jobId, secret.toString()));
126
+ }
127
+
128
+ updateHighestFinalizedIndex(secret: DirectionalAppTaggingSecret, index: number, jobId: string): Promise<void> {
129
+ return this.#store.transactionAsync(async () => {
130
+ const currentIndex = await this.#readHighestFinalizedIndex(jobId, secret.toString());
131
+ if (currentIndex !== undefined && index < currentIndex) {
132
+ // Log sync should never set a lower highest finalized index but it can happen that it would try to set the same
133
+ // one because we are loading logs from highest aged index + 1 and not from the highest finalized index.
134
+ throw new Error(`New highest finalized index (${index}) must be higher than the current one (${currentIndex})`);
135
+ }
136
+ this.#writeHighestFinalizedIndex(jobId, secret.toString(), index);
137
+ });
52
138
  }
53
139
  }
@@ -16,27 +16,33 @@ export class SenderAddressBookStore {
16
16
  this.#addressBook = this.#store.openMap('address_book');
17
17
  }
18
18
 
19
- async addSender(address: AztecAddress): Promise<boolean> {
20
- if (await this.#addressBook.hasAsync(address.toString())) {
21
- return false;
22
- }
19
+ addSender(address: AztecAddress): Promise<boolean> {
20
+ return this.#store.transactionAsync(async () => {
21
+ if (await this.#addressBook.hasAsync(address.toString())) {
22
+ return false;
23
+ }
23
24
 
24
- await this.#addressBook.set(address.toString(), true);
25
+ await this.#addressBook.set(address.toString(), true);
25
26
 
26
- return true;
27
+ return true;
28
+ });
27
29
  }
28
30
 
29
- async getSenders(): Promise<AztecAddress[]> {
30
- return (await toArray(this.#addressBook.keysAsync())).map(AztecAddress.fromString);
31
+ getSenders(): Promise<AztecAddress[]> {
32
+ return this.#store.transactionAsync(async () => {
33
+ return (await toArray(this.#addressBook.keysAsync())).map(AztecAddress.fromString);
34
+ });
31
35
  }
32
36
 
33
- async removeSender(address: AztecAddress): Promise<boolean> {
34
- if (!(await this.#addressBook.hasAsync(address.toString()))) {
35
- return false;
36
- }
37
+ removeSender(address: AztecAddress): Promise<boolean> {
38
+ return this.#store.transactionAsync(async () => {
39
+ if (!(await this.#addressBook.hasAsync(address.toString()))) {
40
+ return false;
41
+ }
37
42
 
38
- await this.#addressBook.delete(address.toString());
43
+ await this.#addressBook.delete(address.toString());
39
44
 
40
- return true;
45
+ return true;
46
+ });
41
47
  }
42
48
  }