@aztec/stdlib 6.0.0-nightly.20260605 → 6.0.0-nightly.20260721

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 (499) hide show
  1. package/dest/abi/buffer.d.ts +6 -2
  2. package/dest/abi/buffer.d.ts.map +1 -1
  3. package/dest/abi/buffer.js +13 -1
  4. package/dest/avm/avm.js +1 -1
  5. package/dest/avm/avm_proving_request.d.ts +70 -70
  6. package/dest/avm/index.d.ts +1 -6
  7. package/dest/avm/index.d.ts.map +1 -1
  8. package/dest/avm/index.js +0 -5
  9. package/dest/aztec-address/index.d.ts +35 -5
  10. package/dest/aztec-address/index.d.ts.map +1 -1
  11. package/dest/aztec-address/index.js +32 -8
  12. package/dest/block/attestation_info.d.ts +1 -1
  13. package/dest/block/attestation_info.d.ts.map +1 -1
  14. package/dest/block/attestation_info.js +7 -4
  15. package/dest/block/l2_block_source.d.ts +46 -23
  16. package/dest/block/l2_block_source.d.ts.map +1 -1
  17. package/dest/block/l2_block_source.js +15 -1
  18. package/dest/block/l2_block_stream/event_driven_l2_block_stream.d.ts +39 -0
  19. package/dest/block/l2_block_stream/event_driven_l2_block_stream.d.ts.map +1 -0
  20. package/dest/block/l2_block_stream/event_driven_l2_block_stream.js +165 -0
  21. package/dest/block/l2_block_stream/index.d.ts +2 -1
  22. package/dest/block/l2_block_stream/index.d.ts.map +1 -1
  23. package/dest/block/l2_block_stream/index.js +1 -0
  24. package/dest/block/l2_block_stream/interfaces.d.ts +81 -11
  25. package/dest/block/l2_block_stream/interfaces.d.ts.map +1 -1
  26. package/dest/block/l2_block_stream/interfaces.js +25 -1
  27. package/dest/block/l2_block_stream/l2_block_stream.d.ts +23 -15
  28. package/dest/block/l2_block_stream/l2_block_stream.d.ts.map +1 -1
  29. package/dest/block/l2_block_stream/l2_block_stream.js +149 -152
  30. package/dest/block/l2_block_stream/l2_tips_memory_store.d.ts +6 -12
  31. package/dest/block/l2_block_stream/l2_tips_memory_store.d.ts.map +1 -1
  32. package/dest/block/l2_block_stream/l2_tips_memory_store.js +8 -32
  33. package/dest/block/l2_block_stream/l2_tips_store_base.d.ts +17 -18
  34. package/dest/block/l2_block_stream/l2_tips_store_base.d.ts.map +1 -1
  35. package/dest/block/l2_block_stream/l2_tips_store_base.js +70 -58
  36. package/dest/block/proposal/attestations_and_signers.d.ts +19 -1
  37. package/dest/block/proposal/attestations_and_signers.d.ts.map +1 -1
  38. package/dest/block/proposal/attestations_and_signers.js +47 -7
  39. package/dest/block/test/l2_tips_store_test_suite.d.ts +1 -1
  40. package/dest/block/test/l2_tips_store_test_suite.d.ts.map +1 -1
  41. package/dest/block/test/l2_tips_store_test_suite.js +296 -37
  42. package/dest/block/validate_block_result.d.ts +16 -1
  43. package/dest/block/validate_block_result.d.ts.map +1 -1
  44. package/dest/block/validate_block_result.js +18 -3
  45. package/dest/checkpoint/checkpoint.js +2 -2
  46. package/dest/checkpoint/index.d.ts +2 -1
  47. package/dest/checkpoint/index.d.ts.map +1 -1
  48. package/dest/checkpoint/index.js +1 -0
  49. package/dest/checkpoint/simulation_overrides.d.ts +61 -0
  50. package/dest/checkpoint/simulation_overrides.d.ts.map +1 -0
  51. package/dest/checkpoint/simulation_overrides.js +98 -0
  52. package/dest/checkpoint/validate.d.ts +11 -3
  53. package/dest/checkpoint/validate.d.ts.map +1 -1
  54. package/dest/checkpoint/validate.js +9 -6
  55. package/dest/config/index.d.ts +2 -1
  56. package/dest/config/index.d.ts.map +1 -1
  57. package/dest/config/index.js +1 -0
  58. package/dest/config/network-consensus-config.d.ts +72 -0
  59. package/dest/config/network-consensus-config.d.ts.map +1 -0
  60. package/dest/config/network-consensus-config.js +223 -0
  61. package/dest/config/sequencer-config.d.ts +4 -2
  62. package/dest/config/sequencer-config.d.ts.map +1 -1
  63. package/dest/config/sequencer-config.js +22 -3
  64. package/dest/contract/contract_address.d.ts +5 -4
  65. package/dest/contract/contract_address.d.ts.map +1 -1
  66. package/dest/contract/contract_class.d.ts +1 -1
  67. package/dest/contract/contract_class.d.ts.map +1 -1
  68. package/dest/contract/contract_class.js +3 -2
  69. package/dest/contract/contract_instance.d.ts +16 -2
  70. package/dest/contract/contract_instance.d.ts.map +1 -1
  71. package/dest/contract/contract_instance.js +45 -0
  72. package/dest/contract/index.d.ts +1 -2
  73. package/dest/contract/index.d.ts.map +1 -1
  74. package/dest/contract/index.js +0 -1
  75. package/dest/contract/interfaces/contract_data_source.d.ts +3 -5
  76. package/dest/contract/interfaces/contract_data_source.d.ts.map +1 -1
  77. package/dest/contract/interfaces/contract_instance.d.ts +71 -10
  78. package/dest/contract/interfaces/contract_instance.d.ts.map +1 -1
  79. package/dest/contract/interfaces/contract_instance.js +7 -2
  80. package/dest/contract/interfaces/node-info.d.ts +11 -1
  81. package/dest/contract/interfaces/node-info.d.ts.map +1 -1
  82. package/dest/contract/interfaces/node-info.js +7 -1
  83. package/dest/contract/partial_address.d.ts +9 -3
  84. package/dest/contract/partial_address.d.ts.map +1 -1
  85. package/dest/contract/partial_address.js +8 -2
  86. package/dest/database-version/version_manager.d.ts +18 -4
  87. package/dest/database-version/version_manager.d.ts.map +1 -1
  88. package/dest/database-version/version_manager.js +76 -6
  89. package/dest/deserialization/index.d.ts +35 -3
  90. package/dest/deserialization/index.d.ts.map +1 -1
  91. package/dest/deserialization/index.js +32 -1
  92. package/dest/file-store/factory.d.ts +1 -1
  93. package/dest/file-store/factory.d.ts.map +1 -1
  94. package/dest/file-store/factory.js +7 -0
  95. package/dest/file-store/index.d.ts +2 -1
  96. package/dest/file-store/index.d.ts.map +1 -1
  97. package/dest/file-store/index.js +1 -0
  98. package/dest/file-store/memory.d.ts +24 -0
  99. package/dest/file-store/memory.d.ts.map +1 -0
  100. package/dest/file-store/memory.js +80 -0
  101. package/dest/gas/gas_settings.d.ts +7 -13
  102. package/dest/gas/gas_settings.d.ts.map +1 -1
  103. package/dest/gas/gas_settings.js +9 -16
  104. package/dest/gas/index.d.ts +2 -1
  105. package/dest/gas/index.d.ts.map +1 -1
  106. package/dest/gas/index.js +1 -0
  107. package/dest/gas/tx_gas_limits.d.ts +72 -0
  108. package/dest/gas/tx_gas_limits.d.ts.map +1 -0
  109. package/dest/gas/tx_gas_limits.js +85 -0
  110. package/dest/ha-signing/config.d.ts +19 -5
  111. package/dest/ha-signing/config.d.ts.map +1 -1
  112. package/dest/ha-signing/config.js +9 -3
  113. package/dest/ha-signing/local_config.d.ts +10 -2
  114. package/dest/ha-signing/local_config.d.ts.map +1 -1
  115. package/dest/ha-signing/local_config.js +8 -2
  116. package/dest/interfaces/archiver.d.ts +7 -9
  117. package/dest/interfaces/archiver.d.ts.map +1 -1
  118. package/dest/interfaces/archiver.js +3 -2
  119. package/dest/interfaces/aztec-node-admin.d.ts +24 -17
  120. package/dest/interfaces/aztec-node-admin.d.ts.map +1 -1
  121. package/dest/interfaces/aztec-node-admin.js +1 -1
  122. package/dest/interfaces/aztec-node-debug.d.ts +40 -2
  123. package/dest/interfaces/aztec-node-debug.d.ts.map +1 -1
  124. package/dest/interfaces/aztec-node-debug.js +29 -1
  125. package/dest/interfaces/aztec-node.d.ts +69 -28
  126. package/dest/interfaces/aztec-node.d.ts.map +1 -1
  127. package/dest/interfaces/aztec-node.js +56 -20
  128. package/dest/interfaces/block-builder.d.ts +3 -1
  129. package/dest/interfaces/block-builder.d.ts.map +1 -1
  130. package/dest/interfaces/chain_tips.d.ts +8 -47
  131. package/dest/interfaces/chain_tips.d.ts.map +1 -1
  132. package/dest/interfaces/chain_tips.js +1 -6
  133. package/dest/interfaces/checkpoint_parameter.d.ts +3 -3
  134. package/dest/interfaces/checkpoint_parameter.d.ts.map +1 -1
  135. package/dest/interfaces/checkpoint_parameter.js +3 -3
  136. package/dest/interfaces/client.d.ts +2 -1
  137. package/dest/interfaces/client.d.ts.map +1 -1
  138. package/dest/interfaces/configs.d.ts +27 -6
  139. package/dest/interfaces/configs.d.ts.map +1 -1
  140. package/dest/interfaces/configs.js +5 -1
  141. package/dest/interfaces/get_tx_by_hash_options.d.ts +9 -0
  142. package/dest/interfaces/get_tx_by_hash_options.d.ts.map +1 -0
  143. package/dest/interfaces/get_tx_by_hash_options.js +4 -0
  144. package/dest/interfaces/merkle_tree_operations.d.ts +8 -3
  145. package/dest/interfaces/merkle_tree_operations.d.ts.map +1 -1
  146. package/dest/interfaces/p2p.d.ts +38 -9
  147. package/dest/interfaces/p2p.d.ts.map +1 -1
  148. package/dest/interfaces/p2p.js +14 -2
  149. package/dest/interfaces/private_kernel_prover.d.ts +71 -12
  150. package/dest/interfaces/private_kernel_prover.d.ts.map +1 -1
  151. package/dest/interfaces/prover-client.d.ts +2 -3
  152. package/dest/interfaces/prover-client.d.ts.map +1 -1
  153. package/dest/interfaces/prover-node.d.ts +12 -8
  154. package/dest/interfaces/prover-node.d.ts.map +1 -1
  155. package/dest/interfaces/prover-node.js +24 -17
  156. package/dest/interfaces/proving-job.d.ts +4 -4
  157. package/dest/interfaces/proving-job.d.ts.map +1 -1
  158. package/dest/interfaces/proving-job.js +2 -2
  159. package/dest/interfaces/server.d.ts +1 -3
  160. package/dest/interfaces/server.d.ts.map +1 -1
  161. package/dest/interfaces/server.js +0 -2
  162. package/dest/interfaces/server_circuit_prover.d.ts +3 -3
  163. package/dest/interfaces/server_circuit_prover.d.ts.map +1 -1
  164. package/dest/interfaces/validator.d.ts +15 -4
  165. package/dest/interfaces/validator.d.ts.map +1 -1
  166. package/dest/interfaces/validator.js +3 -1
  167. package/dest/interfaces/world_state.d.ts +14 -1
  168. package/dest/interfaces/world_state.d.ts.map +1 -1
  169. package/dest/kernel/hints/find_private_kernel_reset_dimensions.d.ts +8 -2
  170. package/dest/kernel/hints/find_private_kernel_reset_dimensions.d.ts.map +1 -1
  171. package/dest/kernel/hints/find_private_kernel_reset_dimensions.js +12 -74
  172. package/dest/kernel/hints/index.d.ts +1 -2
  173. package/dest/kernel/hints/index.d.ts.map +1 -1
  174. package/dest/kernel/hints/index.js +0 -1
  175. package/dest/kernel/hints/read_request.js +1 -1
  176. package/dest/kernel/index.d.ts +6 -2
  177. package/dest/kernel/index.d.ts.map +1 -1
  178. package/dest/kernel/index.js +5 -1
  179. package/dest/kernel/log_hash.d.ts +1 -1
  180. package/dest/kernel/log_hash.d.ts.map +1 -1
  181. package/dest/kernel/log_hash.js +2 -2
  182. package/dest/kernel/note_hash.js +1 -1
  183. package/dest/kernel/nullifier.js +1 -1
  184. package/dest/kernel/private_circuit_public_inputs.d.ts +13 -3
  185. package/dest/kernel/private_circuit_public_inputs.d.ts.map +1 -1
  186. package/dest/kernel/private_circuit_public_inputs.js +14 -7
  187. package/dest/kernel/private_context_inputs.d.ts +4 -3
  188. package/dest/kernel/private_context_inputs.d.ts.map +1 -1
  189. package/dest/kernel/private_context_inputs.js +7 -3
  190. package/dest/kernel/private_kernel_circuit_public_inputs.d.ts +7 -9
  191. package/dest/kernel/private_kernel_circuit_public_inputs.d.ts.map +1 -1
  192. package/dest/kernel/private_kernel_circuit_public_inputs.js +10 -7
  193. package/dest/kernel/private_kernel_init_2_circuit_private_inputs.d.ts +2 -3
  194. package/dest/kernel/private_kernel_init_2_circuit_private_inputs.d.ts.map +1 -1
  195. package/dest/kernel/private_kernel_init_2_circuit_private_inputs.js +3 -5
  196. package/dest/kernel/private_kernel_init_3_circuit_private_inputs.d.ts +2 -3
  197. package/dest/kernel/private_kernel_init_3_circuit_private_inputs.d.ts.map +1 -1
  198. package/dest/kernel/private_kernel_init_3_circuit_private_inputs.js +3 -5
  199. package/dest/kernel/private_kernel_init_4_circuit_private_inputs.d.ts +24 -0
  200. package/dest/kernel/private_kernel_init_4_circuit_private_inputs.d.ts.map +1 -0
  201. package/dest/kernel/private_kernel_init_4_circuit_private_inputs.js +37 -0
  202. package/dest/kernel/private_kernel_init_5_circuit_private_inputs.d.ts +25 -0
  203. package/dest/kernel/private_kernel_init_5_circuit_private_inputs.d.ts.map +1 -0
  204. package/dest/kernel/private_kernel_init_5_circuit_private_inputs.js +39 -0
  205. package/dest/kernel/private_kernel_init_circuit_private_inputs.d.ts +1 -9
  206. package/dest/kernel/private_kernel_init_circuit_private_inputs.d.ts.map +1 -1
  207. package/dest/kernel/private_kernel_init_circuit_private_inputs.js +2 -6
  208. package/dest/kernel/private_kernel_inner_4_circuit_private_inputs.d.ts +18 -0
  209. package/dest/kernel/private_kernel_inner_4_circuit_private_inputs.d.ts.map +1 -0
  210. package/dest/kernel/private_kernel_inner_4_circuit_private_inputs.js +27 -0
  211. package/dest/kernel/private_kernel_inner_5_circuit_private_inputs.d.ts +19 -0
  212. package/dest/kernel/private_kernel_inner_5_circuit_private_inputs.d.ts.map +1 -0
  213. package/dest/kernel/private_kernel_inner_5_circuit_private_inputs.js +29 -0
  214. package/dest/kernel/private_kernel_prover_output.d.ts +4 -1
  215. package/dest/kernel/private_kernel_prover_output.d.ts.map +1 -1
  216. package/dest/kernel/private_kernel_prover_output.js +4 -1
  217. package/dest/kernel/private_kernel_reset_dimensions.d.ts +7 -8
  218. package/dest/kernel/private_kernel_reset_dimensions.d.ts.map +1 -1
  219. package/dest/kernel/private_kernel_reset_tail_circuit_private_inputs.d.ts +29 -0
  220. package/dest/kernel/private_kernel_reset_tail_circuit_private_inputs.d.ts.map +1 -0
  221. package/dest/kernel/private_kernel_reset_tail_circuit_private_inputs.js +36 -0
  222. package/dest/kernel/private_kernel_simulated_output.d.ts +1 -7
  223. package/dest/kernel/private_kernel_simulated_output.d.ts.map +1 -1
  224. package/dest/kernel/private_kernel_simulated_output.js +2 -1
  225. package/dest/kernel/private_log_data.d.ts +1 -1
  226. package/dest/kernel/private_log_data.d.ts.map +1 -1
  227. package/dest/kernel/private_log_data.js +1 -1
  228. package/dest/kernel/utils/index.d.ts +1 -2
  229. package/dest/kernel/utils/index.d.ts.map +1 -1
  230. package/dest/kernel/utils/index.js +0 -1
  231. package/dest/keys/derivation.d.ts +41 -5
  232. package/dest/keys/derivation.d.ts.map +1 -1
  233. package/dest/keys/derivation.js +53 -23
  234. package/dest/logs/app_tagging_secret.d.ts +30 -7
  235. package/dest/logs/app_tagging_secret.d.ts.map +1 -1
  236. package/dest/logs/app_tagging_secret.js +44 -28
  237. package/dest/logs/app_tagging_secret_kind.js +1 -1
  238. package/dest/logs/contract_class_log.d.ts +1 -2
  239. package/dest/logs/contract_class_log.d.ts.map +1 -1
  240. package/dest/logs/contract_class_log.js +0 -4
  241. package/dest/logs/message_context.d.ts +5 -15
  242. package/dest/logs/message_context.d.ts.map +1 -1
  243. package/dest/logs/message_context.js +1 -66
  244. package/dest/logs/pending_tagged_log.d.ts +6 -8
  245. package/dest/logs/pending_tagged_log.d.ts.map +1 -1
  246. package/dest/logs/pending_tagged_log.js +1 -31
  247. package/dest/logs/shared_secret_derivation.d.ts +19 -6
  248. package/dest/logs/shared_secret_derivation.d.ts.map +1 -1
  249. package/dest/logs/shared_secret_derivation.js +26 -11
  250. package/dest/p2p/attestation_utils.d.ts +1 -1
  251. package/dest/p2p/attestation_utils.d.ts.map +1 -1
  252. package/dest/p2p/attestation_utils.js +8 -1
  253. package/dest/p2p/checkpoint_attestation.d.ts +10 -1
  254. package/dest/p2p/checkpoint_attestation.d.ts.map +1 -1
  255. package/dest/p2p/checkpoint_attestation.js +10 -0
  256. package/dest/p2p/checkpoint_proposal.d.ts +2 -1
  257. package/dest/p2p/checkpoint_proposal.d.ts.map +1 -1
  258. package/dest/p2p/consensus_payload.d.ts +2 -1
  259. package/dest/p2p/consensus_payload.d.ts.map +1 -1
  260. package/dest/p2p/index.d.ts +1 -2
  261. package/dest/p2p/index.d.ts.map +1 -1
  262. package/dest/p2p/index.js +0 -1
  263. package/dest/p2p/signature_utils.d.ts +10 -1
  264. package/dest/p2p/signature_utils.d.ts.map +1 -1
  265. package/dest/p2p/signature_utils.js +9 -1
  266. package/dest/rollup/avm_proof_data.d.ts +3 -3
  267. package/dest/rollup/avm_proof_data.d.ts.map +1 -1
  268. package/dest/rollup/checkpoint_header.d.ts +8 -3
  269. package/dest/rollup/checkpoint_header.d.ts.map +1 -1
  270. package/dest/rollup/checkpoint_header.js +20 -10
  271. package/dest/stats/stats.d.ts +2 -2
  272. package/dest/stats/stats.d.ts.map +1 -1
  273. package/dest/tests/factories.d.ts +1 -27
  274. package/dest/tests/factories.d.ts.map +1 -1
  275. package/dest/tests/factories.js +10 -45
  276. package/dest/tests/mocks.d.ts +1 -1
  277. package/dest/tests/mocks.d.ts.map +1 -1
  278. package/dest/tests/mocks.js +3 -2
  279. package/dest/timetable/budgets.d.ts +57 -0
  280. package/dest/timetable/budgets.d.ts.map +1 -0
  281. package/dest/timetable/budgets.js +56 -0
  282. package/dest/timetable/build_proposer_timetable.d.ts +21 -0
  283. package/dest/timetable/build_proposer_timetable.d.ts.map +1 -0
  284. package/dest/timetable/build_proposer_timetable.js +17 -0
  285. package/dest/timetable/consensus_timetable.d.ts +70 -0
  286. package/dest/timetable/consensus_timetable.d.ts.map +1 -0
  287. package/dest/timetable/consensus_timetable.js +89 -0
  288. package/dest/timetable/index.d.ts +5 -84
  289. package/dest/timetable/index.d.ts.map +1 -1
  290. package/dest/timetable/index.js +4 -209
  291. package/dest/timetable/proposer_timetable.d.ts +106 -0
  292. package/dest/timetable/proposer_timetable.d.ts.map +1 -0
  293. package/dest/timetable/proposer_timetable.js +132 -0
  294. package/dest/trees/nullifier_membership_witness.d.ts +5 -8
  295. package/dest/trees/nullifier_membership_witness.d.ts.map +1 -1
  296. package/dest/trees/nullifier_membership_witness.js +0 -9
  297. package/dest/trees/public_data_witness.d.ts +7 -17
  298. package/dest/trees/public_data_witness.d.ts.map +1 -1
  299. package/dest/trees/public_data_witness.js +0 -27
  300. package/dest/tx/execution_payload.d.ts +1 -1
  301. package/dest/tx/execution_payload.d.ts.map +1 -1
  302. package/dest/tx/execution_payload.js +1 -1
  303. package/dest/tx/fee_provider.d.ts +2 -2
  304. package/dest/tx/fee_provider.d.ts.map +1 -1
  305. package/dest/tx/global_variable_builder.d.ts +2 -12
  306. package/dest/tx/global_variable_builder.d.ts.map +1 -1
  307. package/dest/tx/global_variables.js +2 -2
  308. package/dest/tx/index.d.ts +1 -2
  309. package/dest/tx/index.d.ts.map +1 -1
  310. package/dest/tx/index.js +0 -1
  311. package/dest/tx/private_tx_constant_data.d.ts +18 -2
  312. package/dest/tx/private_tx_constant_data.d.ts.map +1 -1
  313. package/dest/tx/private_tx_constant_data.js +13 -4
  314. package/dest/tx/profiling.d.ts +1 -1
  315. package/dest/tx/profiling.d.ts.map +1 -1
  316. package/dest/tx/profiling.js +2 -0
  317. package/dest/tx/simulated_tx.d.ts +10 -6
  318. package/dest/tx/simulated_tx.d.ts.map +1 -1
  319. package/dest/tx/tx.d.ts +9 -1
  320. package/dest/tx/tx.d.ts.map +1 -1
  321. package/dest/tx/tx.js +15 -0
  322. package/dest/tx/validator/error_texts.d.ts +2 -2
  323. package/dest/tx/validator/error_texts.d.ts.map +1 -1
  324. package/dest/tx/validator/error_texts.js +1 -1
  325. package/dest/world-state/world_state_revision.d.ts +1 -18
  326. package/dest/world-state/world_state_revision.d.ts.map +1 -1
  327. package/dest/world-state/world_state_revision.js +0 -20
  328. package/package.json +8 -8
  329. package/src/abi/buffer.ts +13 -1
  330. package/src/avm/avm.ts +1 -1
  331. package/src/avm/index.ts +0 -5
  332. package/src/aztec-address/index.ts +36 -6
  333. package/src/block/attestation_info.ts +7 -2
  334. package/src/block/l2_block_source.ts +67 -13
  335. package/src/block/l2_block_stream/event_driven_l2_block_stream.ts +207 -0
  336. package/src/block/l2_block_stream/index.ts +1 -0
  337. package/src/block/l2_block_stream/interfaces.ts +96 -10
  338. package/src/block/l2_block_stream/l2_block_stream.ts +216 -175
  339. package/src/block/l2_block_stream/l2_tips_memory_store.ts +12 -41
  340. package/src/block/l2_block_stream/l2_tips_store_base.ts +84 -93
  341. package/src/block/proposal/attestations_and_signers.ts +53 -7
  342. package/src/block/test/l2_tips_store_test_suite.ts +270 -28
  343. package/src/block/validate_block_result.ts +48 -2
  344. package/src/checkpoint/checkpoint.ts +2 -2
  345. package/src/checkpoint/index.ts +1 -0
  346. package/src/checkpoint/simulation_overrides.ts +171 -0
  347. package/src/checkpoint/validate.ts +16 -6
  348. package/src/config/index.ts +1 -0
  349. package/src/config/network-consensus-config.ts +291 -0
  350. package/src/config/sequencer-config.ts +36 -5
  351. package/src/contract/contract_address.ts +4 -3
  352. package/src/contract/contract_class.ts +3 -2
  353. package/src/contract/contract_instance.ts +62 -1
  354. package/src/contract/index.ts +0 -1
  355. package/src/contract/interfaces/contract_data_source.ts +2 -4
  356. package/src/contract/interfaces/contract_instance.ts +26 -8
  357. package/src/contract/interfaces/node-info.ts +11 -0
  358. package/src/contract/partial_address.ts +8 -2
  359. package/src/database-version/version_manager.ts +96 -6
  360. package/src/deserialization/index.ts +35 -2
  361. package/src/file-store/factory.ts +7 -0
  362. package/src/file-store/index.ts +1 -0
  363. package/src/file-store/memory.ts +94 -0
  364. package/src/gas/README.md +92 -0
  365. package/src/gas/gas_settings.ts +11 -21
  366. package/src/gas/index.ts +1 -0
  367. package/src/gas/tx_gas_limits.ts +123 -0
  368. package/src/ha-signing/config.ts +23 -5
  369. package/src/ha-signing/local_config.ts +20 -1
  370. package/src/interfaces/archiver.ts +8 -9
  371. package/src/interfaces/aztec-node-admin.ts +1 -1
  372. package/src/interfaces/aztec-node-debug.ts +54 -2
  373. package/src/interfaces/aztec-node.ts +121 -43
  374. package/src/interfaces/block-builder.ts +2 -0
  375. package/src/interfaces/chain_tips.ts +8 -16
  376. package/src/interfaces/checkpoint_parameter.ts +3 -3
  377. package/src/interfaces/client.ts +1 -0
  378. package/src/interfaces/configs.ts +27 -6
  379. package/src/interfaces/get_tx_by_hash_options.ts +14 -0
  380. package/src/interfaces/merkle_tree_operations.ts +8 -2
  381. package/src/interfaces/p2p.ts +29 -9
  382. package/src/interfaces/private_kernel_prover.ts +104 -13
  383. package/src/interfaces/prover-client.ts +1 -3
  384. package/src/interfaces/prover-node.ts +32 -17
  385. package/src/interfaces/proving-job.ts +3 -3
  386. package/src/interfaces/server.ts +0 -2
  387. package/src/interfaces/server_circuit_prover.ts +2 -2
  388. package/src/interfaces/validator.ts +11 -0
  389. package/src/interfaces/world_state.ts +14 -0
  390. package/src/kernel/hints/find_private_kernel_reset_dimensions.ts +22 -112
  391. package/src/kernel/hints/index.ts +0 -1
  392. package/src/kernel/hints/read_request.ts +1 -1
  393. package/src/kernel/index.ts +5 -1
  394. package/src/kernel/log_hash.ts +5 -2
  395. package/src/kernel/note_hash.ts +1 -1
  396. package/src/kernel/nullifier.ts +1 -1
  397. package/src/kernel/private_circuit_public_inputs.ts +12 -1
  398. package/src/kernel/private_context_inputs.ts +10 -3
  399. package/src/kernel/private_kernel_circuit_public_inputs.ts +9 -7
  400. package/src/kernel/private_kernel_init_2_circuit_private_inputs.ts +0 -3
  401. package/src/kernel/private_kernel_init_3_circuit_private_inputs.ts +0 -3
  402. package/src/kernel/private_kernel_init_4_circuit_private_inputs.ts +52 -0
  403. package/src/kernel/private_kernel_init_5_circuit_private_inputs.ts +55 -0
  404. package/src/kernel/private_kernel_init_circuit_private_inputs.ts +0 -6
  405. package/src/kernel/private_kernel_inner_4_circuit_private_inputs.ts +39 -0
  406. package/src/kernel/private_kernel_inner_5_circuit_private_inputs.ts +42 -0
  407. package/src/kernel/private_kernel_prover_output.ts +4 -0
  408. package/src/kernel/private_kernel_reset_dimensions.ts +15 -5
  409. package/src/kernel/private_kernel_reset_tail_circuit_private_inputs.ts +69 -0
  410. package/src/kernel/private_kernel_simulated_output.ts +0 -7
  411. package/src/kernel/private_log_data.ts +4 -1
  412. package/src/kernel/utils/index.ts +0 -1
  413. package/src/keys/derivation.ts +71 -21
  414. package/src/logs/app_tagging_secret.ts +56 -24
  415. package/src/logs/app_tagging_secret_kind.ts +1 -1
  416. package/src/logs/contract_class_log.ts +0 -9
  417. package/src/logs/message_context.ts +7 -65
  418. package/src/logs/pending_tagged_log.ts +6 -33
  419. package/src/logs/shared_secret_derivation.ts +31 -15
  420. package/src/p2p/attestation_utils.ts +8 -1
  421. package/src/p2p/checkpoint_attestation.ts +12 -0
  422. package/src/p2p/index.ts +0 -1
  423. package/src/p2p/signature_utils.ts +9 -0
  424. package/src/rollup/avm_proof_data.ts +2 -2
  425. package/src/rollup/checkpoint_header.ts +16 -2
  426. package/src/stats/stats.ts +6 -2
  427. package/src/tests/factories.ts +13 -51
  428. package/src/tests/mocks.ts +7 -2
  429. package/src/timetable/README.md +609 -0
  430. package/src/timetable/budgets.ts +87 -0
  431. package/src/timetable/build_proposer_timetable.ts +42 -0
  432. package/src/timetable/consensus_timetable.ts +126 -0
  433. package/src/timetable/index.ts +4 -304
  434. package/src/timetable/proposer_timetable.ts +190 -0
  435. package/src/timetable/timetable-example.svg +108 -0
  436. package/src/trees/nullifier_membership_witness.ts +0 -11
  437. package/src/trees/public_data_witness.ts +0 -31
  438. package/src/tx/execution_payload.ts +2 -1
  439. package/src/tx/fee_provider.ts +1 -1
  440. package/src/tx/global_variable_builder.ts +1 -17
  441. package/src/tx/global_variables.ts +2 -2
  442. package/src/tx/index.ts +0 -1
  443. package/src/tx/private_tx_constant_data.ts +25 -2
  444. package/src/tx/profiling.ts +2 -0
  445. package/src/tx/tx.ts +17 -0
  446. package/src/tx/validator/error_texts.ts +2 -1
  447. package/src/world-state/world_state_revision.ts +0 -33
  448. package/dest/avm/contract_storage_read.d.ts +0 -58
  449. package/dest/avm/contract_storage_read.d.ts.map +0 -1
  450. package/dest/avm/contract_storage_read.js +0 -65
  451. package/dest/avm/contract_storage_update_request.d.ts +0 -65
  452. package/dest/avm/contract_storage_update_request.d.ts.map +0 -1
  453. package/dest/avm/contract_storage_update_request.js +0 -80
  454. package/dest/avm/public_call_stack_item_compressed.d.ts +0 -43
  455. package/dest/avm/public_call_stack_item_compressed.d.ts.map +0 -1
  456. package/dest/avm/public_call_stack_item_compressed.js +0 -70
  457. package/dest/avm/public_data_update_request.d.ts +0 -62
  458. package/dest/avm/public_data_update_request.d.ts.map +0 -1
  459. package/dest/avm/public_data_update_request.js +0 -67
  460. package/dest/avm/public_inner_call_request.d.ts +0 -50
  461. package/dest/avm/public_inner_call_request.d.ts.map +0 -1
  462. package/dest/avm/public_inner_call_request.js +0 -74
  463. package/dest/contract/deployment_info.d.ts +0 -24
  464. package/dest/contract/deployment_info.d.ts.map +0 -1
  465. package/dest/contract/deployment_info.js +0 -3
  466. package/dest/interfaces/epoch-prover.d.ts +0 -57
  467. package/dest/interfaces/epoch-prover.d.ts.map +0 -1
  468. package/dest/interfaces/epoch-prover.js +0 -1
  469. package/dest/interfaces/prover-coordination.d.ts +0 -15
  470. package/dest/interfaces/prover-coordination.d.ts.map +0 -1
  471. package/dest/interfaces/prover-coordination.js +0 -1
  472. package/dest/kernel/hints/tree_leaf_read_request.d.ts +0 -14
  473. package/dest/kernel/hints/tree_leaf_read_request.d.ts.map +0 -1
  474. package/dest/kernel/hints/tree_leaf_read_request.js +0 -33
  475. package/dest/kernel/private_kernel_tail_circuit_private_inputs.d.ts +0 -47
  476. package/dest/kernel/private_kernel_tail_circuit_private_inputs.d.ts.map +0 -1
  477. package/dest/kernel/private_kernel_tail_circuit_private_inputs.js +0 -38
  478. package/dest/kernel/utils/optional_number.d.ts +0 -31
  479. package/dest/kernel/utils/optional_number.d.ts.map +0 -1
  480. package/dest/kernel/utils/optional_number.js +0 -42
  481. package/dest/p2p/interface.d.ts +0 -5
  482. package/dest/p2p/interface.d.ts.map +0 -1
  483. package/dest/p2p/interface.js +0 -1
  484. package/dest/tx/validator/empty_validator.d.ts +0 -5
  485. package/dest/tx/validator/empty_validator.d.ts.map +0 -1
  486. package/dest/tx/validator/empty_validator.js +0 -7
  487. package/src/avm/contract_storage_read.ts +0 -77
  488. package/src/avm/contract_storage_update_request.ts +0 -93
  489. package/src/avm/public_call_stack_item_compressed.ts +0 -113
  490. package/src/avm/public_data_update_request.ts +0 -106
  491. package/src/avm/public_inner_call_request.ts +0 -85
  492. package/src/contract/deployment_info.ts +0 -25
  493. package/src/interfaces/epoch-prover.ts +0 -72
  494. package/src/interfaces/prover-coordination.ts +0 -17
  495. package/src/kernel/hints/tree_leaf_read_request.ts +0 -35
  496. package/src/kernel/private_kernel_tail_circuit_private_inputs.ts +0 -58
  497. package/src/kernel/utils/optional_number.ts +0 -50
  498. package/src/p2p/interface.ts +0 -4
  499. package/src/tx/validator/empty_validator.ts +0 -7
