@aztec/pxe 0.0.1-commit.29c6b1a3 → 0.0.1-commit.2c0ee1788

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 (261) hide show
  1. package/dest/bin/check_oracle_version.js +4 -4
  2. package/dest/block_synchronizer/block_stream_source.d.ts +10 -0
  3. package/dest/block_synchronizer/block_stream_source.d.ts.map +1 -0
  4. package/dest/block_synchronizer/block_stream_source.js +37 -0
  5. package/dest/block_synchronizer/block_synchronizer.d.ts +10 -4
  6. package/dest/block_synchronizer/block_synchronizer.d.ts.map +1 -1
  7. package/dest/block_synchronizer/block_synchronizer.js +38 -12
  8. package/dest/config/index.d.ts +2 -2
  9. package/dest/config/index.d.ts.map +1 -1
  10. package/dest/config/index.js +8 -15
  11. package/dest/config/package_info.js +1 -1
  12. package/dest/contract_function_simulator/contract_function_simulator.d.ts +63 -31
  13. package/dest/contract_function_simulator/contract_function_simulator.d.ts.map +1 -1
  14. package/dest/contract_function_simulator/contract_function_simulator.js +207 -77
  15. package/dest/contract_function_simulator/ephemeral_array_service.d.ts +28 -0
  16. package/dest/contract_function_simulator/ephemeral_array_service.d.ts.map +1 -0
  17. package/dest/contract_function_simulator/ephemeral_array_service.js +78 -0
  18. package/dest/contract_function_simulator/execution_tagging_index_cache.d.ts +7 -7
  19. package/dest/contract_function_simulator/execution_tagging_index_cache.d.ts.map +1 -1
  20. package/dest/contract_function_simulator/execution_tagging_index_cache.js +19 -11
  21. package/dest/contract_function_simulator/index.d.ts +2 -1
  22. package/dest/contract_function_simulator/index.d.ts.map +1 -1
  23. package/dest/contract_function_simulator/index.js +1 -0
  24. package/dest/contract_function_simulator/noir-structs/event_validation_request.d.ts +4 -6
  25. package/dest/contract_function_simulator/noir-structs/event_validation_request.d.ts.map +1 -1
  26. package/dest/contract_function_simulator/noir-structs/event_validation_request.js +8 -10
  27. package/dest/contract_function_simulator/noir-structs/log_retrieval_request.d.ts +1 -1
  28. package/dest/contract_function_simulator/noir-structs/log_retrieval_request.js +1 -1
  29. package/dest/contract_function_simulator/noir-structs/log_retrieval_response.d.ts +2 -2
  30. package/dest/contract_function_simulator/noir-structs/log_retrieval_response.d.ts.map +1 -1
  31. package/dest/contract_function_simulator/noir-structs/log_retrieval_response.js +2 -4
  32. package/dest/contract_function_simulator/noir-structs/note_validation_request.d.ts +4 -7
  33. package/dest/contract_function_simulator/noir-structs/note_validation_request.d.ts.map +1 -1
  34. package/dest/contract_function_simulator/noir-structs/note_validation_request.js +6 -11
  35. package/dest/contract_function_simulator/oracle/interfaces.d.ts +63 -45
  36. package/dest/contract_function_simulator/oracle/interfaces.d.ts.map +1 -1
  37. package/dest/contract_function_simulator/oracle/legacy_oracle_mappings.d.ts +9 -0
  38. package/dest/contract_function_simulator/oracle/legacy_oracle_mappings.d.ts.map +1 -0
  39. package/dest/contract_function_simulator/oracle/legacy_oracle_mappings.js +47 -0
  40. package/dest/contract_function_simulator/oracle/oracle.d.ts +76 -44
  41. package/dest/contract_function_simulator/oracle/oracle.d.ts.map +1 -1
  42. package/dest/contract_function_simulator/oracle/oracle.js +312 -108
  43. package/dest/contract_function_simulator/oracle/private_execution.js +5 -3
  44. package/dest/contract_function_simulator/oracle/private_execution_oracle.d.ts +58 -85
  45. package/dest/contract_function_simulator/oracle/private_execution_oracle.d.ts.map +1 -1
  46. package/dest/contract_function_simulator/oracle/private_execution_oracle.js +123 -97
  47. package/dest/contract_function_simulator/oracle/utility_execution_oracle.d.ts +134 -70
  48. package/dest/contract_function_simulator/oracle/utility_execution_oracle.d.ts.map +1 -1
  49. package/dest/contract_function_simulator/oracle/utility_execution_oracle.js +379 -143
  50. package/dest/contract_function_simulator/pick_notes.d.ts +1 -1
  51. package/dest/contract_function_simulator/pick_notes.d.ts.map +1 -1
  52. package/dest/contract_function_simulator/pick_notes.js +20 -3
  53. package/dest/contract_function_simulator/proxied_contract_data_source.d.ts +1 -1
  54. package/dest/contract_function_simulator/proxied_contract_data_source.d.ts.map +1 -1
  55. package/dest/contract_function_simulator/proxied_contract_data_source.js +3 -0
  56. package/dest/contract_logging.d.ts +27 -0
  57. package/dest/contract_logging.d.ts.map +1 -0
  58. package/dest/contract_logging.js +38 -0
  59. package/dest/contract_sync/contract_sync_service.d.ts +44 -0
  60. package/dest/contract_sync/contract_sync_service.d.ts.map +1 -0
  61. package/dest/contract_sync/contract_sync_service.js +116 -0
  62. package/dest/contract_sync/helpers.d.ts +28 -0
  63. package/dest/contract_sync/helpers.d.ts.map +1 -0
  64. package/dest/contract_sync/{index.js → helpers.js} +19 -13
  65. package/dest/debug/pxe_debug_utils.d.ts +14 -10
  66. package/dest/debug/pxe_debug_utils.d.ts.map +1 -1
  67. package/dest/debug/pxe_debug_utils.js +16 -15
  68. package/dest/entrypoints/client/bundle/index.d.ts +3 -1
  69. package/dest/entrypoints/client/bundle/index.d.ts.map +1 -1
  70. package/dest/entrypoints/client/bundle/index.js +2 -0
  71. package/dest/entrypoints/client/bundle/utils.d.ts +2 -2
  72. package/dest/entrypoints/client/bundle/utils.d.ts.map +1 -1
  73. package/dest/entrypoints/client/bundle/utils.js +23 -9
  74. package/dest/entrypoints/client/lazy/index.d.ts +3 -1
  75. package/dest/entrypoints/client/lazy/index.d.ts.map +1 -1
  76. package/dest/entrypoints/client/lazy/index.js +2 -0
  77. package/dest/entrypoints/client/lazy/utils.d.ts +3 -3
  78. package/dest/entrypoints/client/lazy/utils.d.ts.map +1 -1
  79. package/dest/entrypoints/client/lazy/utils.js +24 -10
  80. package/dest/entrypoints/pxe_creation_options.d.ts +5 -2
  81. package/dest/entrypoints/pxe_creation_options.d.ts.map +1 -1
  82. package/dest/entrypoints/pxe_creation_options.js +3 -1
  83. package/dest/entrypoints/server/index.d.ts +4 -3
  84. package/dest/entrypoints/server/index.d.ts.map +1 -1
  85. package/dest/entrypoints/server/index.js +3 -2
  86. package/dest/entrypoints/server/utils.d.ts +2 -2
  87. package/dest/entrypoints/server/utils.d.ts.map +1 -1
  88. package/dest/entrypoints/server/utils.js +30 -11
  89. package/dest/events/event_service.d.ts +5 -5
  90. package/dest/events/event_service.d.ts.map +1 -1
  91. package/dest/events/event_service.js +30 -10
  92. package/dest/events/private_event_filter_validator.d.ts +3 -2
  93. package/dest/events/private_event_filter_validator.d.ts.map +1 -1
  94. package/dest/events/private_event_filter_validator.js +15 -0
  95. package/dest/job_coordinator/job_coordinator.d.ts +3 -2
  96. package/dest/job_coordinator/job_coordinator.d.ts.map +1 -1
  97. package/dest/job_coordinator/job_coordinator.js +3 -2
  98. package/dest/logs/log_service.d.ts +10 -9
  99. package/dest/logs/log_service.d.ts.map +1 -1
  100. package/dest/logs/log_service.js +41 -61
  101. package/dest/messages/message_context_service.d.ts +17 -0
  102. package/dest/messages/message_context_service.d.ts.map +1 -0
  103. package/dest/messages/message_context_service.js +36 -0
  104. package/dest/notes/note_service.d.ts +7 -8
  105. package/dest/notes/note_service.d.ts.map +1 -1
  106. package/dest/notes/note_service.js +23 -14
  107. package/dest/notes_filter.d.ts +24 -0
  108. package/dest/notes_filter.d.ts.map +1 -0
  109. package/dest/notes_filter.js +4 -0
  110. package/dest/oracle_version.d.ts +4 -3
  111. package/dest/oracle_version.d.ts.map +1 -1
  112. package/dest/oracle_version.js +20 -10
  113. package/dest/private_kernel/hints/compute_tx_expiration_timestamp.d.ts +4 -0
  114. package/dest/private_kernel/hints/compute_tx_expiration_timestamp.d.ts.map +1 -0
  115. package/dest/private_kernel/hints/{compute_tx_include_by_timestamp.js → compute_tx_expiration_timestamp.js} +12 -12
  116. package/dest/private_kernel/hints/index.d.ts +1 -1
  117. package/dest/private_kernel/hints/index.js +1 -1
  118. package/dest/private_kernel/hints/private_kernel_reset_private_inputs_builder.d.ts +4 -3
  119. package/dest/private_kernel/hints/private_kernel_reset_private_inputs_builder.d.ts.map +1 -1
  120. package/dest/private_kernel/hints/private_kernel_reset_private_inputs_builder.js +129 -68
  121. package/dest/private_kernel/hints/test_utils.d.ts +122 -0
  122. package/dest/private_kernel/hints/test_utils.d.ts.map +1 -0
  123. package/dest/private_kernel/hints/test_utils.js +203 -0
  124. package/dest/private_kernel/private_kernel_execution_prover.d.ts +3 -2
  125. package/dest/private_kernel/private_kernel_execution_prover.d.ts.map +1 -1
  126. package/dest/private_kernel/private_kernel_execution_prover.js +20 -15
  127. package/dest/private_kernel/private_kernel_oracle.d.ts +10 -6
  128. package/dest/private_kernel/private_kernel_oracle.d.ts.map +1 -1
  129. package/dest/private_kernel/private_kernel_oracle.js +19 -18
  130. package/dest/pxe.d.ts +85 -24
  131. package/dest/pxe.d.ts.map +1 -1
  132. package/dest/pxe.js +169 -86
  133. package/dest/storage/address_store/address_store.d.ts +1 -1
  134. package/dest/storage/address_store/address_store.d.ts.map +1 -1
  135. package/dest/storage/address_store/address_store.js +12 -11
  136. package/dest/storage/anchor_block_store/anchor_block_store.d.ts +9 -1
  137. package/dest/storage/anchor_block_store/anchor_block_store.d.ts.map +1 -1
  138. package/dest/storage/anchor_block_store/anchor_block_store.js +9 -2
  139. package/dest/storage/capsule_store/capsule_service.d.ts +21 -0
  140. package/dest/storage/capsule_store/capsule_service.d.ts.map +1 -0
  141. package/dest/storage/capsule_store/capsule_service.js +50 -0
  142. package/dest/storage/capsule_store/capsule_store.d.ts +9 -9
  143. package/dest/storage/capsule_store/capsule_store.d.ts.map +1 -1
  144. package/dest/storage/capsule_store/capsule_store.js +42 -36
  145. package/dest/storage/capsule_store/index.d.ts +2 -1
  146. package/dest/storage/capsule_store/index.d.ts.map +1 -1
  147. package/dest/storage/capsule_store/index.js +1 -0
  148. package/dest/storage/contract_store/contract_store.d.ts +42 -15
  149. package/dest/storage/contract_store/contract_store.d.ts.map +1 -1
  150. package/dest/storage/contract_store/contract_store.js +160 -73
  151. package/dest/storage/metadata.d.ts +1 -1
  152. package/dest/storage/metadata.js +1 -1
  153. package/dest/storage/note_store/note_store.d.ts +13 -3
  154. package/dest/storage/note_store/note_store.d.ts.map +1 -1
  155. package/dest/storage/note_store/note_store.js +147 -107
  156. package/dest/storage/private_event_store/private_event_store.d.ts +1 -1
  157. package/dest/storage/private_event_store/private_event_store.d.ts.map +1 -1
  158. package/dest/storage/private_event_store/private_event_store.js +87 -61
  159. package/dest/storage/tagging_store/recipient_tagging_store.d.ts +6 -6
  160. package/dest/storage/tagging_store/recipient_tagging_store.d.ts.map +1 -1
  161. package/dest/storage/tagging_store/recipient_tagging_store.js +31 -19
  162. package/dest/storage/tagging_store/sender_address_book_store.d.ts +1 -1
  163. package/dest/storage/tagging_store/sender_address_book_store.d.ts.map +1 -1
  164. package/dest/storage/tagging_store/sender_address_book_store.js +20 -14
  165. package/dest/storage/tagging_store/sender_tagging_store.d.ts +29 -28
  166. package/dest/storage/tagging_store/sender_tagging_store.d.ts.map +1 -1
  167. package/dest/storage/tagging_store/sender_tagging_store.js +233 -137
  168. package/dest/tagging/get_all_logs_by_tags.d.ts +1 -1
  169. package/dest/tagging/get_all_logs_by_tags.d.ts.map +1 -1
  170. package/dest/tagging/get_all_logs_by_tags.js +17 -3
  171. package/dest/tagging/index.d.ts +3 -3
  172. package/dest/tagging/index.d.ts.map +1 -1
  173. package/dest/tagging/index.js +1 -1
  174. package/dest/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.d.ts +4 -5
  175. package/dest/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.d.ts.map +1 -1
  176. package/dest/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.js +8 -22
  177. package/dest/tagging/recipient_sync/utils/find_highest_indexes.js +2 -2
  178. package/dest/tagging/recipient_sync/utils/load_logs_for_range.d.ts +6 -7
  179. package/dest/tagging/recipient_sync/utils/load_logs_for_range.d.ts.map +1 -1
  180. package/dest/tagging/recipient_sync/utils/load_logs_for_range.js +12 -11
  181. package/dest/tagging/sender_sync/sync_sender_tagging_indexes.d.ts +4 -8
  182. package/dest/tagging/sender_sync/sync_sender_tagging_indexes.d.ts.map +1 -1
  183. package/dest/tagging/sender_sync/sync_sender_tagging_indexes.js +13 -7
  184. package/dest/tagging/sender_sync/utils/get_status_change_of_pending.d.ts +4 -3
  185. package/dest/tagging/sender_sync/utils/get_status_change_of_pending.d.ts.map +1 -1
  186. package/dest/tagging/sender_sync/utils/get_status_change_of_pending.js +20 -10
  187. package/dest/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.d.ts +5 -7
  188. package/dest/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.d.ts.map +1 -1
  189. package/dest/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.js +36 -24
  190. package/package.json +25 -16
  191. package/src/bin/check_oracle_version.ts +4 -4
  192. package/src/block_synchronizer/block_stream_source.ts +52 -0
  193. package/src/block_synchronizer/block_synchronizer.ts +53 -22
  194. package/src/config/index.ts +3 -9
  195. package/src/config/package_info.ts +1 -1
  196. package/src/contract_function_simulator/contract_function_simulator.ts +367 -136
  197. package/src/contract_function_simulator/ephemeral_array_service.ts +110 -0
  198. package/src/contract_function_simulator/execution_tagging_index_cache.ts +19 -14
  199. package/src/contract_function_simulator/index.ts +1 -0
  200. package/src/contract_function_simulator/noir-structs/event_validation_request.ts +9 -9
  201. package/src/contract_function_simulator/noir-structs/log_retrieval_request.ts +1 -1
  202. package/src/contract_function_simulator/noir-structs/log_retrieval_response.ts +2 -5
  203. package/src/contract_function_simulator/noir-structs/note_validation_request.ts +4 -10
  204. package/src/contract_function_simulator/oracle/interfaces.ts +97 -59
  205. package/src/contract_function_simulator/oracle/legacy_oracle_mappings.ts +104 -0
  206. package/src/contract_function_simulator/oracle/oracle.ts +399 -144
  207. package/src/contract_function_simulator/oracle/private_execution.ts +4 -4
  208. package/src/contract_function_simulator/oracle/private_execution_oracle.ts +155 -190
  209. package/src/contract_function_simulator/oracle/utility_execution_oracle.ts +623 -172
  210. package/src/contract_function_simulator/pick_notes.ts +22 -3
  211. package/src/contract_function_simulator/proxied_contract_data_source.ts +8 -1
  212. package/src/contract_logging.ts +52 -0
  213. package/src/contract_sync/contract_sync_service.ts +176 -0
  214. package/src/contract_sync/{index.ts → helpers.ts} +22 -22
  215. package/src/debug/pxe_debug_utils.ts +48 -18
  216. package/src/entrypoints/client/bundle/index.ts +2 -0
  217. package/src/entrypoints/client/bundle/utils.ts +18 -18
  218. package/src/entrypoints/client/lazy/index.ts +2 -0
  219. package/src/entrypoints/client/lazy/utils.ts +19 -18
  220. package/src/entrypoints/pxe_creation_options.ts +9 -1
  221. package/src/entrypoints/server/index.ts +3 -2
  222. package/src/entrypoints/server/utils.ts +24 -29
  223. package/src/events/event_service.ts +34 -11
  224. package/src/events/private_event_filter_validator.ts +21 -1
  225. package/src/job_coordinator/job_coordinator.ts +4 -3
  226. package/src/logs/log_service.ts +77 -105
  227. package/src/messages/message_context_service.ts +44 -0
  228. package/src/notes/note_service.ts +24 -15
  229. package/src/notes_filter.ts +24 -0
  230. package/src/oracle_version.ts +20 -10
  231. package/src/private_kernel/hints/{compute_tx_include_by_timestamp.ts → compute_tx_expiration_timestamp.ts} +13 -13
  232. package/src/private_kernel/hints/index.ts +1 -1
  233. package/src/private_kernel/hints/private_kernel_reset_private_inputs_builder.ts +164 -117
  234. package/src/private_kernel/hints/test_utils.ts +325 -0
  235. package/src/private_kernel/private_kernel_execution_prover.ts +24 -19
  236. package/src/private_kernel/private_kernel_oracle.ts +21 -21
  237. package/src/pxe.ts +318 -143
  238. package/src/storage/address_store/address_store.ts +15 -15
  239. package/src/storage/anchor_block_store/anchor_block_store.ts +9 -1
  240. package/src/storage/capsule_store/capsule_service.ts +90 -0
  241. package/src/storage/capsule_store/capsule_store.ts +52 -34
  242. package/src/storage/capsule_store/index.ts +1 -0
  243. package/src/storage/contract_store/contract_store.ts +193 -81
  244. package/src/storage/metadata.ts +1 -1
  245. package/src/storage/note_store/note_store.ts +166 -132
  246. package/src/storage/private_event_store/private_event_store.ts +106 -81
  247. package/src/storage/tagging_store/recipient_tagging_store.ts +38 -24
  248. package/src/storage/tagging_store/sender_address_book_store.ts +20 -14
  249. package/src/storage/tagging_store/sender_tagging_store.ts +287 -156
  250. package/src/tagging/get_all_logs_by_tags.ts +28 -4
  251. package/src/tagging/index.ts +2 -2
  252. package/src/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.ts +12 -25
  253. package/src/tagging/recipient_sync/utils/find_highest_indexes.ts +2 -2
  254. package/src/tagging/recipient_sync/utils/load_logs_for_range.ts +10 -15
  255. package/src/tagging/sender_sync/sync_sender_tagging_indexes.ts +23 -10
  256. package/src/tagging/sender_sync/utils/get_status_change_of_pending.ts +26 -11
  257. package/src/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.ts +27 -26
  258. package/dest/contract_sync/index.d.ts +0 -23
  259. package/dest/contract_sync/index.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
