@aztec/pxe 0.0.1-commit.c7c42ec → 0.0.1-commit.c949de6bc

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 (274) hide show
  1. package/dest/access_scopes.d.ts +9 -0
  2. package/dest/access_scopes.d.ts.map +1 -0
  3. package/dest/access_scopes.js +6 -0
  4. package/dest/bin/check_oracle_version.js +1 -1
  5. package/dest/block_synchronizer/block_synchronizer.d.ts +13 -5
  6. package/dest/block_synchronizer/block_synchronizer.d.ts.map +1 -1
  7. package/dest/block_synchronizer/block_synchronizer.js +74 -20
  8. package/dest/config/index.d.ts +3 -1
  9. package/dest/config/index.d.ts.map +1 -1
  10. package/dest/config/index.js +17 -0
  11. package/dest/config/package_info.js +1 -1
  12. package/dest/contract_function_simulator/benchmarked_node.d.ts +9 -0
  13. package/dest/contract_function_simulator/benchmarked_node.d.ts.map +1 -0
  14. package/dest/contract_function_simulator/benchmarked_node.js +77 -0
  15. package/dest/contract_function_simulator/contract_function_simulator.d.ts +57 -34
  16. package/dest/contract_function_simulator/contract_function_simulator.d.ts.map +1 -1
  17. package/dest/contract_function_simulator/contract_function_simulator.js +199 -81
  18. package/dest/contract_function_simulator/execution_note_cache.d.ts +18 -9
  19. package/dest/contract_function_simulator/execution_note_cache.d.ts.map +1 -1
  20. package/dest/contract_function_simulator/execution_note_cache.js +45 -28
  21. package/dest/contract_function_simulator/execution_tagging_index_cache.d.ts +5 -5
  22. package/dest/contract_function_simulator/execution_tagging_index_cache.d.ts.map +1 -1
  23. package/dest/contract_function_simulator/execution_tagging_index_cache.js +3 -3
  24. package/dest/contract_function_simulator/index.d.ts +2 -2
  25. package/dest/contract_function_simulator/index.d.ts.map +1 -1
  26. package/dest/contract_function_simulator/index.js +1 -1
  27. package/dest/contract_function_simulator/noir-structs/event_validation_request.d.ts +4 -3
  28. package/dest/contract_function_simulator/noir-structs/event_validation_request.d.ts.map +1 -1
  29. package/dest/contract_function_simulator/noir-structs/event_validation_request.js +7 -4
  30. package/dest/contract_function_simulator/noir-structs/note_validation_request.d.ts +3 -3
  31. package/dest/contract_function_simulator/noir-structs/note_validation_request.d.ts.map +1 -1
  32. package/dest/contract_function_simulator/noir-structs/note_validation_request.js +2 -2
  33. package/dest/contract_function_simulator/noir-structs/utility_context.d.ts +4 -10
  34. package/dest/contract_function_simulator/noir-structs/utility_context.d.ts.map +1 -1
  35. package/dest/contract_function_simulator/noir-structs/utility_context.js +7 -18
  36. package/dest/contract_function_simulator/oracle/interfaces.d.ts +17 -13
  37. package/dest/contract_function_simulator/oracle/interfaces.d.ts.map +1 -1
  38. package/dest/contract_function_simulator/oracle/message_load_oracle_inputs.d.ts +3 -1
  39. package/dest/contract_function_simulator/oracle/message_load_oracle_inputs.d.ts.map +1 -1
  40. package/dest/contract_function_simulator/oracle/note_packing_utils.d.ts +6 -6
  41. package/dest/contract_function_simulator/oracle/note_packing_utils.d.ts.map +1 -1
  42. package/dest/contract_function_simulator/oracle/note_packing_utils.js +8 -8
  43. package/dest/contract_function_simulator/oracle/oracle.d.ts +12 -10
  44. package/dest/contract_function_simulator/oracle/oracle.d.ts.map +1 -1
  45. package/dest/contract_function_simulator/oracle/oracle.js +67 -44
  46. package/dest/contract_function_simulator/oracle/private_execution.d.ts +2 -26
  47. package/dest/contract_function_simulator/oracle/private_execution.d.ts.map +1 -1
  48. package/dest/contract_function_simulator/oracle/private_execution.js +1 -37
  49. package/dest/contract_function_simulator/oracle/private_execution_oracle.d.ts +45 -47
  50. package/dest/contract_function_simulator/oracle/private_execution_oracle.d.ts.map +1 -1
  51. package/dest/contract_function_simulator/oracle/private_execution_oracle.js +91 -60
  52. package/dest/contract_function_simulator/oracle/utility_execution_oracle.d.ts +67 -33
  53. package/dest/contract_function_simulator/oracle/utility_execution_oracle.d.ts.map +1 -1
  54. package/dest/contract_function_simulator/oracle/utility_execution_oracle.js +131 -110
  55. package/dest/contract_logging.d.ts +22 -0
  56. package/dest/contract_logging.d.ts.map +1 -0
  57. package/dest/contract_logging.js +23 -0
  58. package/dest/contract_sync/contract_sync_service.d.ts +43 -0
  59. package/dest/contract_sync/contract_sync_service.d.ts.map +1 -0
  60. package/dest/contract_sync/contract_sync_service.js +97 -0
  61. package/dest/contract_sync/helpers.d.ts +29 -0
  62. package/dest/contract_sync/helpers.d.ts.map +1 -0
  63. package/dest/contract_sync/helpers.js +55 -0
  64. package/dest/debug/pxe_debug_utils.d.ts +24 -10
  65. package/dest/debug/pxe_debug_utils.d.ts.map +1 -1
  66. package/dest/debug/pxe_debug_utils.js +28 -17
  67. package/dest/entrypoints/client/bundle/index.d.ts +4 -1
  68. package/dest/entrypoints/client/bundle/index.d.ts.map +1 -1
  69. package/dest/entrypoints/client/bundle/index.js +3 -0
  70. package/dest/entrypoints/client/bundle/utils.d.ts +1 -1
  71. package/dest/entrypoints/client/bundle/utils.d.ts.map +1 -1
  72. package/dest/entrypoints/client/bundle/utils.js +31 -8
  73. package/dest/entrypoints/client/lazy/index.d.ts +4 -1
  74. package/dest/entrypoints/client/lazy/index.d.ts.map +1 -1
  75. package/dest/entrypoints/client/lazy/index.js +3 -0
  76. package/dest/entrypoints/client/lazy/utils.d.ts +2 -2
  77. package/dest/entrypoints/client/lazy/utils.d.ts.map +1 -1
  78. package/dest/entrypoints/client/lazy/utils.js +32 -9
  79. package/dest/entrypoints/pxe_creation_options.d.ts +5 -3
  80. package/dest/entrypoints/pxe_creation_options.d.ts.map +1 -1
  81. package/dest/entrypoints/server/index.d.ts +5 -1
  82. package/dest/entrypoints/server/index.d.ts.map +1 -1
  83. package/dest/entrypoints/server/index.js +4 -0
  84. package/dest/entrypoints/server/utils.d.ts +1 -1
  85. package/dest/entrypoints/server/utils.d.ts.map +1 -1
  86. package/dest/entrypoints/server/utils.js +39 -16
  87. package/dest/events/event_service.d.ts +6 -6
  88. package/dest/events/event_service.d.ts.map +1 -1
  89. package/dest/events/event_service.js +19 -22
  90. package/dest/events/private_event_filter_validator.d.ts +5 -5
  91. package/dest/events/private_event_filter_validator.d.ts.map +1 -1
  92. package/dest/events/private_event_filter_validator.js +5 -6
  93. package/dest/job_coordinator/job_coordinator.d.ts +75 -0
  94. package/dest/job_coordinator/job_coordinator.d.ts.map +1 -0
  95. package/dest/job_coordinator/job_coordinator.js +94 -0
  96. package/dest/logs/log_service.d.ts +8 -5
  97. package/dest/logs/log_service.d.ts.map +1 -1
  98. package/dest/logs/log_service.js +31 -33
  99. package/dest/notes/note_service.d.ts +10 -9
  100. package/dest/notes/note_service.d.ts.map +1 -1
  101. package/dest/notes/note_service.js +34 -38
  102. package/dest/notes_filter.d.ts +25 -0
  103. package/dest/notes_filter.d.ts.map +1 -0
  104. package/dest/notes_filter.js +4 -0
  105. package/dest/oracle_version.d.ts +3 -3
  106. package/dest/oracle_version.d.ts.map +1 -1
  107. package/dest/oracle_version.js +4 -3
  108. package/dest/private_kernel/hints/compute_tx_expiration_timestamp.d.ts +4 -0
  109. package/dest/private_kernel/hints/compute_tx_expiration_timestamp.d.ts.map +1 -0
  110. package/dest/private_kernel/hints/{compute_tx_include_by_timestamp.js → compute_tx_expiration_timestamp.js} +12 -12
  111. package/dest/private_kernel/hints/index.d.ts +3 -3
  112. package/dest/private_kernel/hints/index.d.ts.map +1 -1
  113. package/dest/private_kernel/hints/index.js +2 -2
  114. package/dest/private_kernel/hints/private_kernel_reset_private_inputs_builder.d.ts +29 -0
  115. package/dest/private_kernel/hints/private_kernel_reset_private_inputs_builder.d.ts.map +1 -0
  116. package/dest/private_kernel/hints/{build_private_kernel_reset_private_inputs.js → private_kernel_reset_private_inputs_builder.js} +141 -74
  117. package/dest/private_kernel/hints/test_utils.d.ts +122 -0
  118. package/dest/private_kernel/hints/test_utils.d.ts.map +1 -0
  119. package/dest/private_kernel/hints/test_utils.js +203 -0
  120. package/dest/private_kernel/private_kernel_execution_prover.d.ts +3 -2
  121. package/dest/private_kernel/private_kernel_execution_prover.d.ts.map +1 -1
  122. package/dest/private_kernel/private_kernel_execution_prover.js +24 -17
  123. package/dest/private_kernel/private_kernel_oracle.d.ts +24 -24
  124. package/dest/private_kernel/private_kernel_oracle.d.ts.map +1 -1
  125. package/dest/private_kernel/private_kernel_oracle.js +94 -2
  126. package/dest/pxe.d.ts +76 -58
  127. package/dest/pxe.d.ts.map +1 -1
  128. package/dest/pxe.js +151 -136
  129. package/dest/storage/address_store/address_store.d.ts +1 -1
  130. package/dest/storage/address_store/address_store.d.ts.map +1 -1
  131. package/dest/storage/address_store/address_store.js +12 -11
  132. package/dest/storage/anchor_block_store/anchor_block_store.d.ts +9 -1
  133. package/dest/storage/anchor_block_store/anchor_block_store.d.ts.map +1 -1
  134. package/dest/storage/anchor_block_store/anchor_block_store.js +8 -1
  135. package/dest/storage/capsule_store/capsule_store.d.ts +24 -9
  136. package/dest/storage/capsule_store/capsule_store.d.ts.map +1 -1
  137. package/dest/storage/capsule_store/capsule_store.js +130 -23
  138. package/dest/storage/contract_store/contract_store.d.ts +42 -15
  139. package/dest/storage/contract_store/contract_store.d.ts.map +1 -1
  140. package/dest/storage/contract_store/contract_store.js +157 -72
  141. package/dest/storage/metadata.d.ts +1 -1
  142. package/dest/storage/metadata.js +1 -1
  143. package/dest/storage/note_store/note_store.d.ts +50 -51
  144. package/dest/storage/note_store/note_store.d.ts.map +1 -1
  145. package/dest/storage/note_store/note_store.js +284 -263
  146. package/dest/storage/note_store/stored_note.d.ts +16 -0
  147. package/dest/storage/note_store/stored_note.d.ts.map +1 -0
  148. package/dest/storage/note_store/stored_note.js +43 -0
  149. package/dest/storage/private_event_store/private_event_store.d.ts +47 -7
  150. package/dest/storage/private_event_store/private_event_store.d.ts.map +1 -1
  151. package/dest/storage/private_event_store/private_event_store.js +231 -73
  152. package/dest/storage/private_event_store/stored_private_event.d.ts +23 -0
  153. package/dest/storage/private_event_store/stored_private_event.d.ts.map +1 -0
  154. package/dest/storage/private_event_store/stored_private_event.js +56 -0
  155. package/dest/storage/tagging_store/recipient_tagging_store.d.ts +16 -9
  156. package/dest/storage/tagging_store/recipient_tagging_store.d.ts.map +1 -1
  157. package/dest/storage/tagging_store/recipient_tagging_store.js +88 -19
  158. package/dest/storage/tagging_store/sender_address_book_store.d.ts +1 -1
  159. package/dest/storage/tagging_store/sender_address_book_store.d.ts.map +1 -1
  160. package/dest/storage/tagging_store/sender_address_book_store.js +20 -14
  161. package/dest/storage/tagging_store/sender_tagging_store.d.ts +20 -10
  162. package/dest/storage/tagging_store/sender_tagging_store.d.ts.map +1 -1
  163. package/dest/storage/tagging_store/sender_tagging_store.js +254 -102
  164. package/dest/tagging/constants.d.ts +2 -0
  165. package/dest/tagging/constants.d.ts.map +1 -0
  166. package/dest/tagging/constants.js +10 -0
  167. package/dest/tagging/get_all_logs_by_tags.d.ts +24 -0
  168. package/dest/tagging/get_all_logs_by_tags.d.ts.map +1 -0
  169. package/dest/tagging/get_all_logs_by_tags.js +60 -0
  170. package/dest/tagging/index.d.ts +4 -3
  171. package/dest/tagging/index.d.ts.map +1 -1
  172. package/dest/tagging/index.js +3 -11
  173. package/dest/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.d.ts +5 -5
  174. package/dest/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.d.ts.map +1 -1
  175. package/dest/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.js +13 -13
  176. package/dest/tagging/recipient_sync/utils/find_highest_indexes.js +2 -2
  177. package/dest/tagging/recipient_sync/utils/load_logs_for_range.d.ts +7 -7
  178. package/dest/tagging/recipient_sync/utils/load_logs_for_range.d.ts.map +1 -1
  179. package/dest/tagging/recipient_sync/utils/load_logs_for_range.js +16 -12
  180. package/dest/tagging/sender_sync/sync_sender_tagging_indexes.d.ts +5 -8
  181. package/dest/tagging/sender_sync/sync_sender_tagging_indexes.d.ts.map +1 -1
  182. package/dest/tagging/sender_sync/sync_sender_tagging_indexes.js +9 -12
  183. package/dest/tagging/sender_sync/utils/get_status_change_of_pending.d.ts +1 -1
  184. package/dest/tagging/sender_sync/utils/get_status_change_of_pending.d.ts.map +1 -1
  185. package/dest/tagging/sender_sync/utils/get_status_change_of_pending.js +5 -8
  186. package/dest/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.d.ts +7 -7
  187. package/dest/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.d.ts.map +1 -1
  188. package/dest/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.js +23 -19
  189. package/package.json +27 -18
  190. package/src/access_scopes.ts +9 -0
  191. package/src/bin/check_oracle_version.ts +1 -0
  192. package/src/block_synchronizer/block_synchronizer.ts +93 -32
  193. package/src/config/index.ts +14 -0
  194. package/src/config/package_info.ts +1 -1
  195. package/src/contract_function_simulator/benchmarked_node.ts +103 -0
  196. package/src/contract_function_simulator/contract_function_simulator.ts +353 -140
  197. package/src/contract_function_simulator/execution_note_cache.ts +44 -25
  198. package/src/contract_function_simulator/execution_tagging_index_cache.ts +5 -5
  199. package/src/contract_function_simulator/index.ts +1 -1
  200. package/src/contract_function_simulator/noir-structs/event_validation_request.ts +6 -2
  201. package/src/contract_function_simulator/noir-structs/note_validation_request.ts +2 -2
  202. package/src/contract_function_simulator/noir-structs/utility_context.ts +6 -25
  203. package/src/contract_function_simulator/oracle/interfaces.ts +22 -12
  204. package/src/contract_function_simulator/oracle/note_packing_utils.ts +10 -10
  205. package/src/contract_function_simulator/oracle/oracle.ts +79 -47
  206. package/src/contract_function_simulator/oracle/private_execution.ts +1 -69
  207. package/src/contract_function_simulator/oracle/private_execution_oracle.ts +131 -140
  208. package/src/contract_function_simulator/oracle/utility_execution_oracle.ts +198 -115
  209. package/src/contract_logging.ts +39 -0
  210. package/src/contract_sync/contract_sync_service.ts +152 -0
  211. package/src/contract_sync/helpers.ts +98 -0
  212. package/src/debug/pxe_debug_utils.ts +63 -18
  213. package/src/entrypoints/client/bundle/index.ts +3 -0
  214. package/src/entrypoints/client/bundle/utils.ts +23 -16
  215. package/src/entrypoints/client/lazy/index.ts +3 -0
  216. package/src/entrypoints/client/lazy/utils.ts +24 -17
  217. package/src/entrypoints/pxe_creation_options.ts +4 -2
  218. package/src/entrypoints/server/index.ts +4 -0
  219. package/src/entrypoints/server/utils.ts +33 -41
  220. package/src/events/event_service.ts +19 -25
  221. package/src/events/private_event_filter_validator.ts +3 -5
  222. package/src/job_coordinator/job_coordinator.ts +150 -0
  223. package/src/logs/log_service.ts +51 -40
  224. package/src/notes/note_service.ts +41 -45
  225. package/src/notes_filter.ts +26 -0
  226. package/src/oracle_version.ts +4 -3
  227. package/src/private_kernel/hints/{compute_tx_include_by_timestamp.ts → compute_tx_expiration_timestamp.ts} +13 -13
  228. package/src/private_kernel/hints/index.ts +2 -2
  229. package/src/private_kernel/hints/{build_private_kernel_reset_private_inputs.ts → private_kernel_reset_private_inputs_builder.ts} +196 -138
  230. package/src/private_kernel/hints/test_utils.ts +325 -0
  231. package/src/private_kernel/private_kernel_execution_prover.ts +27 -19
  232. package/src/private_kernel/private_kernel_oracle.ts +116 -36
  233. package/src/pxe.ts +283 -202
  234. package/src/storage/address_store/address_store.ts +15 -15
  235. package/src/storage/anchor_block_store/anchor_block_store.ts +8 -0
  236. package/src/storage/capsule_store/capsule_store.ts +159 -23
  237. package/src/storage/contract_store/contract_store.ts +186 -76
  238. package/src/storage/metadata.ts +1 -1
  239. package/src/storage/note_store/note_store.ts +326 -320
  240. package/src/storage/note_store/stored_note.ts +48 -0
  241. package/src/storage/private_event_store/private_event_store.ts +301 -79
  242. package/src/storage/private_event_store/stored_private_event.ts +73 -0
  243. package/src/storage/tagging_store/recipient_tagging_store.ts +111 -21
  244. package/src/storage/tagging_store/sender_address_book_store.ts +20 -14
  245. package/src/storage/tagging_store/sender_tagging_store.ts +297 -112
  246. package/src/tagging/constants.ts +10 -0
  247. package/src/tagging/get_all_logs_by_tags.ts +92 -0
  248. package/src/tagging/index.ts +3 -12
  249. package/src/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.ts +27 -16
  250. package/src/tagging/recipient_sync/utils/find_highest_indexes.ts +2 -2
  251. package/src/tagging/recipient_sync/utils/load_logs_for_range.ts +17 -16
  252. package/src/tagging/sender_sync/sync_sender_tagging_indexes.ts +13 -15
  253. package/src/tagging/sender_sync/utils/get_status_change_of_pending.ts +5 -13
  254. package/src/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.ts +26 -23
  255. package/dest/contract_function_simulator/proxied_node.d.ts +0 -9
  256. package/dest/contract_function_simulator/proxied_node.d.ts.map +0 -1
  257. package/dest/contract_function_simulator/proxied_node.js +0 -27
  258. package/dest/private_kernel/hints/build_private_kernel_reset_private_inputs.d.ts +0 -28
  259. package/dest/private_kernel/hints/build_private_kernel_reset_private_inputs.d.ts.map +0 -1
  260. package/dest/private_kernel/hints/compute_tx_include_by_timestamp.d.ts +0 -4
  261. package/dest/private_kernel/hints/compute_tx_include_by_timestamp.d.ts.map +0 -1
  262. package/dest/private_kernel/private_kernel_oracle_impl.d.ts +0 -46
  263. package/dest/private_kernel/private_kernel_oracle_impl.d.ts.map +0 -1
  264. package/dest/private_kernel/private_kernel_oracle_impl.js +0 -86
  265. package/dest/public_storage/public_storage_service.d.ts +0 -24
  266. package/dest/public_storage/public_storage_service.d.ts.map +0 -1
  267. package/dest/public_storage/public_storage_service.js +0 -26
  268. package/dest/tree_membership/tree_membership_service.d.ts +0 -52
  269. package/dest/tree_membership/tree_membership_service.d.ts.map +0 -1
  270. package/dest/tree_membership/tree_membership_service.js +0 -84
  271. package/src/contract_function_simulator/proxied_node.ts +0 -33
  272. package/src/private_kernel/private_kernel_oracle_impl.ts +0 -133
  273. package/src/public_storage/public_storage_service.ts +0 -33
  274. package/src/tree_membership/tree_membership_service.ts +0 -112