@@ -1,8 +1,7 @@
1
- import { BlockNumber, CheckpointNumber } from '@aztec/foundation/branded-types';
2
- import type { PublishedCheckpoint } from '../../checkpoint/published_checkpoint.js';
1
+ import { BlockNumber } from '@aztec/foundation/branded-types';
3
2
  import type { BlockHash } from '../block_hash.js';
4
3
  import type { L2Block } from '../l2_block.js';
5
- import { type L2BlockTag, type L2Tips } from '../l2_block_source.js';
4
+ import { type CheckpointId, type L2BlockId, type L2BlockTag, type LocalL2Tips } from '../l2_block_source.js';
6
5
  import type { L2BlockStreamEvent, L2BlockStreamEventHandler, L2BlockStreamLocalDataProvider } from './interfaces.js';
7
6
  /**
8
7
  * Abstract base class for L2 tips stores. Provides common event handling logic
@@ -15,38 +14,38 @@ export declare abstract class L2TipsStoreBase implements L2BlockStreamEventHandl
15
14
  protected abstract getTip(tag: L2BlockTag): Promise<BlockNumber | undefined>;
16
15
  /** Sets the block number for a given tag. */
17
16
  protected abstract setTip(tag: L2BlockTag, blockNumber: BlockNumber): Promise<void>;