@@ -1,5 +1,6 @@
1
1
  import { BlockNumber } from '@aztec/foundation/branded-types';
2
- import { type Logger, createLogger } from '@aztec/foundation/log';
2
+ import { type Logger, type LoggerBindings, createLogger } from '@aztec/foundation/log';
3
+ import { SerialQueue } from '@aztec/foundation/queue';
3
4
  import type { AztecAsyncKVStore } from '@aztec/kv-store';
4
5
  import type { L2TipsKVStore } from '@aztec/kv-store/stores';
5
6
  import { BlockHash, L2BlockStream, type L2BlockStreamEvent, type L2BlockStreamEventHandler } from '@aztec/stdlib/block';
@@ -7,9 +8,11 @@ import type { AztecNode } from '@aztec/stdlib/interfaces/client';
7
8
  import type { BlockHeader } from '@aztec/stdlib/tx';
8
9
 
9
10
  import type { BlockSynchronizerConfig } from '../config/index.js';
11
+ import type { ContractSyncService } from '../contract_sync/contract_sync_service.js';
10
12
  import type { AnchorBlockStore } from '../storage/anchor_block_store/anchor_block_store.js';
11
13
  import type { NoteStore } from '../storage/note_store/note_store.js';
12
14
  import type { PrivateEventStore } from '../storage/private_event_store/private_event_store.js';