@@ -1,5 +1,7 @@
1
1
  import type { AztecAsyncKVStore, AztecAsyncMap } from '@aztec/kv-store';
2
- import type { DirectionalAppTaggingSecret } from '@aztec/stdlib/logs';
2
+ import type { ExtendedDirectionalAppTaggingSecret } from '@aztec/stdlib/logs';
3
+
4
+ import type { StagedStore } from '../../job_coordinator/job_coordinator.js';
3
5
 
4
6
  /**
5
7
  * Data provider of tagging data used when syncing the logs as a recipient. The sender counterpart of this class
@@ -8,46 +10,134 @@ 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: ExtendedDirectionalAppTaggingSecret, jobId: string): Promise<number | undefined> {
110
+ return this.#store.transactionAsync(() => this.#readHighestAgedIndex(jobId, secret.toString()));
111
+ }
112
+
113
+ updateHighestAgedIndex(secret: ExtendedDirectionalAppTaggingSecret, 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: ExtendedDirectionalAppTaggingSecret, jobId: string): Promise<number | undefined> {
125
+ return this.#store.transactionAsync(() => this.#readHighestFinalizedIndex(jobId, secret.toString()));
126
+ }
127
+
128
+ updateHighestFinalizedIndex(
129
+ secret: ExtendedDirectionalAppTaggingSecret,
130
+ index: number,
131
+ jobId: string,
132
+ ): Promise<void> {
133
+ return this.#store.transactionAsync(async () => {
134
+ const currentIndex = await this.#readHighestFinalizedIndex(jobId, secret.toString());
135
+ if (currentIndex !== undefined && index < currentIndex) {
136
+ // Log sync should never set a lower highest finalized index but it can happen that it would try to set the same
137
+ // one because we are loading logs from highest aged index + 1 and not from the highest finalized index.
138
+ throw new Error(`New highest finalized index (${index}) must be higher than the current one (${currentIndex})`);
139
+ }
140
+ this.#writeHighestFinalizedIndex(jobId, secret.toString(), index);
141
+ });
52
142
  }
53
143
  }
@@ -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
  }