17
+ /** Gets the checkpoint id recorded for a given tag, if any. */
18
+ protected abstract getTipCheckpoint(tag: L2BlockTag): Promise<CheckpointId | undefined>;
19
+ /** Records the checkpoint id for a given tag. */
20
+ protected abstract setTipCheckpoint(tag: L2BlockTag, checkpoint: CheckpointId): Promise<void>;
18
21
  /** Gets the block hash for a given block number. */
19
22
  protected abstract getStoredBlockHash(blockNumber: BlockNumber): Promise<string | undefined>;
20
23
  /** Sets the block hash for a given block number. */
21
24
  protected abstract setBlockHash(blockNumber: BlockNumber, hash: string): Promise<void>;
22
25
  /** Deletes all block hashes for blocks before the given block number. */
23
26
  protected abstract deleteBlockHashesBefore(blockNumber: BlockNumber): Promise<void>;
24
- /** Gets the checkpoint number for a given block number. */
25
- protected abstract getCheckpointNumberForBlock(blockNumber: BlockNumber): Promise<CheckpointNumber | undefined>;
26
- /** Sets the checkpoint number for a given block number. */
27
- protected abstract setCheckpointNumberForBlock(blockNumber: BlockNumber, checkpointNumber: CheckpointNumber): Promise<void>;
28
- /** Deletes all block-to-checkpoint mappings for blocks before the given block number. */
29
- protected abstract deleteBlockToCheckpointBefore(blockNumber: BlockNumber): Promise<void>;
30
- /** Gets a checkpoint by its number. */
31
- protected abstract getCheckpoint(checkpointNumber: CheckpointNumber): Promise<PublishedCheckpoint | undefined>;
32
- /** Saves a checkpoint. */
33
- protected abstract saveCheckpointData(checkpoint: PublishedCheckpoint): Promise<void>;
34
- /** Deletes all checkpoints before the given checkpoint number. */
35
- protected abstract deleteCheckpointsBefore(checkpointNumber: CheckpointNumber): Promise<void>;
36
27
  /** Runs the given function in a transaction. Memory stores can just execute immediately. */