15
+ import { blockStreamSourceFromAztecNode } from './block_stream_source.js';
13
16
 
14
17
  /**
15
18
  * The BlockSynchronizer class orchestrates synchronization between PXE and Aztec node, maintaining an up-to-date
@@ -19,6 +22,7 @@ import type { PrivateEventStore } from '../storage/private_event_store/private_e
19
22
  export class BlockSynchronizer implements L2BlockStreamEventHandler {
20
23
  private log: Logger;
21
24
  private isSyncing: Promise<void> | undefined;
25
+ private readonly eventQueue = new SerialQueue();
22
26
  protected readonly blockStream: L2BlockStream;
23
27
 
24
28
  constructor(
@@ -28,27 +32,36 @@ export class BlockSynchronizer implements L2BlockStreamEventHandler {
28
32
  private noteStore: NoteStore,
29
33
  private privateEventStore: PrivateEventStore,
30
34
  private l2TipsStore: L2TipsKVStore,
35
+ private contractSyncService: ContractSyncService,
31
36
  private config: Partial<BlockSynchronizerConfig> = {},
32
- loggerOrSuffix?: string | Logger,
37
+ bindings?: LoggerBindings,
33
38
  ) {
34
- this.log =
35
- !loggerOrSuffix || typeof loggerOrSuffix === 'string'
36
- ? createLogger(loggerOrSuffix ? `pxe:block_synchronizer:${loggerOrSuffix}` : `pxe:block_synchronizer`)
37
- : loggerOrSuffix;
39
+ this.log = createLogger('pxe:block_synchronizer', bindings);
38
40
  this.blockStream = this.createBlockStream(config);
41
+ this.eventQueue.start();
39
42
  }
40
43
 
41
44
  protected createBlockStream(config: Partial<BlockSynchronizerConfig>): L2BlockStream {
42
- return new L2BlockStream(this.node, this.l2TipsStore, this, createLogger('pxe:block_stream'), {
43
- batchSize: config.l2BlockBatchSize,
44
- // Skipping finalized blocks makes us sync much faster - we only need to download blocks other than the latest one
45
- // in order to detect reorgs, and there can be no reorgs on finalized block, making this safe.
46
- skipFinalized: true,
47
- });
45
+ return new L2BlockStream(
46
+ blockStreamSourceFromAztecNode(this.node),
47
+ this.l2TipsStore,
48
+ this,
49
+ createLogger('pxe:block_stream', this.log.getBindings()),
50
+ {
51
+ batchSize: config.l2BlockBatchSize,
52
+ // Skipping finalized blocks makes us sync much faster - we only need to download blocks other than the latest one
53
+ // in order to detect reorgs, and there can be no reorgs on finalized block, making this safe.
54
+ skipFinalized: true,
55
+ },
56
+ );
48
57
  }
49
58
 
50
- /** Handle events emitted by the block stream. */
51
- public async handleBlockStreamEvent(event: L2BlockStreamEvent): Promise<void> {
59
+ /** Handle events emitted by the block stream. Serialized to prevent concurrent mutations to anchor state. */
60
+ public handleBlockStreamEvent(event: L2BlockStreamEvent): Promise<void> {
61
+ return this.eventQueue.put(() => this.doHandleBlockStreamEvent(event));
62
+ }
63
+
64
+ private async doHandleBlockStreamEvent(event: L2BlockStreamEvent): Promise<void> {
52
65
  await this.l2TipsStore.handleBlockStreamEvent(event);
53
66
 
54
67
  switch (event.type) {
@@ -69,18 +82,22 @@ export class BlockSynchronizer implements L2BlockStreamEventHandler {
69
82
  }
70
83
  case 'chain-proven': {
71
84
  if (this.config.syncChainTip === 'proven') {
72
- const blockHeader = await this.node.getBlockHeader(BlockNumber(event.block.number));
73
- if (blockHeader) {
74
- await this.updateAnchorBlockHeader(blockHeader);
85
+ const block = await this.node.getBlock(BlockNumber(event.block.number));
86
+ if (block) {
87
+ await this.updateAnchorBlockHeader(block.header);
88
+ } else {
89
+ this.log.warn(`Block header not found for proven block ${event.block.number}, skipping anchor update`);
75
90
  }
76
91
  }
77
92
  break;
78
93
  }
79
94
  case 'chain-finalized': {
80
95
  if (this.config.syncChainTip === 'finalized') {
81
- const blockHeader = await this.node.getBlockHeader(BlockNumber(event.block.number));
82
- if (blockHeader) {
83
- await this.updateAnchorBlockHeader(blockHeader);
96
+ const block = await this.node.getBlock(BlockNumber(event.block.number));
97
+ if (block) {
98
+ await this.updateAnchorBlockHeader(block.header);
99
+ } else {
100
+ this.log.warn(`Block header not found for finalized block ${event.block.number}, skipping anchor update`);
84
101
  }
85
102
  }
86
103
  break;
@@ -101,7 +118,8 @@ export class BlockSynchronizer implements L2BlockStreamEventHandler {
101
118
  // Note that the following is not necessarily the anchor block that will be used in the transaction - if
102
119
  // the chain has already moved past the reorg, we'll also see blocks-added events that will push the anchor
103
120
  // forward.
104
- const newAnchorBlockHeader = await this.node.getBlockHeader(BlockHash.fromString(event.block.hash));
121
+ const newAnchorBlock = await this.node.getBlock(BlockHash.fromString(event.block.hash));
122
+ const newAnchorBlockHeader = newAnchorBlock?.header;
105
123
 
106
124
  if (!newAnchorBlockHeader) {
107
125
  throw new Error(
@@ -122,6 +140,10 @@ export class BlockSynchronizer implements L2BlockStreamEventHandler {
122
140
 
123
141
  /** Updates the anchor block header to the target block */
124
142
  private async updateAnchorBlockHeader(blockHeader: BlockHeader) {
143
+ // Whenever the anchor block header is updated, we need to synchronize the private state of contracts again.
144
+ // Therefore, we clear the contract synchronization cache here such that the sync is re-triggered upon new
145
+ // execution.
146
+ this.contractSyncService.wipe();
125
147
  this.log.verbose(`Updated pxe last block to ${blockHeader.getBlockNumber()}`, blockHeader.toInspect());
126
148
  await this.anchorBlockStore.setHeader(blockHeader);
127
149
  }
@@ -143,6 +165,8 @@ export class BlockSynchronizer implements L2BlockStreamEventHandler {
143
165
  }
144
166
 
145
167
  this.log.debug(`Syncing PXE with the node`);
168
+ // Capture the promise locally so we always await the exact promise we created, even if this.isSyncing is modified
169
+ // between assignment and await (e.g. due to future refactors introducing a yield point).
146
170
  const isSyncing = this.doSync();
147
171
  this.isSyncing = isSyncing;
148
172
  try {
@@ -152,6 +176,13 @@ export class BlockSynchronizer implements L2BlockStreamEventHandler {
152
176
  }
153
177
  }
154
178
 
179
+ /** Stops the block synchronizer, waiting for any in-progress sync and queued events to complete. */
180
+ public async stop() {
181
+ await this.isSyncing;
182
+ await this.blockStream.stop();
183
+ await this.eventQueue.end();
184
+ }
185
+
155
186
  private async doSync() {
156
187
  let currentHeader;
157
188
 
@@ -162,7 +193,7 @@ export class BlockSynchronizer implements L2BlockStreamEventHandler {
162
193
  }
163
194
  if (!currentHeader) {
164
195
  // REFACTOR: We should know the header of the genesis block without having to request it from the node.
165
- await this.anchorBlockStore.setHeader((await this.node.getBlockHeader(BlockNumber.ZERO))!);
196
+ await this.anchorBlockStore.setHeader((await this.node.getBlock(BlockNumber.ZERO))!.header);
166
197
  }
167
198
  await this.blockStream.sync();
168
199
  }
@@ -1,12 +1,13 @@
1
1
  import {
2
2
  type ConfigMappingsType,
3
3
  booleanConfigHelper,
4
+ enumConfigHelper,
4
5
  getConfigFromMappings,
5
6
  numberConfigHelper,
6
7
  parseBooleanEnv,
7
8
  } from '@aztec/foundation/config';
8
- import { type DataStoreConfig, dataConfigMappings } from '@aztec/kv-store/config';
9
9
  import { type ChainConfig, chainConfigMappings } from '@aztec/stdlib/config';
10
+ import { type DataStoreConfig, dataConfigMappings } from '@aztec/stdlib/kv-store';
10
11
 
11
12
  export { getPackageInfo } from './package_info.js';
12
13
 
@@ -58,14 +59,7 @@ export const pxeConfigMappings: ConfigMappingsType<PXEConfig> = {
58
59
  syncChainTip: {
59
60
  env: 'PXE_SYNC_CHAIN_TIP',
60
61
  description: 'Which chain tip to sync to (proposed, checkpointed, proven, finalized)',
61
- defaultValue: 'proposed',
62
- parseEnv: (val: string) => {
63
- const allowedValues = ['proposed', 'checkpointed', 'proven', 'finalized'];
64
- if (allowedValues.includes(val)) {
65
- return val;
66
- }
67
- throw new Error(`Invalid value for PXE_SYNC_CHAIN_TIP: ${val}. Allowed values are: ${allowedValues.join(', ')}`);
68
- },
62
+ ...enumConfigHelper(['proposed', 'checkpointed', 'proven', 'finalized'], 'proposed'),
69
63
  },
70
64
  };
71
65
 
@@ -1,3 +1,3 @@
1
1
  export function getPackageInfo() {
2
- return { version: '4.0.0', name: '@aztec/pxe' };
2
+ return { version: '5.0.0', name: '@aztec/pxe' };
3
3
  }