37
28
  protected abstract runInTransaction<T>(fn: () => Promise<T>): Promise<T>;
38
29
  getL2BlockHash(number: BlockNumber): Promise<string | undefined>;
39
- getL2Tips(): Promise<L2Tips>;
30
+ getL2Tips(): Promise<LocalL2Tips>;
31
+ /**
32
+ * Records `(number → hash)` witnesses into the block-hash index without moving any tip cursor. In tips-only mode
33
+ * the hash history is sparse (one anchor per tip-moving poll), so a consumer that materializes per-height state
34
+ * should witness those heights or its prunes are over-deep by the gap to the nearest anchor. Witnesses are compared
35
+ * against the source, not trusted, so they cannot cause under-deep prunes; this is always safe to call.
36
+ */
37
+ recordBlockHashes(blocks: L2BlockId[]): Promise<void>;
40
38
  handleBlockStreamEvent(event: L2BlockStreamEvent): Promise<void>;
41
39
  protected computeBlockHash(block: L2Block): Promise<string>;
42
40
  private getBlockId;
43
41
  private getCheckpointId;
42
+ private genesisCheckpointId;
44
43
  private handleBlocksAdded;
44
+ private handleChainProposed;
45
45
  private handleChainCheckpointed;
46
46
  private handleChainPruned;
47
47
  private handleChainProven;
48
48
  private handleChainFinalized;
49
49
  private saveTag;
50
- private saveCheckpoint;
51
50
  }
52
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibDJfdGlwc19zdG9yZV9iYXNlLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYmxvY2svbDJfYmxvY2tfc3RyZWFtL2wyX3RpcHNfc3RvcmVfYmFzZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsV0FBVyxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFFaEYsT0FBTyxLQUFLLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUNwRixPQUFPLEtBQUssRUFBRSxTQUFTLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNsRCxPQUFPLEtBQUssRUFBRSxPQUFPLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5QyxPQUFPLEVBSUwsS0FBSyxVQUFVLEVBQ2YsS0FBSyxNQUFNLEVBQ1osTUFBTSx1QkFBdUIsQ0FBQztBQUMvQixPQUFPLEtBQUssRUFBRSxrQkFBa0IsRUFBRSx5QkFBeUIsRUFBRSw4QkFBOEIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRXJIOzs7R0FHRztBQUNILDhCQUFzQixlQUFnQixZQUFXLHlCQUF5QixFQUFFLDhCQUE4QjtJQUM1RixTQUFTLENBQUMsUUFBUSxDQUFDLGdCQUFnQixFQUFFLFNBQVM7SUFBMUQsWUFBK0IsZ0JBQWdCLEVBQUUsU0FBUyxFQUFJO0lBRzlELDZDQUE2QztJQUM3QyxTQUFTLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsVUFBVSxHQUFHLE9BQU8sQ0FBQyxXQUFXLEdBQUcsU0FBUyxDQUFDLENBQUM7SUFFN0UsNkNBQTZDO0lBQzdDLFNBQVMsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLFdBQVcsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7SUFFcEYsb0RBQW9EO0lBQ3BELFNBQVMsQ0FBQyxRQUFRLENBQUMsa0JBQWtCLENBQUMsV0FBVyxFQUFFLFdBQVcsR0FBRyxPQUFPLENBQUMsTUFBTSxHQUFHLFNBQVMsQ0FBQyxDQUFDO0lBRTdGLG9EQUFvRDtJQUNwRCxTQUFTLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxXQUFXLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxNQUFNLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBRXZGLHlFQUF5RTtJQUN6RSxTQUFTLENBQUMsUUFBUSxDQUFDLHVCQUF1QixDQUFDLFdBQVcsRUFBRSxXQUFXLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBRXBGLDJEQUEyRDtJQUMzRCxTQUFTLENBQUMsUUFBUSxDQUFDLDJCQUEyQixDQUFDLFdBQVcsRUFBRSxXQUFXLEdBQUcsT0FBTyxDQUFDLGdCQUFnQixHQUFHLFNBQVMsQ0FBQyxDQUFDO0lBRWhILDJEQUEyRDtJQUMzRCxTQUFTLENBQUMsUUFBUSxDQUFDLDJCQUEyQixDQUM1QyxXQUFXLEVBQUUsV0FBVyxFQUN4QixnQkFBZ0IsRUFBRSxnQkFBZ0IsR0FDakMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBRWpCLHlGQUF5RjtJQUN6RixTQUFTLENBQUMsUUFBUSxDQUFDLDZCQUE2QixDQUFDLFdBQVcsRUFBRSxXQUFXLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBRTFGLHVDQUF1QztJQUN2QyxTQUFTLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxnQkFBZ0IsRUFBRSxnQkFBZ0IsR0FBRyxPQUFPLENBQUMsbUJBQW1CLEdBQUcsU0FBUyxDQUFDLENBQUM7SUFFL0csMEJBQTBCO0lBQzFCLFNBQVMsQ0FBQyxRQUFRLENBQUMsa0JBQWtCLENBQUMsVUFBVSxFQUFFLG1CQUFtQixHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUV0RixrRUFBa0U7SUFDbEUsU0FBUyxDQUFDLFFBQVEsQ0FBQyx1QkFBdUIsQ0FBQyxnQkFBZ0IsRUFBRSxnQkFBZ0IsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7SUFFOUYsNEZBQTRGO0lBQzVGLFNBQVMsQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxNQUFNLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFJNUQsY0FBYyxDQUFDLE1BQU0sRUFBRSxXQUFXLEdBQUcsT0FBTyxDQUFDLE1BQU0sR0FBRyxTQUFTLENBQUMsQ0FLNUU7SUFFTSxTQUFTLElBQUksT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQTJCbEM7SUFFWSxzQkFBc0IsQ0FBQyxLQUFLLEVBQUUsa0JBQWtCLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQWtCNUU7SUFHRCxTQUFTLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxFQUFFLE9BQU8sR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLENBRTFEO1lBSWEsVUFBVTtZQVlWLGVBQWU7WUFnQmYsaUJBQWlCO1lBYWpCLHVCQUF1QjtZQWdCdkIsaUJBQWlCO1lBZWpCLGlCQUFpQjtZQVNqQixvQkFBb0I7WUFvQ3BCLE9BQU87WUFPUCxjQUFjO0NBUzdCIn0=
51
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibDJfdGlwc19zdG9yZV9iYXNlLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYmxvY2svbDJfYmxvY2tfc3RyZWFtL2wyX3RpcHNfc3RvcmVfYmFzZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsV0FBVyxFQUFvQixNQUFNLGlDQUFpQyxDQUFDO0FBRWhGLE9BQU8sS0FBSyxFQUFFLFNBQVMsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ2xELE9BQU8sS0FBSyxFQUFFLE9BQU8sRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzlDLE9BQU8sRUFDTCxLQUFLLFlBQVksRUFFakIsS0FBSyxTQUFTLEVBQ2QsS0FBSyxVQUFVLEVBQ2YsS0FBSyxXQUFXLEVBQ2pCLE1BQU0sdUJBQXVCLENBQUM7QUFDL0IsT0FBTyxLQUFLLEVBQUUsa0JBQWtCLEVBQUUseUJBQXlCLEVBQUUsOEJBQThCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUVySDs7O0dBR0c7QUFDSCw4QkFBc0IsZUFBZ0IsWUFBVyx5QkFBeUIsRUFBRSw4QkFBOEI7SUFDNUYsU0FBUyxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsRUFBRSxTQUFTO0lBQTFELFlBQStCLGdCQUFnQixFQUFFLFNBQVMsRUFBSTtJQUc5RCw2Q0FBNkM7SUFDN0MsU0FBUyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLFVBQVUsR0FBRyxPQUFPLENBQUMsV0FBVyxHQUFHLFNBQVMsQ0FBQyxDQUFDO0lBRTdFLDZDQUE2QztJQUM3QyxTQUFTLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxXQUFXLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBRXBGLCtEQUErRDtJQUMvRCxTQUFTLENBQUMsUUFBUSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsRUFBRSxVQUFVLEdBQUcsT0FBTyxDQUFDLFlBQVksR0FBRyxTQUFTLENBQUMsQ0FBQztJQUV4RixpREFBaUQ7SUFDakQsU0FBUyxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxZQUFZLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBRTlGLG9EQUFvRDtJQUNwRCxTQUFTLENBQUMsUUFBUSxDQUFDLGtCQUFrQixDQUFDLFdBQVcsRUFBRSxXQUFXLEdBQUcsT0FBTyxDQUFDLE1BQU0sR0FBRyxTQUFTLENBQUMsQ0FBQztJQUU3RixvREFBb0Q7SUFDcEQsU0FBUyxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsV0FBVyxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsTUFBTSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUV2Rix5RUFBeUU7SUFDekUsU0FBUyxDQUFDLFFBQVEsQ0FBQyx1QkFBdUIsQ0FBQyxXQUFXLEVBQUUsV0FBVyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUVwRiw0RkFBNEY7SUFDNUYsU0FBUyxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLE1BQU0sT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUk1RCxjQUFjLENBQUMsTUFBTSxFQUFFLFdBQVcsR0FBRyxPQUFPLENBQUMsTUFBTSxHQUFHLFNBQVMsQ0FBQyxDQUs1RTtJQUVNLFNBQVMsSUFBSSxPQUFPLENBQUMsV0FBVyxDQUFDLENBc0J2QztJQUVEOzs7OztPQUtHO0lBQ1UsaUJBQWlCLENBQUMsTUFBTSxFQUFFLFNBQVMsRUFBRSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FRakU7SUFFWSxzQkFBc0IsQ0FBQyxLQUFLLEVBQUUsa0JBQWtCLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQXFCNUU7SUFHRCxTQUFTLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxFQUFFLE9BQU8sR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLENBRTFEO1lBSWEsVUFBVTtZQVlWLGVBQWU7SUFnQjdCLE9BQU8sQ0FBQyxtQkFBbUI7WUFJYixpQkFBaUI7WUFhakIsbUJBQW1CO1lBU25CLHVCQUF1QjtZQVV2QixpQkFBaUI7WUEyQmpCLGlCQUFpQjtZQVVqQixvQkFBb0I7WUFtQnBCLE9BQU87Q0FNdEIifQ==
@@ -1 +1 @@
1
- {"version":3,"file":"l2_tips_store_base.d.ts","sourceRoot":"","sources":["../../../src/block/l2_block_stream/l2_tips_store_base.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AAEhF,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,0CAA0C,CAAC;AACpF,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAIL,KAAK,UAAU,EACf,KAAK,MAAM,EACZ,MAAM,uBAAuB,CAAC;AAC/B,OAAO,KAAK,EAAE,kBAAkB,EAAE,yBAAyB,EAAE,8BAA8B,EAAE,MAAM,iBAAiB,CAAC;AAErH;;;GAGG;AACH,8BAAsB,eAAgB,YAAW,yBAAyB,EAAE,8BAA8B;IAC5F,SAAS,CAAC,QAAQ,CAAC,gBAAgB,EAAE,SAAS;IAA1D,YAA+B,gBAAgB,EAAE,SAAS,EAAI;IAG9D,6CAA6C;IAC7C,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,EAAE,UAAU,GAAG,OAAO,CAAC,WAAW,GAAG,SAAS,CAAC,CAAC;IAE7E,6CAA6C;IAC7C,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,EAAE,UAAU,EAAE,WAAW,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEpF,oDAAoD;IACpD,SAAS,CAAC,QAAQ,CAAC,kBAAkB,CAAC,WAAW,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;IAE7F,oDAAoD;IACpD,SAAS,CAAC,QAAQ,CAAC,YAAY,CAAC,WAAW,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEvF,yEAAyE;IACzE,SAAS,CAAC,QAAQ,CAAC,uBAAuB,CAAC,WAAW,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEpF,2DAA2D;IAC3D,SAAS,CAAC,QAAQ,CAAC,2BAA2B,CAAC,WAAW,EAAE,WAAW,GAAG,OAAO,CAAC,gBAAgB,GAAG,SAAS,CAAC,CAAC;IAEhH,2DAA2D;IAC3D,SAAS,CAAC,QAAQ,CAAC,2BAA2B,CAC5C,WAAW,EAAE,WAAW,EACxB,gBAAgB,EAAE,gBAAgB,GACjC,OAAO,CAAC,IAAI,CAAC,CAAC;IAEjB,yFAAyF;IACzF,SAAS,CAAC,QAAQ,CAAC,6BAA6B,CAAC,WAAW,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE1F,uCAAuC;IACvC,SAAS,CAAC,QAAQ,CAAC,aAAa,CAAC,gBAAgB,EAAE,gBAAgB,GAAG,OAAO,CAAC,mBAAmB,GAAG,SAAS,CAAC,CAAC;IAE/G,0BAA0B;IAC1B,SAAS,CAAC,QAAQ,CAAC,kBAAkB,CAAC,UAAU,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEtF,kEAAkE;IAClE,SAAS,CAAC,QAAQ,CAAC,uBAAuB,CAAC,gBAAgB,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE9F,4FAA4F;IAC5F,SAAS,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IAI5D,cAAc,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAK5E;IAEM,SAAS,IAAI,OAAO,CAAC,MAAM,CAAC,CA2BlC;IAEY,sBAAsB,CAAC,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CAkB5E;IAGD,SAAS,CAAC,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAE1D;YAIa,UAAU;YAYV,eAAe;YAgBf,iBAAiB;YAajB,uBAAuB;YAgBvB,iBAAiB;YAejB,iBAAiB;YASjB,oBAAoB;YAoCpB,OAAO;YAOP,cAAc;CAS7B"}
1
+ {"version":3,"file":"l2_tips_store_base.d.ts","sourceRoot":"","sources":["../../../src/block/l2_block_stream/l2_tips_store_base.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAoB,MAAM,iCAAiC,CAAC;AAEhF,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EACL,KAAK,YAAY,EAEjB,KAAK,SAAS,EACd,KAAK,UAAU,EACf,KAAK,WAAW,EACjB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,KAAK,EAAE,kBAAkB,EAAE,yBAAyB,EAAE,8BAA8B,EAAE,MAAM,iBAAiB,CAAC;AAErH;;;GAGG;AACH,8BAAsB,eAAgB,YAAW,yBAAyB,EAAE,8BAA8B;IAC5F,SAAS,CAAC,QAAQ,CAAC,gBAAgB,EAAE,SAAS;IAA1D,YAA+B,gBAAgB,EAAE,SAAS,EAAI;IAG9D,6CAA6C;IAC7C,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,EAAE,UAAU,GAAG,OAAO,CAAC,WAAW,GAAG,SAAS,CAAC,CAAC;IAE7E,6CAA6C;IAC7C,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,EAAE,UAAU,EAAE,WAAW,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEpF,+DAA+D;IAC/D,SAAS,CAAC,QAAQ,CAAC,gBAAgB,CAAC,GAAG,EAAE,UAAU,GAAG,OAAO,CAAC,YAAY,GAAG,SAAS,CAAC,CAAC;IAExF,iDAAiD;IACjD,SAAS,CAAC,QAAQ,CAAC,gBAAgB,CAAC,GAAG,EAAE,UAAU,EAAE,UAAU,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE9F,oDAAoD;IACpD,SAAS,CAAC,QAAQ,CAAC,kBAAkB,CAAC,WAAW,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;IAE7F,oDAAoD;IACpD,SAAS,CAAC,QAAQ,CAAC,YAAY,CAAC,WAAW,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEvF,yEAAyE;IACzE,SAAS,CAAC,QAAQ,CAAC,uBAAuB,CAAC,WAAW,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEpF,4FAA4F;IAC5F,SAAS,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IAI5D,cAAc,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAK5E;IAEM,SAAS,IAAI,OAAO,CAAC,WAAW,CAAC,CAsBvC;IAED;;;;;OAKG;IACU,iBAAiB,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAQjE;IAEY,sBAAsB,CAAC,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CAqB5E;IAGD,SAAS,CAAC,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAE1D;YAIa,UAAU;YAYV,eAAe;IAgB7B,OAAO,CAAC,mBAAmB;YAIb,iBAAiB;YAajB,mBAAmB;YASnB,uBAAuB;YAUvB,iBAAiB;YA2BjB,iBAAiB;YAUjB,oBAAoB;YAmBpB,OAAO;CAMtB"}
@@ -17,18 +17,16 @@ import { GENESIS_CHECKPOINT_HEADER_HASH } from '../l2_block_source.js';
17
17
  }
18
18
  getL2Tips() {
19
19
  return this.runInTransaction(async ()=>{
20
- const [proposedBlockId, finalizedBlockId, provenBlockId, checkpointedBlockId, proposedCheckpointBlockId] = await Promise.all([
20
+ const [proposedBlockId, finalizedBlockId, provenBlockId, checkpointedBlockId] = await Promise.all([
21
21
  this.getBlockId('proposed'),
22
22
  this.getBlockId('finalized'),
23
23
  this.getBlockId('proven'),
24
- this.getBlockId('checkpointed'),
25
- this.getBlockId('proposedCheckpoint')
24
+ this.getBlockId('checkpointed')
26
25
  ]);
27
- const [finalizedCheckpointId, provenCheckpointId, checkpointedCheckpointId, proposedCheckpointId] = await Promise.all([
26
+ const [finalizedCheckpointId, provenCheckpointId, checkpointedCheckpointId] = await Promise.all([
28
27
  this.getCheckpointId('finalized'),
29
28
  this.getCheckpointId('proven'),
30
- this.getCheckpointId('checkpointed'),
31
- this.getCheckpointId('proposedCheckpoint')
29
+ this.getCheckpointId('checkpointed')
32
30
  ]);
33
31
  return {
34
32
  proposed: proposedBlockId,
@@ -43,19 +41,32 @@ import { GENESIS_CHECKPOINT_HEADER_HASH } from '../l2_block_source.js';
43
41
  checkpointed: {
44
42
  block: checkpointedBlockId,
45
43
  checkpoint: checkpointedCheckpointId
46
- },
47
- proposedCheckpoint: {
48
- block: proposedCheckpointBlockId,
49
- checkpoint: proposedCheckpointId
50
44
  }
51
45
  };
52
46
  });
53
47
  }
48
+ /**
49
+ * Records `(number → hash)` witnesses into the block-hash index without moving any tip cursor. In tips-only mode
50
+ * the hash history is sparse (one anchor per tip-moving poll), so a consumer that materializes per-height state
51
+ * should witness those heights or its prunes are over-deep by the gap to the nearest anchor. Witnesses are compared
52
+ * against the source, not trusted, so they cannot cause under-deep prunes; this is always safe to call.
53
+ */ async recordBlockHashes(blocks) {
54
+ await this.runInTransaction(async ()=>{
55
+ for (const block of blocks){
56
+ if (block.hash) {
57
+ await this.setBlockHash(block.number, block.hash);
58
+ }
59
+ }
60
+ });
61
+ }
54
62
  async handleBlockStreamEvent(event) {
55
63
  switch(event.type){
56
64
  case 'blocks-added':
57
65
  await this.handleBlocksAdded(event);
58
66
  break;
67
+ case 'chain-proposed':
68
+ await this.handleChainProposed(event);
69
+ break;
59
70
  case 'chain-checkpointed':
60
71
  await this.handleChainCheckpointed(event);
61
72
  break;
@@ -95,25 +106,22 @@ import { GENESIS_CHECKPOINT_HEADER_HASH } from '../l2_block_source.js';
95
106
  async getCheckpointId(tag) {
96
107
  const blockNumber = await this.getTip(tag);
97
108
  if (blockNumber === undefined || blockNumber === 0) {
98
- return {
99
- number: CheckpointNumber.ZERO,
100
- hash: GENESIS_CHECKPOINT_HEADER_HASH.toString()
101
- };
102
- }
103
- const checkpointNumber = await this.getCheckpointNumberForBlock(blockNumber);
104
- if (checkpointNumber === undefined) {
105
- return {
106
- number: CheckpointNumber.ZERO,
107
- hash: GENESIS_CHECKPOINT_HEADER_HASH.toString()
108
- };
109
+ return this.genesisCheckpointId();
109
110
  }
110
- const checkpoint = await this.getCheckpoint(checkpointNumber);
111
- if (!checkpoint) {
112
- throw new Error(`Checkpoint not found for checkpoint number ${checkpointNumber}`);
111
+ // The checkpoint id recorded for this cursor when it was last advanced is the single source of truth.
112
+ // The writers (handleChainCheckpointed/Proven/Finalized/Pruned) always record an id alongside any
113
+ // non-genesis cursor advance, so a missing id on a real block is genuine store corruption. Fail loudly
114
+ // rather than silently reporting checkpoint zero, which would drive a checkpoint-replay storm.
115
+ const storedCheckpoint = await this.getTipCheckpoint(tag);
116
+ if (storedCheckpoint !== undefined) {
117
+ return storedCheckpoint;
113
118
  }
119
+ throw new Error(`No checkpoint id recorded for ${tag} tip at block ${blockNumber}; the L2 tips store is corrupted`);
120
+ }
121
+ genesisCheckpointId() {
114
122
  return {
115
- number: checkpointNumber,
116
- hash: checkpoint.checkpoint.hash().toString()
123
+ number: CheckpointNumber.ZERO,
124
+ hash: GENESIS_CHECKPOINT_HEADER_HASH.toString()
117
125
  };
118
126
  }
119
127
  async handleBlocksAdded(event) {
@@ -128,19 +136,21 @@ import { GENESIS_CHECKPOINT_HEADER_HASH } from '../l2_block_source.js';
128
136
  await this.setTip('proposed', blocks.at(-1).number);
129
137
  });
130
138
  }
139
+ async handleChainProposed(event) {
140
+ if (event.type !== 'chain-proposed') {
141
+ return;
142
+ }
143
+ // Records the proposed tip into the block-hash index the walk-back reads. In tips-only mode this is the sole
144
+ // writer of proposed-tip history, leaving one sparse anchor per tip-moving pass for reorg detection.
145
+ await this.runInTransaction(()=>this.saveTag('proposed', event.block));
146
+ }
131
147
  async handleChainCheckpointed(event) {
132
148
  if (event.type !== 'chain-checkpointed') {
133
149
  return;
134
150
  }
135
151
  await this.runInTransaction(async ()=>{
136
152
  await this.saveTag('checkpointed', event.block);
137
- await this.saveCheckpoint(event.checkpoint);
138
- // proposedCheckpoint is always >= checkpointed. If checkpointed has caught up
139
- // or surpassed it, advance proposedCheckpoint to match.
140
- const proposedCheckpointBlock = await this.getBlockId('proposedCheckpoint');
141
- if (event.block.number > proposedCheckpointBlock.number) {
142
- await this.saveTag('proposedCheckpoint', event.block);
143
- }
153
+ await this.setTipCheckpoint('checkpointed', event.checkpoint);
144
154
  });
145
155
  }
146
156
  async handleChainPruned(event) {
@@ -148,12 +158,29 @@ import { GENESIS_CHECKPOINT_HEADER_HASH } from '../l2_block_source.js';
148
158
  return;
149
159
  }
150
160
  await this.runInTransaction(async ()=>{
161
+ // A prune is a rollback: the proposed tip moves to the prune target unconditionally, but checkpoint-bearing
162
+ // cursors may only move backward (advancing one onto an uncheckpointed block would leave it without a recorded
163
+ // checkpoint id, which getCheckpointId throws on).
151
164
  await this.saveTag('proposed', event.block);
152
- await this.saveTag('checkpointed', event.block);
153
- await this.saveTag('proposedCheckpoint', event.block);
154
- const storeProven = await this.getBlockId('proven');
155
- if (storeProven.number > event.block.number) {
156
- await this.saveTag('proven', event.block);
165
+ // Clamp each checkpoint-bearing cursor down to its OWN source tip when it leads it; the event carries a valid
166
+ // (block, id) pair for each. Clamping the proven cursor onto the (possibly higher) checkpointed tip instead
167
+ // would transiently report unproven blocks as proven. The source guarantees proven <= checkpointed, so per-tip
168
+ // clamping preserves the local invariant.
169
+ for (const { tag, sourceTip } of [
170
+ {
171
+ tag: 'checkpointed',
172
+ sourceTip: event.checkpointed
173
+ },
174
+ {
175
+ tag: 'proven',
176
+ sourceTip: event.proven
177
+ }
178
+ ]){
179
+ const current = await this.getTip(tag);
180
+ if (current !== undefined && current > sourceTip.block.number) {
181
+ await this.saveTag(tag, sourceTip.block);
182
+ await this.setTipCheckpoint(tag, sourceTip.checkpoint);
183
+ }
157
184
  }
158
185
  });
159
186
  }
@@ -163,6 +190,7 @@ import { GENESIS_CHECKPOINT_HEADER_HASH } from '../l2_block_source.js';
163
190
  }
164
191
  await this.runInTransaction(async ()=>{
165
192
  await this.saveTag('proven', event.block);
193
+ await this.setTipCheckpoint('proven', event.checkpoint);
166
194
  });
167
195
  }
168
196
  async handleChainFinalized(event) {
@@ -171,26 +199,19 @@ import { GENESIS_CHECKPOINT_HEADER_HASH } from '../l2_block_source.js';
171
199
  }
172
200
  await this.runInTransaction(async ()=>{
173
201
  await this.saveTag('finalized', event.block);
174
- const finalizedCheckpointNumber = await this.getCheckpointNumberForBlock(event.block.number);
175
- // Cap the deletion bound at the lowest live tip. This should always be the finalized tip, but
176
- // we have hit bugs where this is not the case. Deleting the block hash, block-to-checkpoint mapping,
177
- // or enclosing checkpoint object for a live tip would dangle subsequent `getBlockId`/`getCheckpointId`
202
+ await this.setTipCheckpoint('finalized', event.checkpoint);
203
+ // Prune block hashes below the lowest live tip. Cap the deletion bound at the lowest live tip rather
204
+ // than the finalized tip alone: this should always be the finalized tip, but we have hit bugs where
205
+ // this is not the case. Deleting the block hash for a live tip would dangle subsequent `getBlockId`
178
206
  // lookups and lock the block stream into an error loop.
179
207
  const tips = await Promise.all([
180
208
  this.getTip('proposed'),
181
- this.getTip('proposedCheckpoint'),
182
209
  this.getTip('checkpointed'),
183
210
  this.getTip('proven')
184
211
  ]);
185
212
  const liveTipBlocks = tips.filter((t)=>t !== undefined && t > 0);
186
213
  const safeBlockBound = BlockNumber(Math.min(event.block.number, ...liveTipBlocks));
187
214
  await this.deleteBlockHashesBefore(safeBlockBound);
188
- await this.deleteBlockToCheckpointBefore(safeBlockBound);
189
- if (finalizedCheckpointNumber !== undefined) {
190
- const tipCheckpoints = await Promise.all(liveTipBlocks.map((b)=>this.getCheckpointNumberForBlock(b)));
191
- const safeCheckpointBound = CheckpointNumber(Math.min(finalizedCheckpointNumber, ...tipCheckpoints.filter((c)=>c !== undefined && c > 0)));
192
- await this.deleteCheckpointsBefore(safeCheckpointBound);
193
- }
194
215
  });
195
216
  }
196
217
  async saveTag(name, block) {
@@ -199,13 +220,4 @@ import { GENESIS_CHECKPOINT_HEADER_HASH } from '../l2_block_source.js';
199
220
  await this.setBlockHash(block.number, block.hash);
200
221
  }
201
222
  }
202
- async saveCheckpoint(publishedCheckpoint) {
203
- const checkpoint = publishedCheckpoint.checkpoint;
204
- const lastBlock = checkpoint.blocks.at(-1);
205
- // Only store the mapping for the last block since tips only point to checkpoint boundaries
206
- await Promise.all([
207
- this.setCheckpointNumberForBlock(lastBlock.number, checkpoint.number),
208
- this.saveCheckpointData(publishedCheckpoint)
209
- ]);
210
- }
211
223
  }
@@ -45,4 +45,22 @@ export declare class MaliciousCommitteeAttestationsAndSigners extends CommitteeA
45
45
  constructor(attestations: CommitteeAttestation[], signers: EthAddress[], signatureContext: CoordinationSignatureContext);
46
46
  getSigners(): EthAddress[];
47
47
  }
48
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXR0ZXN0YXRpb25zX2FuZF9zaWduZXJzLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYmxvY2svcHJvcG9zYWwvYXR0ZXN0YXRpb25zX2FuZF9zaWduZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFJM0UsT0FBTyxFQUFFLENBQUMsRUFBRSxNQUFNLEtBQUssQ0FBQztBQUV4QixPQUFPLEVBQ0wsS0FBSyw0QkFBNEIsRUFDakMsS0FBSyx5QkFBeUIsRUFDOUIsS0FBSyxRQUFRLEVBRWQsTUFBTSw4QkFBOEIsQ0FBQztBQUN0QyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsVUFBVSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFFOUUscUJBQWEsK0JBQWdDLFlBQVcsUUFBUTtJQUlyRCxZQUFZLEVBQUUsb0JBQW9CLEVBQUU7YUFDM0IsZ0JBQWdCLEVBQUUsNEJBQTRCO0lBSmhFLFFBQVEsQ0FBQyxXQUFXLEVBQUUseUJBQXlCLENBQTRCO0lBRTNFLFlBQ1MsWUFBWSxFQUFFLG9CQUFvQixFQUFFLEVBQzNCLGdCQUFnQixFQUFFLDRCQUE0QixFQUM1RDtJQUVKLE1BQU0sS0FBSyxNQUFNOzs7Ozs7Ozs7Ozs7UUFPaEI7SUFFRCxnQkFBZ0IsSUFBSSxNQUFNLENBV3pCO0lBRUQsTUFBTSxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsRUFBRSw0QkFBNEIsR0FBRywrQkFBK0IsQ0FFNUY7SUFFRCxRQUFRLFNBRVA7SUFFRCxVQUFVLGlCQUVUO0lBRUQscUJBQXFCLDJCQUVwQjtJQUVEOzs7OztPQUtHO0lBQ0gsTUFBTSxDQUFDLGdCQUFnQixDQUFDLFlBQVksRUFBRSxvQkFBb0IsRUFBRSxHQUFHLHlCQUF5QixDQStEdkY7SUFFRCxxQkFBcUIsSUFBSSx5QkFBeUIsQ0FFakQ7Q0FDRjtBQUVEOzs7OztHQUtHO0FBQ0gscUJBQWEsd0NBQXlDLFNBQVEsK0JBQStCO0lBR3pGLE9BQU8sQ0FBQyxPQUFPO0lBRmpCLFlBQ0UsWUFBWSxFQUFFLG9CQUFvQixFQUFFLEVBQzVCLE9BQU8sRUFBRSxVQUFVLEVBQUUsRUFDN0IsZ0JBQWdCLEVBQUUsNEJBQTRCLEVBRy9DO0lBRVEsVUFBVSxJQUFJLFVBQVUsRUFBRSxDQUVsQztDQUNGIn0=
48
+ /**
49
+ * Malicious extension of CommitteeAttestationsAndSigners that rewrites every non-proposer signature slot's
50
+ * recovery byte to yParity form (v ∈ {0, 1}) in the packed output, after the honest `packAttestations` has
51
+ * already canonicalized it to v ∈ {27, 28}. Models a malicious selected proposer that hand-crafts
52
+ * `propose()` calldata L1 accepts but no honest node can byte-replay: each rewritten signature still
53
+ * recovers to the same member (r, s and the recovery parity are preserved), the bitmap bits stay set, and
54
+ * `getSigners()` stays consistent, so `propose()` does not revert `SignersSizeMismatch` -- yet the
55
+ * checkpoint can never be proven (`ECDSA.recover` rejects v ∉ {27, 28}). The proposer's own slot is left
56
+ * canonical so L1 `verifyProposer` (which recovers that slot) still accepts the checkpoint. For testing only.
57
+ */
58
+ export declare class MaliciousYParityCommitteeAttestationsAndSigners extends CommitteeAttestationsAndSigners {
59
+ /** Committee index of the proposer's own slot, left canonical so `propose()` passes `verifyProposer`. */
60
+ private proposerIndex;
61
+ constructor(attestations: CommitteeAttestation[],
62
+ /** Committee index of the proposer's own slot, left canonical so `propose()` passes `verifyProposer`. */
63
+ proposerIndex: number, signatureContext: CoordinationSignatureContext);
64
+ getPackedAttestations(): ViemCommitteeAttestations;
65
+ }
66
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXR0ZXN0YXRpb25zX2FuZF9zaWduZXJzLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYmxvY2svcHJvcG9zYWwvYXR0ZXN0YXRpb25zX2FuZF9zaWduZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFJM0UsT0FBTyxFQUFFLENBQUMsRUFBRSxNQUFNLEtBQUssQ0FBQztBQUV4QixPQUFPLEVBQ0wsS0FBSyw0QkFBNEIsRUFDakMsS0FBSyx5QkFBeUIsRUFDOUIsS0FBSyxRQUFRLEVBRWQsTUFBTSw4QkFBOEIsQ0FBQztBQUN0QyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsVUFBVSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFFOUUscUJBQWEsK0JBQWdDLFlBQVcsUUFBUTtJQUlyRCxZQUFZLEVBQUUsb0JBQW9CLEVBQUU7YUFDM0IsZ0JBQWdCLEVBQUUsNEJBQTRCO0lBSmhFLFFBQVEsQ0FBQyxXQUFXLEVBQUUseUJBQXlCLENBQTRCO0lBRTNFLFlBQ1MsWUFBWSxFQUFFLG9CQUFvQixFQUFFLEVBQzNCLGdCQUFnQixFQUFFLDRCQUE0QixFQUM1RDtJQUVKLE1BQU0sS0FBSyxNQUFNOzs7Ozs7Ozs7Ozs7UUFPaEI7SUFFRCxnQkFBZ0IsSUFBSSxNQUFNLENBV3pCO0lBRUQsTUFBTSxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsRUFBRSw0QkFBNEIsR0FBRywrQkFBK0IsQ0FFNUY7SUFFRCxRQUFRLFNBRVA7SUFFRCxVQUFVLGlCQUVUO0lBRUQscUJBQXFCLDJCQUVwQjtJQUVEOzs7OztPQUtHO0lBQ0gsTUFBTSxDQUFDLGdCQUFnQixDQUFDLFlBQVksRUFBRSxvQkFBb0IsRUFBRSxHQUFHLHlCQUF5QixDQW1FdkY7SUFFRCxxQkFBcUIsSUFBSSx5QkFBeUIsQ0FFakQ7Q0FDRjtBQUVEOzs7OztHQUtHO0FBQ0gscUJBQWEsd0NBQXlDLFNBQVEsK0JBQStCO0lBR3pGLE9BQU8sQ0FBQyxPQUFPO0lBRmpCLFlBQ0UsWUFBWSxFQUFFLG9CQUFvQixFQUFFLEVBQzVCLE9BQU8sRUFBRSxVQUFVLEVBQUUsRUFDN0IsZ0JBQWdCLEVBQUUsNEJBQTRCLEVBRy9DO0lBRVEsVUFBVSxJQUFJLFVBQVUsRUFBRSxDQUVsQztDQUNGO0FBRUQ7Ozs7Ozs7OztHQVNHO0FBQ0gscUJBQWEsK0NBQWdELFNBQVEsK0JBQStCO0lBR2hHLHlHQUF5RztJQUN6RyxPQUFPLENBQUMsYUFBYTtJQUh2QixZQUNFLFlBQVksRUFBRSxvQkFBb0IsRUFBRTtJQUNwQyx5R0FBeUc7SUFDakcsYUFBYSxFQUFFLE1BQU0sRUFDN0IsZ0JBQWdCLEVBQUUsNEJBQTRCLEVBRy9DO0lBRVEscUJBQXFCLElBQUkseUJBQXlCLENBbUIxRDtDQUNGIn0=
@@ -1 +1 @@
1
- {"version":3,"file":"attestations_and_signers.d.ts","sourceRoot":"","sources":["../../../src/block/proposal/attestations_and_signers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,2BAA2B,CAAC;AAI3E,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EACL,KAAK,4BAA4B,EACjC,KAAK,yBAAyB,EAC9B,KAAK,QAAQ,EAEd,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAE,oBAAoB,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAE9E,qBAAa,+BAAgC,YAAW,QAAQ;IAIrD,YAAY,EAAE,oBAAoB,EAAE;aAC3B,gBAAgB,EAAE,4BAA4B;IAJhE,QAAQ,CAAC,WAAW,EAAE,yBAAyB,CAA4B;IAE3E,YACS,YAAY,EAAE,oBAAoB,EAAE,EAC3B,gBAAgB,EAAE,4BAA4B,EAC5D;IAEJ,MAAM,KAAK,MAAM;;;;;;;;;;;;QAOhB;IAED,gBAAgB,IAAI,MAAM,CAWzB;IAED,MAAM,CAAC,KAAK,CAAC,gBAAgB,EAAE,4BAA4B,GAAG,+BAA+B,CAE5F;IAED,QAAQ,SAEP;IAED,UAAU,iBAET;IAED,qBAAqB,2BAEpB;IAED;;;;;OAKG;IACH,MAAM,CAAC,gBAAgB,CAAC,YAAY,EAAE,oBAAoB,EAAE,GAAG,yBAAyB,CA+DvF;IAED,qBAAqB,IAAI,yBAAyB,CAEjD;CACF;AAED;;;;;GAKG;AACH,qBAAa,wCAAyC,SAAQ,+BAA+B;IAGzF,OAAO,CAAC,OAAO;IAFjB,YACE,YAAY,EAAE,oBAAoB,EAAE,EAC5B,OAAO,EAAE,UAAU,EAAE,EAC7B,gBAAgB,EAAE,4BAA4B,EAG/C;IAEQ,UAAU,IAAI,UAAU,EAAE,CAElC;CACF"}
1
+ {"version":3,"file":"attestations_and_signers.d.ts","sourceRoot":"","sources":["../../../src/block/proposal/attestations_and_signers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,2BAA2B,CAAC;AAI3E,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EACL,KAAK,4BAA4B,EACjC,KAAK,yBAAyB,EAC9B,KAAK,QAAQ,EAEd,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAE,oBAAoB,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAE9E,qBAAa,+BAAgC,YAAW,QAAQ;IAIrD,YAAY,EAAE,oBAAoB,EAAE;aAC3B,gBAAgB,EAAE,4BAA4B;IAJhE,QAAQ,CAAC,WAAW,EAAE,yBAAyB,CAA4B;IAE3E,YACS,YAAY,EAAE,oBAAoB,EAAE,EAC3B,gBAAgB,EAAE,4BAA4B,EAC5D;IAEJ,MAAM,KAAK,MAAM;;;;;;;;;;;;QAOhB;IAED,gBAAgB,IAAI,MAAM,CAWzB;IAED,MAAM,CAAC,KAAK,CAAC,gBAAgB,EAAE,4BAA4B,GAAG,+BAA+B,CAE5F;IAED,QAAQ,SAEP;IAED,UAAU,iBAET;IAED,qBAAqB,2BAEpB;IAED;;;;;OAKG;IACH,MAAM,CAAC,gBAAgB,CAAC,YAAY,EAAE,oBAAoB,EAAE,GAAG,yBAAyB,CAmEvF;IAED,qBAAqB,IAAI,yBAAyB,CAEjD;CACF;AAED;;;;;GAKG;AACH,qBAAa,wCAAyC,SAAQ,+BAA+B;IAGzF,OAAO,CAAC,OAAO;IAFjB,YACE,YAAY,EAAE,oBAAoB,EAAE,EAC5B,OAAO,EAAE,UAAU,EAAE,EAC7B,gBAAgB,EAAE,4BAA4B,EAG/C;IAEQ,UAAU,IAAI,UAAU,EAAE,CAElC;CACF;AAED;;;;;;;;;GASG;AACH,qBAAa,+CAAgD,SAAQ,+BAA+B;IAGhG,yGAAyG;IACzG,OAAO,CAAC,aAAa;IAHvB,YACE,YAAY,EAAE,oBAAoB,EAAE;IACpC,yGAAyG;IACjG,aAAa,EAAE,MAAM,EAC7B,gBAAgB,EAAE,4BAA4B,EAG/C;IAEQ,qBAAqB,IAAI,yBAAyB,CAmB1D;CACF"}
@@ -1,4 +1,4 @@
1
- import { hexToBuffer } from '@aztec/foundation/string';
1
+ import { bufferToHex, hexToBuffer } from '@aztec/foundation/string';
2
2
  import { encodeAbiParameters, parseAbiParameters } from 'viem';
3
3
  import { z } from 'zod';
4
4
  import { coordinationSignatureContextSchema } from '../../p2p/signature_utils.js';
@@ -58,8 +58,10 @@ export class CommitteeAttestationsAndSigners {
58
58
  let totalDataSize = 0;
59
59
  for (const attestation of viemAttestations){
60
60
  const signature = attestation.signature;
61
- // Check if signature is empty (v = 0)
62
- const isEmpty = signature.v === 0;
61
+ // A slot is empty (a non-signing member, packed as its address) only when r, s and v are all zero
62
+ // matching Signature.isEmpty() and getSigners(), so the bitmap popcount and the signers list can
63
+ // never disagree (which would revert propose() with SignersSizeMismatch).
64
+ const isEmpty = signature.v === 0 && BigInt(signature.r) === 0n && BigInt(signature.s) === 0n;
63
65
  if (!isEmpty) {
64
66
  totalDataSize += 65; // v (1) + r (32) + s (32)
65
67
  } else {
@@ -71,15 +73,17 @@ export class CommitteeAttestationsAndSigners {
71
73
  // Pack the data
72
74
  for (const [i, attestation] of viemAttestations.entries()){
73
75
  const signature = attestation.signature;
74
- // Check if signature is empty
75
- const isEmpty = signature.v === 0;
76
+ // Empty iff r, s and v are all zero (see the size-tally loop above).
77
+ const isEmpty = signature.v === 0 && BigInt(signature.r) === 0n && BigInt(signature.s) === 0n;
76
78
  if (!isEmpty) {
77
79
  // Set bit in bitmap (bit 7-0 in each byte, left to right)
78
80
  const byteIndex = Math.floor(i / 8);
79
81
  const bitIndex = 7 - i % 8;
80
82
  signatureIndices[byteIndex] = (signatureIndices[byteIndex] ?? 0) | 1 << bitIndex;
81
- // Pack signature: v + r + s
82
- signaturesOrAddresses[dataIndex] = signature.v;
83
+ // Pack signature: v + r + s. Canonicalize a yParity recovery byte (v = 0/1) to 27/28 — it
84
+ // recovers to the same signer, but L1 ECDSA.recover only accepts 27/28. Any other value is left
85
+ // as-is so a genuinely malformed signature still fails on L1 rather than being silently rewritten.
86
+ signaturesOrAddresses[dataIndex] = signature.v === 0 || signature.v === 1 ? signature.v + 27 : signature.v;
83
87
  dataIndex++;
84
88
  // Pack r (32 bytes)
85
89
  const rBytes = Buffer.from(signature.r.slice(2), 'hex');
@@ -119,3 +123,39 @@ export class CommitteeAttestationsAndSigners {
119
123
  return this.signers;
120
124
  }
121
125
  }
126
+ /**
127
+ * Malicious extension of CommitteeAttestationsAndSigners that rewrites every non-proposer signature slot's
128
+ * recovery byte to yParity form (v ∈ {0, 1}) in the packed output, after the honest `packAttestations` has
129
+ * already canonicalized it to v ∈ {27, 28}. Models a malicious selected proposer that hand-crafts
130
+ * `propose()` calldata L1 accepts but no honest node can byte-replay: each rewritten signature still
131
+ * recovers to the same member (r, s and the recovery parity are preserved), the bitmap bits stay set, and
132
+ * `getSigners()` stays consistent, so `propose()` does not revert `SignersSizeMismatch` -- yet the
133
+ * checkpoint can never be proven (`ECDSA.recover` rejects v ∉ {27, 28}). The proposer's own slot is left
134
+ * canonical so L1 `verifyProposer` (which recovers that slot) still accepts the checkpoint. For testing only.
135
+ */ export class MaliciousYParityCommitteeAttestationsAndSigners extends CommitteeAttestationsAndSigners {
136
+ proposerIndex;
137
+ constructor(attestations, /** Committee index of the proposer's own slot, left canonical so `propose()` passes `verifyProposer`. */ proposerIndex, signatureContext){
138
+ super(attestations, signatureContext), this.proposerIndex = proposerIndex;
139
+ }
140
+ getPackedAttestations() {
141
+ const packed = super.getPackedAttestations();
142
+ const data = hexToBuffer(packed.signaturesOrAddresses);
143
+ // Walk the packed byte-vector and rewrite every non-proposer signed slot's v-byte to yParity form. A
144
+ // signed slot occupies 65 bytes (v, r, s); an empty slot occupies 20 bytes (address only).
145
+ let offset = 0;
146
+ for(let i = 0; i < this.attestations.length; i++){
147
+ const isSigned = !this.attestations[i].signature.isEmpty();
148
+ if (isSigned && i !== this.proposerIndex) {
149
+ // `packAttestations` canonicalized v to 27/28; rewrite back to the equivalent yParity byte (0/1),
150
+ // preserving the recovery parity so the signature still recovers to the same member.
151
+ const v = data[offset];
152
+ data[offset] = v >= 27 ? v - 27 : v;
153
+ }
154
+ offset += isSigned ? 65 : 20;
155
+ }
156
+ return {
157
+ signatureIndices: packed.signatureIndices,
158
+ signaturesOrAddresses: bufferToHex(data)
159
+ };
160
+ }
161
+ }
@@ -1,3 +1,3 @@
1
1
  import type { L2TipsStore } from '../l2_block_stream/index.js';
2
2
  export declare function testL2TipsStore(makeTipsStore: () => Promise<L2TipsStore>): void;
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibDJfdGlwc19zdG9yZV90ZXN0X3N1aXRlLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYmxvY2svdGVzdC9sMl90aXBzX3N0b3JlX3Rlc3Rfc3VpdGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBZUEsT0FBTyxLQUFLLEVBQUUsV0FBVyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFFL0Qsd0JBQWdCLGVBQWUsQ0FBQyxhQUFhLEVBQUUsTUFBTSxPQUFPLENBQUMsV0FBVyxDQUFDLFFBOGdCeEUifQ==
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibDJfdGlwc19zdG9yZV90ZXN0X3N1aXRlLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYmxvY2svdGVzdC9sMl90aXBzX3N0b3JlX3Rlc3Rfc3VpdGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBZ0JBLE9BQU8sS0FBSyxFQUFFLFdBQVcsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBRS9ELHdCQUFnQixlQUFlLENBQUMsYUFBYSxFQUFFLE1BQU0sT0FBTyxDQUFDLFdBQVcsQ0FBQyxRQSt2QnhFIn0=
@@ -1 +1 @@
1
- {"version":3,"file":"l2_tips_store_test_suite.d.ts","sourceRoot":"","sources":["../../../src/block/test/l2_tips_store_test_suite.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAE/D,wBAAgB,eAAe,CAAC,aAAa,EAAE,MAAM,OAAO,CAAC,WAAW,CAAC,QA8gBxE"}
1
+ {"version":3,"file":"l2_tips_store_test_suite.d.ts","sourceRoot":"","sources":["../../../src/block/test/l2_tips_store_test_suite.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAE/D,wBAAgB,eAAe,CAAC,aAAa,EAAE,MAAM,OAAO,CAAC,WAAW,CAAC,QA+vBxE"}